Matt Ciaccio
037f2544e8
feat(companies): service + validators + unit tests
2026-04-24 12:02:08 +02:00
Matt Ciaccio
7c408cf975
feat(yachts): list + owner-scoped list + autocomplete
...
Adds `listYachts`, `listYachtsForOwner`, and `autocomplete` to the
yacht service so UIs can page/filter yachts per port, look up all
yachts tied to a given client/company, and power search-as-you-type.
`listYachts` delegates to the shared port-scoped `buildListQuery`,
supporting search over name/hullNumber/registration plus ownerType,
ownerId and status filters; `autocomplete` caps at 10 results and is
tenant-scoped; `listYachtsForOwner` returns all yachts whose current
owner matches, newest first. Extends `makeYacht` factory to accept
flat `name`, `status`, `hullNumber`, `registration` overrides.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com >
2026-04-24 00:03:36 +02:00
Matt Ciaccio
8a5cd1ef0e
feat(yachts): atomic transferOwnership with partial-unique guard
2026-04-23 23:58:20 +02:00
Matt Ciaccio
d0ab4b8102
feat(yachts): updateYacht + archiveYacht
2026-04-23 23:52:24 +02:00
Matt Ciaccio
aaf4847fc2
refactor(yachts): use withTransaction helper per project convention
2026-04-23 23:47:12 +02:00
Matt Ciaccio
feacb8c7ac
fix(yachts): run owner existence check inside transaction
2026-04-23 23:46:03 +02:00
Matt Ciaccio
2f2ad4452f
feat(yachts): createYacht + getYachtById services with tests
2026-04-23 23:40:56 +02:00
Matt Ciaccio
27d438929b
refactor(yachts): rename schema + consolidate tests per project conventions
2026-04-23 23:35:30 +02:00
Matt Ciaccio
899e588a0c
feat(yachts): add zod validators + tests
2026-04-23 23:31:29 +02:00
Matt Ciaccio
077ba5bf6b
feat(schema): wire yacht, company, reservation relations in Drizzle
2026-04-23 18:02:22 +02:00
Matt Ciaccio
14dac2f3e1
feat(documents): add yachtId/companyId to files and documents
2026-04-23 18:00:12 +02:00
Matt Ciaccio
117cfae52e
feat(invoices): add billingEntityType/Id for polymorphic billing
2026-04-23 17:58:52 +02:00
Matt Ciaccio
d43298a74e
feat(schema): add yachtId to interests and berth_waiting_list
2026-04-23 17:57:29 +02:00
Matt Ciaccio
88a87afa77
feat(reservations): add berth_reservations schema with partial unique exclusivity
2026-04-23 17:55:53 +02:00
Matt Ciaccio
299e893e2b
feat(companies): add companies, memberships, addresses, notes, tags schema
2026-04-23 17:54:02 +02:00
Matt Ciaccio
51523e6768
feat(yachts): add yachts, ownership history, notes, tags schema
2026-04-23 17:51:19 +02:00
7313d8b3d0
feat: add email worker handlers for inquiry confirmation and sales notification
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-04-14 13:00:14 -04:00
c5c45accfc
feat: add inquiry notification service for sales team targeting
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-04-14 12:58:55 -04:00
9a0c28020d
feat: add inquiry email templates for client confirmation and sales notification
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-04-14 12:56:30 -04:00
44982a2878
feat: add optional plain-text fallback to sendEmail
...
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-04-14 12:54:25 -04:00
ae19170da8
feat: expand public interest schema with name split, address, berth
...
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-04-14 12:53:13 -04:00
f90dba036f
feat: add partial unique index for single primary address per client
...
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-04-14 12:51:45 -04:00
59dd418542
feat: add client_addresses table for multi-address storage
...
Adds client_addresses table with cascade deletes, port scoping, primary address flag, and indexes. Updates clientsRelations and portsRelations, adds clientAddressesRelations. Generates migration 0000_narrow_longshot.sql.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-04-14 12:44:11 -04:00
8df8ded46c
Add user settings, audit log, berth CRUD, and missing endpoints
...
- PATCH /api/v1/me: self-service profile update (name, phone, timezone)
- User settings page with profile editor + notification preferences
- Audit log API with filtering (entity, action, user, date range)
- Audit log page with search, entity type, and action filters
- Berth create/delete: POST /api/v1/berths + DELETE /api/v1/berths/[id]
- Client duplicates endpoint: GET /api/v1/clients/duplicates?name=
- Replace settings and audit stub pages with real implementations
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-04-08 19:45:56 -04:00
4fdd9e3207
Implement reminders system with full CRUD and background processors
...
- Reminders service: create, update, delete, complete, snooze, dismiss
- List with filters (status, priority, assignee, entity, date range)
- My/overdue/upcoming convenience endpoints
- BullMQ processors: auto-follow-up creation (BR-060) and overdue notifications
- Snooze with presets (1h, 4h, tomorrow, next week) and custom datetime
- Un-snooze logic: snoozed reminders auto-revert to pending when snooze expires
- UI: filterable list with my/all toggle, priority badges, overdue indicators
- Permission-gated: view_own, view_all, create, assign_others
- Entity linking: reminders can link to clients, interests, or berths
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-04-08 16:27:34 -04:00
c8320023cc
Implement admin ports and system settings management
...
- Port CRUD: list, create, update with branding, currency, timezone
- System settings: upsert key-value pairs per port with known settings UI
(AI feature flags, invoice discount, pipeline weights, berth rules)
- Settings manager with toggle switches, number inputs, and JSON editors
- Replace both stub pages with real implementations
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-04-08 15:53:33 -04:00
f60159e91a
Implement admin users and roles management
...
- Add user CRUD: list, create (via Better Auth), update role/status, remove from port
- Add role CRUD: create, update permissions, delete with system role protection
- Full permissions matrix UI with accordion groups and per-action checkboxes
- Validators, services, API routes, and UI components following existing patterns
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-04-08 15:47:11 -04:00
a13d7503cc
Fix Docker build and production server infrastructure
...
- Add SKIP_ENV_VALIDATION to bypass Zod env check during next build
- Bundle custom server.ts with esbuild so production uses Socket.io
- Create worker entry point (src/worker.ts) with all BullMQ workers
- Add esbuild build scripts for server and worker bundles
- Fix Dockerfile.worker to include its own build stage
- Fix pre-commit hook to work without global pnpm
- Add CLAUDE.md with project conventions and quick reference
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-04-08 15:31:33 -04:00
082d4f20e3
Fix all TypeScript errors: restore proper types and typed route casts
...
Build & Push Docker Images / lint (push) Successful in 1m16s
Build & Push Docker Images / build-and-push (push) Failing after 4m42s
- Restore `as any` casts for Next.js typedRoutes on dynamic routes
- Use proper types for PDF templates, invoice/expense data, DB schema
- Fix PgColumn casts in sort helpers for expenses/invoices
- Add null guards for optional port/client in record-export
- Fix vitest config (remove invalid poolOptions)
- Lint: 0 errors, TypeScript: 0 errors
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-03-26 12:29:55 +01:00
4c20bcffcd
Fix all ESLint errors: remove unused imports, replace any types
...
Build & Push Docker Images / lint (push) Failing after 1m10s
Build & Push Docker Images / build-and-push (push) Has been skipped
Build & Push Docker Images / deploy (push) Has been skipped
- Remove ~60 unused imports and variables across 88 files
- Replace ~80 `any` type annotations with proper types (unknown,
Record<string, unknown>, or specific types)
- Prefix unused callback args with underscore
- Fix unescaped JSX entities
- Lint now passes cleanly (0 errors, 2 intentional img warnings)
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-03-26 12:06:18 +01:00
67d7e6e3d5
Initial commit: Port Nimara CRM (Layers 0-4)
...
Build & Push Docker Images / build-and-push (push) Has been cancelled
Build & Push Docker Images / deploy (push) Has been cancelled
Build & Push Docker Images / lint (push) Has been cancelled
Full CRM rebuild with Next.js 15, TypeScript, Tailwind, Drizzle ORM,
PostgreSQL, Redis, BullMQ, MinIO, and Socket.io. Includes 461 source
files covering clients, berths, interests/pipeline, documents/EOI,
expenses/invoices, email, notifications, dashboard, admin, and
client portal. CI/CD via Gitea Actions with Docker builds.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com >
2026-03-26 11:52:51 +01:00