BACKEND & API ENGINEER
← All work

[ JavaScript ] 6 of 6

t-notes

Local-first notes and kanban in the browser - no cloud, no framework, no build step.

python3 -m http.server 8000
9.7 MiBWindows exe size
50 itemsNotes list render window
15e2e tests (t-notes.spec.js)
  • local-first
  • kanban
  • vanilla JS
  • Go
  • Tauri
  • no dependencies

[ 01 ] WHAT IT IS

In plain words

t-notes is a single-user notes app and a kanban board in one, with all data kept in your own browser - nothing is sent to a server, and there is no account or sync service.

A note can also be pinned to a board list, and then the same item shows up as a card in both views, so edits stay in sync. Cards carry checklists with progress, due dates, comments, labels, tags and image attachments.

It is for people who want Trello's core without the cloud: run it from static files on any OS with a browser, or on Windows as a small Go exe or a Tauri desktop app.

An optional AI assistant (bring your own key) can summarize, draft checklists and suggest ideas; the key stays local and is never exported.

[ 02 ] ARCHITECTURE

How it is put together

  • web/ is the entire UI with no framework and no build step: index.html, styles.css and app.js, plus logo.svg - styles.css uses content-visibility: auto for list rendering and defines the light/dark/midnight themes.
  • All state lives in browser localStorage under the key t-notes-v1 (const K at the top of web/app.js) and is written on every mutation; notes pinned to a board list render as cards, so the board and Notes view are one system.
  • main.go embeds web/ with //go:embed and serves it from a local net/http server, opening the default browser; the same binary self-installs when its filename contains 'setup' (or --install) and removes itself with --uninstall.
  • src-tauri/ is the Tauri v2 desktop shell: src/main.rs exposes one Rust command, match_notes (batch substring match for large-corpus search, with a JS fallback), and tauri.conf.json sets frontendDist to ../web and bundles an NSIS installer with the tauri-plugin-autostart plugin for the launch-on-login toggle.
  • e2e/t-notes.spec.js is the Playwright suite, run against system Chromium with a mocked AI endpoint; build-windows.sh cross-compiles the Windows exe and setup exe from Linux with GOOS=windows go build.
  • Two host paths share the same web/ frontend: the Go exe (a browser launcher, with an /api/startup fallback for the ⏻ toggle) and the Tauri app (own window, real installer).

[ 03 ] INSTALL

Set it up

cd t-notes/web
python3 -m http.server 8000   # open http://localhost:8000 (Ctrl-C to stop)
cd ..   # the two optional commands below run from the repo root
sh build-windows.sh   # optional: dist/t-notes.exe + dist/t-notes-setup.exe from Linux (needs Go)
npm install && npx tauri dev   # optional: Tauri desktop app on Linux (needs Rust)

[ 04 ] QUICKSTART

See it work

  1. Run python3 -m http.server 8000 inside t-notes/web and open http://localhost:8000 - the Notes and board UI loads with no build step.
  2. Click + New note, type a title first, and save: the note appears in the Notes list and a toast confirms every action.
  3. Create a column with the New list… box, then add a card and drag it between columns to see the board update.
  4. Pin a note to a board list so it renders as a card too, then click it to open the detail dialog (body, checklist + progress, list picker, image attachments).
  5. Toggle the theme button to cycle light / dark / midnight - the choice persists across reloads.
  6. Use ⤓ to export all data as JSON and ⤒ to restore it, or the ? button for the in-app guide.

[ 05 ] NUMBERS

What the repo states

Windows exe size

REPO STATES

9.7 MiB

Notes list render window

REPO STATES

50 items

e2e tests (t-notes.spec.js)

REPO STATES

15

[ 06 ] TRADEOFFS

What it does not do

  1. The Windows installer is unsigned: SmartScreen shows an "Unknown publisher" warning and the user must click More info → Run anyway (signing needs a paid cert, skipped for now).
  2. There is no auto-updater yet - new versions are manual downloads from GitHub Releases.
  3. The first install needs internet once for the WebView2 bootstrapper (nearly all Windows 10/11 PCs already have WebView2).
  4. It is single-user and local-only: data lives in browser localStorage, so there is no sync, no sharing and no multi-device story.

[ 07 ] SOURCE

Read the code

The full implementation, tests and documentation live in the repository.