wikingo/doc/wip.md

2.3 KiB

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
  1. Search
  • query into title (e.g. PageName), tags
  • full text?
  • n results, pagination not needed
  1. Auth for protected pages
  • edit, restore
  1. Atom feed for updated pages (last n)
  2. Detect the page has changed before post
  • show warning

Stack

  • Storage: sqlite with GORM
    • easy queries
    • struct -> tables
    • auto-migrations
  • HTTP server: Echo
    • easy to use
    • routes
    • static content
    • middleware (e.g. auth, remove trailing slash)
  • Templates
  • Markdown -> HTML: 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)