Invoice store
src/state/workspace.jsSignals store invoice drafts, selected client, save status and export status.
Finance starter
A freelancer invoice workspace for organizing line items and understanding totals.
Invoice lines can be removed and recovered, dates and draft status are clear, and line/export calculations use the same safe operands. Focus, totals, receipt and responsive labels passed.

This tracks the recorded release phase. The checks below include later findings and ongoing refinements.
The following describes the intended reference. Features are not a verification claim; recorded check results below define what has actually been tested.
Client-rendered application served from explicit static route entries; browser-local state, not a shared server database.
Tally is a client invoice workspace with editable drafts, computed totals, direct receipt routes and local JSON export.
Invoice store
src/state/workspace.jsSignals store invoice drafts, selected client, save status and export status.
Invoice math
src/data/invoices.jsPure helpers calculate finite money totals before UI and exports use them.
Alias generation
scripts/static-aliases.mjsThe build writes direct client, invoice and receipt paths plus 404.html.
Unit tests
test/invoices.test.jsTests cover subtotal/tax/total math and invalid money coercion.
Recoverable line editor
src/pages/InvoiceDetail.jsxKeyed For accessors preserve input identity, per-operand clamping matches calculations, and empty drafts can start again.
Responsive application stylesheet
src/styles.cssFixed line-total tracks and visible mobile field labels remain intact alongside bounded headings.
src/state/workspace.js
Draft state changes once; all financial summaries derive from current invoice lines.
export const invoiceSummaries = computed(() => invoices().map((invoice) => ({
...invoice,
client: clientById(invoice.clientId),
totals: calculateInvoice(invoice),
})));
export const workspaceTotals = computed(() => invoiceSummaries().reduce((totals, invoice) => ({
drafts: totals.drafts + (invoice.status === 'draft' ? 1 : 0),
saved: totals.saved + (invoice.status === 'saved' ? 1 : 0),
outstanding: Math.round((totals.outstanding + invoice.totals.total) * 100) / 100,
}), { drafts: 0, saved: 0, outstanding: 0 }));src/pages/InvoiceDetail.jsx
The accessor row lets Tally replace line objects immutably while the current input keeps focus.
<For each={() => invoice().lines} key={(line) => line.id} fallback={<p class="empty-state">No invoice lines yet. Add a line to start this local draft.</p>}>scripts/static-aliases.mjs
Static hosting receives concrete pages for both editable drafts and read-only receipt previews.
const routes = [
['/', 'Tally — Freelance invoice workspace', 'Edit invoice drafts, calculate finite totals, preview receipts, and export JSON locally.'],
['/clients', 'Clients — Tally', 'Synthetic freelance client ledger with direct detail routes.'],
...clients.map((client) => [`/clients/${client.id}`, `${client.name} — Tally`, client.notes]),src/styles.css
Fixed line-total tracks and visible mobile field labels remain intact alongside bounded headings.
h1 { margin: 0 0 16px; font-size: 32px; line-height: 1.2; letter-spacing: -.02em; font-weight: 600; }Actual desktop and mobile screenshots were reviewed after domain-specific layout refinements. Final review cleared the presentation; functional hosting checks remain separate.
Source, README and BUILD guide are published. The Vura deployment is ready; HTTPS home, build guide and genuine unknown404 were checked. Local clean-install and browser workflows are distinct from this hosted route proof.
GitHub CI passed at the recorded source commit: clean install, tests, production build and the configured Chromium browser or smoke workflows. Public README and BUILD files exactly match this checkout.
Fresh HTTPS checks returned200 for home and the in-app build guide, and404 for an unknown path. Source comparison confirms only README or CI configuration changed; the hosted application artifact is unchanged.
Fresh desktop, mobile and product-detail screenshots are captured. Claude Opus5.5 at medium effort is reviewing the rendered evidence and source; this is not a passed design verdict or a new release.
Independent code/spec review cleared the accepted changes; this recorded source workflow passed, the production build completed and the existing Vura project reports ready production. Live screenshots and native workflow evidence are captured separately.
The numeric/text update replaced the input DOM node and moved focus to the body. Keyed accessor rows are being verified to preserve continuous typing and persistence.
Source 3dc5ea4fdad1afb13bb17a69ac958675ab95c586 is published and its workflow passed. The existing Vura project reports ready production at the recorded deployment. Fresh desktop/mobile/detail screenshots and native workflow proof confirm the accepted refinements; local and hosted checks remain separate evidence.
Live continuous replacement typing retains the same connected, focused input DOM nodes; complete values and updated totals persist. The earlier remount/focus-loss failure is closed by keyed accessor rows.
Adding reversible line removal and clearer invoice dates, draft state and mobile ledger context. Implementation and fresh release verification are pending; this is not a new deployment claim.
Production builds, app regressions and desktop/mobile workflows pass. Independent reviewers cleared the frozen source after async ownership, stale views, storage recovery and guide-width repairs. Current demo/source links still identify the previous verified deployment.
Reviewed source merged after configured CI passed, then built and deployed through the public CLI. Fresh released desktop/mobile captures, actual assets and critical workflows passed; deployment and source identifiers match this record.
Ready production deployment and live response identifiers match the published source checkpoint. Fresh home, product and build routes returned 200 at 1440 by 900 and 390 by 844, with six actual viewport captures, 16px body text, no horizontal page overflow or runtime error overlay. Mobile primary navigation responds and keyboard focus is recorded.
· Live on Vura
Published shared typography and responsive control refinements are tied to the exact live deployment and source revision. Actual released captures replace the previous gallery preview; existing product behavior and source-grounded lessons are retained.
· Live on Vura
Invoice lines can be removed and recovered, dates and draft status are clear, and line/export calculations use the same safe operands. Focus, totals, receipt and responsive labels passed.
· Live on Vura
Unique product identities and deeper workflows are implemented and independently reviewed. Existing releases remain accessible while new source is published and fresh deployments are exercised.
· Live on Vura
Adding reversible line removal and clearer invoice dates, draft state and mobile ledger context. The current source and deployment links still identify the previous verified release.
· Live on Vura
The invoice editor now keeps typing focus, aligns every desktop column and labels each mobile field. Live quantity, description and price updates preserve DOM identity and correct totals.
· Live on Vura
The invoice desk and editor have clearer actions and accurate tax/total labels. Live testing found input focus loss; keyed accessor rows fix it locally and await release proof.
· Live on Vura
The existing public app remains available while a new design review examines hierarchy, typography, navigation and workflow clarity. Actual findings and before/after repairs will be recorded as they are verified.
· Live on Vura
Public source, green CI and the live app were checked together after the clean-machine documentation pass. Lessons and limitations now reflect the implemented code rather than pending pre-release work.
· Live on Vura
The public source and build reference match the released learning journal, and the source workflow is green. The demo remains live at the same verified deployment; README and CI-only refinements did not change application code.
· Live on Vura
The README now installs the locked Chromium engine after npm ci and explains the Linux system-library prerequisite. The hosted application is unchanged; code examples, repair notes and boundaries remain source-backed.
· Live on Vura
The reviewed implementation is available from its independent repository and real hosted URL. Detailed code examples and actual repair notes are linked below.
· In review
The local implementation is complete and revised visual evidence has passed review. Source and demo links will appear only after publication and hosted verification.
· Building
The standalone project files exist and the product build is active. No local verification or live release is claimed yet.
· Planned
This is a planned starter, not a working release. Implementation, tests, public source and deployment evidence will be added as they are completed.
No release blockers are recorded for this snapshot.
Read the public README and BUILD.md, reproduce the recorded checks and inspect the source before adapting the starter. A live demo, where available, provides separate deployed evidence.