Tech stack
The tools behind Synapse
Each layer, what I chose for it, and why.
- Next.js
- TypeScript
- Tailwind
- SQLite
- better-sqlite3
- Markdown
- FTS5
- Ollama
- zod
- Vitest
- Playwright
| Layer | Choice | Why |
|---|---|---|
| App and API | Next.js (TypeScript), route handlers as the API | One TypeScript codebase for the screens and the API. |
| Styling | Tailwind | Utility classes keep the styling next to the markup. |
| Database | SQLite via better-sqlite3, plain SQL, no ORM | A local file database, and plain SQL shows exactly what each query does. |
| Schema changes | Numbered SQL migrations | Every schema change is a small file that can be read in order. |
| Notes | Markdown files in a vault folder as source of truth | Notes stay readable plain text in a folder I control. |
| Search | SQLite FTS5 keyword search (semantic search later) | Built into SQLite, so no extra service to run. |
| Local AI | Ollama behind a provider interface | Models run on my machine, and the interface keeps the provider swappable. |
| Validation | zod | Checks data at the API boundary against typed schemas. |
| Tests | Vitest and Playwright | Vitest for small tests of the code, Playwright for testing the app in a browser. |
Rules carried over
Data folder outside the repo
My data never ends up in version control.
Ollama stays on localhost
The local AI never needs a network.
I write all the code
AI explains and reviews. It does not implement.