217 Commits
Author SHA1 Message Date
zeekayandClaude Opus 4.8 9921a9a896 fix(db): re-inject Prisma enum objects for the SQLite client
SQLite has no Prisma enums, so removing the enum blocks also dropped the enum
*objects* the app imports from @prisma/client (LinkType.DOCUMENT_LINK, etc.),
crashing Next.js prerender ("Cannot read properties of undefined"). A
build-time step (after `prisma generate`) re-injects the 18 enum objects into
the generated client, so no app files change. Verified: local `next build`
now prerenders all 90 pages.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-05 00:59:54 -07:00
zeekayandClaude Opus 4.8 0aaaa1fa7e feat(db): migrate Prisma datasource postgres -> sqlite (native, file-backed)
Drops the shared sql-0 postgres dependency in favor of an embedded SQLite
file (DATABASE_URL=file:/data/<db>), WAL-replicated to SeaweedFS by the
operator persistence sidecar — same pattern as esign (Documenso).

Schema changes for the sqlite connector:
- datasource provider postgresql -> sqlite; drop directUrl/shadowDatabaseUrl
- 18 enums -> String (values preserved as string defaults)
- scalar-list fields (String[]/Int[]) -> Json @default("[]") (arrays
  round-trip through Prisma Json at runtime; next.config ignoreBuildErrors
  keeps the type-only churn out of the build)
- strip pg-native @db.* attributes (@db.Text/@db.Timestamp)
- startup: prisma migrate deploy -> prisma db push (pg migration history is
  postgres-specific; db push reconciles the sqlite schema idempotently)

CI: amd64-only (DOKS has no arm64); deploy:false — rollout is operator-managed
via the universe Service CR, never `kubectl set image`.

Verified: `prisma validate` + `prisma db push` materialize all 62 tables on a
fresh sqlite file. Source DB is empty (0 app rows), so cutover is data-safe.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-05 00:33:13 -07:00
Hanzo Dev 126976b33f Rebrand from Papermark to Hanzo Dataroom
- Replace all Papermark branding with Hanzo Dataroom
- Update metadata, titles, descriptions, OG tags
- Update email templates footer and branding
- Replace papermark.io/com URLs with dataroom.hanzo.ai
- Update powered-by component
- Update x-powered-by header
- Update legal references to Hanzo AI, Inc.
- Update social handles to @hanzoai
- Update README, CLA, LICENSE, SECURITY docs
2026-03-01 19:02:19 -08:00
Marc Seitz 76444e2992 Merge branch 'main' into cursor/root-domain-redirects-96b8 2026-02-28 15:20:12 +11:00
Marc Seitz f677204bc2 feat: add migration 2026-02-27 17:11:08 +11:00
Marc Seitz f1a686e39d Merge branch 'main' into deal-flow-infp 2026-02-27 16:39:43 +11:00
Marc SeitzandGitHub 1571168300 Merge pull request #2077 from mfts/cursor/dataroom-viewer-background-color-ac68
Dataroom viewer background color
2026-02-22 21:53:54 +11:00
Cursor AgentandMarc Seitz ce2b40daad fix: harden root domain redirects - validation, plan gating, cleanup
- Change redirect status from 301 to 302 (non-permanent, user-configurable)
- Remove backfill UPDATE entries from migration SQL
- Remove unnecessary sync-redirects cron endpoint
- Add URL validation: SSRF protection, edge config keyword blocklist,
  protocol check, URL sanitization via shared validateRedirectUrl helper
- Add plan gating: require Business plan or higher for redirect URLs
  (enforced on both API endpoints and UI)
- Clean up Redis redirect URLs on team deletion
- Clear redirect URLs (Postgres + Redis) on subscription cancellation
  and on plan downgrade below Business
- Split redis.ts to avoid Prisma import in edge middleware context
- Gate DomainCard redirect UI based on plan (show upgrade prompt)

Co-authored-by: Marc Seitz <mfts@users.noreply.github.com>
2026-02-22 08:24:29 +00:00
Cursor AgentandMarc Seitz 2709049f68 feat: add UI for root domain redirect and Redis sync endpoint
- Update DomainCard to accept and display redirectUrl with inline editor
- Add save/remove functionality for redirect URL with toast notifications
- Pass redirectUrl from domains settings page to DomainCard
- Add /api/cron/domains/sync-redirects endpoint to sync Postgres -> Redis
- Add backfill SQL for existing hardcoded domain redirects

Co-authored-by: Marc Seitz <mfts@users.noreply.github.com>
2026-02-20 22:50:09 +00:00
Cursor AgentandMarc Seitz e81d4118aa feat: add root domain redirect support (schema, redis, middleware, API)
- Add redirectUrl field to Domain model in Prisma schema
- Create migration for the new field
- Add Redis helper for domain redirect URL caching
- Update middleware to check Redis for redirect URL instead of hardcoded values
- Update domain API: GET includes redirectUrl, POST accepts redirectUrl, PUT updates redirectUrl
- Sync Redis on domain create, update, and delete

Co-authored-by: Marc Seitz <mfts@users.noreply.github.com>
2026-02-20 22:45:48 +00:00
Marc Seitz 07f56a1b51 Merge branch 'main' into cursor/visitor-groups-access-1b01 2026-02-19 17:53:00 +11:00
Marc Seitz c2e4adc30b feat: add dataroom view background 2026-02-19 17:39:56 +11:00
Marc Seitz 79247f6d05 feat: add owner to link 2026-02-12 18:19:59 +11:00
Cursor AgentandMarc Seitz bd109580ff feat: add VisitorGroup and LinkVisitorGroup models to Prisma schema
Add team-level visitor groups that allow users to define named groups
of emails/domains once, then apply them to document and data room links.

New models:
- VisitorGroup: team-scoped named group with emails/domains list
- LinkVisitorGroup: many-to-many join table between Link and VisitorGroup

Co-authored-by: Marc Seitz <mfts@users.noreply.github.com>
2026-02-12 07:13:18 +00:00
Marc Seitz 59a4fccdc5 fix 2026-02-12 15:45:06 +11:00
Marc Seitz 22973a4ffc refactor: change date 2026-02-12 15:40:13 +11:00
Marc Seitz b8ac2fd021 Merge branch 'main' into cursor/PM-466-folder-customization-options-4a78 2026-02-12 14:51:30 +11:00
Marc Seitz 9bd9dae2d3 fix: remove artificial char limitations from jackson tables 2026-02-11 18:29:17 +11:00
Marc Seitz b0cfc00bd0 feat: add enterprise saml sso / scim 2026-02-11 17:41:56 +11:00
Cursor AgentandMarc Seitz 9ec1fc6c20 refactor: rewrite jackson lib to use same DB with jackson-specific tables
- Rewrite lib/jackson.ts to match Dub's pattern: named export,
  globalThis singleton, clientSecretVerifier, same DB connection
- Add jackson.prisma schema with jackson_index, jackson_store,
  jackson_ttl tables (shared database, separate tables)
- Update migration to create Jackson tables alongside Team fields
- Rename connectionController → apiController across all consumers
- Switch all imports from default to named: { jackson }
- Remove unnecessary env vars (JACKSON_EXTERNAL_URL, SAML_PATH,
  JACKSON_ENCRYPTION_KEY) — Jackson uses NEXTAUTH_URL and
  NEXTAUTH_SECRET directly

Co-authored-by: Marc Seitz <mfts@users.noreply.github.com>
2026-02-11 02:44:45 +00:00
Cursor AgentandMarc Seitz c936105455 feat: add SAML/SCIM admin UI, security settings page, and SSO login
- Add Prisma migration for SAML/SCIM fields on Team model
- Create SAML config modal component for admin settings
- Create Directory Sync config modal component for admin settings
- Create security settings page at /settings/security
- Add Security tab to settings navigation and sidebar
- Create SSO login component and add to login page
- Create SAML callback page at /auth/saml

Co-authored-by: Marc Seitz <mfts@users.noreply.github.com>
2026-02-10 11:07:55 +00:00
Iuliia Shnai fb51399469 feat: add two sruvey questions 2026-02-06 14:29:12 +11:00
Marc Seitz 2a04858b37 Create migration.sql 2026-02-04 18:21:10 +11:00
Iuliia Shnai 3ae9e80058 feat:updates 2026-02-04 15:41:23 +11:00
Cursor Agentandmarcftone c21a3830bd feat: Add folder customization with icon and color selection
- Add icon and color columns to Folder and DataroomFolder models
- Create Prisma migration for new columns
- Add folder icon list (27 icons) and color palette (8 colors) constants
- Update API endpoints to validate and persist icon/color fields
- Create FolderIconPicker and FolderColorPicker UI components
- Update EditFolderModal with icon/color selection and live preview
- Update FolderCard components to display custom icons/colors
- Support both regular folders and dataroom folders

Closes PM-466

Co-authored-by: marcftone <marcftone@gmail.com>
2026-01-20 07:39:33 +00:00
Marc Seitz 1a399aedfc Merge branch 'main' into cursor/PM-465-all-documents-item-visibility-7011 2026-01-16 17:39:44 +13:00
Cursor Agent f8e79fb747 feat(all-documents): Add hide from All Documents feature
This feature allows users to hide folders and documents from the All Documents
view without deleting them:

- Add hiddenInAllDocuments field to Document and Folder models
- Create API endpoints for hiding documents (/documents/hide) and folders
  (/folders/hide)
- Update documents and folders APIs to exclude hidden items from All Documents
  view
- Add "Hide from All Documents" action to document and folder dropdown menus
- Add bulk hide action to multi-select action panel
- Cascade hiding: when a folder is hidden, all subfolders and documents within
  are also hidden

This is a non-destructive feature that only affects visibility in the All
Documents section. Hidden items remain accessible via Data Rooms and are not
deleted.

Resolves PM-465
2026-01-13 19:59:33 +00:00
Cursor Agent 787d80ac47 feat: Add internal name/alias field to Data Rooms
This feature allows users to set a private, internal name for Data Rooms
that is only visible to the owner. This helps distinguish between multiple
data rooms that share the same public-facing name.

Changes:
- Add internalName field to Dataroom schema
- Create database migration for the new field
- Update API endpoints to support creating/updating internal names
- Search now includes internal names
- Update add-dataroom-modal with internal name input
- Display internal name in dataroom cards and headers
- Add internal name form in settings page
2026-01-13 00:37:46 +00:00
Cursor Agentandmarcftone 82f5ac83df feat: Add timezone setting for team analytics
Co-authored-by: marcftone <marcftone@gmail.com>
2025-12-30 10:08:29 +00:00
Marc Seitz 0f9ff62934 fix: delete dataroom groups 2025-12-09 17:53:10 +01:00
Marc Seitz 889056b321 feat(ee): add agent chat 2025-12-08 17:23:07 +01:00
Marc Seitz ea43a6aa7f fix: undo rename 2025-11-17 18:42:37 +01:00
Marc Seitz f1320a809c chore: rename migration 2025-11-17 18:41:02 +01:00
Marc Seitz ba26b342b0 Merge branch 'main' into feat/invite-by-mail 2025-11-17 17:58:44 +01:00
Marc Seitz 9e71a3e47b feat(ee): add dataroom invites 2025-11-17 15:38:52 +01:00
Marc Seitz 6aeb79c211 feat(ee): add workflows 2025-11-16 19:06:53 +01:00
Marc Seitz 51027a2d92 feat: track folder download documents 2025-11-06 18:25:03 +04:00
Marc Seitz c0ef51ea7a feat: fixes 2025-10-31 21:03:49 +01:00
Marc Seitz dbc4acdac7 feat: global branding fixes 2025-10-27 23:10:39 +01:00
Marc Seitz 82ceb78d20 feat: add deleted links 2025-10-21 22:44:03 +02:00
Cursor Agentandmarcftone 202f587cb9 feat: Add showBanner option to link presets
Co-authored-by: marcftone <marcftone@gmail.com>
2025-10-17 15:38:42 +00:00
Marc Seitz b9cd4906c9 feat: add ability to isolate dataroom folders 2025-10-09 19:19:04 +02:00
Cursor Agentandmarcftone a57d70771a feat: Add branding settings and welcome message
Co-authored-by: marcftone <marcftone@gmail.com>
2025-10-07 08:16:13 +00:00
Marc Seitz debb862223 feat: add group index 2025-09-18 11:39:01 +02:00
Marc Seitz 2fbf873412 feat: add database index for more efficient queries 2025-09-17 18:49:52 +02:00
Marc Seitz 8df61bca90 feat: add performance indexes 2025-09-15 23:57:38 +02:00
Marc Seitz 38cc36ba00 feat: add annotations to documents 2025-09-15 14:43:14 +02:00
Marc Seitz b8a4265edf feat: slack integration improvements and simplification 2025-09-13 16:49:39 +02:00
Marc Seitz 4e86e2a8d9 Merge branch 'main' into slack/reform 2025-09-12 19:13:09 +02:00
Marc Seitz 5dc02cf6a5 refactor: prisma schema 2025-09-07 10:23:01 +02:00