This website requires JavaScript.
c5b41ca4b5
fix(audit): CRITICAL — wire 5 missing workers + bulk-archive side-effects + restore-button hover
Matt Ciaccio
2026-05-06 22:03:47 +02:00
9890d065f8
feat(audit): wider coverage — sensitive views, cron, jobs, portal abuse
Matt Ciaccio
2026-05-06 20:44:38 +02:00
d2171ea79b
feat(audit): comprehensive logging — auth events, severity, source, IP
Matt Ciaccio
2026-05-06 20:35:34 +02:00
4592789712
feat(seed): synthetic fixture covering every pipeline stage + db:reset
Matt Ciaccio
2026-05-06 20:19:50 +02:00
758d8628cf
test(client-archive): destructive smoke for smart-archive + smart-restore
Matt Ciaccio
2026-05-06 19:44:36 +02:00
44db579988
feat(webhooks): admin replay for failed/dead-letter deliveries
Matt Ciaccio
2026-05-06 19:31:34 +02:00
7274baf1e1
feat(client-archive): bulk-archive wizard with per-high-stakes confirmation
Matt Ciaccio
2026-05-06 19:29:17 +02:00
70105715a7
feat(clients): hard-delete with email-code confirmation (single + bulk)
Matt Ciaccio
2026-05-06 19:26:42 +02:00
472c12280b
feat(client-archive): smart-restore wizard with auto/opt-in/locked sections
Matt Ciaccio
2026-05-06 19:26:28 +02:00
1ae5d88af4
feat(client-archive): async Documenso voids + next-in-line sales notifications
Matt Ciaccio
2026-05-06 19:12:55 +02:00
8c02f88cbd
feat(interests): upload externally-signed EOI (paper / non-Documenso)
Matt Ciaccio
2026-05-06 18:33:15 +02:00
789656bc70
feat(interests): manual stage override + Residential Partner system role
Matt Ciaccio
2026-05-06 18:32:57 +02:00
fb02f3d5e1
feat(client-archive): bulk-archive uses smart backend (low-stakes auto, high-stakes blocked)
Matt Ciaccio
2026-05-06 18:32:30 +02:00
e95316bd8a
feat(client-archive): single-client smart-archive dialog + CSP/middleware fixups
Matt Ciaccio
2026-05-06 17:19:34 +02:00
d07f1ed5e0
feat(client-archive): smart-archive backend foundation (dossier + archive + restore)
Matt Ciaccio
2026-05-06 17:13:08 +02:00
f10334683d
fix(ops): security headers (CSP / XFO / HSTS / etc) + website_submissions retention
Matt Ciaccio
2026-05-06 15:16:47 +02:00
8690352c56
fix(ux): mobile polish — inputMode=decimal default, dialog padding, more-sheet touch targets
Matt Ciaccio
2026-05-06 15:16:33 +02:00
9240cf1808
feat(berths): inline-edit on berth detail (12 spec fields + tag editor)
Matt Ciaccio
2026-05-06 15:16:18 +02:00
adba73fcca
feat(bulk): wire bulk action UI on companies list
Matt Ciaccio
2026-05-06 15:14:50 +02:00
c60cbf4014
fix(ux): popover collision padding, PWA manifest, webhook toasts, portal toast, dashboard error boundary, GDPR poll backoff, empty-state CTA
Matt Ciaccio
2026-05-06 14:59:27 +02:00
f93de75bb5
fix(ops): /health DB+Redis checks, validated env.REDIS_URL across workers, error_events 90d retention
Matt Ciaccio
2026-05-06 14:59:07 +02:00
64f0e0a1b8
fix(security): brochures.service UPDATE/DELETE WHERE includes portId
Matt Ciaccio
2026-05-06 14:58:47 +02:00
3f6a8aa3b8
feat(bulk): synchronous bulk action endpoints + UI on interests/clients/yachts
Matt Ciaccio
2026-05-06 14:58:34 +02:00
c90876abad
feat(admin): inquiry inbox, send log, email-template overrides, reports dashboard, recommender keys, role-editor coverage; replace placeholder pages
Matt Ciaccio
2026-05-06 14:58:17 +02:00
8cdee99310
feat(activity): per-entity Activity timeline (clients/yachts/companies/berths)
Matt Ciaccio
2026-05-06 14:57:51 +02:00
d19b74b935
feat(profile): /settings/profile page + change-password endpoint
Matt Ciaccio
2026-05-06 14:57:35 +02:00
1b78eadd36
feat(audit): extend AuditAction enum + audit logging on alerts + expense dedup
Matt Ciaccio
2026-05-06 14:57:24 +02:00
1fb3aa3aeb
fix(regressions): client-bundle ioredis + Drizzle ANY() array bindings
Matt Ciaccio
2026-05-06 14:56:59 +02:00
7bd969b41a
fix(audit-integrations): SMTP/PG/Socket.IO timeouts, prompt injection, secret-at-rest
Matt Ciaccio
2026-05-05 21:31:50 +02:00
63c4073e64
fix(audit-verification): regressions found in post-Tier-6 review
Matt Ciaccio
2026-05-05 21:19:39 +02:00
83239104e0
fix(audit-tier-6): validation, perms, ops/infra, per-port webhook secret
Matt Ciaccio
2026-05-05 21:03:31 +02:00
4bab6de8be
test(audit-tier-5): webhook + cross-port test coverage
Matt Ciaccio
2026-05-05 20:53:34 +02:00
4eea4ceff9
fix(audit-tier-4): tenant-isolation defense-in-depth
Matt Ciaccio
2026-05-05 20:48:13 +02:00
7854cbabe4
perf(audit-tier-3): bulk-fetch the five hot N+1 loops
Matt Ciaccio
2026-05-05 20:41:23 +02:00
d3a6a9beef
fix(audit-tier-2-routes): manual NextResponse.json error sweep + admin form banners
Matt Ciaccio
2026-05-05 20:36:59 +02:00
fc7595faf8
fix(audit-tier-2): error-surface hygiene — toastError + CodedError sweep
Matt Ciaccio
2026-05-05 20:18:05 +02:00
6a609ecf94
fix(audit-tier-1): timeouts, lifecycle, per-port Documenso, FK constraints
Matt Ciaccio
2026-05-05 19:52:58 +02:00
cf430d70c3
fix(storage): route every file op through getStorageBackend()
Matt Ciaccio
2026-05-05 18:41:02 +02:00
312779c0c5
fix(security): tier-0 audit blockers (next CVE, role gate, perm traps, key validation, rate limits)
Matt Ciaccio
2026-05-05 18:33:13 +02:00
4723994bdc
feat(errors): platform-wide request ids + error codes + admin inspector
Matt Ciaccio
2026-05-05 14:12:59 +02:00
c4a41d5f5b
feat(expenses+interests): trip/event grouping (lightweight)
Matt Ciaccio
2026-05-05 13:46:54 +02:00
687a1f1c2f
fix(audit-v3): platform-wide deferred-list cleanup (rounds 1-4)
Matt Ciaccio
2026-05-05 12:49:53 +02:00
ade4c9e77d
fix(audit-v2): platform-wide post-merge hardening across 5 domains
Matt Ciaccio
2026-05-05 05:51:39 +02:00
d4b3a1338f
fix(security): scope berth-pdf service entrypoints by portId
Matt Ciaccio
2026-05-05 05:31:33 +02:00
cf37d09519
Merge feat/berth-recommender into main
Matt Ciaccio
2026-05-05 05:12:24 +02:00
180912ba9f
fix(audit-final): pre-merge hardening + expense receipt UI
Matt Ciaccio
2026-05-05 05:11:26 +02:00
014bbe1923
feat(expenses): streaming expense-PDF export + receipt-less expense flag + audit-3 fixes
Matt Ciaccio
2026-05-05 04:38:32 +02:00
a3e002852b
fix(audit-2): integration regressions + data-integrity from second-pass review
Matt Ciaccio
2026-05-05 04:20:38 +02:00
312ebf1a88
docs(eoi): document multi-berth Berth Range field + legacy parity
Matt Ciaccio
2026-05-05 04:13:32 +02:00
0b8d08b57e
docs(claude): add berth-recommender + storage + send-outs conventions
Matt Ciaccio
2026-05-05 04:09:27 +02:00
86372a857f
fix(audit): post-review hardening across phases 0-7
Matt Ciaccio
2026-05-05 04:07:03 +02:00
b4776b4c3c
feat(interests): linked berths list with role-flag toggles + EOI bypass
Matt Ciaccio
2026-05-05 04:01:56 +02:00
a0091e4ca6
feat(emails): sales send-out flows + brochures + email-from settings
Matt Ciaccio
2026-05-05 03:38:47 +02:00
249ffe3e4a
feat(berths): per-berth PDF storage (versioned) + reverse parser
Matt Ciaccio
2026-05-05 03:34:24 +02:00
83693dd993
feat(storage): pluggable s3-or-filesystem backend + migration CLI + admin UI
Matt Ciaccio
2026-05-05 03:15:59 +02:00
15d4849030
feat(recommender): API endpoint + interest-detail panel + add-to-interest dialog
Matt Ciaccio
2026-05-05 03:05:22 +02:00
e00e812199
feat(eoi): multi-berth EOI generation + berth-range formatter
Matt Ciaccio
2026-05-05 03:03:29 +02:00
b1e787e55c
feat(recommender): SQL ranking + tier ladder + heat scoring
Matt Ciaccio
2026-05-05 02:58:34 +02:00
fb1116f1d4
feat(berths): public berths API + health env-match endpoint
Matt Ciaccio
2026-05-05 02:52:44 +02:00
5b70e9b04b
feat(interests): desired-dimension form fields + size-desired column
Matt Ciaccio
2026-05-05 02:49:01 +02:00
57cbc9a506
fix(tests): cascade interest_berths in global teardown
Matt Ciaccio
2026-05-05 02:45:45 +02:00
6e3d910c76
refactor(interests): migrate callers to interest_berths junction + drop berth_id
Matt Ciaccio
2026-05-05 02:41:52 +02:00
ff92a08620
feat(db): m:m interest_berths junction + role flags
Matt Ciaccio
2026-05-05 02:22:11 +02:00
05257723f6
fix(interests): list yacht join + EOI status column + col redesign
Matt Ciaccio
2026-05-05 02:18:13 +02:00
3017ce4b3a
fix(clients): list contacts join + nationality backfill + col redesign
Matt Ciaccio
2026-05-05 02:15:03 +02:00
a2588f2c4a
chore(berths): refresh seed-data/berths.json from live NocoDB
Matt Ciaccio
2026-05-05 02:08:53 +02:00
18119644ae
feat(berths): nocodb berth import script + helpers + unit tests
Matt Ciaccio
2026-05-05 02:07:58 +02:00
61e2fbb2db
feat(berths): add per-berth pricing + last_imported_at columns
Matt Ciaccio
2026-05-05 02:00:46 +02:00
05be89ec6f
feat(berths): normalize mooring numbers to canonical form
Matt Ciaccio
2026-05-05 01:59:26 +02:00
8699f81879
chore(style): codebase em-dash sweep + minor layout polish
Matt Ciaccio
2026-05-04 22:57:01 +02:00
d62822c284
fix(migration): NocoDB import safety + dedup helpers + lead-source backfill
Matt Ciaccio
2026-05-04 22:56:18 +02:00
089f4a67a4
feat(receipts): upload guide page + scanner head-tag fix
Matt Ciaccio
2026-05-04 22:55:42 +02:00
77ad10ced1
feat(dashboard): custom date range + KPI port-hydration gate
Matt Ciaccio
2026-05-04 22:54:55 +02:00
e598cc0708
feat(layout): unified Inbox + UserMenu extraction
Matt Ciaccio
2026-05-04 22:54:06 +02:00
f5772ce318
feat(analytics): Umami integration with per-port admin settings
Matt Ciaccio
2026-05-04 22:53:06 +02:00
49d34e00c8
feat(website-intake): dual-write endpoint + migration chain repair
Matt Ciaccio
2026-05-04 22:52:33 +02:00
c612bbdfd9
fix(migration): legacy bare-mooring lookup + port-nimara berth backfill
Matt Ciaccio
2026-05-03 21:05:11 +02:00
872c75f1a1
fix(safety): plug 3 EMAIL_REDIRECT_TO leaks + 10 unit tests + live smoke
Matt Ciaccio
2026-05-03 20:55:53 +02:00
c45aac551d
feat(dedup): wire --apply path for NocoDB migration
Matt Ciaccio
2026-05-03 19:53:04 +02:00
9ad1df85d2
fix(residential): mobile card list alongside the desktop table
Matt Ciaccio
2026-05-03 17:24:58 +02:00
8e4d2fc5b4
feat(safety): EMAIL_REDIRECT_TO now also pauses Documenso + webhooks
Matt Ciaccio
2026-05-03 17:24:41 +02:00
78f2f46d41
fix(admin): stack settings rows vertically on phone widths
Matt Ciaccio
2026-05-03 17:24:20 +02:00
3a9419fe10
chore(scripts): backfill client_contacts.value_e164 from value
Matt Ciaccio
2026-05-03 17:24:08 +02:00
b703684285
fix(ux): pass-3 — yacht/company headers, reminder filters wrap, client tab counts
Matt Ciaccio
2026-05-03 17:09:27 +02:00
a792d9a182
fix(ux): pass-2 audit fixes — admin grouping, Duplicates entry, header tooltips
Matt Ciaccio
2026-05-03 16:35:32 +02:00
d7ec2a8507
Merge docs/dedup-migration-design: client dedup + NocoDB migration design doc
Matt Ciaccio
2026-05-03 16:24:30 +02:00
cb83b09b2d
Merge feat/dedup-migration: client dedup library + NocoDB migration script + admin queue
Matt Ciaccio
2026-05-03 16:24:13 +02:00
7574c3b575
chore(migrations): renumber 0020/0021 -> 0021/0022 to avoid clash with berth-parity
feat/dedup-migration
Matt Ciaccio
2026-05-03 16:22:58 +02:00
bb105f5365
Merge feat/mobile-ux-polish: berth/header/tab/contacts mobile fixes
Matt Ciaccio
2026-05-03 16:20:12 +02:00
caafae15dd
Merge feat/berth-schema-parity: NocoDB field parity, 117-berth seed, ports pruned to Port Nimara + Amador
Matt Ciaccio
2026-05-03 16:18:43 +02:00
46c7389930
Merge feat/mobile-foundation: 212 commits of mobile foundation, sales UX, audit fixes
Matt Ciaccio
2026-05-03 16:18:10 +02:00
80fc5932be
chore: ignore tooling caches, scratch screenshots, sister website project
feat/mobile-foundation
Matt Ciaccio
2026-05-03 16:17:13 +02:00
b26b87b2fa
chore(dev): react-grab viewport sync helper for in-page debug toolbar
Matt Ciaccio
2026-05-03 16:15:47 +02:00
88f76b6b04
feat(mobile): rework bottom nav (Dashboard/Berths/Clients/Documents/More)
Matt Ciaccio
2026-05-03 16:15:37 +02:00
a32f41b91d
fix(dashboard): scope h-full to xl + tighter mobile sizing on KPIs
Matt Ciaccio
2026-05-03 16:15:20 +02:00
cf1c8b66db
feat(client): phone-edit row dilation + mobile contacts layout
Matt Ciaccio
2026-05-03 16:15:07 +02:00
596476280d
feat(ui): inline-edit dropdowns auto-open + auto-exit on dismiss
Matt Ciaccio
2026-05-03 16:14:51 +02:00
e9359fc431
feat(client): interests tab + pipeline summary panel + list-row counts
Matt Ciaccio
2026-05-03 16:14:37 +02:00
4767caec01
feat(client): redesign detail header with action chips + condensed meta
Matt Ciaccio
2026-05-03 16:14:19 +02:00
49d92234dd
fix(test): align stage names with consolidated pipeline enum
Matt Ciaccio
2026-05-03 16:14:04 +02:00