-
4c5334d471
sec: gate super-admin invite minting, OCR settings, and alert mutations
Matt Ciaccio
2026-04-29 02:27:01 +02:00
-
61e40b5e76
chore(ops): split /api/health (liveness) from /api/ready (readiness)
Matt Ciaccio
2026-04-29 02:03:10 +02:00
-
7f9d90ad05
fix(gdpr): cap export-bundle size at 50MB before upload
Matt Ciaccio
2026-04-29 02:00:16 +02:00
-
5d29bfc153
refactor(services): centralize AuditMeta + transactional setEntityTags helper
Matt Ciaccio
2026-04-29 01:58:42 +02:00
-
43f68ca093
chore(hardening): maintenance jobs, defense-in-depth, redis-backed public rate limit
Matt Ciaccio
2026-04-29 01:52:41 +02:00
-
d9557edfc5
docs(spec): GWS inbox-triage exploratory design (not approved for build)
Matt Ciaccio
2026-04-29 01:18:15 +02:00
-
6eb0d3dc92
docs(ops): backup/restore + email deliverability runbooks
Matt Ciaccio
2026-04-28 20:10:30 +02:00
-
a3305a94f3
feat(gdpr): staff-triggered client-data export bundle (Article 15)
Matt Ciaccio
2026-04-28 20:06:31 +02:00
-
9dfa04094b
feat(rate-limit): per-user limiters for OCR, AI, and exports
Matt Ciaccio
2026-04-28 19:56:01 +02:00
-
e7d23b254c
feat(ai): per-port token budgets + usage ledger for AI features
Matt Ciaccio
2026-04-28 19:53:09 +02:00
-
2cf1bd9754
feat(ocr): Tesseract.js as default scanner, AI as opt-in per port
Matt Ciaccio
2026-04-28 19:46:29 +02:00
-
46937bbcb9
feat(addresses): full CRUD UI for client + company multi-address
Matt Ciaccio
2026-04-28 19:38:43 +02:00
-
27cdbcc695
chore(i18n): drop legacy free-text country/nationality columns
Matt Ciaccio
2026-04-28 19:00:57 +02:00
-
31fa3d08ec
chore(cleanup): Phase 1 — gap closure across audit, alerts, soft-delete, perms
Matt Ciaccio
2026-04-28 18:48:22 +02:00
-
16d98d630e
feat(i18n): country/phone/timezone/subdivision primitives + form wiring
Matt Ciaccio
2026-04-28 18:13:08 +02:00
-
f52d21df83
feat(phase-b): ship analytics dashboard, alerts, scanner PWA, dedup, audit view
Matt Ciaccio
2026-04-28 17:21:55 +02:00
-
2fa70f4582
merge: PR3 — analytics snapshot service + refresh job (Phase B)
Matt Ciaccio
2026-04-28 14:54:48 +02:00
-
01b201e1a2
feat(analytics): real computations + 15-min snapshot refresh job
Matt Ciaccio
2026-04-28 14:54:46 +02:00
-
94f049c8b8
merge: PR2 — alert rules engine + cron + socket (Phase B)
Matt Ciaccio
2026-04-28 14:50:57 +02:00
-
df495133b7
feat(alerts): rule engine, recurring evaluator, socket fanout
Matt Ciaccio
2026-04-28 14:50:55 +02:00
-
639025ebf9
merge: PR1 — Phase B schema + service skeletons (Phase B)
Matt Ciaccio
2026-04-28 14:43:03 +02:00
-
e77d55ac50
feat(insights): Phase B schema + service skeletons
Matt Ciaccio
2026-04-28 14:43:01 +02:00
-
f1ed2a5f87
docs(spec): Phase B — insights, alerts, and operational awareness
Matt Ciaccio
2026-04-28 14:00:01 +02:00
-
4036c16f39
test(infra): vitest globalSetup teardown purges test-port-* leaks
Matt Ciaccio
2026-04-28 13:28:15 +02:00
-
5f9bbb97bd
fix(sidebar): replace floating circular collapse button with blended row
Matt Ciaccio
2026-04-28 13:00:20 +02:00
-
4911083d0f
fix(visual): KPITile data-testid + restore residential interest casing
Matt Ciaccio
2026-04-28 12:56:32 +02:00
-
3a7fef59b0
fix(visual): dark-mode-safe borders + sidebar relative + ring-background
Matt Ciaccio
2026-04-28 12:24:14 +02:00
-
c081334020
merge: PR10e — visual polish (mobile responsive sweep) (Phase A)
Matt Ciaccio
2026-04-28 12:10:22 +02:00
-
2d1b50745a
style(mobile): responsive tabs + table overflow + hub flex-wrap (Phase A)
Matt Ciaccio
2026-04-28 12:10:21 +02:00
-
40ae860a88
merge: PR10d — visual polish (sidebar/topbar) (Phase A)
Matt Ciaccio
2026-04-28 12:10:12 +02:00
-
c7ca7c1f96
style(layout): sidebar stripe + topbar gradient + bell spring + search ring
Matt Ciaccio
2026-04-28 12:10:11 +02:00
-
22b019a27e
merge: PR10c — visual polish (dashboard) (Phase A)
Matt Ciaccio
2026-04-28 12:10:00 +02:00
-
a3424b80d5
style(dashboard): KPITile primitive + gradient PageHeader + tile skeletons
Matt Ciaccio
2026-04-28 12:09:59 +02:00
-
5bcdfefde3
merge: PR10b — visual polish (detail pages) (Phase A)
Matt Ciaccio
2026-04-28 12:09:54 +02:00
-
22f944fde2
style(detail): apply gradient header strip to client/interest/yacht/company/berth/residential/invoice details
Matt Ciaccio
2026-04-28 12:09:47 +02:00
-
cda44e721b
fix(layout): hoist TooltipProvider to wrap full sidebar tree
Matt Ciaccio
2026-04-28 05:08:01 +02:00
-
0406778c44
fix(api): kill currentPortId persist race + dedupe admin/ports stampede
Matt Ciaccio
2026-04-28 04:38:57 +02:00
-
259cd7b8bb
merge: PR11 — realapi spec scaffolds (Phase A)
Matt Ciaccio
2026-04-28 02:53:55 +02:00
-
-
e42b8fde84
test(realapi): Phase A integration spec scaffolds
Matt Ciaccio
2026-04-28 02:53:49 +02:00
-
-
f354f4adab
merge: PR10 — visual polish (lists) (Phase A)
Matt Ciaccio
2026-04-28 02:52:26 +02:00
-
-
38cd36a616
style(lists): apply gradient PageHeader to client/interest/yacht/company/berth lists
Matt Ciaccio
2026-04-28 02:52:17 +02:00
-
-
77b6ef5026
merge: PR9 — reminder framework polish (Phase A)
Matt Ciaccio
2026-04-28 02:50:06 +02:00
-
-
978df1c4d7
feat(reminders): cadence-aware framework with auto/manual modes
Matt Ciaccio
2026-04-28 02:50:00 +02:00
-
-
df0b408b7a
merge: PR8 — email attachments + system/user senderType (Phase A)
Matt Ciaccio
2026-04-28 02:48:17 +02:00
-
-
1151768159
feat(email): system/user senderType + attachments
Matt Ciaccio
2026-04-28 02:48:11 +02:00
-
-
9e69c13202
merge: PR7 — reservation detail + agreement (Phase A)
Matt Ciaccio
2026-04-28 02:45:11 +02:00
-
-
6212c118e5
feat(reservations): detail page with agreement flow + contract mirror
Matt Ciaccio
2026-04-28 02:45:05 +02:00
-
-
6795db9aa8
merge: PR6 — create-document wizard MVP (Phase A)
Matt Ciaccio
2026-04-28 02:43:05 +02:00
-
-
d8f0cdd7d2
feat(documents): create-document wizard MVP + service dispatch
Matt Ciaccio
2026-04-28 02:43:00 +02:00
-
-
2dc53842c0
merge: PR5 — document detail page (Phase A)
Matt Ciaccio
2026-04-28 02:39:52 +02:00
-
-
aa15807063
feat(documents): detail page with signers, watchers, activity, actions
Matt Ciaccio
2026-04-28 02:39:46 +02:00
-
-
2a3fae4d6a
merge: PR4 — documents hub page (Phase A)
Matt Ciaccio
2026-04-28 02:35:43 +02:00
-
-
da7262f18f
feat(documents): hub page with tabs, filters, and live counts
Matt Ciaccio
2026-04-28 02:35:36 +02:00
-
-
398d6322f1
merge: PR3 — visual primitives + tokens (Phase A)
Matt Ciaccio
2026-04-28 02:25:14 +02:00
-
-
deafc5ef38
feat(ui): visual polish primitives + token additions (Phase A)
Matt Ciaccio
2026-04-28 02:25:08 +02:00
-
-
9b87b14c99
merge: PR2 — Documenso v1/v2 abstraction (Phase A)
Matt Ciaccio
2026-04-28 02:22:11 +02:00
-
-
da44e8ecbe
feat(documenso): version-aware field placement + void abstractions
Matt Ciaccio
2026-04-28 02:22:04 +02:00
-
-
af2db06244
merge: PR1 — data model + service skeletons (Phase A)
Matt Ciaccio
2026-04-28 02:12:14 +02:00
-
-
0eff6050ae
feat(documents): Phase A schema + service skeletons
Matt Ciaccio
2026-04-28 02:12:05 +02:00
-
-
d8ac62f6f4
docs(spec): documents hub + reservation agreements + visual polish (Phase A)
Matt Ciaccio
2026-04-28 01:51:41 +02:00
-
dd138547fb
test(e2e): fix admin-nav locator + add residential interest API coverage
Matt Ciaccio
2026-04-28 00:19:51 +02:00
-
1791dd7319
fix(ui): resolve yacht owner names server-side, real user in topbar
Matt Ciaccio
2026-04-27 23:54:04 +02:00
-
0ccc66833d
fix(ui): admin settings loading-loop, real user name, expanded admin nav
Matt Ciaccio
2026-04-27 23:44:04 +02:00
-
4877b97f27
feat(admin): per-port email/Documenso/branding/reminder settings + invitations
Matt Ciaccio
2026-04-27 23:21:54 +02:00
-
f2c57c513e
feat(queue): implement form-expiry-check maintenance job
Matt Ciaccio
2026-04-27 21:58:14 +02:00
-
999622fd08
feat(companies): show member + yacht counts on list page
Matt Ciaccio
2026-04-27 21:57:13 +02:00
-
e8d61c91c4
feat(platform): residential module + admin UI + reliability fixes
Matt Ciaccio
2026-04-27 21:54:32 +02:00
-
fac8021156
docs: reflect testing infra + Documenso/portal auth conventions in CLAUDE.md
Matt Ciaccio
2026-04-27 15:48:18 +02:00
-
ea8181d108
test(visual): regression baselines for stable list/landing pages
Matt Ciaccio
2026-04-27 15:42:40 +02:00
-
65b241805e
test(portal): IMAP full-lifecycle activation E2E + dev probe helper
Matt Ciaccio
2026-04-27 15:40:28 +02:00
-
4a859245b7
test(documenso): real-API E2E spec + 2.x response normalization
Matt Ciaccio
2026-04-27 15:25:06 +02:00
-
4441f1177f
feat(portal): branded auth pages + legacy email styling + dev redirect override
Matt Ciaccio
2026-04-27 15:04:21 +02:00
-
c4085265ff
fix(documenso): align webhook receiver with Documenso v1.13 + 2.x protocol
Matt Ciaccio
2026-04-27 13:46:48 +02:00
-
475b051e29
feat(portal): replace magic-link with email/password + admin-initiated activation
Matt Ciaccio
2026-04-26 15:34:02 +02:00
-
4da8ed3ae4
docs: reflect data-model refactor in CLAUDE.md + DB schema overview
Matt Ciaccio
2026-04-26 14:14:34 +02:00
-
4c67b9dbd4
test(e2e): exhaustive click-through suite + destructive narrow tests
Matt Ciaccio
2026-04-26 14:06:10 +02:00
-
0ed401d083
refactor(clients): drop deprecated yacht/company/proxy columns
Matt Ciaccio
2026-04-26 13:57:54 +02:00
-
456d399ee2
refactor(templates): merge-field allow-list rejects unknown tokens
Matt Ciaccio
2026-04-26 13:48:06 +02:00
-
f4ec51002c
feat(eoi): template-aware generate-EOI dialog
Matt Ciaccio
2026-04-26 13:42:08 +02:00
-
2ff24a7132
feat(eoi): in-app pathway fills the same source PDF as Documenso
Matt Ciaccio
2026-04-26 13:38:02 +02:00
-
f8255cedb8
feat(eoi): dual-path generateAndSign (inapp + documenso-template)
Matt Ciaccio
2026-04-24 18:43:41 +02:00
-
13d07e3906
feat(templates): merge-field resolver supports yacht/company/owner scopes
Matt Ciaccio
2026-04-24 16:20:53 +02:00
-
7ef7b9bb5f
feat(eoi): seed Standard EOI in-app template per port
Matt Ciaccio
2026-04-24 16:13:51 +02:00
-
7200c31486
feat(eoi): add Documenso template payload builder
Matt Ciaccio
2026-04-24 16:09:27 +02:00
-
db74c9394b
docs(eoi): document Documenso template field name mapping
Matt Ciaccio
2026-04-24 16:06:39 +02:00
-
d133d6d656
feat(ui): wire OwnerPicker into invoice billing-entity field
Matt Ciaccio
2026-04-24 16:04:07 +02:00
-
9d7decfc5b
feat(invoices): polymorphic billing entity with snapshot clientName
Matt Ciaccio
2026-04-24 16:02:00 +02:00
-
c685c9fada
feat(recommendations): read yacht dimensions from yachts table
Matt Ciaccio
2026-04-24 15:51:17 +02:00
-
71d7daf1ae
feat(search): index yachts and companies alongside clients
Matt Ciaccio
2026-04-24 15:47:54 +02:00
-
1fd05a886d
feat(public-interest): atomic client+yacht+company+interest trio
Matt Ciaccio
2026-04-24 15:42:45 +02:00
-
bcf4c1f797
feat(interests): add yacht-picker to interest form
Matt Ciaccio
2026-04-24 15:36:27 +02:00
-
f9cb8003b5
feat(interests): wire yachtId, enforce ownership + stage-gate
Matt Ciaccio
2026-04-24 15:34:44 +02:00
-
3b0421aa81
fix(tests): use dynamic imports in portal.test.ts to avoid env validation
Matt Ciaccio
2026-04-24 14:48:40 +02:00
-
a14dc8143c
feat(portal): surface yachts, memberships, reservations for portal users
Matt Ciaccio
2026-04-24 14:43:12 +02:00
-
b75834ab7e
refactor(clients): rebuild detail tabs + columns for new data model
Matt Ciaccio
2026-04-24 14:36:34 +02:00
-
4c171848fc
refactor(clients): strip deprecated fields + extend getClientById with yachts/companies/reservations
Matt Ciaccio
2026-04-24 14:31:14 +02:00
-
a6d6647bb2
refactor(clients): strip yacht/company/proxy sections from client form
Matt Ciaccio
2026-04-24 14:27:47 +02:00
-
367fc9800e
refactor(clients): strip yacht/company/proxy fields from validator
Matt Ciaccio
2026-04-24 14:25:10 +02:00
-
ddcffe9f6f
feat(ui): add reservations tab to berth detail
Matt Ciaccio
2026-04-24 14:22:06 +02:00
-
3c5267f5e9
feat(ui): berth-reserve dialog with create-and-activate flow
Matt Ciaccio
2026-04-24 14:20:08 +02:00