Initial commit
commit
8beb353b58
|
@ -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))
|
Loading…
Reference in New Issue