commit 8beb353b5857ddb4bcea2ede350f35cae8471f22 Author: OĢscar M. Lage Date: Tue Mar 15 14:54:29 2022 +0100 Initial commit diff --git a/README.md b/README.md new file mode 100644 index 0000000..df159f1 --- /dev/null +++ b/README.md @@ -0,0 +1 @@ +# wikingo diff --git a/doc/wip.md b/doc/wip.md new file mode 100644 index 0000000..b6df6ed --- /dev/null +++ b/doc/wip.md @@ -0,0 +1,78 @@ +# Minimal personal wiki in Go + +## Features + +* Markdown -> HTML +* Basic HTML (with Water CSS, for example) + * requires serving static content +* One level pages (e.g. http://host/PageName/) + * view version (default latest) + * old version -> restore + * delete + * edit + * list history (changes -> view version) +* Normalize URLs + * e.g. reidrect page/ -> page + +### Stretch goals + +1. List pages + * optionally filter by tag + * pagination +2. Search + * query into title (e.g. PageName), tags + * full text? + * n results, pagination not needed +3. Auth for protected pages + * edit, restore +4. Atom feed for updated pages (last n) +5. Detect the page has changed before post + * show warning + +## Stack + +* Storage: sqlite with [GORM](https://gorm.io/) + * easy queries + * struct -> tables + * auto-migrations +* HTTP server: [Echo](https://echo.labstack.com/) + * easy to use + * routes + * static content + * middleware (e.g. auth, remove trailing slash) +* Templates + * needed? [html/template](https://pkg.go.dev/html/template) + * not super-easy to use +* Markdown -> HTML: [Blackfriday](https://github.com/russross/blackfriday) + +## Routes + +| Method | URL | Notes | +| --- | --- | --- | +| GET | / | alias for WikiHome | +| GET | /:page(/:version)? | version is optional, defaults to "latest" | +| GET | /:page/edit | protected | +| POST | /:page/edit | protected | +| GET | /:page/history | | +| POST | /:page/restore/:version | protected | +| DELETE | /:page/:version | protected | +| GET | /list(/:tag)? | tag is optional, stretch goal | +| POST | /search | stretch goal | +| GET | /atom.xml | stretch goal | + +:page in format CamelCase (starts uppercase) +:version is numeric +:tag is string + +## Model: Page + +* Page name +* version +* change description +* created on +* updated on +* tags (e.g. tag1:tag2:tag3) +* body + + +(thanks [reidrac](http://github.com/reidrac))