@knotpad/app 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (342) hide show
  1. package/README.md +167 -0
  2. package/app/(app)/calendar/page.tsx +57 -0
  3. package/app/(app)/error.tsx +35 -0
  4. package/app/(app)/graph/page.tsx +32 -0
  5. package/app/(app)/guide/page.tsx +21 -0
  6. package/app/(app)/kanban/loading.tsx +24 -0
  7. package/app/(app)/kanban/page.tsx +59 -0
  8. package/app/(app)/layout.tsx +122 -0
  9. package/app/(app)/list/loading.tsx +21 -0
  10. package/app/(app)/list/page.tsx +137 -0
  11. package/app/(app)/loading.tsx +18 -0
  12. package/app/(app)/notes/[noteId]/page.tsx +84 -0
  13. package/app/(app)/notes/layout.tsx +30 -0
  14. package/app/(app)/notes/page.tsx +39 -0
  15. package/app/(app)/page.tsx +5 -0
  16. package/app/(app)/settings/agent-token/page.tsx +59 -0
  17. package/app/(app)/settings/backup/page.tsx +49 -0
  18. package/app/(app)/settings/billing/page.tsx +53 -0
  19. package/app/(app)/settings/calendar/page.tsx +41 -0
  20. package/app/(app)/settings/layout.test.tsx +39 -0
  21. package/app/(app)/settings/layout.tsx +71 -0
  22. package/app/(app)/settings/page.tsx +4 -0
  23. package/app/(app)/settings/security/page.tsx +43 -0
  24. package/app/(app)/settings/team/page.tsx +74 -0
  25. package/app/(app)/settings/workspace/page.tsx +27 -0
  26. package/app/(app)/tasks/[taskId]/page.tsx +79 -0
  27. package/app/(auth)/forgot-password/page.tsx +106 -0
  28. package/app/(auth)/guest/page.tsx +56 -0
  29. package/app/(auth)/layout.tsx +13 -0
  30. package/app/(auth)/login/page.tsx +14 -0
  31. package/app/(auth)/register/page.tsx +193 -0
  32. package/app/(auth)/reset-password/page.tsx +138 -0
  33. package/app/api/account/claim/route.tsx +135 -0
  34. package/app/api/admin/backfill-encryption/route.tsx +43 -0
  35. package/app/api/admin/license/route.tsx +42 -0
  36. package/app/api/auth/2fa/route.tsx +148 -0
  37. package/app/api/auth/[...nextauth]/route.tsx +3 -0
  38. package/app/api/auth/change-password/route.tsx +61 -0
  39. package/app/api/auth/check-2fa/route.tsx +19 -0
  40. package/app/api/auth/forgot-password/route.tsx +65 -0
  41. package/app/api/auth/reset-password/route.tsx +52 -0
  42. package/app/api/auth/verify-2fa/route.tsx +88 -0
  43. package/app/api/backup/download/db/route.ts +29 -0
  44. package/app/api/backup/download/notes/route.ts +25 -0
  45. package/app/api/backup/settings/route.ts +92 -0
  46. package/app/api/billing/checkout/route.tsx +81 -0
  47. package/app/api/billing/migrate/route.tsx +163 -0
  48. package/app/api/billing/portal/route.tsx +24 -0
  49. package/app/api/billing/setup-intent/route.tsx +55 -0
  50. package/app/api/billing/status/route.tsx +36 -0
  51. package/app/api/billing/subscribe/route.tsx +85 -0
  52. package/app/api/billing/webhook/route.tsx +199 -0
  53. package/app/api/calendar-feeds/[feedId]/route.tsx +67 -0
  54. package/app/api/calendar-feeds/[feedId]/sync/route.tsx +37 -0
  55. package/app/api/calendar-feeds/events/route.tsx +82 -0
  56. package/app/api/calendar-feeds/route.tsx +52 -0
  57. package/app/api/calendar-feeds/sync-all/route.tsx +34 -0
  58. package/app/api/cron/calendar-feeds/route.tsx +31 -0
  59. package/app/api/cron/stale-tasks/route.tsx +51 -0
  60. package/app/api/cron/sync/route.tsx +34 -0
  61. package/app/api/devices/[deviceId]/route.tsx +25 -0
  62. package/app/api/devices/route.tsx +41 -0
  63. package/app/api/export/route.tsx +40 -0
  64. package/app/api/feedback/route.tsx +54 -0
  65. package/app/api/folders/[folderId]/route.tsx +51 -0
  66. package/app/api/folders/route.tsx +37 -0
  67. package/app/api/graph/route.tsx +242 -0
  68. package/app/api/guest/route.tsx +58 -0
  69. package/app/api/health/route.tsx +10 -0
  70. package/app/api/holidays/countries/route.tsx +14 -0
  71. package/app/api/holidays/route.tsx +49 -0
  72. package/app/api/holidays/states/route.tsx +21 -0
  73. package/app/api/invites/[token]/route.tsx +131 -0
  74. package/app/api/invites/route.tsx +74 -0
  75. package/app/api/mcp/generate-token/route.tsx +55 -0
  76. package/app/api/mcp/revoke-token/[tokenId]/route.tsx +30 -0
  77. package/app/api/mcp/update-alias/[tokenId]/route.tsx +22 -0
  78. package/app/api/notes/[noteId]/export/route.tsx +45 -0
  79. package/app/api/notes/[noteId]/route.tsx +360 -0
  80. package/app/api/notes/route.tsx +112 -0
  81. package/app/api/notifications/route.tsx +44 -0
  82. package/app/api/register/route.tsx +67 -0
  83. package/app/api/restore/route.tsx +148 -0
  84. package/app/api/sync/conflicts/[conflictId]/route.tsx +134 -0
  85. package/app/api/sync/conflicts/route.tsx +48 -0
  86. package/app/api/sync/status/route.tsx +49 -0
  87. package/app/api/sync/trigger/route.tsx +15 -0
  88. package/app/api/tasks/[taskId]/detail/route.tsx +68 -0
  89. package/app/api/tasks/[taskId]/route.tsx +259 -0
  90. package/app/api/tasks/bulk/route.tsx +133 -0
  91. package/app/api/tasks/route.tsx +36 -0
  92. package/app/api/workspace/active/route.tsx +39 -0
  93. package/app/api/workspace/create-team/route.tsx +42 -0
  94. package/app/api/workspace/kanban-statuses/route.tsx +71 -0
  95. package/app/api/workspace/members/[memberId]/route.tsx +69 -0
  96. package/app/api/workspace/route.tsx +24 -0
  97. package/app/download/page.tsx +170 -0
  98. package/app/favicon.ico +0 -0
  99. package/app/generated/prisma/client.d.ts +1 -0
  100. package/app/generated/prisma/client.js +5 -0
  101. package/app/generated/prisma/default.d.ts +1 -0
  102. package/app/generated/prisma/default.js +5 -0
  103. package/app/generated/prisma/edge.d.ts +1 -0
  104. package/app/generated/prisma/edge.js +497 -0
  105. package/app/generated/prisma/index-browser.js +523 -0
  106. package/app/generated/prisma/index.d.ts +46376 -0
  107. package/app/generated/prisma/index.js +497 -0
  108. package/app/generated/prisma/package.json +144 -0
  109. package/app/generated/prisma/query_compiler_fast_bg.js +2 -0
  110. package/app/generated/prisma/query_compiler_fast_bg.wasm +0 -0
  111. package/app/generated/prisma/query_compiler_fast_bg.wasm-base64.js +2 -0
  112. package/app/generated/prisma/runtime/client.d.ts +3386 -0
  113. package/app/generated/prisma/runtime/client.js +86 -0
  114. package/app/generated/prisma/runtime/index-browser.d.ts +90 -0
  115. package/app/generated/prisma/runtime/index-browser.js +6 -0
  116. package/app/generated/prisma/runtime/wasm-compiler-edge.js +76 -0
  117. package/app/generated/prisma/schema.prisma +456 -0
  118. package/app/generated/prisma/wasm-edge-light-loader.mjs +5 -0
  119. package/app/generated/prisma/wasm-worker-loader.mjs +5 -0
  120. package/app/globals.css +54 -0
  121. package/app/invite/[token]/page.tsx +52 -0
  122. package/app/layout.tsx +90 -0
  123. package/app/mcp/route.tsx +430 -0
  124. package/app/opengraph-image.tsx +120 -0
  125. package/app/page.tsx +398 -0
  126. package/app/privacy/page.tsx +69 -0
  127. package/app/robots.tsx +25 -0
  128. package/app/sitemap.tsx +36 -0
  129. package/app/terms/page.tsx +69 -0
  130. package/app/upgrade/page.tsx +75 -0
  131. package/auth.config.ts +33 -0
  132. package/auth.ts +79 -0
  133. package/bin/brief.js +224 -0
  134. package/components/auth/login-form.tsx +302 -0
  135. package/components/auth/password-checklist.tsx +31 -0
  136. package/components/auth/password-input.tsx +36 -0
  137. package/components/auth/switch-account-button.test.tsx +22 -0
  138. package/components/auth/switch-account-button.tsx +19 -0
  139. package/components/auth/two-factor-input.tsx +116 -0
  140. package/components/billing/billing-dashboard.tsx +265 -0
  141. package/components/billing/card-form.tsx +210 -0
  142. package/components/billing/claim-account-form.tsx +99 -0
  143. package/components/branding/app-logo.test.tsx +20 -0
  144. package/components/branding/app-logo.tsx +25 -0
  145. package/components/calendar/calendar-agenda.tsx +150 -0
  146. package/components/calendar/calendar-drag.test.tsx +177 -0
  147. package/components/calendar/calendar-grid.tsx +357 -0
  148. package/components/calendar/calendar-hooks.test.tsx +27 -0
  149. package/components/calendar/calendar-hooks.ts +351 -0
  150. package/components/calendar/calendar-toolbar.test.tsx +68 -0
  151. package/components/calendar/calendar-toolbar.tsx +291 -0
  152. package/components/calendar/calendar-types.ts +148 -0
  153. package/components/calendar/calendar-view.test.tsx +295 -0
  154. package/components/calendar/calendar-view.tsx +307 -0
  155. package/components/calendar/day-detail-popover.tsx +174 -0
  156. package/components/calendar/task-chip.tsx +86 -0
  157. package/components/command/command-palette.test.tsx +33 -0
  158. package/components/command/command-palette.tsx +310 -0
  159. package/components/download-cta.tsx +87 -0
  160. package/components/feedback/feedback-popup.tsx +207 -0
  161. package/components/graph/graph-draw.ts +337 -0
  162. package/components/graph/graph-overlays.tsx +160 -0
  163. package/components/graph/graph-page.test.tsx +131 -0
  164. package/components/graph/graph-page.tsx +263 -0
  165. package/components/graph/graph-types.ts +47 -0
  166. package/components/graph/graph-view.tsx +322 -0
  167. package/components/guide/guide-view.tsx +522 -0
  168. package/components/kanban/kanban-board.test.tsx +128 -0
  169. package/components/kanban/kanban-board.tsx +361 -0
  170. package/components/kanban/kanban-card-menu.tsx +102 -0
  171. package/components/kanban/kanban-card.tsx +227 -0
  172. package/components/kanban/kanban-column.tsx +49 -0
  173. package/components/kanban/kanban-status-context.tsx +28 -0
  174. package/components/landing/calendar-sandbox.test.tsx +15 -0
  175. package/components/landing/calendar-sandbox.tsx +107 -0
  176. package/components/landing/graph-sandbox.test.tsx +27 -0
  177. package/components/landing/graph-sandbox.tsx +80 -0
  178. package/components/landing/kanban-sandbox.test.tsx +24 -0
  179. package/components/landing/kanban-sandbox.tsx +101 -0
  180. package/components/landing/landing-showcase.test.tsx +21 -0
  181. package/components/landing/landing-showcase.tsx +54 -0
  182. package/components/landing/list-sandbox.tsx +86 -0
  183. package/components/landing/mock-workspace.ts +168 -0
  184. package/components/landing/notes-sandbox.test.tsx +14 -0
  185. package/components/landing/notes-sandbox.tsx +88 -0
  186. package/components/layout/app-shell.tsx +83 -0
  187. package/components/layout/backup-scheduler.tsx +122 -0
  188. package/components/layout/bottom-nav.tsx +43 -0
  189. package/components/layout/icon-bar.test.tsx +29 -0
  190. package/components/layout/icon-bar.tsx +118 -0
  191. package/components/layout/mobile-top-bar.tsx +68 -0
  192. package/components/layout/notes-panel-folder.tsx +127 -0
  193. package/components/layout/notes-panel-note-item.tsx +140 -0
  194. package/components/layout/notes-panel-task-tab.tsx +63 -0
  195. package/components/layout/notes-panel-types.ts +44 -0
  196. package/components/layout/notes-panel.tsx +476 -0
  197. package/components/layout/notification-bell.tsx +251 -0
  198. package/components/layout/paywall-screen.tsx +41 -0
  199. package/components/layout/pro-banner.tsx +76 -0
  200. package/components/layout/sw-register.tsx +27 -0
  201. package/components/layout/workspace-switcher.tsx +90 -0
  202. package/components/notes/mobile-bottom-sheet.tsx +99 -0
  203. package/components/notes/note-editor-context-menu.tsx +47 -0
  204. package/components/notes/note-editor-dom.ts +33 -0
  205. package/components/notes/note-editor-dropdowns.tsx +484 -0
  206. package/components/notes/note-editor-hooks.ts +692 -0
  207. package/components/notes/note-editor-keyboard.ts +305 -0
  208. package/components/notes/note-editor-overlay.tsx +90 -0
  209. package/components/notes/note-editor.test.tsx +372 -0
  210. package/components/notes/note-editor.tsx +662 -0
  211. package/components/notes/note-preview-pane.tsx +156 -0
  212. package/components/notes/note-tabs.tsx +120 -0
  213. package/components/notes/note-types.tsx +157 -0
  214. package/components/settings/accept-invite.tsx +108 -0
  215. package/components/settings/agent-token-settings.tsx +369 -0
  216. package/components/settings/backup-restore-settings.test.tsx +25 -0
  217. package/components/settings/backup-restore-settings.tsx +327 -0
  218. package/components/settings/calendar-feeds-settings.tsx +489 -0
  219. package/components/settings/calendar-general-settings.tsx +174 -0
  220. package/components/settings/confirm-danger-action.test.tsx +215 -0
  221. package/components/settings/confirm-danger-action.tsx +65 -0
  222. package/components/settings/security-settings.tsx +252 -0
  223. package/components/settings/settings-guidance.test.tsx +98 -0
  224. package/components/settings/team-settings.tsx +319 -0
  225. package/components/settings/two-factor-auth.tsx +296 -0
  226. package/components/settings/workspace-settings-client.tsx +363 -0
  227. package/components/settings/workspace-settings-form.tsx +73 -0
  228. package/components/sync/conflict-viewer.tsx +247 -0
  229. package/components/sync/sync-indicator.tsx +171 -0
  230. package/components/tasks/snippet-thread.tsx +119 -0
  231. package/components/tasks/status-dot.tsx +47 -0
  232. package/components/tasks/task-badge.tsx +43 -0
  233. package/components/tasks/task-detail.test.tsx +187 -0
  234. package/components/tasks/task-detail.tsx +458 -0
  235. package/components/tasks/task-list-filters.test.tsx +75 -0
  236. package/components/tasks/task-list-filters.tsx +163 -0
  237. package/components/tasks/task-list-types.ts +20 -0
  238. package/components/tasks/task-list.test.tsx +175 -0
  239. package/components/tasks/task-list.tsx +481 -0
  240. package/components/tasks/task-row.tsx +85 -0
  241. package/components/tasks/task-table-row.tsx +259 -0
  242. package/components/ui/skeleton.tsx +3 -0
  243. package/components/ui/toast.test.tsx +42 -0
  244. package/components/ui/toast.tsx +70 -0
  245. package/electron/main.ts +251 -0
  246. package/electron/preload.ts +56 -0
  247. package/instrumentation.tsx +23 -0
  248. package/lib/api-error.ts +50 -0
  249. package/lib/backup/backup-runner.test.ts +32 -0
  250. package/lib/backup/backup-runner.ts +19 -0
  251. package/lib/backup/backup-schedule.test.ts +23 -0
  252. package/lib/backup/backup-schedule.ts +55 -0
  253. package/lib/backup/backup-settings.test.ts +30 -0
  254. package/lib/backup/backup-settings.ts +27 -0
  255. package/lib/backup/export-notes-zip.test.ts +26 -0
  256. package/lib/backup/export-notes-zip.ts +82 -0
  257. package/lib/backup/export-workspace-backup.test.ts +17 -0
  258. package/lib/backup/export-workspace-backup.ts +77 -0
  259. package/lib/backup/restore-workspace-from-export.test.ts +18 -0
  260. package/lib/backup/restore-workspace-from-export.ts +183 -0
  261. package/lib/backup/types.ts +14 -0
  262. package/lib/brand-icons.ts +1 -0
  263. package/lib/calendar-feed-crypto.ts +38 -0
  264. package/lib/calendar-feed.ts +239 -0
  265. package/lib/client/online-status.ts +47 -0
  266. package/lib/conflict-resolver.test.ts +57 -0
  267. package/lib/conflict-resolver.ts +240 -0
  268. package/lib/db-init.ts +79 -0
  269. package/lib/email.ts +159 -0
  270. package/lib/encryption.test.ts +41 -0
  271. package/lib/encryption.ts +98 -0
  272. package/lib/extract-snippet.test.ts +123 -0
  273. package/lib/extract-snippet.ts +69 -0
  274. package/lib/kanban-status.ts +55 -0
  275. package/lib/license.ts +21 -0
  276. package/lib/limits.ts +31 -0
  277. package/lib/mcp-auth.test.ts +58 -0
  278. package/lib/mcp-auth.ts +65 -0
  279. package/lib/mcp-contract.test.ts +25 -0
  280. package/lib/mcp-contract.ts +210 -0
  281. package/lib/mcp-handler.ts +31 -0
  282. package/lib/mcp-url.test.ts +12 -0
  283. package/lib/mcp-url.ts +7 -0
  284. package/lib/mentions.test.ts +45 -0
  285. package/lib/mentions.ts +73 -0
  286. package/lib/note-crypto.ts +108 -0
  287. package/lib/note-sync.ts +201 -0
  288. package/lib/note-title.ts +93 -0
  289. package/lib/prisma.ts +193 -0
  290. package/lib/pro-flush.ts +292 -0
  291. package/lib/rate-limit.ts +57 -0
  292. package/lib/stripe.ts +38 -0
  293. package/lib/sync-worker.ts +388 -0
  294. package/lib/task-parser.test.ts +91 -0
  295. package/lib/task-parser.ts +81 -0
  296. package/lib/task-utils.ts +52 -0
  297. package/lib/use-is-electron.ts +19 -0
  298. package/lib/use-is-mobile.ts +22 -0
  299. package/lib/validation/calendar-feed.ts +31 -0
  300. package/lib/validation/note.ts +27 -0
  301. package/lib/validation/task.ts +26 -0
  302. package/lib/view-preferences.test.ts +54 -0
  303. package/lib/view-preferences.ts +28 -0
  304. package/lib/workspace.ts +66 -0
  305. package/next.config.ts +21 -0
  306. package/package.json +99 -0
  307. package/postcss.config.mjs +7 -0
  308. package/prisma/migrations/20260519021916_init/migration.sql +388 -0
  309. package/prisma/migrations/20260519061113_drop_sync_password/migration.sql +8 -0
  310. package/prisma/migrations/20260520065016_add_task_start_date/migration.sql +2 -0
  311. package/prisma/migrations/20260529010600_remove_encryption_fields/migration.sql +12 -0
  312. package/prisma/migrations/20260529020000_restore_encryption_salt/migration.sql +3 -0
  313. package/prisma/migrations/20260529030000_add_folders/migration.sql +17 -0
  314. package/prisma/migrations/20260605000000_deferred_fixes/migration.sql +31 -0
  315. package/prisma/migrations/20260605020806_add_pending_sync_to_note_and_task/migration.sql +5 -0
  316. package/prisma/migrations/20260605063634_add_stripe_webhook_event_sync_lock/migration.sql +14 -0
  317. package/prisma/migrations/20260605100000_add_prod_indexes/migration.sql +26 -0
  318. package/prisma/migrations/20260608081404_add_kanban_statuses/migration.sql +23 -0
  319. package/prisma/migrations/20260611032723_add_calendar_feeds/migration.sql +43 -0
  320. package/prisma/migrations/20260611040000_add_calendar_feed_color/migration.sql +2 -0
  321. package/prisma/migrations/20260611050000_add_task_priority/migration.sql +14 -0
  322. package/prisma/migrations/20260612060000_add_critical_priority/migration.sql +2 -0
  323. package/prisma/migrations/20260613090000_add_backup_settings/migration.sql +25 -0
  324. package/prisma/migrations/20260614160000_add_feedback/migration.sql +20 -0
  325. package/prisma/migrations/20260614210000_add_2fa/migration.sql +4 -0
  326. package/prisma/migrations/migration_lock.toml +3 -0
  327. package/prisma/schema.prisma +457 -0
  328. package/public/Logo_icon.svg +1 -0
  329. package/public/file.svg +1 -0
  330. package/public/globe.svg +1 -0
  331. package/public/icon-192.png +0 -0
  332. package/public/icon-512.png +0 -0
  333. package/public/icon.svg +4 -0
  334. package/public/icon_dark.svg +1 -0
  335. package/public/knotpad_icon.svg +1 -0
  336. package/public/knotpad_logo_full.svg +1 -0
  337. package/public/manifest.json +14 -0
  338. package/public/next.svg +1 -0
  339. package/public/sw.js +137 -0
  340. package/public/vercel.svg +1 -0
  341. package/public/window.svg +1 -0
  342. package/tsconfig.json +35 -0
@@ -0,0 +1,457 @@
1
+ generator client {
2
+ provider = "prisma-client-js"
3
+ output = "../app/generated/prisma"
4
+ }
5
+
6
+ datasource db {
7
+ provider = "postgresql"
8
+ }
9
+
10
+ enum Role {
11
+ OWNER
12
+ ADMIN
13
+ MEMBER
14
+ }
15
+
16
+ enum TaskStatus {
17
+ OPEN
18
+ CLAIMED
19
+ IN_PROGRESS
20
+ REVIEW
21
+ DONE
22
+ }
23
+
24
+ enum AssigneeType {
25
+ HUMAN
26
+ AGENT
27
+ }
28
+
29
+ enum Priority {
30
+ CRITICAL
31
+ HIGH
32
+ MEDIUM
33
+ LOW
34
+ }
35
+
36
+ enum WorkspaceType {
37
+ PERSONAL
38
+ TEAM
39
+ }
40
+
41
+ enum PlanType {
42
+ FREE
43
+ PERSONAL_PRO
44
+ TEAM_PRO
45
+ }
46
+
47
+ enum LicenseType {
48
+ STANDARD
49
+ COMPLIMENTARY
50
+ }
51
+
52
+ enum BackupCadence {
53
+ DAILY
54
+ WEEKLY
55
+ MONTHLY
56
+ }
57
+
58
+ model User {
59
+ id String @id @default(cuid())
60
+ email String? @unique
61
+ name String?
62
+ passwordHash String?
63
+ image String?
64
+ isPro Boolean @default(false)
65
+ role Role @default(MEMBER)
66
+ createdAt DateTime @default(now())
67
+ workspaces WorkspaceMember[]
68
+ mcpTokens McpToken[]
69
+ tasksAssigned Task[] @relation("AssignedTo")
70
+ auditLogs AuditLog[]
71
+ deviceSessions DeviceSession[]
72
+ accounts Account[]
73
+ sessions Session[]
74
+ invitesSent InviteToken[] @relation("InvitedBy")
75
+ notifications Notification[]
76
+ passwordResetTokens PasswordResetToken[]
77
+ calendarFeeds CalendarFeed[]
78
+ feedback Feedback[]
79
+ twoFactorSecret String?
80
+ twoFactorEnabled Boolean @default(false)
81
+ twoFactorVerified Boolean @default(false)
82
+ }
83
+
84
+ model Workspace {
85
+ id String @id @default(cuid())
86
+ name String
87
+ slug String @unique
88
+ type WorkspaceType @default(PERSONAL)
89
+ planType PlanType @default(FREE)
90
+ licenseType LicenseType @default(STANDARD)
91
+ isCloud Boolean @default(false) // derived: planType != FREE || licenseType == COMPLIMENTARY
92
+ isPro Boolean @default(false) // derived: planType != FREE || licenseType == COMPLIMENTARY
93
+ seatCount Int @default(1) // mirrors Stripe subscription quantity
94
+ stripeId String? // Stripe customer ID
95
+ stripeSubId String? // Stripe subscription ID
96
+ encryptionSalt String? // per-workspace salt for at-rest note encryption (non-sensitive)
97
+ createdAt DateTime @default(now())
98
+ members WorkspaceMember[]
99
+ notes Note[]
100
+ folders Folder[]
101
+ tasks Task[]
102
+ mcpTokens McpToken[]
103
+ syncState SyncState?
104
+ conflictLogs ConflictLog[]
105
+ tombstones Tombstone[]
106
+ invites InviteToken[]
107
+ kanbanStatuses KanbanStatus[]
108
+ backupSettings WorkspaceBackupSettings?
109
+ }
110
+
111
+ model WorkspaceBackupSettings {
112
+ id String @id @default(cuid())
113
+ workspaceId String @unique
114
+ scheduleEnabled Boolean @default(false)
115
+ scheduleCadence BackupCadence @default(WEEKLY)
116
+ destinationPath String?
117
+ includeMarkdownZip Boolean @default(false)
118
+ lastBackupAt DateTime?
119
+ lastBackupStatus String @default("idle")
120
+ lastBackupError String?
121
+ createdAt DateTime @default(now())
122
+ updatedAt DateTime @updatedAt
123
+ workspace Workspace @relation(fields: [workspaceId], references: [id], onDelete: Cascade)
124
+ }
125
+
126
+ model KanbanStatus {
127
+ id String @id @default(cuid())
128
+ workspaceId String
129
+ key String // e.g. OPEN, CLAIMED, IN_PROGRESS, REVIEW, DONE
130
+ label String
131
+ color String // Tailwind border class, e.g. border-zinc-700
132
+ order Int @default(0)
133
+ isVisible Boolean @default(true)
134
+ createdAt DateTime @default(now())
135
+ updatedAt DateTime @updatedAt
136
+ workspace Workspace @relation(fields: [workspaceId], references: [id], onDelete: Cascade)
137
+
138
+ @@unique([workspaceId, key])
139
+ @@index([workspaceId])
140
+ }
141
+
142
+ model WorkspaceMember {
143
+ id String @id @default(cuid())
144
+ userId String
145
+ workspaceId String
146
+ role Role @default(MEMBER)
147
+ mcpAlias String?
148
+ joinedAt DateTime @default(now())
149
+ revokedAt DateTime?
150
+ user User @relation(fields: [userId], references: [id], onDelete: Cascade)
151
+ workspace Workspace @relation(fields: [workspaceId], references: [id], onDelete: Cascade)
152
+
153
+ @@unique([userId, workspaceId])
154
+ @@index([userId])
155
+ @@index([workspaceId])
156
+ }
157
+
158
+ model Note {
159
+ id String @id @default(cuid())
160
+ title String
161
+ content String @db.Text
162
+ workspaceId String
163
+ folderId String?
164
+ isLocked Boolean @default(false)
165
+ cloudOnly Boolean @default(false)
166
+ pendingSync Boolean @default(false)
167
+ version Int @default(0)
168
+ deviceId String?
169
+ createdAt DateTime @default(now())
170
+ updatedAt DateTime @updatedAt
171
+ workspace Workspace @relation(fields: [workspaceId], references: [id], onDelete: Cascade)
172
+ folder Folder? @relation(fields: [folderId], references: [id], onDelete: SetNull)
173
+ tasks Task[]
174
+ references TaskReference[]
175
+
176
+ @@index([workspaceId])
177
+ @@index([workspaceId, updatedAt])
178
+ @@index([folderId])
179
+ }
180
+
181
+ model Folder {
182
+ id String @id @default(cuid())
183
+ name String
184
+ workspaceId String
185
+ createdAt DateTime @default(now())
186
+ workspace Workspace @relation(fields: [workspaceId], references: [id], onDelete: Cascade)
187
+ notes Note[]
188
+
189
+ @@index([workspaceId])
190
+ }
191
+
192
+ model Task {
193
+ id String @id @default(cuid())
194
+ title String
195
+ status TaskStatus @default(OPEN)
196
+ priority Priority @default(MEDIUM)
197
+ noteId String
198
+ workspaceId String
199
+ assigneeId String?
200
+ assigneeType AssigneeType @default(HUMAN)
201
+ claimedBy String?
202
+ claimedByAlias String?
203
+ claimedAt DateTime?
204
+ lastHeartbeat DateTime?
205
+ fileRefs String[]
206
+ startDate DateTime?
207
+ dueDate DateTime?
208
+ syncLocal Boolean @default(true) // false = cloud-only, won't be pulled to local
209
+ pendingSync Boolean @default(false)
210
+ version Int @default(0)
211
+ deviceId String?
212
+ createdAt DateTime @default(now())
213
+ updatedAt DateTime @updatedAt
214
+ note Note @relation(fields: [noteId], references: [id], onDelete: Cascade)
215
+ workspace Workspace @relation(fields: [workspaceId], references: [id], onDelete: Cascade)
216
+ assignee User? @relation("AssignedTo", fields: [assigneeId], references: [id])
217
+ auditLogs AuditLog[]
218
+ references TaskReference[]
219
+
220
+ @@index([workspaceId])
221
+ @@index([noteId])
222
+ @@index([workspaceId, status])
223
+ @@index([workspaceId, assigneeType, status])
224
+ @@index([workspaceId, priority])
225
+ @@index([claimedBy])
226
+ }
227
+
228
+ model TaskReference {
229
+ id String @id @default(cuid())
230
+ taskId String
231
+ noteId String
232
+ snippet String @db.Text
233
+ task Task @relation(fields: [taskId], references: [id], onDelete: Cascade)
234
+ note Note @relation(fields: [noteId], references: [id], onDelete: Cascade)
235
+
236
+ @@index([taskId])
237
+ @@index([noteId])
238
+ }
239
+
240
+ model McpToken {
241
+ id String @id @default(cuid())
242
+ token String @unique
243
+ userId String
244
+ workspaceId String
245
+ alias String?
246
+ lastUsed DateTime?
247
+ revokedAt DateTime?
248
+ createdAt DateTime @default(now())
249
+ user User @relation(fields: [userId], references: [id], onDelete: Cascade)
250
+ workspace Workspace @relation(fields: [workspaceId], references: [id], onDelete: Cascade)
251
+
252
+ @@index([userId])
253
+ @@index([workspaceId])
254
+ }
255
+
256
+ model DeviceSession {
257
+ id String @id @default(cuid())
258
+ userId String
259
+ deviceName String
260
+ deviceId String @unique
261
+ lastActive DateTime @default(now())
262
+ revokedAt DateTime?
263
+ createdAt DateTime @default(now())
264
+ user User @relation(fields: [userId], references: [id], onDelete: Cascade)
265
+ }
266
+
267
+ model AuditLog {
268
+ id String @id @default(cuid())
269
+ taskId String
270
+ userId String?
271
+ action String
272
+ detail String?
273
+ deviceId String?
274
+ createdAt DateTime @default(now())
275
+ task Task @relation(fields: [taskId], references: [id], onDelete: Cascade)
276
+ user User? @relation(fields: [userId], references: [id])
277
+
278
+ @@index([taskId])
279
+ }
280
+
281
+ model SyncState {
282
+ id String @id @default(cuid())
283
+ workspaceId String @unique
284
+ lastSyncedAt DateTime?
285
+ localVersion Int @default(0)
286
+ cloudVersion Int @default(0)
287
+ noteSnapshots String? @db.Text
288
+ snapshotVersion Int @default(0)
289
+ /// Distributed sync lock. Set to now() when a flush starts; cleared when done.
290
+ /// Any instance that finds a lock < 120s old will skip the flush to avoid races.
291
+ syncLockedAt DateTime?
292
+ workspace Workspace @relation(fields: [workspaceId], references: [id], onDelete: Cascade)
293
+ }
294
+
295
+ model ConflictLog {
296
+ id String @id @default(cuid())
297
+ workspaceId String
298
+ entityType String
299
+ entityId String
300
+ localValue String @db.Text
301
+ cloudValue String @db.Text
302
+ resolvedBy String?
303
+ resolvedAt DateTime?
304
+ createdAt DateTime @default(now())
305
+ workspace Workspace @relation(fields: [workspaceId], references: [id], onDelete: Cascade)
306
+
307
+ @@unique([workspaceId, entityType, entityId])
308
+ @@index([workspaceId, resolvedAt])
309
+ }
310
+
311
+ model Tombstone {
312
+ id String @id @default(cuid())
313
+ workspaceId String
314
+ entityType String
315
+ entityId String
316
+ deletedAt DateTime @default(now())
317
+ workspace Workspace @relation(fields: [workspaceId], references: [id], onDelete: Cascade)
318
+
319
+ @@index([workspaceId, entityType, entityId])
320
+ }
321
+
322
+ model Account {
323
+ id String @id @default(cuid())
324
+ userId String
325
+ type String
326
+ provider String
327
+ providerAccountId String
328
+ refresh_token String? @db.Text
329
+ access_token String? @db.Text
330
+ expires_at Int?
331
+ token_type String?
332
+ scope String?
333
+ id_token String? @db.Text
334
+ session_state String?
335
+ user User @relation(fields: [userId], references: [id], onDelete: Cascade)
336
+
337
+ @@unique([provider, providerAccountId])
338
+ }
339
+
340
+ model Session {
341
+ id String @id @default(cuid())
342
+ sessionToken String @unique
343
+ userId String
344
+ expires DateTime
345
+ user User @relation(fields: [userId], references: [id], onDelete: Cascade)
346
+ }
347
+
348
+ model VerificationToken {
349
+ identifier String
350
+ token String @unique
351
+ expires DateTime
352
+
353
+ @@unique([identifier, token])
354
+ }
355
+
356
+ model PasswordResetToken {
357
+ id String @id @default(cuid())
358
+ token String @unique @default(cuid())
359
+ userId String
360
+ expiresAt DateTime
361
+ usedAt DateTime?
362
+ createdAt DateTime @default(now())
363
+ user User @relation(fields: [userId], references: [id], onDelete: Cascade)
364
+ }
365
+
366
+ model InviteToken {
367
+ id String @id @default(cuid())
368
+ token String @unique @default(cuid())
369
+ email String
370
+ workspaceId String
371
+ role Role @default(MEMBER)
372
+ invitedById String
373
+ expiresAt DateTime
374
+ acceptedAt DateTime?
375
+ createdAt DateTime @default(now())
376
+ workspace Workspace @relation(fields: [workspaceId], references: [id], onDelete: Cascade)
377
+ invitedBy User @relation("InvitedBy", fields: [invitedById], references: [id])
378
+ }
379
+
380
+ model Notification {
381
+ id String @id @default(cuid())
382
+ userId String
383
+ type String
384
+ title String
385
+ body String?
386
+ read Boolean @default(false)
387
+ taskId String?
388
+ noteId String?
389
+ createdAt DateTime @default(now())
390
+ user User @relation(fields: [userId], references: [id], onDelete: Cascade)
391
+
392
+ @@index([userId])
393
+ @@index([userId, read])
394
+ }
395
+
396
+ /// A user's personal read-only calendar subscription (Google/Apple "secret
397
+ /// address in iCal format"). The URL is a credential — anyone with it can read
398
+ /// the calendar — so it's encrypted at rest with a per-row salt.
399
+ model CalendarFeed {
400
+ id String @id @default(cuid())
401
+ userId String
402
+ label String
403
+ encryptedUrl String @db.Text
404
+ urlSalt String
405
+ color String @default("sky")
406
+ enabled Boolean @default(true)
407
+ lastFetchedAt DateTime?
408
+ lastError String?
409
+ createdAt DateTime @default(now())
410
+ updatedAt DateTime @updatedAt
411
+ user User @relation(fields: [userId], references: [id], onDelete: Cascade)
412
+ events CalendarFeedEvent[]
413
+
414
+ @@index([userId])
415
+ }
416
+
417
+ /// Cached events parsed from a CalendarFeed's .ics source, including expanded
418
+ /// recurring-event occurrences within the sync window.
419
+ model CalendarFeedEvent {
420
+ id String @id @default(cuid())
421
+ feedId String
422
+ uid String
423
+ title String
424
+ start DateTime
425
+ end DateTime
426
+ allDay Boolean @default(false)
427
+ feed CalendarFeed @relation(fields: [feedId], references: [id], onDelete: Cascade)
428
+
429
+ @@unique([feedId, uid])
430
+ @@index([feedId, start])
431
+ }
432
+
433
+ /// Idempotency log for Stripe webhook events.
434
+ /// Stripe retries events on non-2xx responses for up to 3 days; storing the
435
+ /// event ID here ensures each event is processed exactly once.
436
+ model StripeWebhookEvent {
437
+ id String @id // Stripe event ID (evt_...)
438
+ type String // e.g. "checkout.session.completed"
439
+ processedAt DateTime @default(now())
440
+
441
+ @@index([processedAt])
442
+ }
443
+
444
+
445
+ /// User feedback and issue reports
446
+ model Feedback {
447
+ id String @id @default(cuid())
448
+ userId String
449
+ type String // "feedback", "bug", "feature_request"
450
+ subject String
451
+ message String @db.Text
452
+ createdAt DateTime @default(now())
453
+ user User @relation(fields: [userId], references: [id], onDelete: Cascade)
454
+
455
+ @@index([userId])
456
+ @@index([createdAt])
457
+ }
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="500" zoomAndPan="magnify" viewBox="0 0 375 374.999991" height="500" preserveAspectRatio="xMidYMid meet" version="1.0"><defs><filter x="0%" y="0%" width="100%" height="100%" id="75d4a94d5c"><feColorMatrix values="0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 1 0" color-interpolation-filters="sRGB"/></filter><filter x="0%" y="0%" width="100%" height="100%" id="1e26bff2d7"><feColorMatrix values="0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0.2126 0.7152 0.0722 0 0" color-interpolation-filters="sRGB"/></filter><mask id="6cd3f78027"><g filter="url(#75d4a94d5c)"><g filter="url(#1e26bff2d7)" transform="matrix(0.375, 0, 0, 0.375, 0.0000045, 0)"><image x="0" y="0" width="1000" xlink:href="data:image/png;base64,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" height="1000" preserveAspectRatio="xMidYMid meet"/></g></g></mask></defs><g mask="url(#6cd3f78027)"><g transform="matrix(0.375, 0, 0, 0.375, 0.0000045, 0)"><image x="0" y="0" width="1000" xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAA+gAAAPoCAIAAADCwUOzAAAABmJLR0QA/wD/AP+gvaeTAAAgAElEQVR4nOzdX29bV5bm4Xcf0mrUXAZwSCo137JgS3YECIhFykF9x7oojyjFg7qcQss6Z8+F6PypjhNbpnS4yee5MJRBo7HQGNs/by0uJQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPI0y9gAAwCH6v6/TJzWpYuSp1JKUpMvx+dij8CDd2AMAAIdoSCaq/WmVmnSpw9hz8FDTsQcAAA5RTe6SIiKf1nBn36JhXtwBgBHUsQc4XP5P3yzhDgAADRDuAADQAOEOAAANEO4AANAA4Q4AAA0Q7gAA0ADhDgAADRDuAADQAOEOAAANEO4AANAA4Q4AAA0Q7gAA0ADhDgAADRDuAADQAOEOAAANEO4AANAA4Q4AAA0Q7gAA0ADhDgAADRDuAADQAOEOAAANEO4AANAA4Q4AAA0Q7gAA0ADhDgAADRDuAADQAOEOAAANEO4AANAA4Q4AAA0Q7gAA0ADhDgAADRDuAADQAOEOAAANEO4AANAA4Q4AAA0Q7gAA0ADhDgAADRDuAADQAOEOAAANEO4AANAA4Q4AAA0Q7gAA0ADhDgAADRDuAADQAOEOAAANEO4AANAA4Q4AAA0Q7gAA0ADhDgAADRDuAADQAOEOAAANEO4AANAA4Q4AAA0Q7gAA0ADhDgAADRDuAADQAOEOAAANEO4AANAA4Q4AAA0Q7gAA0ADhDgAADRDuAADQAOEOAAANEO4AANAA4Q4AAA0Q7gAA0ADhDgAADRDuAADQAOEOAAANEO4AANAA4Q4AAA0Q7gAA0ADhDgAADRDuAADQAOEOAAANEO4AANAA4Q4AAA0Q7gAA0ADhDgAADRDuAADQAOEOAAANEO4AANAA4Q4AAA0Q7gAA0ADhDgAADRDuAADQAOEOAAANEO4AANAA4Q4AAA0Q7gAA0ADhDgAADRDuAADQAOEOAAANEO4AANAA4Q4AAA0Q7gAA0ADhDgAADRDuAADQAOEOAAANEO4AANAA4Q4AAA0Q7gAA0ADhDgAADRDuAADQAOEOAAANEO4AANAA4Q4AAA0Q7gAA0ADhDgAADRDuAADQAOEOAAANEO4AANAA4Q4AAA0Q7gAA0ADhDgAADRDuAADQAOEOAAANEO4AANAA4Q4AAA0Q7gAA0ADhDgAADRDuAADQAOEOAAANEO4AANAA4Q4AAA0Q7gAA0ADhDgAADRDuAADQAOEOAAANEO4AANAA4Q4AAA0Q7gAA0ADhDgAADRDuAADQAOEOAAANEO4AANAA4Q4AAA0Q7gAA0ADhDgAADRDuAADQAOEOAAANEO4AANAA4Q4AAA0Q7gAA0ADhDgAADRDuAADQAOEOAAANEO4AANAA4Q4AAA0Q7gAA0ADhDgAADRDuAADQAOEOAAANEO4AANAA4Q4AAA0Q7gAA0ADhDgAADRDuAADQAOEOAAANEO4AANAA4Q4AAA0Q7gAA0ADhDgAADRDuAADQAOEOAAANEO4AANAA4Q4AAA0Q7gAA0ADhDgAADRDuAADQAOEOAAANEO4AANAA4Q4AAA0Q7gAA0ADhDgAADRDuAADQAOEOAAANEO4AANAA4Q4AAA0Q7gAA0ADhDgAADRDuAADQAOEOAAANEO4AANAA4Q4AAA0Q7gAA0ADhDgAADRDuAADQAOEOAAANEO4AANAA4Q4AAA0Q7gAA0ADhDgAADRDuAADQAOEOAAANEO4AANAA4Q4AAA0Q7gAA0ADh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" height="1000" preserveAspectRatio="xMidYMid meet"/></g></g></svg>
@@ -0,0 +1 @@
1
+ <svg fill="none" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"><path d="M14.5 13.5V5.41a1 1 0 0 0-.3-.7L9.8.29A1 1 0 0 0 9.08 0H1.5v13.5A2.5 2.5 0 0 0 4 16h8a2.5 2.5 0 0 0 2.5-2.5m-1.5 0v-7H8v-5H3v12a1 1 0 0 0 1 1h8a1 1 0 0 0 1-1M9.5 5V2.12L12.38 5zM5.13 5h-.62v1.25h2.12V5zm-.62 3h7.12v1.25H4.5zm.62 3h-.62v1.25h7.12V11z" clip-rule="evenodd" fill="#666" fill-rule="evenodd"/></svg>
@@ -0,0 +1 @@
1
+ <svg fill="none" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16"><g clip-path="url(#a)"><path fill-rule="evenodd" clip-rule="evenodd" d="M10.27 14.1a6.5 6.5 0 0 0 3.67-3.45q-1.24.21-2.7.34-.31 1.83-.97 3.1M8 16A8 8 0 1 0 8 0a8 8 0 0 0 0 16m.48-1.52a7 7 0 0 1-.96 0H7.5a4 4 0 0 1-.84-1.32q-.38-.89-.63-2.08a40 40 0 0 0 3.92 0q-.25 1.2-.63 2.08a4 4 0 0 1-.84 1.31zm2.94-4.76q1.66-.15 2.95-.43a7 7 0 0 0 0-2.58q-1.3-.27-2.95-.43a18 18 0 0 1 0 3.44m-1.27-3.54a17 17 0 0 1 0 3.64 39 39 0 0 1-4.3 0 17 17 0 0 1 0-3.64 39 39 0 0 1 4.3 0m1.1-1.17q1.45.13 2.69.34a6.5 6.5 0 0 0-3.67-3.44q.65 1.26.98 3.1M8.48 1.5l.01.02q.41.37.84 1.31.38.89.63 2.08a40 40 0 0 0-3.92 0q.25-1.2.63-2.08a4 4 0 0 1 .85-1.32 7 7 0 0 1 .96 0m-2.75.4a6.5 6.5 0 0 0-3.67 3.44 29 29 0 0 1 2.7-.34q.31-1.83.97-3.1M4.58 6.28q-1.66.16-2.95.43a7 7 0 0 0 0 2.58q1.3.27 2.95.43a18 18 0 0 1 0-3.44m.17 4.71q-1.45-.12-2.69-.34a6.5 6.5 0 0 0 3.67 3.44q-.65-1.27-.98-3.1" fill="#666"/></g><defs><clipPath id="a"><path fill="#fff" d="M0 0h16v16H0z"/></clipPath></defs></svg>
Binary file
Binary file
@@ -0,0 +1,4 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 192 192" width="192" height="192">
2
+ <rect width="192" height="192" rx="40" fill="#09090b"/>
3
+ <text x="96" y="134" font-family="system-ui, -apple-system, sans-serif" font-weight="700" font-size="110" fill="#fafafa" text-anchor="middle">B</text>
4
+ </svg>