Commit Graph

  • ba128646e1 fix(documenso): skip legacy v1 document IDs in the v2 status poller main Matt 2026-06-28 18:48:20 +02:00
  • 32b57354ad fix(clients): archiving is edit-level, not delete (unblocks Sales/Director) Matt 2026-06-28 18:16:09 +02:00
  • 9f5810e3df feat(users): per-user signing-email override (login ≠ signing identity) Matt 2026-06-26 15:08:44 +02:00
  • b2692839f1 feat(admin): set a sign-in username when creating a user Matt 2026-06-25 22:57:24 +02:00
  • caaebd77fa fix(intake): client inquiry emails mirror website copy + never show "Port Nimara CRM" Matt 2026-06-25 22:07:47 +02:00
  • 866930c943 feat(intake): residence-type capture + CRM-owned inquiry emails for website cutover cutover/website-crm-finalization Matt 2026-06-25 20:58:53 +02:00
  • 64a488dc15 fix(signing): branded embed URL for developer + Copy link Matt 2026-06-25 15:14:28 +02:00
  • 2bc2cfac6f fix(eoi): render signed-PDF preview inline (preview endpoint + font-src) Matt 2026-06-25 14:45:34 +02:00
  • 3f6f845c02 fix(csp): add frame-src so signed-PDF previews + embedded signing load Matt 2026-06-25 14:26:38 +02:00
  • fc994cd88b fix(eoi): silence Documenso's own lifecycle emails on createDocument Matt 2026-06-25 13:20:55 +02:00
  • e17476f3e3 fix(eoi): v1 field placement uses percent coords, not absolute points Matt 2026-06-25 04:05:42 +02:00
  • f4cfc5600f fix(eoi): uppercase Documenso recipient roles at the API boundary Matt 2026-06-25 03:37:14 +02:00
  • 0ca9b2c3b5 feat(eoi): toggleable local-fill pathway — clean detail render + address wrapping Matt 2026-06-25 02:48:11 +02:00
  • af05bb18dc fix(documenso): follow v1 /download JSON {downloadUrl} to fetch the real signed PDF Matt 2026-06-24 23:55:16 +02:00
  • 1c91d76c52 feat(signing): internal "who signed" + completion email alerts to configurable recipients Matt 2026-06-24 21:38:22 +02:00
  • 352b2420b7 fix(ui): mobile cutoff polish — onboarding banner + yacht owner truncate (R1/R2) Matt 2026-06-22 16:23:56 +02:00
  • 459c68a2c3 feat(rbac): residential-partner route lockdown + role-aware mobile nav Matt 2026-06-22 15:53:22 +02:00
  • adc9802361 fix(rbac): sales/operational roles see deal alerts; quiet admin-only onboarding probe Matt 2026-06-22 13:49:12 +02:00
  • d8f739a7c2 feat(rbac): GDPR export becomes a toggleable clients.gdpr_export permission Matt 2026-06-22 13:20:31 +02:00
  • 93989b1e1d feat(admin): single Sales role, welcome-email password setup, Director=sales Matt 2026-06-22 12:40:55 +02:00
  • 5b9560531e fix(ui): remove PN brand mark from mobile topbar; balance title with spacer Matt 2026-06-19 10:55:18 +02:00
  • f55be14813 test(berths): CM-2 — drop unused var in price-reconcile test Matt 2026-06-19 10:53:24 +02:00
  • 6bc81270b9 feat(interests): CM-2 Part B — deal-price override route + UI on linked berths Matt 2026-06-19 10:48:38 +02:00
  • 38e392e38b feat(interests): CM-2 Part B — EOI/doc generation honours berth price override Matt 2026-06-19 10:41:42 +02:00
  • 039ef25fe5 feat(interests): CM-2 Part B — interest_berths price override (data + resolver) Matt 2026-06-19 10:40:17 +02:00
  • b3753b96a1 feat(berths): CM-2 — bulk price-reconcile admin page Matt 2026-06-19 10:38:08 +02:00
  • 9147f2857e feat(berths): CM-2 — price-reconcile API (list + bulk apply) Matt 2026-06-19 10:35:09 +02:00
  • 47778796ad feat(berths): CM-2 — bulk price-reconcile service (parse + apply) Matt 2026-06-19 10:33:40 +02:00
  • f7425d1231 fix(berths): CM-2 — robust purchase-price extraction (clean-token + magnitude floor) Matt 2026-06-19 10:30:12 +02:00
  • df8c26d1b3 feat(proxies): CM-9 UI — ProxyCard on client, interest, and yacht detail pages Matt 2026-06-19 00:01:08 +02:00
  • 91703bdb00 feat(proxies): CM-9 backend — polymorphic point-of-contact + resolver Matt 2026-06-18 23:54:47 +02:00
  • 3165ec651f feat(client-groups): CM-1 API routes + UI (list, member viewer, copy-emails) Matt 2026-06-18 22:49:29 +02:00
  • 661187cc79 feat(client-groups): CM-1 data layer — groups entity, membership, service, Mailchimp scaffold Matt 2026-06-18 22:28:20 +02:00
  • 4dc0bdd8c4 feat(crm): client-meeting batch — contact-pill cleanup, assignment toggle, receipt manual mode Matt 2026-06-18 21:42:36 +02:00
  • 7f04c765f4 fix(crm): inquiry detail polish, EOI preview mime, EOI next-step, documenso v1 banner Matt 2026-06-18 17:36:35 +02:00
  • 4d018be800 feat(inquiries): one-off NocoDB historical contact-form import (idempotent, dry-run default) Matt 2026-06-17 18:28:01 +02:00
  • 95d7776bb6 test(inquiries): drop unused import Matt 2026-06-17 18:25:13 +02:00
  • 0cc05f302f feat(inquiries): top-level Inquiries page (list + detail + convert), nav entries; retire admin inbox Matt 2026-06-17 18:23:13 +02:00
  • 54554a0928 feat(inquiries): list/get/triage/convert service + API routes (find-or-create client) Matt 2026-06-17 18:09:59 +02:00
  • 9879b82e5f feat(inquiries): website_submissions tracking + display columns; capture populates contact name/email Matt 2026-06-17 18:03:47 +02:00
  • 08adb4aeea feat(permissions): add inquiries resource (view/manage) + idempotent role backfill Matt 2026-06-17 17:59:32 +02:00
  • 6c4490f653 feat(alerts): always-visible dismiss/ack actions + Dismiss all (service, endpoint, UI) Matt 2026-06-17 17:53:12 +02:00
  • 13efe177a5 feat(alerts): split interest.stale into worked-then-quiet + new-untouched (interest.no_activity) Matt 2026-06-17 17:49:22 +02:00
  • 7591231c47 test(e2e): add Initiative 4 end-to-end + integration specs Matt 2026-06-04 14:10:35 +02:00
  • 2e8c4b43bf fix(backup): install pg_dump (postgresql16-client) in app + worker images Matt 2026-06-04 11:58:14 +02:00
  • fe863a588e feat(backup): full DR bundle export + admin-configurable offsite destinations Matt 2026-06-04 11:23:42 +02:00
  • 05950ae0b6 feat(uat): file preview/download fix, clients-by-country page, residential column picker Matt 2026-06-03 22:34:47 +02:00
  • eff57af571 fix(storage): make S3 server-side-encryption optional (default off) Matt 2026-06-03 22:08:41 +02:00
  • 1750e265e7 feat(berths): inline spec-PDF preview, manual-pin badge, maintenance module toggle, under-offer popover Matt 2026-06-03 19:15:04 +02:00
  • 2a7f922a01 fix(uat): dashboard snapshots current-state, pulse-chip gate, phone display, chip width Matt 2026-06-03 18:27:56 +02:00
  • 39c19b2340 feat(berths): click-to-change status from the list (chip → reason modal) Matt 2026-06-03 16:01:40 +02:00
  • d1f6d6a427 feat(eoi): signed-EOI hero + send-signed-copy; fix search dropdown z-order Matt 2026-06-03 15:55:28 +02:00
  • 3b227fe9b2 feat(files): in-app .docx preview + allow office/text mimes Matt 2026-06-03 15:45:11 +02:00
  • 95724c8e3a fix(uat): prod UAT batch — reports, sidebar, search, berths, breakpoint Matt 2026-06-03 15:41:31 +02:00
  • 93c6554c95 fix(ui+alerts+email): prod walkthrough batch Matt 2026-06-03 14:09:16 +02:00
  • 72028a7f32 fix(proxy): trust forwarded Host header for CSRF origin check Matt 2026-06-03 04:10:57 +02:00
  • d485695357 fix: CSRF host-compare behind proxy + default port = creation order Matt 2026-06-03 03:38:12 +02:00
  • 23a5811342 fix(proxy): accept the __Secure- prefixed session cookie in production Matt 2026-06-03 03:13:22 +02:00
  • 102ee493f8 fix(ports): list ports in creation order so the primary port leads Matt 2026-06-03 00:51:12 +02:00
  • c70eb1f945 fix(docker): merge prod deps into standalone node_modules (not replace) Matt 2026-06-03 00:31:33 +02:00
  • 42baaf7bfc fix(docker): complete prod node_modules for the custom server Matt 2026-06-03 00:03:11 +02:00
  • 319fd7fd1a fix(server): resolve socket.io deps via NODE_PATH + polyfill AsyncLocalStorage Matt 2026-06-02 23:34:28 +02:00
  • 2315b58764 fix(docker): bundle socket.io transitive deps into crm-app runner Matt 2026-06-02 23:03:57 +02:00
  • 15a139e86f feat(berths): website auto-promote toggle + manual-override soft-pin priority Matt 2026-06-02 20:10:04 +02:00
  • 04ddd59662 chore(repo): untrack internal docs + CLAUDE.md (keep local-only) Matt 2026-06-02 18:02:45 +02:00
  • 2a4dadd5a7 docs(launch): execute-ready initial-deployment runbook Matt 2026-06-02 17:50:42 +02:00
  • 44b004fa8f feat(intake): recipient picker UI (users/roles/everyone/emails) Matt 2026-06-02 17:36:24 +02:00
  • 5ea0c75fff feat(intake): structured notification-recipient resolver (emails/users/roles/everyone) Matt 2026-06-02 17:28:48 +02:00
  • 0416dc8d39 docs(launch): website-integration env vars + cutover sequence Matt 2026-06-02 17:22:12 +02:00
  • 990b566eff feat(intake): CRM-owned website inquiry emails + in-app notifications Matt 2026-06-02 17:22:08 +02:00
  • f699533224 Merge feat/residential-toggle-and-reports-comparison into main Matt 2026-06-02 15:08:31 +02:00
  • 79b6ab2ae0 fix(build): split custom-report registry into client-safe metadata + server query module Matt 2026-06-02 14:28:51 +02:00
  • cd82958307 docs(launch): Initiative 2 (codebase + security audit) COMPLETE — 85 findings remediated feat/residential-toggle-and-reports-comparison Matt 2026-06-02 13:32:04 +02:00
  • 478aba1866 docs(audit): remediation complete — 84/85 fixed, L21 false-positive; M23/M25 DB migrations deferred Matt 2026-06-02 13:31:34 +02:00
  • 8c4c9b967e fix(audit): UI — L18 (decorative emoji -> Lucide icons), L19 (gated NotesList timer + create-from-url ref-in-effect) Matt 2026-06-02 13:30:25 +02:00
  • e7fdf75a6c fix(audit): residential/tenancies — M28 (unified stage validation), M29 (explicit-disable wins), L31 (active-tenancy warning), L32 (socket event + saveStages tx) Matt 2026-06-02 13:18:28 +02:00
  • 7b74e2314b fix(audit): M24 — reserve 'branding'/'avatar' file categories from the upload/update API Matt 2026-06-02 13:18:24 +02:00
  • fd69a75980 fix(audit): bounce/email — M8 (Message-ID port-safe bounce match), L16 (recipient validation, CRLF, header trust note) Matt 2026-06-02 13:18:20 +02:00
  • cc5c053a79 fix(audit): reports workers — M9 (no duplicate scheduled emails), L5 (idempotent render artefacts), L6 (atomic schedule claim), L7 (per-port notification From) Matt 2026-06-02 13:07:30 +02:00
  • 64c73a5d77 fix(audit): rate-limit/DoS — M13 (bulk limiter on 6 routes), M14 (api limiter default in withAuth, fail-open), M15 (export-pdf payload bounds); L21 verified not-a-bug Matt 2026-06-02 13:07:25 +02:00
  • ebe5fe6ed8 fix(audit): GDPR/merge — M6 (drop false merge-reversibility claims), M7 (GDPR export adds 4 PII tables), L14 (docstring), L15 (hard-delete breadcrumb note) Matt 2026-06-02 13:07:21 +02:00
  • aedbcfd58d fix(audit): AI — L8 (single recordAiUsage), L9 (budget-off warning), L10 (sanitize notes/subjects into prompt) Matt 2026-06-02 12:59:16 +02:00
  • 70bf26aea1 fix(audit): berth rules/recommender — M4 (bundle-wide status), M5 (berth_unlinked target), M20/L27 (interest_berths invariant + cross-port guard), L3 (recommender stage-scale), L4 (dead branch) Matt 2026-06-02 12:59:12 +02:00
  • 4084029962 fix(audit): documenso — M2 (reservation EOI-milestone pollution), L11 (v2 numericId GET fallback), L12 (API URL normalize/validate), L13 (event dedup) Matt 2026-06-02 12:59:07 +02:00
  • 37ffb2c3b4 fix(audit): financial — M19 (group-by-currency accumulation, full-precision rates), M23 (invoice money rounding + 0% discount), L25 (no silent unconverted/stale FX), L26 (companyNotes updatedAt) Matt 2026-06-02 12:52:28 +02:00
  • 49f5c3165b fix(audit): interests/pipeline — M1 (outcome terminal guard), M3 (single-UPDATE + milestone gating), L1 (dead 'completed'), L2 (nurturing edge), L24 (deposit re-lock on refund) Matt 2026-06-02 12:52:24 +02:00
  • 0ed4323826 fix(audit): socket cluster — M10 (isActive gate), M11 (permission-scoped entity rooms), L20 (join:entity validation) Matt 2026-06-02 12:52:20 +02:00
  • 25988dbfad fix(audit): import cluster — M27 (commit idempotency), M25 (in-file dedup preview), M26 (undo destructive-update reporting), L33 (mapping/mooring), L35 (port-auth doc) Matt 2026-06-02 12:41:00 +02:00
  • 9305c030de fix(audit): storage cluster — M16 (presign doc/contract), M17 (per-port byte cap), M18 (replay-after-stat), L17 (mime allow-list, fingerprint hash), L22 (brochure portSlug) Matt 2026-06-02 12:40:56 +02:00
  • 65ed90b603 fix(audit): webhook cluster — M21 (test-send isActive), M22 (cross-tenant dead-letter), L28 (ipv6 SSRF), L29 (rebind doc), L30 (replay event-time) Matt 2026-06-02 12:40:41 +02:00
  • 29fb882478 fix(audit): H15 (saved-view sort) + H14 (back/forward URL resync) in usePaginatedQuery Matt 2026-06-02 12:26:10 +02:00
  • 808e80744b fix(audit): H12 — consistent refund sign so refunds never inflate revenue Matt 2026-06-02 12:24:51 +02:00
  • 77829485a7 fix(audit): H5 — keep yacht ownership-history ledger consistent on archive/restore Matt 2026-06-02 12:24:46 +02:00
  • 1882bcb2e4 fix(audit): H11 — gate cross-port coverBrandPortId in report runs Matt 2026-06-02 12:18:11 +02:00
  • a335dbc117 fix(audit): H10 — neutralize CSV formula injection in expense + audit exports Matt 2026-06-02 12:18:07 +02:00
  • 4489ad2431 fix(audit): H9 — rate-limit AI routes + budget-gate email-draft token spend Matt 2026-06-02 12:18:03 +02:00
  • b51d6d3030 fix(audit): H4 (reservation signing berth rule) + H13 (manual EOI-sign stage parity) Matt 2026-06-02 12:12:02 +02:00
  • 865ae5c072 fix(audit): H2/H3 — client merge re-points payments, memberships, yacht & invoice ownership Matt 2026-06-02 12:09:49 +02:00
  • 7a7fd76081 fix(audit): H8 (residentialAccess caller-superset) + M12 (self-target guard) in updateUser Matt 2026-06-02 12:06:06 +02:00
  • f4fb7aae84 fix(audit): H1 (webhook redirect SSRF), H6 (berth-status case), H7 (residential notes URL) Matt 2026-06-02 12:03:35 +02:00