@knotpad/app 0.1.5 → 0.1.7
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.
- package/app/(app)/calendar/page.tsx +57 -0
- package/app/(app)/error.tsx +35 -0
- package/app/(app)/graph/page.tsx +32 -0
- package/app/(app)/guide/page.tsx +21 -0
- package/app/(app)/kanban/loading.tsx +24 -0
- package/app/(app)/kanban/page.tsx +59 -0
- package/app/(app)/layout.tsx +122 -0
- package/app/(app)/list/loading.tsx +21 -0
- package/app/(app)/list/page.tsx +137 -0
- package/app/(app)/loading.tsx +18 -0
- package/app/(app)/notes/[noteId]/page.tsx +84 -0
- package/app/(app)/notes/layout.tsx +30 -0
- package/app/(app)/notes/page.tsx +39 -0
- package/app/(app)/page.tsx +5 -0
- package/app/(app)/settings/agent-token/page.tsx +59 -0
- package/app/(app)/settings/backup/page.tsx +49 -0
- package/app/(app)/settings/billing/page.tsx +53 -0
- package/app/(app)/settings/calendar/page.tsx +41 -0
- package/app/(app)/settings/layout.test.tsx +39 -0
- package/app/(app)/settings/layout.tsx +71 -0
- package/app/(app)/settings/page.tsx +4 -0
- package/app/(app)/settings/security/page.tsx +43 -0
- package/app/(app)/settings/team/page.tsx +74 -0
- package/app/(app)/settings/workspace/page.tsx +27 -0
- package/app/(app)/tasks/[taskId]/page.tsx +79 -0
- package/app/(auth)/forgot-password/page.tsx +106 -0
- package/app/(auth)/guest/page.tsx +56 -0
- package/app/(auth)/layout.tsx +13 -0
- package/app/(auth)/login/page.tsx +14 -0
- package/app/(auth)/register/page.tsx +193 -0
- package/app/(auth)/reset-password/page.tsx +138 -0
- package/app/api/account/claim/route.tsx +135 -0
- package/app/api/admin/backfill-encryption/route.tsx +43 -0
- package/app/api/admin/license/route.tsx +42 -0
- package/app/api/auth/2fa/route.tsx +148 -0
- package/app/api/auth/[...nextauth]/route.tsx +3 -0
- package/app/api/auth/change-password/route.tsx +61 -0
- package/app/api/auth/check-2fa/route.tsx +19 -0
- package/app/api/auth/forgot-password/route.tsx +65 -0
- package/app/api/auth/reset-password/route.tsx +52 -0
- package/app/api/auth/verify-2fa/route.tsx +88 -0
- package/app/api/backup/download/db/route.ts +29 -0
- package/app/api/backup/download/notes/route.ts +25 -0
- package/app/api/backup/settings/route.ts +92 -0
- package/app/api/billing/checkout/route.tsx +81 -0
- package/app/api/billing/migrate/route.tsx +163 -0
- package/app/api/billing/portal/route.tsx +24 -0
- package/app/api/billing/setup-intent/route.tsx +55 -0
- package/app/api/billing/status/route.tsx +36 -0
- package/app/api/billing/subscribe/route.tsx +85 -0
- package/app/api/billing/webhook/route.tsx +199 -0
- package/app/api/calendar-feeds/[feedId]/route.tsx +67 -0
- package/app/api/calendar-feeds/[feedId]/sync/route.tsx +37 -0
- package/app/api/calendar-feeds/events/route.tsx +82 -0
- package/app/api/calendar-feeds/route.tsx +52 -0
- package/app/api/calendar-feeds/sync-all/route.tsx +34 -0
- package/app/api/cron/calendar-feeds/route.tsx +31 -0
- package/app/api/cron/stale-tasks/route.tsx +51 -0
- package/app/api/cron/sync/route.tsx +34 -0
- package/app/api/devices/[deviceId]/route.tsx +25 -0
- package/app/api/devices/route.tsx +41 -0
- package/app/api/export/route.tsx +40 -0
- package/app/api/feedback/route.tsx +54 -0
- package/app/api/folders/[folderId]/route.tsx +51 -0
- package/app/api/folders/route.tsx +37 -0
- package/app/api/graph/route.tsx +242 -0
- package/app/api/guest/route.tsx +58 -0
- package/app/api/health/route.tsx +10 -0
- package/app/api/holidays/countries/route.tsx +14 -0
- package/app/api/holidays/route.tsx +49 -0
- package/app/api/holidays/states/route.tsx +21 -0
- package/app/api/invites/[token]/route.tsx +131 -0
- package/app/api/invites/route.tsx +74 -0
- package/app/api/mcp/generate-token/route.tsx +55 -0
- package/app/api/mcp/revoke-token/[tokenId]/route.tsx +30 -0
- package/app/api/mcp/update-alias/[tokenId]/route.tsx +22 -0
- package/app/api/notes/[noteId]/export/route.tsx +45 -0
- package/app/api/notes/[noteId]/route.tsx +360 -0
- package/app/api/notes/route.tsx +112 -0
- package/app/api/notifications/route.tsx +44 -0
- package/app/api/register/route.tsx +67 -0
- package/app/api/restore/route.tsx +148 -0
- package/app/api/sync/conflicts/[conflictId]/route.tsx +134 -0
- package/app/api/sync/conflicts/route.tsx +48 -0
- package/app/api/sync/status/route.tsx +49 -0
- package/app/api/sync/trigger/route.tsx +15 -0
- package/app/api/tasks/[taskId]/detail/route.tsx +68 -0
- package/app/api/tasks/[taskId]/route.tsx +259 -0
- package/app/api/tasks/bulk/route.tsx +133 -0
- package/app/api/tasks/route.tsx +36 -0
- package/app/api/workspace/active/route.tsx +39 -0
- package/app/api/workspace/create-team/route.tsx +42 -0
- package/app/api/workspace/kanban-statuses/route.tsx +71 -0
- package/app/api/workspace/members/[memberId]/route.tsx +69 -0
- package/app/api/workspace/route.tsx +24 -0
- package/app/download/page.tsx +170 -0
- package/app/favicon.ico +0 -0
- package/app/generated/prisma/client.d.ts +1 -0
- package/app/generated/prisma/client.js +5 -0
- package/app/generated/prisma/default.d.ts +1 -0
- package/app/generated/prisma/default.js +5 -0
- package/app/generated/prisma/edge.d.ts +1 -0
- package/app/generated/prisma/edge.js +497 -0
- package/app/generated/prisma/index-browser.js +523 -0
- package/app/generated/prisma/index.d.ts +46376 -0
- package/app/generated/prisma/index.js +497 -0
- package/app/generated/prisma/package.json +144 -0
- package/app/generated/prisma/query_compiler_fast_bg.js +2 -0
- package/app/generated/prisma/query_compiler_fast_bg.wasm +0 -0
- package/app/generated/prisma/query_compiler_fast_bg.wasm-base64.js +2 -0
- package/app/generated/prisma/runtime/client.d.ts +3386 -0
- package/app/generated/prisma/runtime/client.js +86 -0
- package/app/generated/prisma/runtime/index-browser.d.ts +90 -0
- package/app/generated/prisma/runtime/index-browser.js +6 -0
- package/app/generated/prisma/runtime/wasm-compiler-edge.js +76 -0
- package/app/generated/prisma/schema.prisma +456 -0
- package/app/generated/prisma/wasm-edge-light-loader.mjs +5 -0
- package/app/generated/prisma/wasm-worker-loader.mjs +5 -0
- package/app/globals.css +54 -0
- package/app/invite/[token]/page.tsx +52 -0
- package/app/layout.tsx +90 -0
- package/app/mcp/route.tsx +430 -0
- package/app/opengraph-image.tsx +120 -0
- package/app/page.tsx +398 -0
- package/app/privacy/page.tsx +69 -0
- package/app/robots.tsx +25 -0
- package/app/sitemap.tsx +36 -0
- package/app/terms/page.tsx +69 -0
- package/app/upgrade/page.tsx +75 -0
- package/auth.config.ts +33 -0
- package/auth.ts +79 -0
- package/bin/brief.js +229 -0
- package/components/auth/login-form.tsx +302 -0
- package/components/auth/password-checklist.tsx +31 -0
- package/components/auth/password-input.tsx +36 -0
- package/components/auth/switch-account-button.test.tsx +22 -0
- package/components/auth/switch-account-button.tsx +19 -0
- package/components/auth/two-factor-input.tsx +116 -0
- package/components/billing/billing-dashboard.tsx +265 -0
- package/components/billing/card-form.tsx +210 -0
- package/components/billing/claim-account-form.tsx +99 -0
- package/components/branding/app-logo.test.tsx +20 -0
- package/components/branding/app-logo.tsx +25 -0
- package/components/calendar/calendar-agenda.tsx +150 -0
- package/components/calendar/calendar-drag.test.tsx +177 -0
- package/components/calendar/calendar-grid.tsx +357 -0
- package/components/calendar/calendar-hooks.test.tsx +27 -0
- package/components/calendar/calendar-hooks.ts +351 -0
- package/components/calendar/calendar-toolbar.test.tsx +68 -0
- package/components/calendar/calendar-toolbar.tsx +291 -0
- package/components/calendar/calendar-types.ts +148 -0
- package/components/calendar/calendar-view.test.tsx +295 -0
- package/components/calendar/calendar-view.tsx +307 -0
- package/components/calendar/day-detail-popover.tsx +174 -0
- package/components/calendar/task-chip.tsx +86 -0
- package/components/command/command-palette.test.tsx +33 -0
- package/components/command/command-palette.tsx +310 -0
- package/components/download-cta.tsx +87 -0
- package/components/feedback/feedback-popup.tsx +207 -0
- package/components/graph/graph-draw.ts +337 -0
- package/components/graph/graph-overlays.tsx +160 -0
- package/components/graph/graph-page.test.tsx +131 -0
- package/components/graph/graph-page.tsx +263 -0
- package/components/graph/graph-types.ts +47 -0
- package/components/graph/graph-view.tsx +322 -0
- package/components/guide/guide-view.tsx +522 -0
- package/components/kanban/kanban-board.test.tsx +128 -0
- package/components/kanban/kanban-board.tsx +361 -0
- package/components/kanban/kanban-card-menu.tsx +102 -0
- package/components/kanban/kanban-card.tsx +227 -0
- package/components/kanban/kanban-column.tsx +49 -0
- package/components/kanban/kanban-status-context.tsx +28 -0
- package/components/landing/calendar-sandbox.test.tsx +15 -0
- package/components/landing/calendar-sandbox.tsx +107 -0
- package/components/landing/graph-sandbox.test.tsx +27 -0
- package/components/landing/graph-sandbox.tsx +80 -0
- package/components/landing/kanban-sandbox.test.tsx +24 -0
- package/components/landing/kanban-sandbox.tsx +101 -0
- package/components/landing/landing-showcase.test.tsx +21 -0
- package/components/landing/landing-showcase.tsx +54 -0
- package/components/landing/list-sandbox.tsx +86 -0
- package/components/landing/mock-workspace.ts +168 -0
- package/components/landing/notes-sandbox.test.tsx +14 -0
- package/components/landing/notes-sandbox.tsx +88 -0
- package/components/layout/app-shell.tsx +83 -0
- package/components/layout/backup-scheduler.tsx +122 -0
- package/components/layout/bottom-nav.tsx +43 -0
- package/components/layout/icon-bar.test.tsx +29 -0
- package/components/layout/icon-bar.tsx +118 -0
- package/components/layout/mobile-top-bar.tsx +68 -0
- package/components/layout/notes-panel-folder.tsx +127 -0
- package/components/layout/notes-panel-note-item.tsx +140 -0
- package/components/layout/notes-panel-task-tab.tsx +63 -0
- package/components/layout/notes-panel-types.ts +44 -0
- package/components/layout/notes-panel.tsx +476 -0
- package/components/layout/notification-bell.tsx +251 -0
- package/components/layout/paywall-screen.tsx +41 -0
- package/components/layout/pro-banner.tsx +76 -0
- package/components/layout/sw-register.tsx +27 -0
- package/components/layout/workspace-switcher.tsx +90 -0
- package/components/notes/mobile-bottom-sheet.tsx +99 -0
- package/components/notes/note-editor-context-menu.tsx +47 -0
- package/components/notes/note-editor-dom.ts +33 -0
- package/components/notes/note-editor-dropdowns.tsx +484 -0
- package/components/notes/note-editor-hooks.ts +692 -0
- package/components/notes/note-editor-keyboard.ts +305 -0
- package/components/notes/note-editor-overlay.tsx +90 -0
- package/components/notes/note-editor.test.tsx +372 -0
- package/components/notes/note-editor.tsx +662 -0
- package/components/notes/note-preview-pane.tsx +156 -0
- package/components/notes/note-tabs.tsx +120 -0
- package/components/notes/note-types.tsx +157 -0
- package/components/settings/accept-invite.tsx +108 -0
- package/components/settings/agent-token-settings.tsx +369 -0
- package/components/settings/backup-restore-settings.test.tsx +25 -0
- package/components/settings/backup-restore-settings.tsx +327 -0
- package/components/settings/calendar-feeds-settings.tsx +489 -0
- package/components/settings/calendar-general-settings.tsx +174 -0
- package/components/settings/confirm-danger-action.test.tsx +215 -0
- package/components/settings/confirm-danger-action.tsx +65 -0
- package/components/settings/security-settings.tsx +252 -0
- package/components/settings/settings-guidance.test.tsx +98 -0
- package/components/settings/team-settings.tsx +319 -0
- package/components/settings/two-factor-auth.tsx +296 -0
- package/components/settings/workspace-settings-client.tsx +363 -0
- package/components/settings/workspace-settings-form.tsx +73 -0
- package/components/sync/conflict-viewer.tsx +247 -0
- package/components/sync/sync-indicator.tsx +171 -0
- package/components/tasks/snippet-thread.tsx +119 -0
- package/components/tasks/status-dot.tsx +47 -0
- package/components/tasks/task-badge.tsx +43 -0
- package/components/tasks/task-detail.test.tsx +187 -0
- package/components/tasks/task-detail.tsx +458 -0
- package/components/tasks/task-list-filters.test.tsx +75 -0
- package/components/tasks/task-list-filters.tsx +163 -0
- package/components/tasks/task-list-types.ts +20 -0
- package/components/tasks/task-list.test.tsx +175 -0
- package/components/tasks/task-list.tsx +481 -0
- package/components/tasks/task-row.tsx +85 -0
- package/components/tasks/task-table-row.tsx +259 -0
- package/components/ui/skeleton.tsx +3 -0
- package/components/ui/toast.test.tsx +42 -0
- package/components/ui/toast.tsx +70 -0
- package/instrumentation.tsx +23 -0
- package/lib/api-error.ts +50 -0
- package/lib/backup/backup-runner.test.ts +32 -0
- package/lib/backup/backup-runner.ts +19 -0
- package/lib/backup/backup-schedule.test.ts +23 -0
- package/lib/backup/backup-schedule.ts +55 -0
- package/lib/backup/backup-settings.test.ts +30 -0
- package/lib/backup/backup-settings.ts +27 -0
- package/lib/backup/export-notes-zip.test.ts +26 -0
- package/lib/backup/export-notes-zip.ts +82 -0
- package/lib/backup/export-workspace-backup.test.ts +17 -0
- package/lib/backup/export-workspace-backup.ts +77 -0
- package/lib/backup/restore-workspace-from-export.test.ts +18 -0
- package/lib/backup/restore-workspace-from-export.ts +183 -0
- package/lib/backup/types.ts +14 -0
- package/lib/brand-icons.ts +1 -0
- package/lib/calendar-feed-crypto.ts +38 -0
- package/lib/calendar-feed.ts +239 -0
- package/lib/client/online-status.ts +47 -0
- package/lib/conflict-resolver.test.ts +57 -0
- package/lib/conflict-resolver.ts +240 -0
- package/lib/db-init.ts +79 -0
- package/lib/email.ts +159 -0
- package/lib/encryption.test.ts +41 -0
- package/lib/encryption.ts +98 -0
- package/lib/extract-snippet.test.ts +123 -0
- package/lib/extract-snippet.ts +69 -0
- package/lib/kanban-status.ts +55 -0
- package/lib/license.ts +21 -0
- package/lib/limits.ts +31 -0
- package/lib/mcp-auth.test.ts +58 -0
- package/lib/mcp-auth.ts +65 -0
- package/lib/mcp-contract.test.ts +25 -0
- package/lib/mcp-contract.ts +210 -0
- package/lib/mcp-handler.ts +31 -0
- package/lib/mcp-url.test.ts +12 -0
- package/lib/mcp-url.ts +7 -0
- package/lib/mentions.test.ts +45 -0
- package/lib/mentions.ts +73 -0
- package/lib/note-crypto.ts +108 -0
- package/lib/note-sync.ts +201 -0
- package/lib/note-title.ts +93 -0
- package/lib/prisma.ts +193 -0
- package/lib/pro-flush.ts +292 -0
- package/lib/rate-limit.ts +57 -0
- package/lib/stripe.ts +38 -0
- package/lib/sync-worker.ts +388 -0
- package/lib/task-parser.test.ts +91 -0
- package/lib/task-parser.ts +81 -0
- package/lib/task-utils.ts +52 -0
- package/lib/use-is-electron.ts +19 -0
- package/lib/use-is-mobile.ts +22 -0
- package/lib/validation/calendar-feed.ts +31 -0
- package/lib/validation/note.ts +27 -0
- package/lib/validation/task.ts +26 -0
- package/lib/view-preferences.test.ts +54 -0
- package/lib/view-preferences.ts +28 -0
- package/lib/workspace.ts +66 -0
- package/next.config.ts +21 -0
- package/package.json +54 -3
- package/postcss.config.mjs +7 -0
- package/prisma/migrations/20260519021916_init/migration.sql +388 -0
- package/prisma/migrations/20260519061113_drop_sync_password/migration.sql +8 -0
- package/prisma/migrations/20260520065016_add_task_start_date/migration.sql +2 -0
- package/prisma/migrations/20260529010600_remove_encryption_fields/migration.sql +12 -0
- package/prisma/migrations/20260529020000_restore_encryption_salt/migration.sql +3 -0
- package/prisma/migrations/20260529030000_add_folders/migration.sql +17 -0
- package/prisma/migrations/20260605000000_deferred_fixes/migration.sql +31 -0
- package/prisma/migrations/20260605020806_add_pending_sync_to_note_and_task/migration.sql +5 -0
- package/prisma/migrations/20260605063634_add_stripe_webhook_event_sync_lock/migration.sql +14 -0
- package/prisma/migrations/20260605100000_add_prod_indexes/migration.sql +26 -0
- package/prisma/migrations/20260608081404_add_kanban_statuses/migration.sql +23 -0
- package/prisma/migrations/20260611032723_add_calendar_feeds/migration.sql +43 -0
- package/prisma/migrations/20260611040000_add_calendar_feed_color/migration.sql +2 -0
- package/prisma/migrations/20260611050000_add_task_priority/migration.sql +14 -0
- package/prisma/migrations/20260612060000_add_critical_priority/migration.sql +2 -0
- package/prisma/migrations/20260613090000_add_backup_settings/migration.sql +25 -0
- package/prisma/migrations/20260614160000_add_feedback/migration.sql +20 -0
- package/prisma/migrations/20260614210000_add_2fa/migration.sql +4 -0
- package/prisma/migrations/migration_lock.toml +3 -0
- package/prisma/schema.prisma +457 -0
- package/public/Logo_icon.svg +1 -0
- package/public/file.svg +1 -0
- package/public/globe.svg +1 -0
- package/public/icon_dark.svg +1 -0
- package/public/knotpad_icon.svg +1 -0
- package/public/knotpad_logo_full.svg +1 -0
- package/public/manifest.json +14 -0
- package/public/next.svg +1 -0
- package/public/sw.js +137 -0
- package/public/vercel.svg +1 -0
- package/public/window.svg +1 -0
- package/tsconfig.json +35 -0
- package/brief.js +0 -311
|
@@ -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" height="500" viewBox="0 0 375 375"><defs><filter id="a" width="100%" height="100%" x="0%" y="0%"><feColorMatrix color-interpolation-filters="sRGB" values="0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0 0 0 1 0"/></filter><filter id="b" width="100%" height="100%" x="0%" y="0%"><feColorMatrix color-interpolation-filters="sRGB" values="0 0 0 0 1 0 0 0 0 1 0 0 0 0 1 0.2126 0.7152 0.0722 0 0"/></filter><mask id="c"><g filter="url(#a)"><g filter="url(#b)" transform="scale(.375)"><image xlink:href="data:image/png;base64,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" width="1000" height="1000"/></g></g></mask></defs><g mask="url(#c)"><image xlink:href="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAA+gAAAPoCAIAAADCwUOzAAAABmJLR0QA/wD/AP+gvaeTAAAgAElEQVR4nOzdX29bV5bm4Xcf0mrUXAZwSCo137JgS3YECIhFykF9x7oojyjFg7qcQss6Z8+F6PypjhNbpnS4yee5MJRBo7HQGNs/by0uJQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAPI0y9gAAwCH6v6/TJzWpYuSp1JKUpMvx+dij8CDd2AMAAIdoSCaq/WmVmnSpw9hz8FDTsQcAAA5RTe6SIiKf1nBn36JhXtwBgBHUsQc4XP5P3yzhDgAADRDuAADQAOEOAAANEO4AANAA4Q4AAA0Q7gAA0ADhDgAADRDuAADQAOEOAAANEO4AANAA4Q4AAA0Q7gAA0ADhDgAADRDuAADQAOEOAAANEO4AANAA4Q4AAA0Q7gAA0ADhDgAADRDuAADQAOEOAAANEO4AANAA4Q4AAA0Q7gAA0ADhDgAADRDuAADQAOEOAAANEO4AANAA4Q4AAA0Q7gAA0ADhDgAADRDuAADQAOEOAAANEO4AANAA4Q4AAA0Q7gAA0ADhDgAADRDuAADQAOEOAAANEO4AANAA4Q4AAA0Q7gAA0ADhDgAADRDuAADQAOEOAAANEO4AANAA4Q4AAA0Q7gAA0ADhDgAADRDuAADQAOEOAAANEO4AANAA4Q4AAA0Q7gAA0ADhDgAADRDuAADQAOEOAAANEO4AANAA4Q4AAA0Q7gAA0ADhDgAADRDuAADQAOEOAAANEO4AANAA4Q4AAA0Q7gAA0ADhDgAADRDuAADQAOEOAAANEO4AANAA4Q4AAA0Q7gAA0ADhDgAADRDuAADQAOEOAAANEO4AANAA4Q4AAA0Q7gAA0ADhDgAADRDuAADQAOEOAAANEO4AANAA4Q4AAA0Q7gAA0ADhDgAADRDuAADQAOEOAAANEO4AANAA4Q4AAA0Q7gAA0ADhDgAADRDuAADQAOEOAAANEO4AANAA4Q4AAA0Q7gAA0ADhDgAADRDuAADQAOEOAAANEO4AANAA4Q4AAA0Q7gAA0ADhDgAADRDuAADQAOEOAAANEO4AANAA4Q4AAA0Q7gAA0ADhDgAADRDuAADQAOEOAAANEO4AANAA4Q4AAA0Q7gAA0ADhDgAADRDuAADQAOEOAAANEO4AANAA4Q4AAA0Q7gAA0ADhDgAADRDuAADQAOEOAAANEO4AANAA4Q4AAA0Q7gAA0ADhDgAADRDuAADQAOEOAAANEO4AANAA4Q4AAA0Q7gAA0ADhDgAADRDuAADQAOEOAAANEO4AANAA4Q4AAA0Q7gAA0ADhDgAADRDuAADQAOEOAAANEO4AANAA4Q4AAA0Q7gAA0ADhDgAADRDuAADQAOEOAAANEO4AANAA4Q4AAA0Q7gAA0ADhDgAADRDuAADQAOEOAAANEO4AANAA4Q4AAA0Q7gAA0ADhDgAADRDuAADQAOEOAAANEO4AANAA4Q4AAA0Q7gAA0ADhDgAADRDuAADQAOEOAAANEO4AANAA4Q4AAA0Q7gAA0ADhDgAADRDuAADQAOEOAAANEO4AANAA4Q4AAA0Q7gAA0ADhDgAADRDuAADQAOEOAAANEO4AANAA4Q4AAA0Q7gAA0ADhDgAADRDuAADQAOEOAAANEO4AANAA4Q4AAA0Q7gAA0ADhDgAADRDuAADQAOEOAAANEO4AANAA4Q4AAA0Q7gAA0ADhDgAADRDuAADQAOEOAAANEO4AANAA4Q4AAA0Q7gAA0ADh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" width="1000" height="1000" transform="scale(.375)"/></g></svg>
|
package/public/file.svg
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 16 16"><path fill="#666" fill-rule="evenodd" 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"/></svg>
|
package/public/globe.svg
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 16 16"><g clip-path="url(#a)"><path fill="#666" fill-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" clip-rule="evenodd"/></g><defs><clipPath id="a"><path fill="#fff" d="M0 0h16v16H0z"/></clipPath></defs></svg>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="512" height="512" viewBox="0 0 384 384"><defs><clipPath id="a"><path d="M61.785 62.477h237.746v271.5H61.785Zm0 0"/></clipPath><clipPath id="b"><path d="M61.785 198.066 299.621 62.16v271.817Zm0 0"/></clipPath><clipPath id="c"><path d="M229.426 21.75h116.176v116.172H229.426Zm0 0"/></clipPath><clipPath id="d"><path d="M229.426 79.836c0 32.082 26.008 58.086 58.086 58.086 32.082 0 58.09-26.004 58.09-58.086s-26.008-58.086-58.09-58.086c-32.078 0-58.086 26.004-58.086 58.086m0 0"/></clipPath><clipPath id="f"><path d="M.426.75h116.176v116.172H.426Zm0 0"/></clipPath><clipPath id="g"><path d="M.426 58.836c0 32.082 26.008 58.086 58.086 58.086 32.082 0 58.09-26.004 58.09-58.086S90.594.75 58.512.75C26.434.75.426 26.754.426 58.836m0 0"/></clipPath><clipPath id="e"><path d="M0 0h117v117H0z"/></clipPath><clipPath id="h"><path d="M229.426 246.066h116.176v116.172H229.426Zm0 0"/></clipPath><clipPath id="i"><path d="M229.426 304.152c0 32.082 26.008 58.086 58.086 58.086 32.082 0 58.09-26.004 58.09-58.086s-26.008-58.086-58.09-58.086c-32.078 0-58.086 26.004-58.086 58.086m0 0"/></clipPath><clipPath id="k"><path d="M.426.066h116.176v116.172H.426Zm0 0"/></clipPath><clipPath id="l"><path d="M.426 58.152c0 32.082 26.008 58.086 58.086 58.086 32.082 0 58.09-26.004 58.09-58.086S90.594.066 58.512.066C26.434.066.426 26.07.426 58.152m0 0"/></clipPath><clipPath id="j"><path d="M0 0h117v117H0z"/></clipPath><clipPath id="m"><path d="M242.86 259.504h89.308v89.308h-89.309Zm0 0"/></clipPath><clipPath id="n"><path d="M242.86 304.156c0 24.664 19.992 44.656 44.652 44.656 24.664 0 44.656-19.992 44.656-44.656 0-24.66-19.992-44.652-44.656-44.652-24.66 0-44.653 19.992-44.653 44.652m0 0"/></clipPath><clipPath id="p"><path d="M.86.504h89.308v89.309H.859Zm0 0"/></clipPath><clipPath id="q"><path d="M.86 45.156c0 24.664 19.992 44.657 44.652 44.657 24.664 0 44.656-19.993 44.656-44.657 0-24.66-19.992-44.652-44.656-44.652C20.852.504.859 20.496.859 45.156m0 0"/></clipPath><clipPath id="o"><path d="M0 0h91v90H0z"/></clipPath><clipPath id="r"><path d="M242.86 35.188h89.308v89.308h-89.309Zm0 0"/></clipPath><clipPath id="s"><path d="M242.86 79.84c0 24.664 19.992 44.656 44.652 44.656 24.664 0 44.656-19.992 44.656-44.656 0-24.66-19.992-44.652-44.656-44.652-24.66 0-44.653 19.992-44.653 44.652m0 0"/></clipPath><clipPath id="u"><path d="M.86.188h89.308v89.308H.859Zm0 0"/></clipPath><clipPath id="v"><path d="M.86 44.84c0 24.664 19.992 44.656 44.652 44.656 24.664 0 44.656-19.992 44.656-44.656C90.168 20.18 70.176.188 45.512.188 20.852.188.859 20.18.859 44.84m0 0"/></clipPath><clipPath id="t"><path d="M0 0h91v90H0z"/></clipPath><clipPath id="w"><path d="M32.074 139.977H148.25v116.171H32.074Zm0 0"/></clipPath><clipPath id="x"><path d="M32.074 198.063c0 32.082 26.008 58.085 58.086 58.085 32.082 0 58.09-26.003 58.09-58.086 0-32.078-26.008-58.085-58.09-58.085-32.078 0-58.086 26.007-58.086 58.085m0 0"/></clipPath><clipPath id="z"><path d="M.074.977H116.25v116.171H.074Zm0 0"/></clipPath><clipPath id="A"><path d="M.074 59.063c0 32.082 26.008 58.085 58.086 58.085 32.082 0 58.09-26.003 58.09-58.085C116.25 26.984 90.242.977 58.16.977 26.082.977.074 26.984.074 59.063m0 0"/></clipPath><clipPath id="y"><path d="M0 0h117v118H0z"/></clipPath><clipPath id="B"><path d="M45.508 153.414h89.308v89.309H45.508Zm0 0"/></clipPath><clipPath id="C"><path d="M45.508 198.07c0 24.66 19.992 44.653 44.652 44.653 24.664 0 44.656-19.993 44.656-44.653 0-24.664-19.992-44.656-44.656-44.656-24.66 0-44.652 19.992-44.652 44.656m0 0"/></clipPath><clipPath id="E"><path d="M.508.414h89.308v89.309H.508Zm0 0"/></clipPath><clipPath id="F"><path d="M.508 45.07c0 24.66 19.992 44.653 44.652 44.653 24.664 0 44.656-19.993 44.656-44.653C89.816 20.406 69.824.414 45.16.414 20.5.414.508 20.406.508 45.07m0 0"/></clipPath><clipPath id="D"><path d="M0 0h90v90H0z"/></clipPath></defs><g clip-path="url(#a)"><g clip-path="url(#b)"><path fill="none" stroke="#fff" stroke-width="22.5" d="M61.785 198.066 299.621 62.16v271.817Zm0 0"/></g></g><path fill="none" stroke="#ffbd59" stroke-width="11.25" d="M87.54 190.113 287.511 75.707"/><g clip-path="url(#c)"><g clip-path="url(#d)"><g clip-path="url(#e)" transform="translate(229 21)"><g clip-path="url(#f)"><g clip-path="url(#g)"><path d="M.426 116.922V.75h116.176v116.172Zm0 0"/></g></g></g></g></g><g clip-path="url(#h)"><g clip-path="url(#i)"><g clip-path="url(#j)" transform="translate(229 246)"><g clip-path="url(#k)"><g clip-path="url(#l)"><path d="M.426 116.238V.066h116.176v116.172Zm0 0"/></g></g></g></g></g><g clip-path="url(#m)"><g clip-path="url(#n)"><g clip-path="url(#o)" transform="translate(242 259)"><g clip-path="url(#p)"><g clip-path="url(#q)"><path fill="#d9d9d9" d="M.86 89.813V.502h89.308v89.31Zm0 0"/></g></g></g></g></g><g clip-path="url(#r)"><g clip-path="url(#s)"><g clip-path="url(#t)" transform="translate(242 35)"><g clip-path="url(#u)"><g clip-path="url(#v)"><path fill="#d9d9d9" d="M.86 89.496V.188h89.308v89.308Zm0 0"/></g></g></g></g></g><g clip-path="url(#w)"><g clip-path="url(#x)"><g clip-path="url(#y)" transform="translate(32 139)"><g clip-path="url(#z)"><g clip-path="url(#A)"><path d="M.074 117.148V.977H116.25v116.171Zm0 0"/></g></g></g></g></g><g clip-path="url(#B)"><g clip-path="url(#C)"><g clip-path="url(#D)" transform="translate(45 153)"><g clip-path="url(#E)"><g clip-path="url(#F)"><path fill="#ffa51f" d="M.508 89.723V.414h89.308v89.309Zm0 0"/></g></g></g></g></g></svg>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="512" height="512" viewBox="0 0 384 384"><defs><clipPath id="a"><path d="M61.785 62.477h237.746v271.5H61.785Zm0 0"/></clipPath><clipPath id="b"><path d="M61.785 198.066 299.621 62.16v271.817Zm0 0"/></clipPath><clipPath id="c"><path d="M229.426 21.75h116.176v116.172H229.426Zm0 0"/></clipPath><clipPath id="d"><path d="M229.426 79.836c0 32.082 26.008 58.086 58.086 58.086 32.082 0 58.09-26.004 58.09-58.086s-26.008-58.086-58.09-58.086c-32.078 0-58.086 26.004-58.086 58.086m0 0"/></clipPath><clipPath id="f"><path d="M.426.75h116.176v116.172H.426Zm0 0"/></clipPath><clipPath id="g"><path d="M.426 58.836c0 32.082 26.008 58.086 58.086 58.086 32.082 0 58.09-26.004 58.09-58.086S90.594.75 58.512.75C26.434.75.426 26.754.426 58.836m0 0"/></clipPath><clipPath id="e"><path d="M0 0h117v117H0z"/></clipPath><clipPath id="h"><path d="M229.426 246.066h116.176v116.172H229.426Zm0 0"/></clipPath><clipPath id="i"><path d="M229.426 304.152c0 32.082 26.008 58.086 58.086 58.086 32.082 0 58.09-26.004 58.09-58.086s-26.008-58.086-58.09-58.086c-32.078 0-58.086 26.004-58.086 58.086m0 0"/></clipPath><clipPath id="k"><path d="M.426.066h116.176v116.172H.426Zm0 0"/></clipPath><clipPath id="l"><path d="M.426 58.152c0 32.082 26.008 58.086 58.086 58.086 32.082 0 58.09-26.004 58.09-58.086S90.594.066 58.512.066C26.434.066.426 26.07.426 58.152m0 0"/></clipPath><clipPath id="j"><path d="M0 0h117v117H0z"/></clipPath><clipPath id="m"><path d="M242.86 259.504h89.308v89.308h-89.309Zm0 0"/></clipPath><clipPath id="n"><path d="M242.86 304.156c0 24.664 19.992 44.656 44.652 44.656 24.664 0 44.656-19.992 44.656-44.656 0-24.66-19.992-44.652-44.656-44.652-24.66 0-44.653 19.992-44.653 44.652m0 0"/></clipPath><clipPath id="p"><path d="M.86.504h89.308v89.309H.859Zm0 0"/></clipPath><clipPath id="q"><path d="M.86 45.156c0 24.664 19.992 44.657 44.652 44.657 24.664 0 44.656-19.993 44.656-44.657 0-24.66-19.992-44.652-44.656-44.652C20.852.504.859 20.496.859 45.156m0 0"/></clipPath><clipPath id="o"><path d="M0 0h91v90H0z"/></clipPath><clipPath id="r"><path d="M242.86 35.188h89.308v89.308h-89.309Zm0 0"/></clipPath><clipPath id="s"><path d="M242.86 79.84c0 24.664 19.992 44.656 44.652 44.656 24.664 0 44.656-19.992 44.656-44.656 0-24.66-19.992-44.652-44.656-44.652-24.66 0-44.653 19.992-44.653 44.652m0 0"/></clipPath><clipPath id="u"><path d="M.86.188h89.308v89.308H.859Zm0 0"/></clipPath><clipPath id="v"><path d="M.86 44.84c0 24.664 19.992 44.656 44.652 44.656 24.664 0 44.656-19.992 44.656-44.656C90.168 20.18 70.176.188 45.512.188 20.852.188.859 20.18.859 44.84m0 0"/></clipPath><clipPath id="t"><path d="M0 0h91v90H0z"/></clipPath><clipPath id="w"><path d="M32.074 139.977H148.25v116.171H32.074Zm0 0"/></clipPath><clipPath id="x"><path d="M32.074 198.063c0 32.082 26.008 58.085 58.086 58.085 32.082 0 58.09-26.003 58.09-58.086 0-32.078-26.008-58.085-58.09-58.085-32.078 0-58.086 26.007-58.086 58.085m0 0"/></clipPath><clipPath id="z"><path d="M.074.977H116.25v116.171H.074Zm0 0"/></clipPath><clipPath id="A"><path d="M.074 59.063c0 32.082 26.008 58.085 58.086 58.085 32.082 0 58.09-26.003 58.09-58.085C116.25 26.984 90.242.977 58.16.977 26.082.977.074 26.984.074 59.063m0 0"/></clipPath><clipPath id="y"><path d="M0 0h117v118H0z"/></clipPath><clipPath id="B"><path d="M45.508 153.414h89.308v89.309H45.508Zm0 0"/></clipPath><clipPath id="C"><path d="M45.508 198.07c0 24.66 19.992 44.653 44.652 44.653 24.664 0 44.656-19.993 44.656-44.653 0-24.664-19.992-44.656-44.656-44.656-24.66 0-44.652 19.992-44.652 44.656m0 0"/></clipPath><clipPath id="E"><path d="M.508.414h89.308v89.309H.508Zm0 0"/></clipPath><clipPath id="F"><path d="M.508 45.07c0 24.66 19.992 44.653 44.652 44.653 24.664 0 44.656-19.993 44.656-44.653C89.816 20.406 69.824.414 45.16.414 20.5.414.508 20.406.508 45.07m0 0"/></clipPath><clipPath id="D"><path d="M0 0h90v90H0z"/></clipPath></defs><path fill="#fff" d="M-38.4-38.4h460.8v460.8H-38.4z"/><path fill="#545454" d="M-38.4-38.4h460.8v460.8H-38.4z"/><g clip-path="url(#a)"><g clip-path="url(#b)"><path fill="none" stroke="#fff" stroke-width="22.5" d="M61.785 198.066 299.621 62.16v271.817Zm0 0"/></g></g><path fill="none" stroke="#ffbd59" stroke-width="11.25" d="M87.54 190.113 287.511 75.707"/><g clip-path="url(#c)"><g clip-path="url(#d)"><g clip-path="url(#e)" transform="translate(229 21)"><g clip-path="url(#f)"><g clip-path="url(#g)"><path fill="#545454" d="M.426 116.922V.75h116.176v116.172Zm0 0"/></g></g></g></g></g><g clip-path="url(#h)"><g clip-path="url(#i)"><g clip-path="url(#j)" transform="translate(229 246)"><g clip-path="url(#k)"><g clip-path="url(#l)"><path fill="#545454" d="M.426 116.238V.066h116.176v116.172Zm0 0"/></g></g></g></g></g><g clip-path="url(#m)"><g clip-path="url(#n)"><g clip-path="url(#o)" transform="translate(242 259)"><g clip-path="url(#p)"><g clip-path="url(#q)"><path fill="#d9d9d9" d="M.86 89.813V.502h89.308v89.31Zm0 0"/></g></g></g></g></g><g clip-path="url(#r)"><g clip-path="url(#s)"><g clip-path="url(#t)" transform="translate(242 35)"><g clip-path="url(#u)"><g clip-path="url(#v)"><path fill="#d9d9d9" d="M.86 89.496V.188h89.308v89.308Zm0 0"/></g></g></g></g></g><g clip-path="url(#w)"><g clip-path="url(#x)"><g clip-path="url(#y)" transform="translate(32 139)"><g clip-path="url(#z)"><g clip-path="url(#A)"><path fill="#545454" d="M.074 117.148V.977H116.25v116.171Zm0 0"/></g></g></g></g></g><g clip-path="url(#B)"><g clip-path="url(#C)"><g clip-path="url(#D)" transform="translate(45 153)"><g clip-path="url(#E)"><g clip-path="url(#F)"><path fill="#ffa51f" d="M.508 89.723V.414h89.308v89.309Zm0 0"/></g></g></g></g></g></svg>
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" width="1134" height="302" viewBox="0 0 850.5 226.5"><defs><clipPath id="a"><path d="M1.438 0H822v226H1.438Zm0 0"/></clipPath><clipPath id="c"><path d="M32.797 31.555h142.629V194.5H32.796Zm0 0"/></clipPath><clipPath id="d"><path d="m32.797 113 142.629-81.504V194.5Zm0 0"/></clipPath><clipPath id="e"><path d="M.438 0H232v175H.438Zm0 0"/></clipPath><clipPath id="f"><path d="M133.332 7.262H203V76.93h-69.668Zm0 0"/></clipPath><clipPath id="g"><path d="M133.332 42.094c0 19.238 15.594 34.836 34.836 34.836C187.406 76.93 203 61.332 203 42.094c0-19.239-15.594-34.832-34.832-34.832-19.242 0-34.836 15.593-34.836 34.832m0 0"/></clipPath><clipPath id="i"><path d="M.332.262H70V69.93H.332Zm0 0"/></clipPath><clipPath id="j"><path d="M.332 35.094c0 19.238 15.594 34.836 34.836 34.836C54.406 69.93 70 54.332 70 35.094 70 15.855 54.406.262 35.168.262 15.926.262.332 15.855.332 35.094m0 0"/></clipPath><clipPath id="h"><path d="M0 0h70v70H0z"/></clipPath><clipPath id="k"><path d="M133.332 141.781H203v69.672h-69.668Zm0 0"/></clipPath><clipPath id="l"><path d="M133.332 176.617c0 19.238 15.594 34.836 34.836 34.836 19.238 0 34.832-15.598 34.832-34.836s-15.594-34.836-34.832-34.836c-19.242 0-34.836 15.598-34.836 34.836m0 0"/></clipPath><clipPath id="n"><path d="M.332.781H70v69.672H.332Zm0 0"/></clipPath><clipPath id="o"><path d="M.332 35.617c0 19.238 15.594 34.836 34.836 34.836C54.406 70.453 70 54.855 70 35.617S54.406.781 35.168.781C15.926.781.332 16.38.332 35.617m0 0"/></clipPath><clipPath id="m"><path d="M0 0h70v71H0z"/></clipPath><clipPath id="p"><path d="M141.387 149.832h53.558v53.559h-53.558Zm0 0"/></clipPath><clipPath id="q"><path d="M141.387 176.613c0 14.79 11.988 26.778 26.781 26.778 14.789 0 26.777-11.989 26.777-26.778 0-14.793-11.988-26.781-26.777-26.781-14.793 0-26.781 11.988-26.781 26.781m0 0"/></clipPath><clipPath id="s"><path d="M.387.832h53.558v53.559H.387Zm0 0"/></clipPath><clipPath id="t"><path d="M.387 27.613c0 14.79 11.988 26.778 26.781 26.778 14.789 0 26.777-11.989 26.777-26.778C53.945 12.82 41.957.832 27.168.832 12.375.832.387 12.82.387 27.613m0 0"/></clipPath><clipPath id="r"><path d="M0 0h54v55H0z"/></clipPath><clipPath id="u"><path d="M141.387 15.309h53.558v53.558h-53.558Zm0 0"/></clipPath><clipPath id="v"><path d="M141.387 42.09c0 14.789 11.988 26.777 26.781 26.777 14.789 0 26.777-11.988 26.777-26.777s-11.988-26.781-26.777-26.781c-14.793 0-26.781 11.992-26.781 26.78m0 0"/></clipPath><clipPath id="x"><path d="M.387.309h53.558v53.558H.387Zm0 0"/></clipPath><clipPath id="y"><path d="M.387 27.09c0 14.789 11.988 26.777 26.781 26.777 14.789 0 26.777-11.988 26.777-26.777S41.957.309 27.168.309C12.375.309.387 12.3.387 27.089m0 0"/></clipPath><clipPath id="w"><path d="M0 0h54v54H0z"/></clipPath><clipPath id="z"><path d="M14.98 75.871h69.668v69.668H14.98Zm0 0"/></clipPath><clipPath id="A"><path d="M14.98 110.703c0 19.238 15.598 34.836 34.836 34.836 19.239 0 34.832-15.598 34.832-34.836S69.055 75.871 49.816 75.871c-19.238 0-34.836 15.594-34.836 34.832m0 0"/></clipPath><clipPath id="C"><path d="M.98.871h69.668V70.54H.98Zm0 0"/></clipPath><clipPath id="D"><path d="M.98 35.703c0 19.238 15.598 34.836 34.836 34.836 19.239 0 34.832-15.598 34.832-34.836S55.055.871 35.816.871C16.578.871.98 16.465.98 35.703m0 0"/></clipPath><clipPath id="B"><path d="M0 0h71v71H0z"/></clipPath><clipPath id="E"><path d="M23.035 86.21h53.559v53.56H23.035Zm0 0"/></clipPath><clipPath id="F"><path d="M23.035 112.988c0 14.793 11.988 26.782 26.781 26.782 14.79 0 26.778-11.989 26.778-26.782 0-14.789-11.989-26.777-26.778-26.777-14.793 0-26.78 11.988-26.78 26.777m0 0"/></clipPath><clipPath id="H"><path d="M.035.21h53.559v53.56H.035Zm0 0"/></clipPath><clipPath id="I"><path d="M.035 26.988c0 14.793 11.988 26.782 26.781 26.782 14.79 0 26.778-11.989 26.778-26.782C53.594 12.2 41.605.211 26.816.211 12.023.21.036 12.199.036 26.988m0 0"/></clipPath><clipPath id="G"><path d="M0 0h54v54H0z"/></clipPath><clipPath id="J"><path d="M0 0h351v209H0z"/></clipPath><clipPath id="b"><path d="M0 0h821v226H0z"/></clipPath></defs><g clip-path="url(#a)"><g clip-path="url(#b)" transform="translate(1)"><g clip-path="url(#c)"><g clip-path="url(#d)"><path fill="none" stroke="#fff" stroke-width="22.423499999999997" d="m32.797 113 142.629-81.504V194.5Zm0 0"/></g></g><g clip-path="url(#e)"><path fill="none" stroke="#ffbd59" stroke-width="11.211749999999999" d="m48.242 110.707 119.926-68.61"/></g><g clip-path="url(#f)"><g clip-path="url(#g)"><g clip-path="url(#h)" transform="translate(133 7)"><g clip-path="url(#i)"><g clip-path="url(#j)"><path d="M.332 69.93V.262H70V69.93Zm0 0"/></g></g></g></g></g><g clip-path="url(#k)"><g clip-path="url(#l)"><g clip-path="url(#m)" transform="translate(133 141)"><g clip-path="url(#n)"><g clip-path="url(#o)"><path d="M.332 70.453V.781H70v69.672Zm0 0"/></g></g></g></g></g><g clip-path="url(#p)"><g clip-path="url(#q)"><g clip-path="url(#r)" transform="translate(141 149)"><g clip-path="url(#s)"><g clip-path="url(#t)"><path fill="#d9d9d9" d="M.387 54.39V.833h53.558v53.559Zm0 0"/></g></g></g></g></g><g clip-path="url(#u)"><g clip-path="url(#v)"><g clip-path="url(#w)" transform="translate(141 15)"><g clip-path="url(#x)"><g clip-path="url(#y)"><path fill="#d9d9d9" d="M.387 53.867V.31h53.558v53.558Zm0 0"/></g></g></g></g></g><g clip-path="url(#z)"><g clip-path="url(#A)"><g clip-path="url(#B)" transform="translate(14 75)"><g clip-path="url(#C)"><g clip-path="url(#D)"><path d="M.98 70.54V.87h69.668V70.54Zm0 0"/></g></g></g></g></g><g clip-path="url(#E)"><g clip-path="url(#F)"><g clip-path="url(#G)" transform="translate(23 86)"><g clip-path="url(#H)"><g clip-path="url(#I)"><path fill="#ffa51f" d="M.035 53.77V.21h53.559v53.56Zm0 0"/></g></g></g></g></g><g fill="#fff" clip-path="url(#J)" transform="translate(198 1)"><path d="M14.231 162.89V56.11h21.11v43.609h2.344l35.64-43.61h21.61v1.829L55.638 106.5l43.39 54.563v1.828H75.153l-37.468-46.078H35.34v46.078ZM110.627 162.89V82.329h19.437v11.828l1.532.375c5.007-9.156 13.14-13.734 24.39-13.734q13.952 0 20.485 7.594c4.351 5.062 6.53 12.445 6.53 22.14v52.36h-20.218V113q0-8.03-3.219-11.563-3.22-3.546-10.297-3.547-8.69 0-13.546 5.625c-3.243 3.75-4.86 9.64-4.86 17.672v41.703ZM240.182 164.422c-7.886 0-14.812-1.617-20.781-4.86q-8.94-4.858-13.875-14.234-4.922-9.387-4.922-22.687 0-13.28 4.922-22.703 4.934-9.421 13.875-14.282 8.953-4.858 20.781-4.859c7.883 0 14.813 1.621 20.781 4.86 5.97 3.242 10.602 8 13.907 14.28q4.968 9.425 4.968 22.704 0 13.301-4.968 22.687c-3.305 6.25-7.938 10.996-13.907 14.235-5.968 3.242-12.898 4.86-20.78 4.86m0-17.156q18.78.001 18.781-24.625 0-12.779-4.828-18.719-4.814-5.953-13.953-5.953-18.766.001-18.765 24.672 0 24.626 18.765 24.625M342.57 143.688l5.266 14.968q-3.299 2.706-8.266 4.235-4.956 1.53-11.234 1.531c-8.72 0-15.344-2.367-19.875-7.11-4.524-4.75-6.782-11.656-6.782-20.718V98.328h-12.281V82.266h12.281V66.563l20.219-3.297v19h22.86v16.062h-22.86v36.813q0 5.987 2.484 8.734 2.484 2.736 7.235 2.735 5.402 0 9.422-2.922Zm0 0"/></g><path fill="#fff" d="M557.66 196.594V83.374h11.906v12.048l1.53.297c5.99-9.25 14.774-13.875 26.36-13.875q10.077.002 17.594 4.609c5.02 3.063 8.914 7.727 11.687 13.984q4.173 9.375 4.172 23.25-.001 13.816-4.39 23.157-4.378 9.344-12.125 13.984-7.735 4.64-17.813 4.64-8.174-.001-14.531-2.843c-4.242-1.895-7.89-5.016-10.953-9.36l-1.531.297v43.032Zm36.296-41.782q24.47 0 24.469-31.125 0-31.185-24.469-31.187-7.158.001-12.64 3.297c-3.649 2.187-6.516 5.61-8.61 10.265q-3.14 6.973-3.14 17.625 0 10.594 3.14 17.579c2.094 4.648 4.961 8.07 8.61 10.265q5.482 3.281 12.64 3.281M672.982 165.469q-11.908 0-18.594-6.203-6.674-6.219-6.672-17.75 0-7.155 2.953-12.079 2.953-4.934 9.156-8.046 6.217-3.106 16.22-4.782c5.843-.976 10.284-2.078 13.327-3.297q4.577-1.828 6.14-4.078 1.579-2.263 1.579-5.703c0-3.656-1.258-6.457-3.766-8.406-2.511-1.945-6.543-2.922-12.093-2.922q-7.816.001-13.407 3.031c-3.718 2.024-7.136 5.032-10.25 9.032h-1.468L650.263 96q5.108-6.498 13-10.328 7.889-3.827 17.969-3.828c9.5 0 16.5 2.086 21 6.25 4.507 4.156 6.765 9.914 6.765 17.265v42.735q0 6.719 5.688 6.718 1.904 0 3.656-.656l1.031.281 1.375 8.266c-.875.586-2.031 1.031-3.468 1.344a20.8 20.8 0 0 1-4.422.469q-6.644 0-10.047-2.922-3.392-2.92-4.328-8.61l-1.547-.156q-3.422 6.361-9.266 9.5-5.847 3.14-14.687 3.14m2.625-9.5q6.715 0 11.656-3.094c3.289-2.07 5.812-4.984 7.562-8.734q2.625-5.625 2.625-13v-10.22l-1.39-.296q-2.706 1.894-6.578 3.172-3.861 1.282-10.797 2.297c-4.68.636-8.39 1.617-11.14 2.937q-4.127 1.97-5.891 5c-1.168 2.024-1.75 4.516-1.75 7.485 0 4.718 1.382 8.308 4.156 10.765q4.17 3.69 11.547 3.688M764.866 165.469q-9.721 0-17.14-4.641-7.408-4.64-11.61-13.984-4.189-9.34-4.188-23.157-.001-13.793 4.375-23.187 4.389-9.387 12.094-14.016 7.7-4.64 17.86-4.64 8.028 0 14.453 3.03 6.435 3.034 11.031 9.97l1.531-.297V51.016h11.906v112.921h-11.906v-11.765l-1.531-.281q-3.94 5.986-10.703 9.78-6.75 3.798-16.172 3.798m3.719-10.657q11.249.001 17.968-7.703c4.477-5.144 6.72-12.953 6.72-23.422 0-10.52-2.243-18.347-6.72-23.484q-6.719-7.701-17.968-7.703-11.611.001-17.89 7.531-6.282 7.52-6.282 23.656-.002 31.125 24.172 31.125m0 0"/></g></g></svg>
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "Knotpad",
|
|
3
|
+
"short_name": "Knotpad",
|
|
4
|
+
"description": "Note-first project management with AI agent task routing",
|
|
5
|
+
"start_url": "/",
|
|
6
|
+
"display": "standalone",
|
|
7
|
+
"background_color": "#09090b",
|
|
8
|
+
"theme_color": "#09090b",
|
|
9
|
+
"icons": [
|
|
10
|
+
{ "src": "/icon-192.png", "sizes": "192x192", "type": "image/png" },
|
|
11
|
+
{ "src": "/icon-512.png", "sizes": "512x512", "type": "image/png" },
|
|
12
|
+
{ "src": "/knotpad_icon.svg", "sizes": "any", "type": "image/svg+xml" }
|
|
13
|
+
]
|
|
14
|
+
}
|
package/public/next.svg
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
<svg xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 394 80"><path fill="#000" d="M262 0h68.5v12.7h-27.2v66.6h-13.6V12.7H262zM149 0v12.7H94v20.4h44.3v12.6H94v21h55v12.6H80.5V0h68.7zm34.3 0h-17.8l63.8 79.4h17.9l-32-39.7 32-39.6h-17.9l-23 28.6-23-28.6zm18.3 56.7-9-11-27.1 33.7h17.8z"/><path fill="#000" d="M81 79.3 17 0H0v79.3h13.6V17l50.2 62.3zm252.6-.4c-1 0-1.8-.4-2.5-1s-1.1-1.6-1.1-2.6.3-1.8 1-2.5 1.6-1 2.6-1 1.8.3 2.5 1a3.4 3.4 0 0 1 .6 4.3 3.7 3.7 0 0 1-3 1.8zm23.2-33.5h6v23.3c0 2.1-.4 4-1.3 5.5a9.1 9.1 0 0 1-3.8 3.5c-1.6.8-3.5 1.3-5.7 1.3-2 0-3.7-.4-5.3-1s-2.8-1.8-3.7-3.2c-.9-1.3-1.4-3-1.4-5h6c.1.8.3 1.6.7 2.2s1 1.2 1.6 1.5c.7.4 1.5.5 2.4.5q1.5 0 2.4-.6a4 4 0 0 0 1.6-1.8c.3-.8.5-1.8.5-3V45.5zm30.9 9.1a4.4 4.4 0 0 0-2-3.3 7.5 7.5 0 0 0-4.3-1.1c-1.3 0-2.4.2-3.3.5-.9.4-1.6 1-2 1.6a3.5 3.5 0 0 0-.3 4c.3.5.7.9 1.3 1.2l1.8 1 2 .5 3.2.8c1.3.3 2.5.7 3.7 1.2a13 13 0 0 1 3.2 1.8 8.1 8.1 0 0 1 3 6.5q0 3-1.5 5.1a10 10 0 0 1-4.4 3.5c-1.8.8-4.1 1.2-6.8 1.2-2.6 0-4.9-.4-6.8-1.2-2-.8-3.4-2-4.5-3.5a10 10 0 0 1-1.7-5.6h6a5 5 0 0 0 3.5 4.6c1 .4 2.2.6 3.4.6 1.3 0 2.5-.2 3.5-.6s1.8-1 2.4-1.7a4 4 0 0 0 .8-2.4c0-.9-.2-1.6-.7-2.2a11 11 0 0 0-2.1-1.4l-3.2-1-3.8-1c-2.8-.7-5-1.7-6.6-3.2a7.2 7.2 0 0 1-2.4-5.7 8 8 0 0 1 1.7-5 10 10 0 0 1 4.3-3.5c2-.8 4-1.2 6.4-1.2 2.3 0 4.4.4 6.2 1.2s3.2 2 4.3 3.4c1 1.4 1.5 3 1.5 5h-5.8z"/></svg>
|