A no-hassle, streamlined check-splitting calculator packaged as a client-only PWA. Mobile-first, offline-capable, installable. No marketing fluff. Nothing to sell.
- Client-only. All calculations and storage stay on the device. No backend, no cloud sync.
- No accounts, no telemetry, no tracking.
- Sharing is explicit: native share/copy only, requires user action.
- Storage: IndexedDB for structured check data, localStorage for ephemeral UI state.
- Intentionally client-only. Do not add server-side telemetry or tracking.
- Prefer IndexedDB for structured check data. Plan migrations on schema changes.
- See agents.md for developer-facing conventions.
- Framework: Vue + Nuxt (Nuxt UI).
- Package manager: bun. Node >=18 recommended.
- Scripts: dev (
bun run dev), build (bun run build), preview (bun run preview). - Storage: IndexedDB (preferred) with localStorage for ephemeral UI state.
- PWA: service worker for app shell caching, web manifest for install behavior.
- Web manifest + service worker for installability and asset caching.
- App shell and previously created checks available offline after first load.
- Small hero with description.
- Primary button: create new check.
- Recent checks list below.
Three-step subflow for a new check.
Step 1 — Guests (/split/guests)
- Enter number of guests (primary input).
- Optionally label each guest.
Step 2 — Check (/split/items)
- Enter line items.
- Optional button at top: upload receipt to autofill items.
- Enter tax and tip at the bottom.
Step 3 — Assign (/split/receipt)
- Each item has a checkbox per guest for who is splitting it.
- Quick "all" button per item to select all guests.
Hotlinkable final view of a saved check.
- Top: per-guest totals (who owes what).
- Each guest is a clickable box that expands into a breakdown showing:
- Items that person is on.
- Their share of tax and tip.