Fire Tools — Engineering documentation
This section is for developers and operators who want to self-host the backend, build a custom client, or understand the internals. If you're a regular user, you probably want the user guide instead.
Pages in this section
- Backend deployment (Docker Compose)
- API & custom clients (OpenAPI)
- Database & schema
- Migrations & rollbacks
- Audit log
- Logging & PII handling
- GitHub Pages deploy
- Cutting a release
Architecture at a glance
+----------------+ +----------------+ +----------------+
| Web / Electron| <----> | Node.js API | <----> | SQLite (def.) |
| client | HTTP | Express + | SQL | or Postgres |
| (React, Vite) | | OpenAPI | | (compose) |
+----------------+ +----------------+ +----------------+
- Client — the React app under
src/. Built with Vite. Tool pages are emitted as route-level chunks, preloaded when navigation intent is detected, chart-heavy views render progressively after the page shell, and language packs load on demand with English kept as the fallback. Desktop preference sync also runs behind the application shell, so backend startup does not delay routes. The same client ships to the web (dist/) and Electron. - Backend — a small Node.js + Express service in
server/. SQLite is the default storage; Postgres is supported via a Docker Compose profile. - Contract — OpenAPI 3.0.3.
Source of truth for both server routes and any generated client. Also
published at
/app/api/.
Why a local-first backend?
Most FIRE tools either run entirely client-side (data trapped in one browser) or fully cloud-hosted (third party sees your finances). Fire Tools' backend is meant to run on your own machine (Docker Desktop, your homelab, whatever) so your data stays on your hardware while still being reachable from multiple devices on your network.
The same code can be deployed multi-tenant — every domain table already
carries user_id — but the default configuration boots a single user so you
don't need to think about auth on day one.
Source map
| Path | Purpose |
|---|---|
src/ |
React + TypeScript frontend (Vite) |
src/i18n/ |
On-demand translation resources and language setup |
src/routes/ |
Lazy route registry and navigation preloading |
server/ |
Node.js + Express + better-sqlite3 backend |
electron/ |
Electron main + preload (desktop wrapper) |
website/ |
Marketing landing page |
docs/api/ |
OpenAPI contract + Redocly config |
docs/database/ |
DDL + ERD notes |
docs/deployment/ |
Docker Compose how-tos |
docs/user/ |
End-user documentation (this site's /docs/user/) |
docs/engineering/ |
Engineering documentation (this site's /docs/engineering/) |