A local-only documentation manager for evaluating whether this system is comfortable to use before committing to full development.
- One user. No login. No backend. No database.
- Everything persists in your browser's
localStorage(key:txkm-data). - Runs entirely with
npm run dev.
This is an evaluation prototype, not production code. Auth, multi-user collaboration, AI, real databases, and deployment are intentionally out of scope.
| Layer | Choice |
|---|---|
| Framework | Next.js 14 (App Router) |
| Editor | BlockNote 0.17 (Notion-like) |
| UI | MUI v6 |
| State | Zustand + persist → localStorage |
| Search | Fuse.js (client-side fuzzy) |
npm install
npm run dev
# open http://localhost:3000On first launch you'll see a welcome screen — create your first space to begin.
- Spaces — top-level containers (e.g. "TAF Documentation"). Create from the sidebar or welcome screen.
- Pages — rich documents inside a space, nestable into a tree. Create via the
sidebar
+, the space home "New Page" button, or theNshortcut. - Editing — click the H1 title to rename (auto-updates the slug + sidebar).
The body uses BlockNote: type
/for slash commands, tables, headings, etc. Changes auto-save ~1.5s after you stop typing ("Saving…" → "Saved"). - Metadata — each page has a Draft/Published status, a free-text doc type, and tags. All save on blur.
- Search — press
⌘K/Ctrl+Kfor the command palette, or visit/search. Fuzzy search across titles, content, tags, and space names. - Organise — collapse the sidebar for more writing room; rename pages inline (double-click in the tree); delete with a confirmation that lists affected subpages.
- Export — the Export button on any page downloads it as Markdown.
src/
├── app/
│ ├── layout.tsx # Root layout (Providers + AppShell)
│ ├── page.tsx # Welcome / redirect to first space
│ ├── [spaceSlug]/page.tsx # Space home — page card grid
│ ├── [spaceSlug]/[pageSlug]/page.tsx# Document page (editor)
│ └── search/page.tsx # Full search results
├── components/
│ ├── layout/ AppShell, Sidebar, NewSpaceDialog
│ ├── editor/ DocEditor (BlockNote + auto-save)
│ ├── pages/ PageHeader, PageCard, Breadcrumbs, AutoSaveIndicator, NewPageDialog
│ ├── search/ CommandPalette (⌘K)
│ └── common/ ConfirmDeleteDialog
├── store/ docs.store.ts (persisted), ui.store.ts, useHasHydrated.ts
├── lib/ search.ts (Fuse.js)
└── types/ index.ts
Everything lives under the txkm-data localStorage key. To start fresh, clear
site data in your browser dev tools (Application → Local Storage), or run in the
console:
localStorage.removeItem('txkm-data'); location.reload();