Personal Wiki — a Bespoke app
A single-user reference wiki for jotting and looking up notes, browsing by tag, and linking related pages.
This is an unofficial, third-party app for Bespoke. Nobody vetted it but its
author. Read What it does with your stuff
before installing it, the same as any code you run as yourself.
Install
From your Bespoke instance directory, with the platform at v0.13.0 or newer:
go tool bespoke add personal-wiki
That pins this module, writes apps/personal-wiki/app.toml with a free port, and
recompiles your instance stylesheet. Pin a version you have actually read with
bespoke add personal-wiki@v0.1.0.
The directory must be named personal-wiki: the slug names this app's database,
process, and subdomain, and the source picks it.
What it does with your stuff
- Stores in its own SQLite database: your pages, their tags, and embedding
vectors.
- Talks to nothing outside your host. Embeddings go through the platform's
LLM gateway on
127.0.0.1.
- Bundles chat skills (page authoring, wiki gardening) that the platform's
assistant can load. They ship inside the binary.
- Publishes events to the platform when pages are created, and posts an
in-app notification when saving a page auto-creates stub pages for its
[[links]].
Like every Bespoke app it runs as your user, so nothing above is enforced by
the platform — it is a description you can check against the source
(ADR-0031).
Spec
The behavior this app is built to, unchanged from its original private build.
Records
Page
- id
- title (unique, text)
- body (markdown/free-form text)
- tags (list of strings)
- created_at
- updated_at
- last_viewed_at (nullable)
Views
- GET / — List of all pages (recent/alphabetical toggle), search bar on top, "Recently viewed" section
- GET /page/:id — View page: rendered body with [[links]] clickable, tag chips, "Pages that link here" backlink list, Edit/Delete buttons
- GET /page/:id/edit — Edit title, body, tags
- GET /new — Create page (title + body + tags)
- GET /tag/:tag — Pages filtered by tag
- Dashboard card: shows recently viewed pages count + quick search
- Chat tools: create_page(title, body, tags), update_page(title, new_title?, body?, tags?), search_pages(query), get_page(title) — the LLM is a primary author of this wiki, so writing tools cover create and edit; delete stays in the UI
- Intents: "note that...", "look up...", "add to my wiki"
Behavior
- Typing
[[Title]] in body auto-creates a blank stub page for that title if it doesn't exist; clicking it opens/edits the stub
- Viewing a page updates last_viewed_at (drives "recently viewed" resurfacing)
- Edit/delete anytime, permanent delete (no trash)
Hierarchy
- A root page titled "Index" is required: auto-created, undeletable, unrenameable. It is the wiki's table of contents.
- The hierarchy is derived, not stored: a page's children are the pages its body
[[links]] to, and its place is its shortest link path from Index (shown as breadcrumbs on the page view).
- Home renders the Index page as the lead card; pages not reachable from Index are surfaced there as orphans to attach or absorb.
- Every new page should be linked from a parent (or the Index) — chat context presents the hierarchy tree so the LLM authors into it.
Non-goals
- No real-time collaboration or sharing
- No version history
- No full graph/network visualization (only simple backlink list)
Later
- Full-text search ranking/highlighting
- Tag autocomplete
- Voice capture for quick notes
Developing
views/*_templ.go is committed on purpose — instances build this module
straight out of the read-only Go module cache and never run templ generate
over it. After editing a .templ, run just ui and commit the output.
License
MIT — see LICENSE.