cazmos repo
  • TypeScript 94.5%
  • Shell 2.4%
  • PLpgSQL 1.5%
  • JavaScript 0.8%
  • Rust 0.5%
  • Other 0.1%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
2026-10-05 03:50:52 +07:00
.claude/skills/cazsmos-check docs(repo): document the backoffice contention fix and a UTC day-boundary trap 2026-09-15 00:31:52 +07:00
.githooks docs: renumber references and consolidate the ADR and runbook files 2026-09-18 15:07:04 +07:00
apps chore(release): sync Cargo.lock to 0.0.12 2026-10-05 03:50:52 +07:00
docs feat(server): push a forced till update and offer only newer versions 2026-10-05 00:27:33 +07:00
infra chore(infra): warm the image build cache and pin every base image 2026-09-30 01:22:59 +07:00
licensees docs: renumber references and consolidate the ADR and runbook files 2026-09-18 15:07:04 +07:00
packages fix(backoffice): show till update progress and name the failure 2026-10-05 03:23:21 +07:00
scripts feat(server): push a forced till update and offer only newer versions 2026-10-05 00:27:33 +07:00
tools docs: renumber references and consolidate the ADR and runbook files 2026-09-18 15:07:04 +07:00
.dependency-cruiser.cjs docs: renumber references and consolidate the ADR and runbook files 2026-09-18 15:07:04 +07:00
.dockerignore chore(infra): warm the image build cache and pin every base image 2026-09-30 01:22:59 +07:00
.editorconfig chore(repo): initialize repository with scaffold, documentation, and working agreement 2026-07-30 08:51:19 +07:00
.gitattributes feat(escpos): TSPL labels for TSC printers, off the shared label document 2026-08-16 01:27:47 +07:00
.gitignore refactor(server): the demo catalog arrives as a spreadsheet 2026-09-10 01:19:05 +07:00
CLAUDE.md docs: renumber references and consolidate the ADR and runbook files 2026-09-18 15:07:04 +07:00
LICENSE feat(infra): printer languages, bluetooth, build pipeline, IP protection 2026-08-01 01:05:43 +07:00
package.json feat(repo): publish a shop release in one command 2026-09-24 09:19:46 +07:00
pnpm-lock.yaml feat(ui): group a rupiah field as it is typed 2026-09-30 08:27:53 +07:00
pnpm-workspace.yaml chore(repo): initialize repository with scaffold, documentation, and working agreement 2026-07-30 08:51:19 +07:00
README.md docs: renumber references and consolidate the ADR and runbook files 2026-09-18 15:07:04 +07:00
tsconfig.base.json feat(repo): dependency-cruiser enforcing package layering 2026-08-16 16:21:47 +07:00
turbo.json fix(repo): sequence backoffice's tests after server's, cap its worker pool 2026-09-15 00:31:32 +07:00

Cazsmos

POS · Inventori · Pembukuan — one system for Indonesian multi-outlet retail and F&B.

Cazsmos runs a retail shop and a café from a single shared catalog and a single double-entry general ledger, with per-outlet and consolidated reporting. The same container image runs on a Raspberry Pi behind the counter or on a cloud server.

┌─────────────┐   ┌─────────────┐   ┌─────────────┐
│  Kasir      │   │ Backoffice  │   │   KDS       │
│  (Tauri)    │   │  (PWA)      │   │  (browser)  │
└──────┬──────┘   └──────┬──────┘   └──────┬──────┘
       └────────── HTTPS + WS ─────────────┘
                                 │
                      ┌──────────▼──────────┐
                      │   cazsmos-server     │  Hono · Node 22
                      │  ┌───────────────┐  │
                      │  │ posting engine│  │  every business event → journal
                      │  └───────────────┘  │
                      └──────────┬──────────┘
                                 │
                      ┌──────────▼──────────┐
                      │   PostgreSQL 16     │
                      └─────────────────────┘

Status

357 of 379 feature rows shipped (94%), each proven by a test. What remains is not missing code — it is hardware nobody has plugged in yet, a release path never run against the live registry, and a shop that has not yet traded a full day on it. All of it is enumerated in docs/900-next-steps.md, which is the working to-do list and its appendix.

The tests are the checklist: 242 test files across apps/ and packages/.

Quickstart

Requires Docker (or Podman) and Node 22 + pnpm 9.

./scripts/dev-bootstrap.sh   # .env with generated secrets, hooks, deps, stack, seed

That is the whole setup. Afterwards pnpm up starts the stack; every other command is indexed in docs/450-operations.md, one line each.

Backoffice at http://localhost:5173, API at http://localhost:3000, OpenAPI at http://localhost:3000/doc, Adminer at http://localhost:8080, virtual receipt printer at http://localhost:9180.

Everything that can run in a container does; only the Tauri till runs on the host, because it needs hardware a container on macOS cannot reach. See docs/620-dev-environment.md.

Working on Cazsmos

./scripts/setup-hooks.sh   # once per clone — pre-push runs pnpm check
pnpm check                 # typecheck + tests + the mechanical checks

A change is done when pnpm check passes and the behaviour has a test that would fail without it. Anything touching the ledger needs an integration test asserting trial balance = 0.

Slash commands

Command Does
/cazsmos-check Runs pnpm check the way this machine needs it, and tells a real failure apart from the known environment traps

Prompts

For anything else, just say it:

Continue with §1.1 of docs/900-next-steps.md.

Add a recipes/BOM module following docs/600-extending.md.

Screen 1b changed in the design project — update packages/ui to match.

Restructure how stock costing works. Write an ADR for it.

The working rules an agent follows are in CLAUDE.md.

Deployment tiers

One image, three compose overlays — solo (one box), LAN (a shop network), internet (cloud) — plus a staging overlay that runs every release against a restored shop dump before a Pi sees it. Moving between tiers is pg_dump / pg_restore plus an .env change. Commands and full instructions in docs/400-fleet.md.

Images are built for linux/amd64 and linux/arm64 — a Raspberry Pi 5 is a supported production target.

Documentation

Two layers: docs/ explains, docs/500-runbooks/ does. The full map, and which file to open for which question, is docs/020-reading-guide.md.

CLAUDE.md Working rules for this repo — start here
docs/020-reading-guide.md The map — where everything lives, and which file to open
docs/000-overview.md Product one-pager
docs/010-vocabulary.md What we call things — machines, apps, deployment, hardware, domain terms
docs/100-product.md Product requirements
docs/200-architecture.md System architecture
docs/210-data-model.md Data model
docs/220-ledger.md Double-entry rules and posting matrix
docs/230-tax.md PPN / PB1 / PPh Final / e-Faktur
docs/240-analytics.md Rollups, reports, charts, BI access
docs/250-hardware.md Printers, scanners, drawers, KDS, scales
docs/260-localization.md Languages, formats, translations
docs/300-design-system.md Design tokens, components, formatting
docs/400-fleet.md How a running fleet is shaped — tiers, modes, backups
docs/410-source-and-registry.md Source, container registry and generic packages — Forgejo on Lightsail
docs/420-edge-and-tls.md nginx + certbot on the Lightsail box
docs/430-builds-and-releases.md Building the till app, signing, update channels
docs/440-ip-protection.md What ships to a shop, and what doesn't
docs/450-operations.md Command index — every script and alias, one line each
docs/500-runbooks/ Runbooks — numbered steps for the things you actually do
docs/600-extending.md How to add a module
docs/610-workflow.md Development lifecycle — Ready, staging, testing, release, runbook
docs/620-dev-environment.md Testing everything on one Mac
docs/910-demo.md How to demo this to somebody
docs/900-next-steps.md The working to-do list — hardware, staging, pilot
docs/adr/ Architecture decision records, grouped by theme

Licence

Private. All rights reserved.