Thomas Joise
a1759864bf
feat(hq): shareable document link backend (mint/validate/revoke/list)
...
Add document_share table (CREATE TABLE IF NOT EXISTS; opaque token, optional
expiry, revoke flag) and repos-shares.ts:
- mintShare: 256-bit randomBytes hex token (64 hex, unique), default +30d expiry,
audited — the token itself is never written to the audit trail or any log.
- validateShare: resolves a live token to its one document; null on
unknown / revoked / expired (ISO-8601 UTC lexical compare).
- revokeShare: flips revoked=1, audited.
- listShares: a document's shares, scoped and newest-first.
Wire POST /api/documents/:id/share and
POST /api/documents/:id/share/:shareId/revoke (requireAuth, document-scoped
share guard) and surface shares on GET /api/documents/:id. TDD: 14 tests cover
token shape/uniqueness, validate rejections, revoke, and audit-without-token.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
1 week ago
Thomas Joise
d29025189c
feat(hq): beautify document template — "Slate Ledger" visual system + template.accent
...
Rewrite documentHtml to a restrained, print-first GST layout: hairline table
rules, tabular money aligned to the paisa, a single accent driving every
structural color (letterhead rule, title, table-header rule + color-mix tint,
docmeta edge, amount-in-words edge, filled grand-total band).
Add optional template.accent setting (validated hex-or-fallback #334155
slate-indigo) read from the settings map and interpolated only after
validation, so a raw setting string can never be injected into the CSS.
print-color-adjust:exact so the accent tint and grand-total fill survive
puppeteer. DRAFT stays: accent chip in docmeta + optional watermark for
un-issued docs. lineRow/totalsRows untouched; @media screen paper + @page
14mm preserved; renderer stays one pure function so preview===pdf identity holds.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
1 week ago
Thomas Joise
0d57c267ca
feat(hq-web): reminder email preview in the manual queue
...
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
1 week ago
Thomas Joise
0b340fd85f
feat(hq-web): module quote-content live print preview
...
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
1 week ago
Thomas Joise
b65e03e1c4
feat(hq-web): Document Template page — editable letterhead data + live preview
...
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
1 week ago
Thomas Joise
08e067c7cc
feat(hq-web): composer split view — server-truth totals strip, live paper, responsive
...
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
1 week ago
Thomas Joise
c2eb7acba0
feat(hq-web): LivePreview — debounced double-buffer iframe + preview fetchers
...
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
1 week ago
Thomas Joise
52e8a03c81
feat(hq): GET /reminders/:id/preview — exact email via shared reminderContext
...
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
1 week ago
Thomas Joise
48731fdb2b
feat(hq): GET/PUT /settings/template + logo upload (owner-gated, audited)
...
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
1 week ago
Thomas Joise
c2f94df06d
feat(hq): screen paper styles + documentHtmlSample + POST /previews/sample
...
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
1 week ago
Thomas Joise
a948a92350
feat(hq): render editable template.* letterhead fields with default fallback
...
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
1 week ago
Thomas Joise
1ac44ae7de
test(hq): golden fidelity — preview HTML byte-identical to the PDF's HTML
...
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
1 week ago
Thomas Joise
268a7469d3
feat(hq): POST /documents/preview — permissive live preview, persists nothing
...
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
1 week ago
Thomas Joise
90df8b0e9f
feat(hq): extract pure prepareDraft from createDraft (permissive preview path)
...
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
1 week ago
Thomas Joise
dbccb8f954
feat(hq-web): owner company profile editor and client 360 aws usage trend
...
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2 weeks ago
Thomas Joise
2acca18fc9
feat(hq-web): reports page — dues aging, module revenue, profitability, aws cost chart
...
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2 weeks ago
Thomas Joise
5495b42e30
feat(hq): schedule monthly aws cost pull and owner-gated manual pull route
...
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2 weeks ago
Thomas Joise
ea8c2b23ad
feat(hq): company profile settings — owner-gated GET/PUT, audited
...
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2 weeks ago
Thomas Joise
b7085ce56e
feat(hq): payment receipts — own RCT/ series, zero-GST acknowledgment PDF
...
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2 weeks ago
Thomas Joise
42cfa3d0b2
feat(hq): reports — dues aging, module revenue, client profitability with margin
...
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2 weeks ago
Thomas Joise
51732df5e5
feat(hq): aws cost explorer ingestion — sigv4 signer and monthly tag-grouped pull
...
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2 weeks ago
Thomas Joise
9d2eedc366
feat(hq): aws usage repo — upsert/list, cross-client cost ranking, routes
...
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2 weeks ago
Thomas Joise
3a09feab6f
feat(hq): hq-3a schema — aws_usage table (per client per month)
...
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2 weeks ago
Thomas Joise
92fb5e6245
feat(hq-web): client 360 recurring, amc and interaction sections
...
Browser-walk fixes (Task 12 step 3): reload the reminder queue after a failed send so the row flips to 'failed' live, and reload AMC contracts after recording a payment so the Paid badge derives fresh.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2 weeks ago
Thomas Joise
a9f78c4e3c
feat(hq-web): client 360 recurring, amc and interaction sections
...
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2 weeks ago
Thomas Joise
9e3886d0be
feat(hq-web): dashboard money view with manual reminder queue as default route
...
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2 weeks ago
Thomas Joise
06b5eb532c
feat(hq): dashboard money view and 6-hourly scheduler wiring
...
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2 weeks ago
Thomas Joise
7e1dcc1ad8
feat(hq): mailbox bounce detection with email_bounced reminders
...
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2 weeks ago
Thomas Joise
1b14e49d86
feat(hq): recurring invoice generation with at-most-once auto-send
...
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2 weeks ago
Thomas Joise
2d3b1a52a9
feat(hq): daily scan detection rules with idempotent reminders
...
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2 weeks ago
Thomas Joise
3204a9af97
feat(hq): reminder email send reusing gmail, plus manual-queue routes
...
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2 weeks ago
Thomas Joise
a5f6b6fdaf
feat(hq): reminder templates and idempotent reminder repo
...
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2 weeks ago
Thomas Joise
868fe17a5d
feat(hq): interaction log with types, follow-ups and routes
...
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2 weeks ago
Thomas Joise
0e66bd8ff8
feat(hq): amc contracts with renewal invoice and derived paid state
...
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2 weeks ago
Thomas Joise
405ee2917f
feat(hq): recurring plan repo and owner-gated routes
...
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2 weeks ago
Thomas Joise
c6a8058430
feat(hq): hq-2 schema — recurring/amc/interaction/reminder tables + bounce column + seeds
...
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2 weeks ago
Thomas Joise
406839659d
chore: bring the full store-product codebase under version control
...
POS, back office, store-server, all packages, workspace configs, README/
BUILDING, and the WIP HQ-2 plan — everything except gitignored data
(client import staging, .env, local DBs).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2 weeks ago
Thomas Joise
fbf39d7a51
docs+chore: HQ DDL snapshot, gitignored import-drop, Postgres locked pre-go-live (D15)
...
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2 weeks ago
Thomas Joise
54d6a63e81
feat(hq): HQ-1.5 — module quote content, pack pick-lists, bundle isolation check
...
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2 weeks ago
Thomas Joise
8c145d5a3b
feat(hq-web): clients, modules, composer and document pages (HQ-1 task 16)
...
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2 weeks ago
Thomas Joise
a08ab1aa79
feat(hq-web): react shell with login and email-status banner (HQ-1 task 15)
...
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2 weeks ago
Thomas Joise
3671c9c40f
feat(hq): server assembly, build script and e2e smoke (HQ-1 task 14)
...
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2 weeks ago
Thomas Joise
4a025786aa
feat(hq): seed + apex csv importer with verification and series seeding (HQ-1 task 13)
...
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2 weeks ago
Thomas Joise
60d5d38d92
feat(hq): one-time gmail oauth connect script (HQ-1 task 12)
...
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2 weeks ago
Thomas Joise
94734d04bf
feat(hq): gmail send with token-death handling and email log (HQ-1 task 11)
...
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2 weeks ago
Thomas Joise
8c90b09595
feat(hq): letterhead HTML templates and puppeteer PDF (HQ-1 task 10)
...
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2 weeks ago
Thomas Joise
63b0d9932a
docs(hq): comment ON CONFLICT portability quirk in doc series (D12 guardrail)
...
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2 weeks ago
Thomas Joise
5fc07b97ed
feat(hq): payments with allocation, TDS and advances (HQ-1 task 9)
...
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2 weeks ago
Thomas Joise
21ccaff363
feat(hq): document lifecycle with GST compute and credit notes (HQ-1 task 8)
...
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2 weeks ago
Thomas Joise
2710455b78
feat(hq): seedable per-FY document series (HQ-1 task 7)
...
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2 weeks ago
Thomas Joise
78771dad8d
feat(hq): client-module lifecycle tracking (HQ-1 task 6)
...
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2 weeks ago
Thomas Joise
fa8bb9c50a
feat(hq): module catalog with dated price book (HQ-1 task 5)
...
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2 weeks ago
Thomas Joise
9e4d53fb65
feat(hq): client registry with GSTIN validation (HQ-1 task 4)
...
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2 weeks ago
Thomas Joise
ac7aa891db
feat(hq): staff auth with sessions and owner gate (HQ-1 task 3)
...
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2 weeks ago
Thomas Joise
89e468eeda
feat(hq): sqlite schema + audit log (HQ-1 task 2)
...
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2 weeks ago
Thomas Joise
d17726941f
feat(hq): app skeleton with health endpoint (HQ-1 task 1)
...
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2 weeks ago