A minimal personal wiki written in Go Lang
Go to file
2022-03-23 00:22:38 +01:00
model First usable version 2022-03-22 16:36:18 +01:00
server Add: Bluemonday + Backfriday support 2022-03-22 22:06:41 +01:00
views Add: html charset 2022-03-23 00:21:59 +01:00
go.mod Add: Bluemonday + Backfriday support 2022-03-22 22:06:41 +01:00
go.sum Add: Bluemonday + Backfriday support 2022-03-22 22:06:41 +01:00
main.go Delete not-working code, templates related 2022-03-18 13:18:19 +01:00
README.md Organize docs 2022-03-19 00:35:53 +01:00
TODO.md Add: some ideas to the TODO 2022-03-23 00:22:38 +01:00

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
  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, MrReidrac)