This website requires JavaScript.
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
cad55e3565
fix(mobile): clipping, dropdown-tabs and stale phone metadata
feat/mobile-ux-polish
Matt Ciaccio
2026-05-03 16:03:56 +02:00
21868ee5fc
feat(berths,seed): polish detail display + prune ports to Port Nimara + Amador
feat/berth-schema-parity
Matt Ciaccio
2026-05-03 15:59:36 +02:00
c7ab816c99
feat(seed): replace 12 hand-rolled berths with 117-row NocoDB snapshot
Matt Ciaccio
2026-05-03 15:41:12 +02:00
e40b6c3d99
feat(berths): full NocoDB field parity, numeric types, sales edit access
Matt Ciaccio
2026-05-03 15:30:32 +02:00
4bcc7f8be6
feat(dedup): runtime surfaces — merge service, at-create suggestion, admin queue (P2)
Matt Ciaccio
2026-05-03 14:59:04 +02:00
18e5c124b0
feat(dedup): NocoDB migration script + tables (P3 dry-run)
Matt Ciaccio
2026-05-03 14:50:01 +02:00
8b077e1999
feat(dedup): normalization + match-finding library (P1)
Matt Ciaccio
2026-05-03 14:28:59 +02:00
36b92eb827
docs(spec): client deduplication and NocoDB migration design
docs/dedup-migration-design
Matt Ciaccio
2026-05-03 14:10:08 +02:00
e2398099c4
test(audit-fixes): cover the new permission and webhook surfaces
Matt Ciaccio
2026-05-02 23:17:08 +02:00
d364b09885
fix(realtime): keep socket through reconnects, stop re-subscribe storm
Matt Ciaccio
2026-05-02 23:11:52 +02:00
57a099acc4
fix(ui): humanize enum labels, format dates, resolve actor names, loading skeleton
Matt Ciaccio
2026-05-02 23:01:35 +02:00
a391934b73
feat(marina): end-reservation UI + global list, yacht tabs, dashboard distinct count
Matt Ciaccio
2026-05-02 23:01:15 +02:00
e3e0e69c04
fix(documenso): expired event, real signer emails, query invalidation, double-fire
Matt Ciaccio
2026-05-02 23:00:58 +02:00
6af2ac9680
fix(auth): harden admin gate, X-Port-Id, portal JWT, saved-views
Matt Ciaccio
2026-05-02 23:00:42 +02:00
a767652d74
feat(sales-ux): triage signals, reminders, realtime toasts, mobile FAB
Matt Ciaccio
2026-05-02 04:09:51 +02:00
c824b2df12
feat(interests): Email / Call / WhatsApp deep-links on interest header
Matt Ciaccio
2026-05-02 03:33:13 +02:00
d197f8b321
feat(eoi): align prerequisites with EOI document structure
Matt Ciaccio
2026-05-02 03:11:14 +02:00
76a7387dcc
fix(ux): batch UX audit fixes across spine pages
Matt Ciaccio
2026-05-02 01:24:15 +02:00
868b1f40c0
fix(nav): drop dedicated EOI route + alerts sidebar entry, fix paginated-URL bug
Matt Ciaccio
2026-05-02 00:30:27 +02:00
dbbd03fd22
feat(sales): admin-configurable EOI signers + richer timeline events
Matt Ciaccio
2026-05-02 00:19:55 +02:00