Commit Graph

3 Commits

Author SHA1 Message Date
jacobh2 5305f37038 W0b web shared follow-ups: one copy of shared pieces, per-locale amounts, chunks
Build Kvitt images / build (push) Has been cancelled
- Shared once, features import them: components/AccountTile (+ lib/accountColors),
  components/PageStates (LoadingState, ErrorState), components/Timeline + lib/timeline,
  components/OverflowMenu, components/SwitchRow, app/useToday (useToday, useTodayIso),
  lib/categories (categoryName), api/errors (apiErrorKey/Text, isNetworkError,
  rejectionMessage/Text, allocationErrorKey), api/invites (useInvites),
  components/editor peopleOf, editorPeopleOf, accountBpOf. Local copies deleted.
- AmountField: separators follow the page language (en "3,250.00" editable),
  hideLabel and placeholder props; settle's ungrouped amountText and CSS label
  hiding removed.
- W5's recurring editor uses the shared editor fields (D-148); recurring/fields deleted.
- routes.ts: 'bucket' in DrillDownKind, QUERY, expensesNewPath, settlePath,
  settlementEditPath; accounts/links.ts and settle/links.ts deleted.
- vectors.test.ts runs resolve_range and spend_series (analytics port); the
  duplicate runner is gone.
- vite.config.ts: /analytics in the dev proxy, Recharts in a charts chunk (vendor
  516 kB -> 132 kB), version code from git rev-list --count HEAD (else
  KVITT_VERSION_CODE, else 1), Vitest fsModuleCache off.
- ids.ts: random typed (bytes: Uint8Array<ArrayBuffer>) => void.
- test/setup.ts: findBy and waitFor wait up to 5 s (first lazy renders time out at 1 s
  when parallel agents load the Mac).
- Strings: web_editor_paid_by_toggle (click wording), web_reject_clock_skew shared;
  catalog.test.ts fails when a feature uses another feature's web_ key.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TQd3pEP9UeN2uifbHknQ7B
2026-10-24 11:26:17 +02:00
jacobh2 a65ab711ef W2 web expenses, search and CSV export
W-5 expense editor (S-7): amount, description, category quick row and
"Alla" grid with the §9.11 suggestion for a new expense (CS-1 to CS-7),
the four fixed option rows (D-102), split modes default, ratio, exact and
full with live shares, notes, inline §9.6 validation, one POST /sync per
save, delete with confirmation, the discard dialog on Cancel, Esc and
in-app navigation (D-080), rejection and network failures shown on the
page with the form kept (§15.5). Defaults per AC-8.6 with this browser's
last account and category; ?account= preselects the opener's account.

W-6 expense detail (S-8): hero, facts, shares and mode, recurring
template badge, the AC-12.4 timeline, deleted and missing states.

W-12 search with filters in the URL query, count and sum, rows a hundred
at a time, and the CSV export (UTF-8 BOM, semicolons, CRLF, decimal
comma, ISO dates, header in the page language), built in the browser.

The §9.11 port passes contracts/test-vectors/suggest_category.json (65
cases); the keyword table is a Vite raw import of
contracts/category-keywords.csv, which needs ../contracts in
server.fs.allow (vite.config.ts).

Shared editor fields of design-spec §3.7 in web/src/components/editor/
for W5's template editor.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TQd3pEP9UeN2uifbHknQ7B
2026-10-21 21:38:09 +02:00
jacobh2 2ae65a5a9f W0 web foundation: Vite + React SPA under /app/, sync-pull ledger, auth, tokens, shared components
Build Kvitt images / build (push) Failing after 1h14m5s
web/ is the browser client's scaffold: Vite 8, React 19, TypeScript 5.9 strict, React Router 7 (basename /app, every
fixed route with a lazy placeholder page), TanStack Query 5 (refetch on focus and every 60 s), openapi-typescript
types generated from contracts/openapi.yaml with openapi-fetch. Reads go through GET /sync (no REST reads exist for
the ledger, SPEC §7): useLedger() pulls from cursor 0 and then incrementally, restarting on a new epoch or
cursor_ahead. Login pairs the browser as "Web · <browser>" with an invite code (E-3); every call sends the SPEC
§14.3.1 headers, a 401 signs out. kvitt-domain's split, balances, allocation and settlement rules are ported to
web/src/lib and pass every case of contracts/test-vectors. Design tokens from design-spec §2 in tokens.css
(light-dark()), Material Symbols Rounded (Apache-2.0) as generated inline SVG, sv/en catalogs generated from
docs/ux/strings.csv plus web-strings.csv. Gate: cd web && npm run check.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01TQd3pEP9UeN2uifbHknQ7B
2026-10-21 21:03:25 +02:00