No description
  • Vue 71.5%
  • TypeScript 23.6%
  • CSS 4.5%
  • Dockerfile 0.4%
Find a file
Kerry Hatcher a03975e7ca
All checks were successful
build / image (push) Successful in 17s
docs(claude-md): point the superproject link at Forgejo, not the stale GitHub mirror
The GitHub repo is deliberately kept as a mirror, but its main is frozen at
b08f1f0 (pre-thor-deployment) with a .gitmodules that still points every
submodule back at GitHub — the same trap finding 3 caught in install.md.
An agent following this link lands on stale code, not the current tree.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FGisjtKSjUcVGw1jX1Hf8M
2026-08-07 13:39:29 -04:00
.agents/skills/svg-animations chore: track the project's agent config, ignore only per-machine overrides 2026-08-03 19:28:59 -04:00
.claude chore: track the project's agent config, ignore only per-machine overrides 2026-08-03 19:28:59 -04:00
.forgejo/workflows ci: build and publish the web image with podman 2026-08-07 02:41:58 -04:00
app fix: move attribution out of the Activity row header 2026-08-06 01:18:29 -04:00
public/fonts feat: redesign the UI around recording money and reading statements 2026-08-03 19:24:28 -04:00
server/plugins feat: redesign the UI around recording money and reading statements 2026-08-03 19:24:28 -04:00
test feat: redesign the UI around recording money and reading statements 2026-08-03 19:24:28 -04:00
.dockerignore ci: build and publish the web image with podman 2026-08-07 02:41:58 -04:00
.gitignore chore: track the project's agent config, ignore only per-machine overrides 2026-08-03 19:28:59 -04:00
CLAUDE.md docs(claude-md): point the superproject link at Forgejo, not the stale GitHub mirror 2026-08-07 13:39:29 -04:00
DESIGN.md feat: redesign the UI around recording money and reading statements 2026-08-03 19:24:28 -04:00
Dockerfile ci: build and publish the web image with podman 2026-08-07 02:41:58 -04:00
LICENSE Initial commit 2026-08-03 12:59:19 -04:00
nginx.conf fix(nginx): stop the SPA fallback from downgrading to http 2026-08-07 02:46:43 -04:00
nuxt.config.ts feat: redesign the UI around recording money and reading statements 2026-08-03 19:24:28 -04:00
package-lock.json feat: redesign the UI around recording money and reading statements 2026-08-03 19:24:28 -04:00
package.json feat: redesign the UI around recording money and reading statements 2026-08-03 19:24:28 -04:00
PRODUCT.md feat: redesign the UI around recording money and reading statements 2026-08-03 19:24:28 -04:00
README.md docs: explain what the UI is for and how to run it 2026-08-03 13:42:11 -04:00
skills-lock.json chore: track the project's agent config, ignore only per-machine overrides 2026-08-03 19:28:59 -04:00

openbooks-web

Nuxt UI for openbooks-api — a family or club treasurer records money coming in and going out, and prints the statements for the next meeting.

Very early POC: no auth, no login screen. Anyone who can reach the page can edit the books.

Run it

Start the API first (it also brings up postgres), then:

npm install
npm run dev            # http://localhost:3000

Point it somewhere else with NUXT_PUBLIC_API_BASE (default http://localhost:3001).

Pages

  • Dashboard — total on hand, plus quick entry for money in, money out, and transfers
  • History — everything recorded, filterable by date, deletable
  • Reports — monthly, quarterly, or annual statements, styled to print
  • Categories — add accounts, labelled in plain English rather than accounting terms

The one design rule

Nobody using this should have to know what a debit is. The forms ask for an amount, which account the money moved through, and a category; the page turns that into the balanced two-legged transaction the ledger requires. Accounting vocabulary stays out of the UI — "where money sits" instead of assets, "what we hold and owe" instead of a balance sheet.