Organize docs

main
Óscar M. Lage 2022-03-19 00:35:53 +01:00
parent 854a90145b
commit c5521ba101
3 changed files with 99 additions and 79 deletions

View File

@ -1 +1,81 @@
# wikingo
# Wikingo
A minimal personal wiki written in Go Lang
## 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), [MrReidrac](https://twitch.tv/reidrac))

18
TODO.md Normal file
View File

@ -0,0 +1,18 @@
# TODO
## General
> General options
- [ ] Flag to select store
- [ ] Config file (to select store and some other future options)
- [ ] Proper logger
- [ ] Make helper
- [ ] CI (gofmt, golint, more)?
## Bootstrap
> Basic elements
- [x] Echo server
- [x] Sample Model
- [x] Store interface (gorm, file...)
- [x] Open db store
- [ ] Open file store
- [x] Templates

View File

@ -1,78 +0,0 @@
# 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), [MrReidrac](https://twitch.tv/reidrac))