@pylonsync/create-pylon 0.19.1 → 0.20.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.
- package/bin/create-pylon.js +30 -7
- package/package.json +1 -1
- package/templates/agency/.env.example +7 -0
- package/templates/agency/README.md +28 -3
- package/templates/agency/app/(marketing)/contact-form.tsx +20 -18
- package/templates/agency/app/(marketing)/page.tsx +3 -3
- package/templates/agency/app/(marketing)/work/page.tsx +3 -3
- package/templates/agency/app/auth-form.tsx +4 -4
- package/templates/agency/app/dashboard/dashboard-client.tsx +110 -64
- package/templates/agency/app/dashboard/page.tsx +14 -16
- package/templates/agency/app/icon.svg +3 -0
- package/templates/agency/app/login/page.tsx +12 -14
- package/templates/agency/components/marketing.tsx +12 -5
- package/templates/agency/functions/seedStudioBackoffice.ts +42 -11
- package/templates/agency/lib/agency.ts +22 -0
- package/templates/agency/lib/demo.ts +118 -0
- package/templates/agency/lib/site.config.ts +19 -13
- package/templates/agency/public/favicon.ico +0 -0
- package/templates/agency/tests/agency.test.ts +57 -0
- package/templates/ai-chat/.env.example +13 -27
- package/templates/ai-chat/README.md +53 -60
- package/templates/ai-chat/app/(chat)/c/[id]/page.tsx +19 -0
- package/templates/ai-chat/app/(chat)/chat-client.tsx +657 -622
- package/templates/ai-chat/app/(chat)/layout.tsx +6 -43
- package/templates/ai-chat/app/(chat)/not-found.tsx +6 -10
- package/templates/ai-chat/app/(chat)/page.tsx +7 -11
- package/templates/ai-chat/app/auth-form.tsx +45 -38
- package/templates/ai-chat/app/error.tsx +9 -12
- package/templates/ai-chat/app/globals.css +464 -102
- package/templates/ai-chat/app/layout.tsx +11 -19
- package/templates/ai-chat/app/login/page.tsx +39 -24
- package/templates/ai-chat/app.ts +118 -43
- package/templates/ai-chat/components/chat/composer.tsx +193 -0
- package/templates/ai-chat/components/chat/empty-state.tsx +65 -0
- package/templates/ai-chat/components/chat/icons.tsx +198 -0
- package/templates/ai-chat/components/chat/markdown.tsx +164 -0
- package/templates/ai-chat/components/chat/message.tsx +183 -0
- package/templates/ai-chat/components/chat/setup.tsx +71 -0
- package/templates/ai-chat/components/chat/sidebar.tsx +288 -0
- package/templates/ai-chat/functions/_beginTurn.ts +145 -0
- package/templates/ai-chat/functions/_finishTurn.ts +55 -0
- package/templates/ai-chat/functions/assistantStatus.ts +13 -0
- package/templates/ai-chat/functions/claimGuestHistory.ts +39 -0
- package/templates/ai-chat/functions/createConversation.ts +28 -0
- package/templates/ai-chat/functions/deleteConversation.ts +15 -20
- package/templates/ai-chat/functions/prepareGuestClaim.ts +32 -0
- package/templates/ai-chat/functions/renameConversation.ts +19 -0
- package/templates/ai-chat/functions/respond.ts +88 -0
- package/templates/ai-chat/functions/seedExamples.ts +46 -0
- package/templates/ai-chat/functions/stopResponse.ts +30 -0
- package/templates/ai-chat/lib/brand-icon.ts +7 -0
- package/templates/ai-chat/lib/chat.ts +277 -0
- package/templates/ai-chat/lib/claim.ts +15 -0
- package/templates/ai-chat/lib/examples.ts +179 -0
- package/templates/ai-chat/lib/highlight.ts +107 -0
- package/templates/ai-chat/lib/markdown.ts +317 -0
- package/templates/ai-chat/lib/provider.ts +38 -0
- package/templates/ai-chat/lib/site.config.ts +55 -39
- package/templates/ai-chat/tests/chat.test.ts +174 -0
- package/templates/ai-chat/tests/components.test.tsx +57 -0
- package/templates/ai-chat/tests/markdown.test.ts +88 -0
- package/templates/ai-chat/tests/provider.test.ts +32 -0
- package/templates/backend/consumer/apps/api/app/layout.tsx +33 -0
- package/templates/backend/consumer/apps/api/app/page.tsx +54 -0
- package/templates/backend/consumer/apps/api/app.ts +166 -0
- package/templates/backend/consumer/apps/api/functions/addComment.ts +24 -0
- package/templates/backend/consumer/apps/api/functions/createPost.ts +19 -36
- package/templates/backend/consumer/apps/api/functions/deletePost.ts +15 -13
- package/templates/backend/consumer/apps/api/functions/myProfile.ts +5 -8
- package/templates/backend/consumer/apps/api/functions/seedDemo.ts +95 -0
- package/templates/backend/consumer/apps/api/functions/setFollow.ts +36 -0
- package/templates/backend/consumer/apps/api/functions/setLike.ts +36 -0
- package/templates/backend/consumer/apps/api/functions/upsertProfile.ts +43 -37
- package/templates/backend/consumer/apps/api/lib/seed.ts +89 -0
- package/templates/backend/consumer/apps/api/lib/social.ts +50 -0
- package/templates/backend/consumer/apps/api/package.json +8 -2
- package/templates/backend/consumer/apps/api/public/images/posts/arch.jpg +0 -0
- package/templates/backend/consumer/apps/api/public/images/posts/coffee.jpg +0 -0
- package/templates/backend/consumer/apps/api/public/images/posts/dog.jpg +0 -0
- package/templates/backend/consumer/apps/api/public/images/posts/lisbon.jpg +0 -0
- package/templates/backend/consumer/apps/api/public/images/posts/ramen.jpg +0 -0
- package/templates/backend/consumer/apps/api/public/images/posts/run.jpg +0 -0
- package/templates/backend/consumer/apps/api/public/images/posts/sunset.jpg +0 -0
- package/templates/backend/consumer/apps/api/tsconfig.json +12 -2
- package/templates/chat/README.md +43 -21
- package/templates/chat/app/chat-client.tsx +495 -85
- package/templates/chat/app/error.tsx +1 -1
- package/templates/chat/app/globals.css +170 -54
- package/templates/chat/app/layout.tsx +12 -9
- package/templates/chat/app/not-found.tsx +4 -2
- package/templates/chat/app/page.tsx +9 -19
- package/templates/chat/app.ts +96 -17
- package/templates/chat/components/chat/avatar.tsx +45 -0
- package/templates/chat/components/chat/composer.tsx +110 -0
- package/templates/chat/components/chat/message-list.tsx +285 -0
- package/templates/chat/components/chat/sidebar.tsx +190 -0
- package/templates/chat/functions/joinChat.ts +83 -0
- package/templates/chat/functions/renameMember.ts +25 -0
- package/templates/chat/lib/chat.ts +188 -0
- package/templates/chat/lib/seed.ts +78 -0
- package/templates/chat/tests/chat.test.ts +159 -0
- package/templates/chat/tests/composer.test.tsx +54 -0
- package/templates/consumer/README.md +3 -3
- package/templates/consumer/app/globals.css +10 -3
- package/templates/consumer/app/icon.svg +1 -0
- package/templates/consumer/components/social/avatar.tsx +25 -11
- package/templates/consumer/functions/seedFeed.ts +3 -3
- package/templates/consumer/lib/seed.ts +43 -85
- package/templates/consumer/public/favicon.ico +0 -0
- package/templates/consumer/public/images/posts/arch.jpg +0 -0
- package/templates/consumer/public/images/posts/coffee.jpg +0 -0
- package/templates/consumer/public/images/posts/dog.jpg +0 -0
- package/templates/consumer/public/images/posts/lisbon.jpg +0 -0
- package/templates/consumer/public/images/posts/ramen.jpg +0 -0
- package/templates/consumer/public/images/posts/run.jpg +0 -0
- package/templates/consumer/public/images/posts/sunset.jpg +0 -0
- package/templates/consumer/tests/seed.test.ts +39 -0
- package/templates/creator/.env.example +7 -0
- package/templates/creator/README.md +24 -5
- package/templates/creator/app/(marketing)/newsletter-signup.tsx +33 -12
- package/templates/creator/app/auth-form.tsx +7 -7
- package/templates/creator/app/dashboard/dashboard-client.tsx +137 -100
- package/templates/creator/app/dashboard/page.tsx +18 -18
- package/templates/creator/app/icon.svg +2 -0
- package/templates/creator/app/login/page.tsx +14 -14
- package/templates/creator/app.ts +4 -4
- package/templates/creator/functions/seedDemo.ts +32 -0
- package/templates/creator/functions/subscribe.ts +4 -15
- package/templates/creator/lib/demo.ts +94 -0
- package/templates/creator/lib/site.config.ts +15 -10
- package/templates/creator/lib/stats.ts +35 -0
- package/templates/creator/public/favicon.ico +0 -0
- package/templates/creator/tests/counter.test.ts +92 -0
- package/templates/creator/tests/live-count.test.tsx +45 -0
- package/templates/crm/README.md +22 -1
- package/templates/crm/app/apple-icon.png +0 -0
- package/templates/crm/app/companies/companies-view.tsx +32 -14
- package/templates/crm/app/companies/page.tsx +2 -1
- package/templates/crm/app/contacts/contacts-view.tsx +34 -10
- package/templates/crm/app/contacts/page.tsx +2 -1
- package/templates/crm/app/deals/[id]/deal-view.tsx +137 -98
- package/templates/crm/app/deals/[id]/page.tsx +2 -1
- package/templates/crm/app/globals.css +29 -14
- package/templates/crm/app/icon.svg +1 -0
- package/templates/crm/app/layout.tsx +7 -5
- package/templates/crm/app/page.tsx +2 -1
- package/templates/crm/app/pipeline-view.tsx +5 -5
- package/templates/crm/app/workspace.tsx +29 -17
- package/templates/crm/app.ts +5 -5
- package/templates/crm/components/activity-timeline.tsx +14 -4
- package/templates/crm/components/app-shell.tsx +94 -0
- package/templates/crm/components/auth-form.tsx +35 -5
- package/templates/crm/components/avatar.tsx +5 -1
- package/templates/crm/components/board-skeleton.tsx +5 -5
- package/templates/crm/components/brand-mark.tsx +25 -0
- package/templates/crm/components/command-palette.tsx +17 -17
- package/templates/crm/components/data-table.tsx +97 -36
- package/templates/crm/components/deal-card.tsx +23 -27
- package/templates/crm/components/filter-tabs.tsx +101 -0
- package/templates/crm/components/metrics-bar.tsx +6 -6
- package/templates/crm/components/nav.tsx +15 -0
- package/templates/crm/components/page-header.tsx +43 -7
- package/templates/crm/components/pipeline-board.tsx +16 -10
- package/templates/crm/components/require-auth.tsx +24 -26
- package/templates/crm/components/sidebar.tsx +54 -49
- package/templates/crm/components/stage-badge.tsx +4 -2
- package/templates/crm/components/ui/button.tsx +5 -4
- package/templates/crm/components/ui/dialog.tsx +1 -1
- package/templates/crm/components/ui/input.tsx +1 -1
- package/templates/crm/components/ui/select.tsx +1 -1
- package/templates/crm/components/ui/textarea.tsx +1 -1
- package/templates/crm/functions/seedWorkspace.ts +32 -17
- package/templates/crm/lib/brand.ts +9 -0
- package/templates/crm/lib/demo-team.ts +51 -0
- package/templates/crm/lib/pipeline.ts +37 -0
- package/templates/crm/lib/search.ts +4 -3
- package/templates/crm/lib/seed.ts +53 -8
- package/templates/crm/public/favicon.ico +0 -0
- package/templates/crm/tests/components.test.tsx +5 -5
- package/templates/crm/tests/demo-team.test.ts +18 -0
- package/templates/crm/tests/pipeline.test.ts +59 -3
- package/templates/directory/.env.example +7 -0
- package/templates/directory/README.md +22 -3
- package/templates/directory/app/(marketing)/directory-browse.tsx +30 -12
- package/templates/directory/app/(marketing)/page.tsx +6 -4
- package/templates/directory/app/auth-form.tsx +4 -4
- package/templates/directory/app/dashboard/dashboard-client.tsx +177 -90
- package/templates/directory/app/dashboard/page.tsx +16 -14
- package/templates/directory/app/icon.svg +4 -0
- package/templates/directory/app/login/page.tsx +16 -15
- package/templates/directory/functions/seedDemo.ts +43 -0
- package/templates/directory/lib/demo.ts +145 -0
- package/templates/directory/lib/directory.ts +27 -0
- package/templates/directory/lib/site.config.ts +21 -16
- package/templates/directory/public/favicon.ico +0 -0
- package/templates/directory/tests/directory.test.ts +46 -0
- package/templates/expo/consumer/apps/expo/App.tsx +360 -288
- package/templates/expo/consumer/apps/expo/app.json +9 -1
- package/templates/expo/consumer/apps/expo/package.json +2 -1
- package/templates/helpdesk/README.md +21 -0
- package/templates/helpdesk/app/apple-icon.png +0 -0
- package/templates/helpdesk/app/customers/customers-view.tsx +23 -7
- package/templates/helpdesk/app/customers/page.tsx +2 -1
- package/templates/helpdesk/app/globals.css +29 -14
- package/templates/helpdesk/app/icon.svg +1 -0
- package/templates/helpdesk/app/inbox-view.tsx +66 -47
- package/templates/helpdesk/app/layout.tsx +7 -5
- package/templates/helpdesk/app/page.tsx +4 -7
- package/templates/helpdesk/app/tickets/[id]/page.tsx +2 -1
- package/templates/helpdesk/app/tickets/[id]/ticket-view.tsx +134 -97
- package/templates/helpdesk/app/workspace.tsx +33 -22
- package/templates/helpdesk/app.ts +2 -2
- package/templates/helpdesk/components/app-shell.tsx +94 -0
- package/templates/helpdesk/components/auth-form.tsx +35 -5
- package/templates/helpdesk/components/avatar.tsx +5 -1
- package/templates/helpdesk/components/brand-mark.tsx +28 -0
- package/templates/helpdesk/components/command-palette.tsx +17 -17
- package/templates/helpdesk/components/data-table.tsx +97 -36
- package/templates/helpdesk/components/filter-tabs.tsx +101 -0
- package/templates/helpdesk/components/nav.tsx +14 -0
- package/templates/helpdesk/components/page-header.tsx +43 -7
- package/templates/helpdesk/components/priority-badge.tsx +49 -6
- package/templates/helpdesk/components/require-auth.tsx +24 -26
- package/templates/helpdesk/components/sidebar.tsx +54 -48
- package/templates/helpdesk/components/sla-indicator.tsx +5 -8
- package/templates/helpdesk/components/thread.tsx +7 -7
- package/templates/helpdesk/components/ticket-list.tsx +79 -19
- package/templates/helpdesk/components/ui/button.tsx +5 -4
- package/templates/helpdesk/components/ui/dialog.tsx +1 -1
- package/templates/helpdesk/components/ui/input.tsx +1 -1
- package/templates/helpdesk/components/ui/select.tsx +1 -1
- package/templates/helpdesk/components/ui/textarea.tsx +1 -1
- package/templates/helpdesk/functions/seedWorkspace.ts +25 -15
- package/templates/helpdesk/lib/brand.ts +9 -0
- package/templates/helpdesk/lib/demo-team.ts +51 -0
- package/templates/helpdesk/lib/search.ts +4 -3
- package/templates/helpdesk/lib/seed.ts +43 -2
- package/templates/helpdesk/lib/tickets.ts +68 -20
- package/templates/helpdesk/public/favicon.ico +0 -0
- package/templates/helpdesk/tests/components.test.tsx +10 -0
- package/templates/helpdesk/tests/demo-team.test.ts +18 -0
- package/templates/helpdesk/tests/tickets.test.ts +70 -0
- package/templates/imessage/.env.example +49 -0
- package/templates/imessage/AGENTS.md +153 -0
- package/templates/imessage/CLAUDE.md +7 -0
- package/templates/imessage/README.md +187 -0
- package/templates/imessage/app/console.tsx +382 -0
- package/templates/imessage/app/contacts/page.tsx +13 -0
- package/templates/imessage/app/error.tsx +16 -0
- package/templates/imessage/app/gate.tsx +31 -0
- package/templates/imessage/app/globals.css +183 -0
- package/templates/imessage/app/layout.tsx +17 -0
- package/templates/imessage/app/login/login-form.tsx +115 -0
- package/templates/imessage/app/login/page.tsx +30 -0
- package/templates/imessage/app/not-found.tsx +13 -0
- package/templates/imessage/app/page.tsx +14 -0
- package/templates/imessage/app/robots.ts +6 -0
- package/templates/imessage/app/setup/page.tsx +13 -0
- package/templates/imessage/app/sign-out.tsx +20 -0
- package/templates/imessage/app.ts +299 -0
- package/templates/imessage/bunfig +4 -0
- package/templates/imessage/components/avatar.tsx +46 -0
- package/templates/imessage/components/contact-panel.tsx +263 -0
- package/templates/imessage/components/contacts-view.tsx +172 -0
- package/templates/imessage/components/conversation-list.tsx +129 -0
- package/templates/imessage/components/nav-rail.tsx +67 -0
- package/templates/imessage/components/setup-view.tsx +408 -0
- package/templates/imessage/components/thread.tsx +229 -0
- package/templates/imessage/components/ui/badge.tsx +37 -0
- package/templates/imessage/components/ui/button.tsx +56 -0
- package/templates/imessage/components/ui/card.tsx +90 -0
- package/templates/imessage/components/ui/dialog.tsx +110 -0
- package/templates/imessage/components/ui/input.tsx +30 -0
- package/templates/imessage/components/ui/label.tsx +21 -0
- package/templates/imessage/components/ui/select.tsx +39 -0
- package/templates/imessage/components/ui/table.tsx +124 -0
- package/templates/imessage/components/ui/textarea.tsx +24 -0
- package/templates/imessage/components.json +20 -0
- package/templates/imessage/functions/answerNow.ts +34 -0
- package/templates/imessage/functions/assistant.ts +96 -0
- package/templates/imessage/functions/beginTurn.ts +101 -0
- package/templates/imessage/functions/cancelReminder.ts +13 -0
- package/templates/imessage/functions/claimOutbound.ts +44 -0
- package/templates/imessage/functions/clearDemo.ts +18 -0
- package/templates/imessage/functions/deleteNote.ts +11 -0
- package/templates/imessage/functions/deliverOutbound.ts +55 -0
- package/templates/imessage/functions/finishTurn.ts +84 -0
- package/templates/imessage/functions/fireReminder.ts +42 -0
- package/templates/imessage/functions/ingestInbound.ts +22 -0
- package/templates/imessage/functions/ownerAccount.ts +13 -0
- package/templates/imessage/functions/processTurn.ts +74 -0
- package/templates/imessage/functions/relayApply.ts +102 -0
- package/templates/imessage/functions/relaySync.ts +63 -0
- package/templates/imessage/functions/releaseOutbound.ts +18 -0
- package/templates/imessage/functions/resolveTurn.ts +25 -0
- package/templates/imessage/functions/saveContact.ts +27 -0
- package/templates/imessage/functions/seedDemo.ts +70 -0
- package/templates/imessage/functions/sendOwnerMessage.ts +28 -0
- package/templates/imessage/functions/sendblueWebhook.ts +49 -0
- package/templates/imessage/functions/setContactStatus.ts +17 -0
- package/templates/imessage/functions/settleOutbound.ts +35 -0
- package/templates/imessage/functions/setupStatus.ts +33 -0
- package/templates/imessage/functions/sweep.ts +58 -0
- package/templates/imessage/functions/toolCancelReminder.ts +17 -0
- package/templates/imessage/functions/toolForgetNote.ts +15 -0
- package/templates/imessage/functions/toolListNotes.ts +16 -0
- package/templates/imessage/functions/toolListReminders.ts +17 -0
- package/templates/imessage/functions/toolSaveNote.ts +22 -0
- package/templates/imessage/functions/toolSetReminder.ts +55 -0
- package/templates/imessage/functions/updateSettings.ts +48 -0
- package/templates/imessage/gitignore +11 -0
- package/templates/imessage/lib/agent-call.ts +251 -0
- package/templates/imessage/lib/assistant.ts +74 -0
- package/templates/imessage/lib/chunk.ts +135 -0
- package/templates/imessage/lib/demo.ts +68 -0
- package/templates/imessage/lib/format.ts +170 -0
- package/templates/imessage/lib/gate.ts +104 -0
- package/templates/imessage/lib/handles.ts +67 -0
- package/templates/imessage/lib/provider.ts +38 -0
- package/templates/imessage/lib/relay-protocol.ts +95 -0
- package/templates/imessage/lib/reminders.ts +41 -0
- package/templates/imessage/lib/secrets.ts +59 -0
- package/templates/imessage/lib/sendblue.ts +173 -0
- package/templates/imessage/lib/store.ts +407 -0
- package/templates/imessage/lib/transport.ts +135 -0
- package/templates/imessage/lib/utils.ts +10 -0
- package/templates/imessage/package.json +40 -0
- package/templates/imessage/relay/.env.example +14 -0
- package/templates/imessage/relay/applescript.ts +70 -0
- package/templates/imessage/relay/chatdb.ts +165 -0
- package/templates/imessage/relay/client.ts +41 -0
- package/templates/imessage/relay/main.ts +137 -0
- package/templates/imessage/relay/state.ts +35 -0
- package/templates/imessage/tests/agent-call.test.ts +112 -0
- package/templates/imessage/tests/applescript.test.ts +88 -0
- package/templates/imessage/tests/chatdb.test.ts +139 -0
- package/templates/imessage/tests/chunk.test.ts +61 -0
- package/templates/imessage/tests/fake-ctx.ts +88 -0
- package/templates/imessage/tests/ingest.test.ts +141 -0
- package/templates/imessage/tests/lib.test.ts +99 -0
- package/templates/imessage/tests/review-fixes.test.ts +138 -0
- package/templates/imessage/tests/secrets.test.ts +36 -0
- package/templates/imessage/tests/sendblue.test.ts +143 -0
- package/templates/imessage/tests/setup.ts +5 -0
- package/templates/imessage/tsconfig.json +18 -0
- package/templates/inventory/README.md +21 -0
- package/templates/inventory/app/apple-icon.png +0 -0
- package/templates/inventory/app/globals.css +29 -14
- package/templates/inventory/app/icon.svg +1 -0
- package/templates/inventory/app/layout.tsx +7 -5
- package/templates/inventory/app/movements/movements-view.tsx +32 -10
- package/templates/inventory/app/movements/page.tsx +2 -1
- package/templates/inventory/app/page.tsx +4 -6
- package/templates/inventory/app/products/[id]/page.tsx +2 -1
- package/templates/inventory/app/products/[id]/product-view.tsx +55 -25
- package/templates/inventory/app/products-view.tsx +74 -33
- package/templates/inventory/app/workspace.tsx +34 -16
- package/templates/inventory/app.ts +10 -2
- package/templates/inventory/components/app-shell.tsx +94 -0
- package/templates/inventory/components/auth-form.tsx +35 -5
- package/templates/inventory/components/avatar.tsx +5 -1
- package/templates/inventory/components/brand-mark.tsx +25 -0
- package/templates/inventory/components/category-tile.tsx +49 -0
- package/templates/inventory/components/command-palette.tsx +17 -17
- package/templates/inventory/components/data-table.tsx +97 -36
- package/templates/inventory/components/filter-tabs.tsx +101 -0
- package/templates/inventory/components/nav.tsx +14 -0
- package/templates/inventory/components/page-header.tsx +43 -7
- package/templates/inventory/components/require-auth.tsx +24 -26
- package/templates/inventory/components/sidebar.tsx +54 -48
- package/templates/inventory/components/stock-level.tsx +30 -14
- package/templates/inventory/components/summary-bar.tsx +8 -15
- package/templates/inventory/components/ui/button.tsx +5 -4
- package/templates/inventory/components/ui/dialog.tsx +1 -1
- package/templates/inventory/components/ui/input.tsx +1 -1
- package/templates/inventory/components/ui/select.tsx +1 -1
- package/templates/inventory/components/ui/textarea.tsx +1 -1
- package/templates/inventory/functions/seedWorkspace.ts +18 -8
- package/templates/inventory/lib/brand.ts +9 -0
- package/templates/inventory/lib/demo-team.ts +51 -0
- package/templates/inventory/lib/search.ts +4 -3
- package/templates/inventory/lib/seed.ts +29 -2
- package/templates/inventory/lib/stock.ts +32 -0
- package/templates/inventory/public/favicon.ico +0 -0
- package/templates/inventory/tests/demo-team.test.ts +18 -0
- package/templates/inventory/tests/stock.test.ts +29 -0
- package/templates/invoices/README.md +16 -0
- package/templates/invoices/app/apple-icon.png +0 -0
- package/templates/invoices/app/clients/clients-view.tsx +18 -6
- package/templates/invoices/app/clients/page.tsx +2 -1
- package/templates/invoices/app/globals.css +29 -14
- package/templates/invoices/app/icon.svg +1 -0
- package/templates/invoices/app/invoices/[id]/invoice-view.tsx +72 -48
- package/templates/invoices/app/invoices/[id]/page.tsx +2 -1
- package/templates/invoices/app/invoices-view.tsx +81 -32
- package/templates/invoices/app/layout.tsx +7 -5
- package/templates/invoices/app/page.tsx +4 -6
- package/templates/invoices/app/workspace.tsx +26 -16
- package/templates/invoices/app.ts +2 -2
- package/templates/invoices/components/app-shell.tsx +94 -0
- package/templates/invoices/components/auth-form.tsx +35 -5
- package/templates/invoices/components/avatar.tsx +5 -1
- package/templates/invoices/components/brand-mark.tsx +26 -0
- package/templates/invoices/components/command-palette.tsx +17 -17
- package/templates/invoices/components/data-table.tsx +97 -36
- package/templates/invoices/components/filter-tabs.tsx +101 -0
- package/templates/invoices/components/line-items.tsx +19 -14
- package/templates/invoices/components/nav.tsx +14 -0
- package/templates/invoices/components/page-header.tsx +43 -7
- package/templates/invoices/components/require-auth.tsx +24 -26
- package/templates/invoices/components/sidebar.tsx +54 -48
- package/templates/invoices/components/status-badge.tsx +7 -7
- package/templates/invoices/components/summary-bar.tsx +5 -5
- package/templates/invoices/components/ui/button.tsx +5 -4
- package/templates/invoices/components/ui/dialog.tsx +1 -1
- package/templates/invoices/components/ui/input.tsx +1 -1
- package/templates/invoices/components/ui/select.tsx +1 -1
- package/templates/invoices/components/ui/textarea.tsx +1 -1
- package/templates/invoices/functions/recordPayment.ts +3 -0
- package/templates/invoices/lib/billing.ts +40 -0
- package/templates/invoices/lib/brand.ts +9 -0
- package/templates/invoices/lib/search.ts +4 -3
- package/templates/invoices/public/favicon.ico +0 -0
- package/templates/invoices/tests/billing.test.ts +27 -0
- package/templates/ios/consumer/apps/ios/Package.swift +4 -3
- package/templates/ios/consumer/apps/ios/Sources/__APP_NAME_PASCAL__/ActivityView.swift +107 -0
- package/templates/ios/consumer/apps/ios/Sources/__APP_NAME_PASCAL__/AppModel.swift +171 -0
- package/templates/ios/consumer/apps/ios/Sources/__APP_NAME_PASCAL__/AuthView.swift +182 -0
- package/templates/ios/consumer/apps/ios/Sources/__APP_NAME_PASCAL__/CommentsView.swift +136 -0
- package/templates/ios/consumer/apps/ios/Sources/__APP_NAME_PASCAL__/ComposeView.swift +152 -0
- package/templates/ios/consumer/apps/ios/Sources/__APP_NAME_PASCAL__/ExploreView.swift +117 -0
- package/templates/ios/consumer/apps/ios/Sources/__APP_NAME_PASCAL__/FeedView.swift +175 -159
- package/templates/ios/consumer/apps/ios/Sources/__APP_NAME_PASCAL__/MainTabView.swift +54 -0
- package/templates/ios/consumer/apps/ios/Sources/__APP_NAME_PASCAL__/Media.swift +271 -0
- package/templates/ios/consumer/apps/ios/Sources/__APP_NAME_PASCAL__/Models.swift +101 -4
- package/templates/ios/consumer/apps/ios/Sources/__APP_NAME_PASCAL__/PostCard.swift +245 -0
- package/templates/ios/consumer/apps/ios/Sources/__APP_NAME_PASCAL__/ProfileEditorView.swift +208 -0
- package/templates/ios/consumer/apps/ios/Sources/__APP_NAME_PASCAL__/ProfileView.swift +183 -0
- package/templates/ios/consumer/apps/ios/Sources/__APP_NAME_PASCAL__/RootView.swift +25 -31
- package/templates/ios/consumer/apps/ios/Sources/__APP_NAME_PASCAL__/SocialStore.swift +285 -0
- package/templates/ios/consumer/apps/ios/Sources/__APP_NAME_PASCAL__/StoryViewer.swift +155 -0
- package/templates/ios/consumer/apps/ios/Sources/__APP_NAME_PASCAL__/Theme.swift +82 -0
- package/templates/ios/consumer/apps/ios/Sources/__APP_NAME_PASCAL__/__APP_NAME_PASCAL__App.swift +4 -47
- package/templates/ios/consumer/apps/ios/project.yml +13 -9
- package/templates/local-service/.env.example +7 -0
- package/templates/local-service/README.md +26 -2
- package/templates/local-service/app/(marketing)/booking-widget.tsx +48 -9
- package/templates/local-service/app/(marketing)/page.tsx +66 -42
- package/templates/local-service/app/auth-form.tsx +8 -8
- package/templates/local-service/app/dashboard/dashboard-client.tsx +119 -92
- package/templates/local-service/app/dashboard/page.tsx +14 -14
- package/templates/local-service/app/icon.svg +2 -0
- package/templates/local-service/app/login/page.tsx +15 -15
- package/templates/local-service/functions/seedDemo.ts +49 -0
- package/templates/local-service/lib/demo.ts +135 -0
- package/templates/local-service/lib/hours.ts +44 -0
- package/templates/local-service/lib/site.config.ts +8 -3
- package/templates/local-service/lib/slots.ts +3 -0
- package/templates/local-service/public/favicon.ico +0 -0
- package/templates/local-service/tests/booking.test.ts +104 -0
- package/templates/marketplace/README.md +23 -15
- package/templates/marketplace/app/globals.css +172 -114
- package/templates/marketplace/app/layout.tsx +75 -30
- package/templates/marketplace/app/listing/[id]/page.tsx +210 -123
- package/templates/marketplace/app/me/page.tsx +4 -4
- package/templates/marketplace/app/page.tsx +221 -298
- package/templates/marketplace/app/sell/page.tsx +8 -11
- package/templates/marketplace/app.ts +32 -7
- package/templates/marketplace/client/ActivityFeed.tsx +311 -0
- package/templates/marketplace/client/AuthNav.tsx +24 -16
- package/templates/marketplace/client/ListingCard.tsx +118 -0
- package/templates/marketplace/client/LiveGrid.tsx +92 -0
- package/templates/marketplace/client/LiveListingStatus.tsx +32 -24
- package/templates/marketplace/client/LoginCard.tsx +114 -136
- package/templates/marketplace/client/MarketProvider.tsx +3 -5
- package/templates/marketplace/client/MyMarket.tsx +371 -185
- package/templates/marketplace/client/OfferPanel.tsx +421 -287
- package/templates/marketplace/client/SellForm.tsx +271 -192
- package/templates/marketplace/client/ThemeToggle.tsx +1 -0
- package/templates/marketplace/client/WatchButton.tsx +16 -16
- package/templates/marketplace/client/market.ts +61 -14
- package/templates/marketplace/functions/seedMarket.ts +143 -36
- package/templates/marketplace/functions/seedOffers.ts +101 -0
- package/templates/marketplace/lib/catalog.ts +72 -1
- package/templates/marketplace/public/images/listings/ceramic-lamp-640.webp +0 -0
- package/templates/marketplace/public/images/listings/ceramic-lamp.webp +0 -0
- package/templates/marketplace/public/images/listings/duffel-640.webp +0 -0
- package/templates/marketplace/public/images/listings/duffel.webp +0 -0
- package/templates/marketplace/public/images/listings/film-camera-640.webp +0 -0
- package/templates/marketplace/public/images/listings/film-camera.webp +0 -0
- package/templates/marketplace/public/images/listings/lounge-chair-640.webp +0 -0
- package/templates/marketplace/public/images/listings/lounge-chair.webp +0 -0
- package/templates/marketplace/public/images/listings/road-bike-640.webp +0 -0
- package/templates/marketplace/public/images/listings/road-bike.webp +0 -0
- package/templates/marketplace/public/images/listings/slipper-chair-640.webp +0 -0
- package/templates/marketplace/public/images/listings/slipper-chair.webp +0 -0
- package/templates/marketplace/public/images/listings/turntable-640.webp +0 -0
- package/templates/marketplace/public/images/listings/turntable.webp +0 -0
- package/templates/marketplace/public/images/listings/wardrobe-640.webp +0 -0
- package/templates/marketplace/public/images/listings/wardrobe.webp +0 -0
- package/templates/marketplace/public/images/listings/watch-640.webp +0 -0
- package/templates/marketplace/public/images/listings/watch.webp +0 -0
- package/templates/marketplace/public/images/listings/weekender-bag-640.webp +0 -0
- package/templates/marketplace/public/images/listings/weekender-bag.webp +0 -0
- package/templates/marketplace/tests/example.test.ts +64 -2
- package/templates/marketplace/tests/listing-card.test.tsx +61 -0
- package/templates/projects/README.md +24 -3
- package/templates/projects/app/apple-icon.png +0 -0
- package/templates/projects/app/clients/clients-view.tsx +20 -6
- package/templates/projects/app/clients/page.tsx +2 -1
- package/templates/projects/app/globals.css +29 -14
- package/templates/projects/app/icon.svg +1 -0
- package/templates/projects/app/layout.tsx +7 -5
- package/templates/projects/app/page.tsx +3 -5
- package/templates/projects/app/projects/[id]/page.tsx +2 -1
- package/templates/projects/app/projects/[id]/project-view.tsx +45 -30
- package/templates/projects/app/projects-view.tsx +105 -52
- package/templates/projects/app/workspace.tsx +41 -20
- package/templates/projects/app.ts +2 -2
- package/templates/projects/components/app-shell.tsx +94 -0
- package/templates/projects/components/auth-form.tsx +35 -5
- package/templates/projects/components/avatar.tsx +5 -1
- package/templates/projects/components/board-skeleton.tsx +3 -3
- package/templates/projects/components/brand-mark.tsx +25 -0
- package/templates/projects/components/command-palette.tsx +17 -17
- package/templates/projects/components/data-table.tsx +97 -36
- package/templates/projects/components/filter-tabs.tsx +101 -0
- package/templates/projects/components/meter.tsx +48 -0
- package/templates/projects/components/nav.tsx +14 -0
- package/templates/projects/components/page-header.tsx +43 -7
- package/templates/projects/components/require-auth.tsx +24 -26
- package/templates/projects/components/sidebar.tsx +54 -48
- package/templates/projects/components/summary-bar.tsx +49 -0
- package/templates/projects/components/task-board.tsx +10 -9
- package/templates/projects/components/time-dialog.tsx +29 -5
- package/templates/projects/components/ui/button.tsx +5 -4
- package/templates/projects/components/ui/dialog.tsx +1 -1
- package/templates/projects/components/ui/input.tsx +1 -1
- package/templates/projects/components/ui/select.tsx +1 -1
- package/templates/projects/components/ui/textarea.tsx +1 -1
- package/templates/projects/functions/seedWorkspace.ts +26 -12
- package/templates/projects/lib/brand.ts +9 -0
- package/templates/projects/lib/demo-team.ts +51 -0
- package/templates/projects/lib/search.ts +4 -3
- package/templates/projects/lib/seed.ts +35 -1
- package/templates/projects/lib/work.ts +63 -0
- package/templates/projects/public/favicon.ico +0 -0
- package/templates/projects/tests/demo-team.test.ts +18 -0
- package/templates/projects/tests/work.test.ts +65 -0
- package/templates/restaurant/.env.example +7 -0
- package/templates/restaurant/README.md +29 -3
- package/templates/restaurant/app/(marketing)/layout.tsx +4 -2
- package/templates/restaurant/app/(marketing)/page.tsx +47 -23
- package/templates/restaurant/app/(marketing)/reservation-widget.tsx +37 -7
- package/templates/restaurant/app/auth-form.tsx +8 -8
- package/templates/restaurant/app/dashboard/dashboard-client.tsx +241 -109
- package/templates/restaurant/app/dashboard/page.tsx +14 -14
- package/templates/restaurant/app/icon.svg +4 -0
- package/templates/restaurant/app/login/page.tsx +15 -15
- package/templates/restaurant/functions/seedDemo.ts +44 -0
- package/templates/restaurant/lib/demo.ts +144 -0
- package/templates/restaurant/lib/hours.ts +45 -0
- package/templates/restaurant/lib/site.config.ts +3 -3
- package/templates/restaurant/public/favicon.ico +0 -0
- package/templates/restaurant/tests/reservations.test.ts +67 -0
- package/templates/saas/README.md +54 -35
- package/templates/saas/app/(auth)/auth-form.tsx +25 -23
- package/templates/saas/app/(auth)/forgot-password/page.tsx +1 -1
- package/templates/saas/app/(auth)/layout.tsx +27 -33
- package/templates/saas/app/(auth)/login/page.tsx +1 -1
- package/templates/saas/app/(auth)/reset-password/page.tsx +1 -1
- package/templates/saas/app/(auth)/signup/page.tsx +1 -1
- package/templates/saas/app/(marketing)/layout.tsx +127 -253
- package/templates/saas/app/(marketing)/page.tsx +133 -372
- package/templates/saas/app/(marketing)/pricing/page.tsx +21 -19
- package/templates/saas/app/(marketing)/products/[slug]/page.tsx +40 -95
- package/templates/saas/app/dashboard/board-client.tsx +416 -0
- package/templates/saas/app/dashboard/dashboard-client.tsx +30 -615
- package/templates/saas/app/dashboard/layout.tsx +27 -13
- package/templates/saas/app/dashboard/overview-client.tsx +332 -0
- package/templates/saas/app/dashboard/page.tsx +29 -35
- package/templates/saas/app/dashboard/projects/[id]/page.tsx +29 -0
- package/templates/saas/app/dashboard/projects/page.tsx +11 -7
- package/templates/saas/app/dashboard/projects-client.tsx +398 -0
- package/templates/saas/app/globals.css +5 -4
- package/templates/saas/app/icon.svg +1 -0
- package/templates/saas/app/onboarding/onboarding-client.tsx +93 -26
- package/templates/saas/app/onboarding/page.tsx +6 -2
- package/templates/saas/app.ts +68 -13
- package/templates/saas/components/dashboard-shell.tsx +212 -132
- package/templates/saas/components/marketing.tsx +137 -274
- package/templates/saas/components/pricing-table.tsx +12 -11
- package/templates/saas/components/setup-checklist.tsx +31 -29
- package/templates/saas/components/task-ui.tsx +199 -0
- package/templates/saas/functions/createProject.ts +7 -13
- package/templates/saas/functions/createTask.ts +67 -0
- package/templates/saas/functions/deleteProject.ts +17 -0
- package/templates/saas/functions/deleteTask.ts +14 -0
- package/templates/saas/functions/seedWorkspace.ts +46 -0
- package/templates/saas/functions/setProjectStatus.ts +41 -0
- package/templates/saas/functions/updateProfile.ts +13 -0
- package/templates/saas/functions/updateProject.ts +4 -5
- package/templates/saas/functions/updateTask.ts +88 -0
- package/templates/saas/lib/members.ts +53 -0
- package/templates/saas/lib/names.ts +53 -0
- package/templates/saas/lib/plans.ts +11 -0
- package/templates/saas/lib/sample-workspace.ts +117 -0
- package/templates/saas/lib/site.config.ts +200 -463
- package/templates/saas/lib/tasks.ts +101 -0
- package/templates/saas/lib/use-live.ts +25 -0
- package/templates/saas/public/favicon.ico +0 -0
- package/templates/saas/public/screenshots/board.png +0 -0
- package/templates/saas/public/screenshots/members.png +0 -0
- package/templates/saas/public/screenshots/overview.png +0 -0
- package/templates/saas/public/screenshots/projects.png +0 -0
- package/templates/saas/scripts/capture-screenshots.mjs +156 -0
- package/templates/saas/tests/names.test.ts +35 -0
- package/templates/saas/tests/plans.test.ts +12 -0
- package/templates/saas/tests/sample-workspace.test.ts +46 -0
- package/templates/saas/tests/tasks.test.ts +81 -0
- package/templates/shop/README.md +25 -13
- package/templates/shop/app/(marketing)/layout.tsx +94 -67
- package/templates/shop/app/(marketing)/not-found.tsx +13 -12
- package/templates/shop/app/(marketing)/page.tsx +120 -59
- package/templates/shop/app/(marketing)/shop-client.tsx +364 -237
- package/templates/shop/app/(marketing)/success/page.tsx +75 -22
- package/templates/shop/app/globals.css +94 -1
- package/templates/shop/app/layout.tsx +4 -4
- package/templates/shop/app/login/page.tsx +4 -4
- package/templates/shop/app.ts +18 -6
- package/templates/shop/components/cart-button.tsx +33 -0
- package/templates/shop/components/marketing.tsx +17 -87
- package/templates/shop/components/shelf-count.tsx +36 -0
- package/templates/shop/functions/checkout.ts +17 -1
- package/templates/shop/lib/cart-store.ts +57 -0
- package/templates/shop/lib/shelf-store.ts +35 -0
- package/templates/shop/lib/shop.ts +27 -0
- package/templates/shop/lib/site.config.ts +108 -98
- package/templates/shop/public/images/hero.jpg +0 -0
- package/templates/shop/public/images/products/cedar-smoke.jpg +0 -0
- package/templates/shop/public/images/products/fig-leaf.jpg +0 -0
- package/templates/shop/public/images/products/linen.jpg +0 -0
- package/templates/shop/public/images/products/sea-salt.jpg +0 -0
- package/templates/shop/public/images/products/tobacco-oak.jpg +0 -0
- package/templates/shop/tests/shop.test.ts +64 -0
- package/templates/waitlist/.env.example +7 -0
- package/templates/waitlist/README.md +29 -13
- package/templates/waitlist/app/(marketing)/page.tsx +9 -7
- package/templates/waitlist/app/(marketing)/waitlist-hero.tsx +64 -31
- package/templates/waitlist/app/auth-form.tsx +8 -8
- package/templates/waitlist/app/dashboard/dashboard-client.tsx +132 -95
- package/templates/waitlist/app/dashboard/page.tsx +17 -16
- package/templates/waitlist/app/icon.svg +2 -0
- package/templates/waitlist/app/login/page.tsx +14 -14
- package/templates/waitlist/app.ts +6 -6
- package/templates/waitlist/functions/joinWaitlist.ts +6 -18
- package/templates/waitlist/functions/seedDemo.ts +32 -0
- package/templates/waitlist/lib/demo.ts +94 -0
- package/templates/waitlist/lib/launch.ts +19 -0
- package/templates/waitlist/lib/site.config.ts +14 -9
- package/templates/waitlist/lib/stats.ts +35 -0
- package/templates/waitlist/public/favicon.ico +0 -0
- package/templates/waitlist/tests/counter.test.ts +107 -0
- package/templates/waitlist/tests/live-count.test.tsx +48 -0
- package/templates/ai-chat/tests/example.test.ts +0 -12
- package/templates/backend/consumer/apps/api/functions/feed.ts +0 -57
- package/templates/backend/consumer/apps/api/functions/profilePosts.ts +0 -17
- package/templates/backend/consumer/apps/api/functions/toggleLike.ts +0 -48
- package/templates/backend/consumer/apps/api/schema.ts +0 -143
- package/templates/chat/functions/_keep.ts +0 -13
- package/templates/chat/tests/example.test.ts +0 -12
- package/templates/ios/consumer/apps/ios/Sources/__APP_NAME_PASCAL__/ProfileSetupView.swift +0 -68
- package/templates/marketplace/client/LiveTicker.tsx +0 -116
- package/templates/marketplace/client/ScrollToListingsLink.tsx +0 -29
- package/templates/marketplace/public/images/marketplace-hero.webp +0 -0
|
@@ -1,11 +1,24 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
3
|
-
|
|
1
|
+
import type { LucideIcon } from "lucide-react";
|
|
2
|
+
import {
|
|
3
|
+
BookOpen,
|
|
4
|
+
Code2,
|
|
5
|
+
FolderKanban,
|
|
6
|
+
History,
|
|
7
|
+
KanbanSquare,
|
|
8
|
+
LayoutGrid,
|
|
9
|
+
LifeBuoy,
|
|
10
|
+
Users,
|
|
11
|
+
} from "lucide-react";
|
|
12
|
+
import { FREE_PROJECT_LIMIT, PLANS, TRIAL_DAYS, formatPrice } from "./plans";
|
|
13
|
+
|
|
14
|
+
// Business-specific copy and settings. The landing page, the nav and footer,
|
|
15
|
+
// the /products, /solutions, /resources, /company, and /compare pages, and the
|
|
16
|
+
// sitemap all read this file, so the whole site rebrands from here.
|
|
4
17
|
//
|
|
5
|
-
// Colors
|
|
6
|
-
// you don't touch globals.css to re-theme the marketing pages.
|
|
18
|
+
// Colors are applied as CSS variables on <html> in app/layout.tsx.
|
|
7
19
|
//
|
|
8
|
-
//
|
|
20
|
+
// "Acme" and every name, quote, and competitor below are placeholders.
|
|
21
|
+
// Replace them with your product's real copy before you launch.
|
|
9
22
|
|
|
10
23
|
/* ----------------------------- types ----------------------------- */
|
|
11
24
|
|
|
@@ -13,15 +26,21 @@ export type ProductFeature = { title: string; body: string };
|
|
|
13
26
|
|
|
14
27
|
export type Product = {
|
|
15
28
|
slug: string;
|
|
16
|
-
icon:
|
|
17
|
-
title: string; // nav label
|
|
18
|
-
tagline: string; // one
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
summary: string; // page hero paragraph
|
|
29
|
+
icon: LucideIcon;
|
|
30
|
+
title: string; // nav label and page subject
|
|
31
|
+
tagline: string; // one line for the nav menu
|
|
32
|
+
headline: string; // section and page heading
|
|
33
|
+
summary: string; // section and page paragraph
|
|
22
34
|
features: ProductFeature[];
|
|
23
|
-
|
|
24
|
-
|
|
35
|
+
// A capture of this app's own dashboard (scripts/capture-screenshots.mjs).
|
|
36
|
+
screenshot: string;
|
|
37
|
+
screenshotAlt: string;
|
|
38
|
+
// The region of the screenshot the landing page shows, as fractions of
|
|
39
|
+
// its width and height (see ProductShot in components/marketing.tsx).
|
|
40
|
+
crop: { left: number; top: number; width: number; ratio: number };
|
|
41
|
+
// Shown as a section on the landing page. Every product gets its own
|
|
42
|
+
// /products/<slug> page either way.
|
|
43
|
+
onLanding: boolean;
|
|
25
44
|
};
|
|
26
45
|
|
|
27
46
|
export type ContentSection = { title: string; body: string };
|
|
@@ -29,8 +48,7 @@ export type ContentSection = { title: string; body: string };
|
|
|
29
48
|
export type SitePage = {
|
|
30
49
|
slug: string;
|
|
31
50
|
navLabel: string; // label in nav/footer
|
|
32
|
-
|
|
33
|
-
title: string; // hero headline
|
|
51
|
+
title: string; // page heading
|
|
34
52
|
summary: string;
|
|
35
53
|
sections: ContentSection[];
|
|
36
54
|
};
|
|
@@ -45,8 +63,6 @@ export type Comparison = {
|
|
|
45
63
|
};
|
|
46
64
|
|
|
47
65
|
export type Social = { label: string; href: string; path: string };
|
|
48
|
-
export type TextItem = { title: string; body: string };
|
|
49
|
-
export type IconItem = { icon: string; title: string; body: string };
|
|
50
66
|
export type Quote = { quote: string; name: string; role: string };
|
|
51
67
|
export type Plan = {
|
|
52
68
|
name: string;
|
|
@@ -58,51 +74,35 @@ export type Plan = {
|
|
|
58
74
|
features: string[];
|
|
59
75
|
};
|
|
60
76
|
export type Faq = { q: string; a: string };
|
|
77
|
+
export type ResourceLink = { icon: LucideIcon; title: string; desc: string; href: string };
|
|
61
78
|
|
|
62
79
|
export type SiteConfig = {
|
|
63
80
|
brand: {
|
|
64
81
|
name: string;
|
|
65
82
|
letter: string; // logo monogram
|
|
66
|
-
domain: string;
|
|
83
|
+
domain: string;
|
|
67
84
|
email: string;
|
|
68
85
|
footerBlurb: string;
|
|
69
86
|
copyrightName: string;
|
|
70
87
|
socials: Social[];
|
|
71
88
|
};
|
|
72
|
-
//
|
|
89
|
+
// Accent + surfaces. Applied as CSS vars on <html> in layout.tsx.
|
|
73
90
|
colors: { brand: string; brandSoft: string; paper: string };
|
|
74
91
|
seo: { title: string; description: string };
|
|
75
92
|
hero: {
|
|
76
|
-
badge: string;
|
|
77
93
|
headline: string;
|
|
78
94
|
subcopy: string;
|
|
79
|
-
|
|
95
|
+
note: string;
|
|
96
|
+
screenshot: string;
|
|
97
|
+
screenshotAlt: string;
|
|
80
98
|
};
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
eyebrow: string;
|
|
87
|
-
headline: string;
|
|
88
|
-
paragraphs: string[];
|
|
89
|
-
items: TextItem[];
|
|
90
|
-
};
|
|
91
|
-
customers: { eyebrow: string; title: string; body: string; quotes: Quote[] };
|
|
92
|
-
gettingStarted: { eyebrow: string; headline: string; body: string; steps: TextItem[] };
|
|
93
|
-
pricing: { eyebrow: string; headline: string; body: string; plans: Plan[] };
|
|
94
|
-
team: { eyebrow: string; headline: string; body: string; items: TextItem[] };
|
|
95
|
-
finalCta: {
|
|
96
|
-
eyebrow: string;
|
|
97
|
-
headline: string;
|
|
98
|
-
bodyLead: string;
|
|
99
|
-
highlight: string;
|
|
100
|
-
bodyTail: string;
|
|
101
|
-
cta: string;
|
|
102
|
-
footnote: string;
|
|
103
|
-
};
|
|
104
|
-
faq: { eyebrow: string; headline: string; items: Faq[] };
|
|
99
|
+
// One customer quote. Leave `quote` empty to hide the section.
|
|
100
|
+
quote: Quote;
|
|
101
|
+
pricing: { headline: string; body: string; plans: Plan[] };
|
|
102
|
+
finalCta: { headline: string; body: string; cta: string };
|
|
103
|
+
faq: { headline: string; items: Faq[] };
|
|
105
104
|
products: Product[];
|
|
105
|
+
resourcesMenu: ResourceLink[];
|
|
106
106
|
solutions: SitePage[];
|
|
107
107
|
resources: SitePage[];
|
|
108
108
|
company: SitePage[];
|
|
@@ -115,10 +115,9 @@ export const siteConfig: SiteConfig = {
|
|
|
115
115
|
brand: {
|
|
116
116
|
name: "Acme",
|
|
117
117
|
letter: "A",
|
|
118
|
-
domain: "acme.
|
|
118
|
+
domain: "acme.example",
|
|
119
119
|
email: "hello@acme.example",
|
|
120
|
-
footerBlurb:
|
|
121
|
-
"Plan, build, and ship with projects, docs, and automation in one workspace.",
|
|
120
|
+
footerBlurb: "Projects, tasks, and the people doing them, in one shared workspace.",
|
|
122
121
|
copyrightName: "Acme, Inc.",
|
|
123
122
|
socials: [
|
|
124
123
|
{
|
|
@@ -134,154 +133,33 @@ export const siteConfig: SiteConfig = {
|
|
|
134
133
|
],
|
|
135
134
|
},
|
|
136
135
|
|
|
137
|
-
colors: { brand: "#
|
|
136
|
+
colors: { brand: "#4353ff", brandSoft: "#eef0ff", paper: "#fafafa" },
|
|
138
137
|
|
|
139
138
|
seo: {
|
|
140
|
-
title: "Acme
|
|
139
|
+
title: "Acme: projects and tasks for small teams",
|
|
141
140
|
description:
|
|
142
|
-
"Acme
|
|
141
|
+
"Acme is a shared workspace for your team's projects and tasks. Assign work, set due dates, and see every change as it happens.",
|
|
143
142
|
},
|
|
144
143
|
|
|
145
144
|
hero: {
|
|
146
|
-
|
|
147
|
-
headline: "The workspace where work gets done.",
|
|
145
|
+
headline: "Track every project and task your team is working on.",
|
|
148
146
|
subcopy:
|
|
149
|
-
"Acme
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
logoCloud: {
|
|
154
|
-
label: "Powering fast-moving teams",
|
|
155
|
-
companies: ["Northwind", "Globex", "Initech", "Umbrella", "Soylent", "Hooli"],
|
|
156
|
-
},
|
|
157
|
-
|
|
158
|
-
outcomes: {
|
|
159
|
-
eyebrow: "Why Acme",
|
|
160
|
-
headline: "Keep work moving from kickoff to launch.",
|
|
161
|
-
body: "Most teams lose work somewhere between the kickoff and the ship date. Acme keeps the whole path in one place, so every idea has a clear route from planned, to in progress, to done.",
|
|
162
|
-
items: [
|
|
163
|
-
{
|
|
164
|
-
title: "Work in one place",
|
|
165
|
-
body: "Plans, tasks, and docs live together, so nothing gets lost between tools.",
|
|
166
|
-
},
|
|
167
|
-
{
|
|
168
|
-
title: "Clear priorities",
|
|
169
|
-
body: "Everyone can see what is planned, in progress, and done — and why.",
|
|
170
|
-
},
|
|
171
|
-
{
|
|
172
|
-
title: "Real-time by default",
|
|
173
|
-
body: "Every change syncs instantly, so the workspace is the same on every screen.",
|
|
174
|
-
},
|
|
175
|
-
{
|
|
176
|
-
title: "Less busywork",
|
|
177
|
-
body: "Automations handle the routine, so your team focuses on the work that matters.",
|
|
178
|
-
},
|
|
179
|
-
],
|
|
147
|
+
"Acme keeps your projects, tasks, and owners in one shared workspace. A change made by one teammate shows up on everyone's screen within a second.",
|
|
148
|
+
note: `Free for up to ${FREE_PROJECT_LIMIT} projects. No card required.`,
|
|
149
|
+
screenshot: "/screenshots/overview.png",
|
|
150
|
+
screenshotAlt: "The Acme overview: open tasks by due date, project progress, and recently completed work",
|
|
180
151
|
},
|
|
181
152
|
|
|
182
|
-
|
|
153
|
+
quote: {
|
|
183
154
|
quote:
|
|
184
|
-
"
|
|
185
|
-
name: "
|
|
186
|
-
role: "
|
|
187
|
-
},
|
|
188
|
-
|
|
189
|
-
entryPoints: {
|
|
190
|
-
eyebrow: "Anywhere",
|
|
191
|
-
title: "Meet your team where they already are.",
|
|
192
|
-
body: "Web, desktop, and a typed API all share the same workspace underneath, so nothing lives in two places.",
|
|
193
|
-
items: [
|
|
194
|
-
{
|
|
195
|
-
icon: "◇",
|
|
196
|
-
title: "Cloud workspace",
|
|
197
|
-
body: "Your whole team works in the browser. Nothing to install, always up to date, and secure by default.",
|
|
198
|
-
},
|
|
199
|
-
{
|
|
200
|
-
icon: "◆",
|
|
201
|
-
title: "Open API",
|
|
202
|
-
body: "A typed API and webhooks for everything in Acme, so you can wire it into the rest of your stack.",
|
|
203
|
-
},
|
|
204
|
-
],
|
|
205
|
-
},
|
|
206
|
-
|
|
207
|
-
engagement: {
|
|
208
|
-
eyebrow: "Momentum",
|
|
209
|
-
headline: "Most tools go quiet after the kickoff.",
|
|
210
|
-
paragraphs: [
|
|
211
|
-
"Someone shares an idea, it lands in a list, and that is the last anyone hears of it. Acme treats every idea as the start of a loop, not the end of one.",
|
|
212
|
-
"When the status moves to planned, the people who care hear about it. When it ships, they hear about it first. And every week a digest pulls them back with the work worth weighing in on.",
|
|
213
|
-
"The loop starts running the same day, without a separate configuration step.",
|
|
214
|
-
],
|
|
215
|
-
items: [
|
|
216
|
-
{
|
|
217
|
-
title: "The loop",
|
|
218
|
-
body: "Submission, acknowledgment, progress, launch. Four moments every person gets to feel heard.",
|
|
219
|
-
},
|
|
220
|
-
{
|
|
221
|
-
title: "Instant alerts",
|
|
222
|
-
body: "The moment someone votes or comments on their idea, social proof brings them back.",
|
|
223
|
-
},
|
|
224
|
-
{
|
|
225
|
-
title: "Launch alerts",
|
|
226
|
-
body: "The note that tells a person the thing they asked for just shipped. Nothing builds loyalty faster.",
|
|
227
|
-
},
|
|
228
|
-
{
|
|
229
|
-
title: "Weekly digest",
|
|
230
|
-
body: "The top ideas across your boards, delivered every week, with a one-click way to weigh in.",
|
|
231
|
-
},
|
|
232
|
-
],
|
|
233
|
-
},
|
|
234
|
-
|
|
235
|
-
customers: {
|
|
236
|
-
eyebrow: "Customers",
|
|
237
|
-
title: "Teams that ship with Acme.",
|
|
238
|
-
body: "A few words from the people who run their work in Acme every day.",
|
|
239
|
-
quotes: [
|
|
240
|
-
{
|
|
241
|
-
quote:
|
|
242
|
-
"The whole team sees the same work, so we spend less time in status meetings.",
|
|
243
|
-
name: "Daniel Reyes",
|
|
244
|
-
role: "Founder, Globex",
|
|
245
|
-
},
|
|
246
|
-
{
|
|
247
|
-
quote:
|
|
248
|
-
"We replaced five disconnected tools with one place to plan the work.",
|
|
249
|
-
name: "Hannah Brooks",
|
|
250
|
-
role: "Founder, OpenLane",
|
|
251
|
-
},
|
|
252
|
-
{
|
|
253
|
-
quote:
|
|
254
|
-
"People can follow their ideas from submission to launch, which helps us keep them involved.",
|
|
255
|
-
name: "Marcus Bell",
|
|
256
|
-
role: "Cofounder, Initech",
|
|
257
|
-
},
|
|
258
|
-
],
|
|
259
|
-
},
|
|
260
|
-
|
|
261
|
-
gettingStarted: {
|
|
262
|
-
eyebrow: "Get started",
|
|
263
|
-
headline: "Up and running in 60 seconds.",
|
|
264
|
-
body: "Start with an email and a workspace name. No credit card or sales call required.",
|
|
265
|
-
steps: [
|
|
266
|
-
{
|
|
267
|
-
title: "Create a workspace",
|
|
268
|
-
body: "Enter an email and choose a workspace name.",
|
|
269
|
-
},
|
|
270
|
-
{
|
|
271
|
-
title: "Invite your team",
|
|
272
|
-
body: "Add teammates, share the board URL, or link it from your site. Work starts flowing in.",
|
|
273
|
-
},
|
|
274
|
-
{
|
|
275
|
-
title: "Watch the loop start",
|
|
276
|
-
body: "People add ideas, votes pile up, you ship, and everyone hears about it and comes back with more.",
|
|
277
|
-
},
|
|
278
|
-
],
|
|
155
|
+
"We dropped our Monday status meeting. Everyone opens the overview, sees what is due this week, and gets to work.",
|
|
156
|
+
name: "Priya Raman",
|
|
157
|
+
role: "Engineering lead, Fieldnote",
|
|
279
158
|
},
|
|
280
159
|
|
|
281
160
|
pricing: {
|
|
282
|
-
|
|
283
|
-
|
|
284
|
-
body: "Start free. Try Pro free for two weeks, and pay yearly to save.",
|
|
161
|
+
headline: "Pricing",
|
|
162
|
+
body: `Start free. Pro removes the project limit and starts with a ${TRIAL_DAYS}-day free trial.`,
|
|
285
163
|
// Derived from lib/plans.ts, the catalog the Billing tab and the server
|
|
286
164
|
// cap read, so marketing and billing can't disagree on a price.
|
|
287
165
|
plans: PLANS.map((p) => ({
|
|
@@ -295,213 +173,145 @@ export const siteConfig: SiteConfig = {
|
|
|
295
173
|
})),
|
|
296
174
|
},
|
|
297
175
|
|
|
298
|
-
team: {
|
|
299
|
-
eyebrow: "The team",
|
|
300
|
-
headline: "Built by people who use it every day.",
|
|
301
|
-
body: "Acme is built by a small team that got tired of clunky, overpriced tools. Every feature earns its place by being something worth using every day.",
|
|
302
|
-
items: [
|
|
303
|
-
{
|
|
304
|
-
title: "A small team",
|
|
305
|
-
body: "A small team decides what is worth building and ships it.",
|
|
306
|
-
},
|
|
307
|
-
{
|
|
308
|
-
title: "Design first",
|
|
309
|
-
body: "Beautiful software makes people want to use it. Every screen is built with that in mind.",
|
|
310
|
-
},
|
|
311
|
-
{
|
|
312
|
-
title: "Ships every week",
|
|
313
|
-
body: "Updates go out weekly, often based on work posted directly to our own board.",
|
|
314
|
-
},
|
|
315
|
-
{
|
|
316
|
-
title: "Customer funded",
|
|
317
|
-
body: "We optimize for your renewal, not an exit. If Acme works for you, it works for us.",
|
|
318
|
-
},
|
|
319
|
-
],
|
|
320
|
-
},
|
|
321
|
-
|
|
322
176
|
finalCta: {
|
|
323
|
-
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
highlight: "one shared workspace",
|
|
327
|
-
bodyTail: ".",
|
|
328
|
-
cta: "Start building with Acme",
|
|
329
|
-
footnote: "Free to start · No credit card · Cancel anytime",
|
|
177
|
+
headline: "Set up your workspace",
|
|
178
|
+
body: "Create an account, name your workspace, and add your first project. Sample projects are one click away if you want to look around first.",
|
|
179
|
+
cta: "Create a free account",
|
|
330
180
|
},
|
|
331
181
|
|
|
332
182
|
faq: {
|
|
333
|
-
|
|
334
|
-
headline: "Frequently asked.",
|
|
183
|
+
headline: "Questions",
|
|
335
184
|
items: [
|
|
336
185
|
{
|
|
337
|
-
q: "
|
|
338
|
-
a:
|
|
186
|
+
q: "What counts toward the free plan's limit?",
|
|
187
|
+
a: `Active projects. A free workspace can have ${FREE_PROJECT_LIMIT} at a time. Archived projects don't count, and tasks and members are unlimited on every plan.`,
|
|
188
|
+
},
|
|
189
|
+
{
|
|
190
|
+
q: "How does the Pro trial work?",
|
|
191
|
+
a: `Pro starts with ${TRIAL_DAYS} days free. Checkout asks for a card, and you are charged when the trial ends unless you cancel from Billing first.`,
|
|
339
192
|
},
|
|
340
193
|
{
|
|
341
|
-
q: "
|
|
342
|
-
a: "
|
|
194
|
+
q: "Who can see a workspace's projects?",
|
|
195
|
+
a: "Only its members. Each workspace's projects and tasks are stored separately, and people outside it can't read or change them.",
|
|
343
196
|
},
|
|
344
197
|
{
|
|
345
|
-
q: "
|
|
346
|
-
a: "
|
|
198
|
+
q: "What can each role do?",
|
|
199
|
+
a: "Owners and admins invite people, change roles, and manage billing. Members create and edit projects and tasks.",
|
|
347
200
|
},
|
|
348
201
|
{
|
|
349
|
-
q: "
|
|
350
|
-
a: "
|
|
202
|
+
q: "Can I belong to more than one workspace?",
|
|
203
|
+
a: "Yes. Switch between them from the menu at the top of the sidebar.",
|
|
351
204
|
},
|
|
352
205
|
],
|
|
353
206
|
},
|
|
354
207
|
|
|
355
208
|
products: [
|
|
356
209
|
{
|
|
357
|
-
slug: "
|
|
358
|
-
icon:
|
|
359
|
-
title: "
|
|
360
|
-
tagline: "
|
|
361
|
-
|
|
362
|
-
headline: "Plan every project in one place.",
|
|
363
|
-
summary:
|
|
364
|
-
"Give your team one place to plan the work, see what is in flight, and keep every project moving toward done.",
|
|
365
|
-
mockupUrl: "acme.app/projects",
|
|
366
|
-
mockupLabel: "Projects board",
|
|
367
|
-
features: [
|
|
368
|
-
{ title: "Flexible views", body: "See the work as a board, a list, or a timeline — whatever fits the team." },
|
|
369
|
-
{ title: "Milestones", body: "Group work into milestones so everyone knows what ships next." },
|
|
370
|
-
{ title: "Dependencies", body: "Link related work so blockers surface before they bite." },
|
|
371
|
-
{ title: "Custom fields", body: "Track the details that matter to your team, your way." },
|
|
372
|
-
{ title: "Templates", body: "Start new projects from a template instead of a blank page." },
|
|
373
|
-
{ title: "Saved filters", body: "Slice the work by owner, status, or label in a single click." },
|
|
374
|
-
],
|
|
375
|
-
},
|
|
376
|
-
{
|
|
377
|
-
slug: "tasks",
|
|
378
|
-
icon: "✓",
|
|
379
|
-
title: "Tasks",
|
|
380
|
-
tagline: "Assign, prioritize, and finish work.",
|
|
381
|
-
eyebrow: "Tasks",
|
|
382
|
-
headline: "Turn plans into finished work.",
|
|
210
|
+
slug: "boards",
|
|
211
|
+
icon: KanbanSquare,
|
|
212
|
+
title: "Task boards",
|
|
213
|
+
tagline: "A board with four columns for every project.",
|
|
214
|
+
headline: "A board for every project",
|
|
383
215
|
summary:
|
|
384
|
-
"
|
|
385
|
-
|
|
386
|
-
|
|
216
|
+
"Tasks sit in four columns: To do, In progress, In review, and Done. Give each one a priority, an owner, and a due date, and change its status right from the card.",
|
|
217
|
+
screenshot: "/screenshots/board.png",
|
|
218
|
+
screenshotAlt: "A project board with tasks in To do, In progress, In review, and Done",
|
|
219
|
+
crop: { left: 0.17, top: 0.07, width: 0.82, ratio: 2 },
|
|
220
|
+
onLanding: true,
|
|
387
221
|
features: [
|
|
388
|
-
{ title: "
|
|
389
|
-
{ title: "
|
|
390
|
-
{ title: "
|
|
391
|
-
{ title: "
|
|
392
|
-
{ title: "My work", body: "A personal view of everything on your plate, across projects." },
|
|
393
|
-
{ title: "Recurring tasks", body: "Set it once and the task comes back when it should." },
|
|
222
|
+
{ title: "Four statuses", body: "To do, In progress, In review, and Done, in that order on every board." },
|
|
223
|
+
{ title: "Priorities", body: "Urgent, high, medium, or low. Urgent work sorts to the top of its column." },
|
|
224
|
+
{ title: "Owners and due dates", body: "Assign a teammate and a date. Overdue tasks turn red." },
|
|
225
|
+
{ title: "Live changes", body: "When a teammate moves a card, it moves on your screen too." },
|
|
394
226
|
],
|
|
395
227
|
},
|
|
396
228
|
{
|
|
397
|
-
slug: "
|
|
398
|
-
icon:
|
|
399
|
-
title: "
|
|
400
|
-
tagline: "
|
|
401
|
-
|
|
402
|
-
headline: "Keep what your team knows in one place.",
|
|
229
|
+
slug: "overview",
|
|
230
|
+
icon: LayoutGrid,
|
|
231
|
+
title: "Overview",
|
|
232
|
+
tagline: "What is due, and how each project is going.",
|
|
233
|
+
headline: "See what is due this week",
|
|
403
234
|
summary:
|
|
404
|
-
"
|
|
405
|
-
|
|
406
|
-
|
|
235
|
+
"The overview lists open tasks by due date, shows progress for each project, and lists what the team finished recently. Filter to the tasks assigned to you.",
|
|
236
|
+
screenshot: "/screenshots/overview.png",
|
|
237
|
+
screenshotAlt: "The overview with open tasks by due date and project progress",
|
|
238
|
+
crop: { left: 0.195, top: 0.3, width: 0.77, ratio: 16 / 9 },
|
|
239
|
+
onLanding: true,
|
|
407
240
|
features: [
|
|
408
|
-
{ title: "
|
|
409
|
-
{ title: "
|
|
410
|
-
{ title: "
|
|
411
|
-
{ title: "
|
|
412
|
-
{ title: "Templates", body: "Spin up specs, briefs, and notes from reusable templates." },
|
|
413
|
-
{ title: "Instant search", body: "Find any doc by title or content in milliseconds." },
|
|
241
|
+
{ title: "Up next", body: "Open tasks across every project, earliest due date first." },
|
|
242
|
+
{ title: "Assigned to me", body: "One click narrows the list to your own work." },
|
|
243
|
+
{ title: "Project progress", body: "Done and total tasks for each active project." },
|
|
244
|
+
{ title: "Weekly count", body: "Tasks completed in the last seven days." },
|
|
414
245
|
],
|
|
415
246
|
},
|
|
416
247
|
{
|
|
417
|
-
slug: "
|
|
418
|
-
icon:
|
|
419
|
-
title: "
|
|
420
|
-
tagline: "
|
|
421
|
-
|
|
422
|
-
headline: "Let the routine work run itself.",
|
|
248
|
+
slug: "projects",
|
|
249
|
+
icon: FolderKanban,
|
|
250
|
+
title: "Projects",
|
|
251
|
+
tagline: "Every project with its progress.",
|
|
252
|
+
headline: "Progress for every project",
|
|
423
253
|
summary:
|
|
424
|
-
"
|
|
425
|
-
|
|
426
|
-
|
|
254
|
+
"Each project shows its open tasks and a progress bar. Archive a finished project to keep the list short, and restore it when you need it again.",
|
|
255
|
+
screenshot: "/screenshots/projects.png",
|
|
256
|
+
screenshotAlt: "The projects list with progress bars and open task counts",
|
|
257
|
+
crop: { left: 0.27, top: 0.1, width: 0.7, ratio: 16 / 7 },
|
|
258
|
+
onLanding: false,
|
|
427
259
|
features: [
|
|
428
|
-
{ title: "
|
|
429
|
-
{ title: "
|
|
430
|
-
{ title: "
|
|
431
|
-
{ title: "
|
|
260
|
+
{ title: "Progress bars", body: "The share of each project's tasks that are done." },
|
|
261
|
+
{ title: "Archive and restore", body: "Archived projects keep their tasks and leave the active list." },
|
|
262
|
+
{ title: "Descriptions", body: "A line under each name that says what the project delivers." },
|
|
263
|
+
{ title: "Delete with tasks", body: "Deleting a project removes its tasks with it." },
|
|
432
264
|
],
|
|
433
265
|
},
|
|
434
266
|
{
|
|
435
|
-
slug: "
|
|
436
|
-
icon:
|
|
437
|
-
title: "
|
|
438
|
-
tagline: "
|
|
439
|
-
|
|
440
|
-
headline: "See how the work is really going.",
|
|
267
|
+
slug: "members",
|
|
268
|
+
icon: Users,
|
|
269
|
+
title: "Members and roles",
|
|
270
|
+
tagline: "Invite your team and set who can do what.",
|
|
271
|
+
headline: "Workspaces, members, and roles",
|
|
441
272
|
summary:
|
|
442
|
-
"
|
|
443
|
-
|
|
444
|
-
|
|
273
|
+
"Invite people by email. Owners and admins manage members and billing, and members work on projects and tasks. A workspace's data is visible only to its members.",
|
|
274
|
+
screenshot: "/screenshots/members.png",
|
|
275
|
+
screenshotAlt: "The members page with four members and two pending invitations",
|
|
276
|
+
crop: { left: 0.3, top: 0.07, width: 0.54, ratio: 16 / 10 },
|
|
277
|
+
onLanding: true,
|
|
445
278
|
features: [
|
|
446
|
-
{ title: "
|
|
447
|
-
{ title: "
|
|
448
|
-
{ title: "
|
|
449
|
-
{ title: "
|
|
279
|
+
{ title: "Email invites", body: "Invitees get a link that adds them to the workspace." },
|
|
280
|
+
{ title: "Three roles", body: "Owner, admin, and member, changeable at any time." },
|
|
281
|
+
{ title: "Many workspaces", body: "One account can belong to several workspaces." },
|
|
282
|
+
{ title: "Private by default", body: "People outside a workspace can't read its projects or tasks." },
|
|
450
283
|
],
|
|
451
284
|
},
|
|
452
285
|
],
|
|
453
286
|
|
|
287
|
+
resourcesMenu: [
|
|
288
|
+
{ icon: BookOpen, title: "Docs", desc: "Set up and use Acme.", href: "/resources/docs" },
|
|
289
|
+
{ icon: History, title: "Changelog", desc: "What changed, week by week.", href: "/resources/changelog" },
|
|
290
|
+
{ icon: Code2, title: "API reference", desc: "Read and write your workspace from code.", href: "/resources/api" },
|
|
291
|
+
{ icon: LifeBuoy, title: "Contact", desc: "Talk to the team behind Acme.", href: "/company/contact" },
|
|
292
|
+
],
|
|
293
|
+
|
|
454
294
|
solutions: [
|
|
455
295
|
{
|
|
456
296
|
slug: "startups",
|
|
457
297
|
navLabel: "For startups",
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
summary:
|
|
461
|
-
"Keep a small team aligned as everything changes weekly. Acme gives you one place to plan, build, and ship before the next pivot.",
|
|
298
|
+
title: "Keep a small team on the same page",
|
|
299
|
+
summary: "One workspace for every project, with the owner and due date of each task in plain view.",
|
|
462
300
|
sections: [
|
|
463
|
-
{ title: "
|
|
464
|
-
{ title: "
|
|
465
|
-
{ title: "
|
|
301
|
+
{ title: "Set up in minutes", body: "Name the workspace, invite the team, and add a project." },
|
|
302
|
+
{ title: "Free to start", body: `Up to ${FREE_PROJECT_LIMIT} active projects on the free plan.` },
|
|
303
|
+
{ title: "Room to grow", body: "Pro removes the project limit when you need more." },
|
|
466
304
|
],
|
|
467
305
|
},
|
|
468
306
|
{
|
|
469
307
|
slug: "agencies",
|
|
470
308
|
navLabel: "For agencies",
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
summary:
|
|
474
|
-
"Give each client their own space, keep the work organized, and show progress without a status meeting.",
|
|
309
|
+
title: "One workspace per client",
|
|
310
|
+
summary: "Keep each client's projects in a separate workspace and switch between them from the sidebar.",
|
|
475
311
|
sections: [
|
|
476
|
-
{ title: "
|
|
477
|
-
{ title: "
|
|
478
|
-
{ title: "
|
|
479
|
-
],
|
|
480
|
-
},
|
|
481
|
-
{
|
|
482
|
-
slug: "enterprise",
|
|
483
|
-
navLabel: "For enterprise",
|
|
484
|
-
eyebrow: "Solutions",
|
|
485
|
-
title: "Scale without the chaos.",
|
|
486
|
-
summary:
|
|
487
|
-
"Bring hundreds of people into one system of record, with the controls and visibility a larger org needs.",
|
|
488
|
-
sections: [
|
|
489
|
-
{ title: "SSO and roles", body: "Single sign-on and granular roles keep access where it belongs." },
|
|
490
|
-
{ title: "Audit log", body: "A complete record of who changed what, and when." },
|
|
491
|
-
{ title: "Rollups", body: "See progress across teams and departments in one view." },
|
|
492
|
-
],
|
|
493
|
-
},
|
|
494
|
-
{
|
|
495
|
-
slug: "teams",
|
|
496
|
-
navLabel: "For teams",
|
|
497
|
-
eyebrow: "Solutions",
|
|
498
|
-
title: "Match Acme to your workflow.",
|
|
499
|
-
summary:
|
|
500
|
-
"Custom fields and statuses adapt Acme to product, design, marketing, and support workflows.",
|
|
501
|
-
sections: [
|
|
502
|
-
{ title: "Your workflow", body: "Custom statuses and fields match the way your team already works." },
|
|
503
|
-
{ title: "Cross-team work", body: "Hand work between teams without it falling through a crack." },
|
|
504
|
-
{ title: "Less status-chasing", body: "Everyone sees the same live picture, so updates write themselves." },
|
|
312
|
+
{ title: "Separate data", body: "A client's workspace is visible only to the people you invite to it." },
|
|
313
|
+
{ title: "Invite the client", body: "Add client contacts as members so they can follow the board." },
|
|
314
|
+
{ title: "Archive finished work", body: "Archived projects keep their history out of the active list." },
|
|
505
315
|
],
|
|
506
316
|
},
|
|
507
317
|
],
|
|
@@ -510,61 +320,34 @@ export const siteConfig: SiteConfig = {
|
|
|
510
320
|
{
|
|
511
321
|
slug: "docs",
|
|
512
322
|
navLabel: "Docs",
|
|
513
|
-
|
|
514
|
-
|
|
515
|
-
summary: "Set up Acme, invite your team, and configure projects, automations, and integrations.",
|
|
323
|
+
title: "Documentation",
|
|
324
|
+
summary: "How to set up a workspace, invite your team, and run projects in Acme.",
|
|
516
325
|
sections: [
|
|
517
|
-
{ title: "Getting started", body: "Create a workspace, invite your team, and
|
|
518
|
-
{ title: "
|
|
519
|
-
{ title: "
|
|
520
|
-
],
|
|
521
|
-
},
|
|
522
|
-
{
|
|
523
|
-
slug: "guides",
|
|
524
|
-
navLabel: "Guides",
|
|
525
|
-
eyebrow: "Resources",
|
|
526
|
-
title: "Guides and playbooks.",
|
|
527
|
-
summary: "Practical walkthroughs for getting the most out of Acme.",
|
|
528
|
-
sections: [
|
|
529
|
-
{ title: "Run a sprint", body: "Plan, track, and review a two-week cycle in Acme." },
|
|
530
|
-
{ title: "Automate intake", body: "Route incoming work to the right team automatically." },
|
|
531
|
-
{ title: "Report to leadership", body: "Build a dashboard that answers the questions you get asked." },
|
|
326
|
+
{ title: "Getting started", body: "Create a workspace, invite your team, and add your first project." },
|
|
327
|
+
{ title: "Boards", body: "Statuses, priorities, owners, and due dates." },
|
|
328
|
+
{ title: "Billing", body: "Plans, the Pro trial, and invoices." },
|
|
532
329
|
],
|
|
533
330
|
},
|
|
534
331
|
{
|
|
535
332
|
slug: "changelog",
|
|
536
333
|
navLabel: "Changelog",
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
summary: "Every improvement we ship, in one place.",
|
|
334
|
+
title: "Changelog",
|
|
335
|
+
summary: "What we shipped, newest first.",
|
|
540
336
|
sections: [
|
|
541
|
-
{ title: "This week", body: "
|
|
542
|
-
{ title: "Last week", body: "
|
|
543
|
-
{ title: "Earlier", body: "
|
|
337
|
+
{ title: "This week", body: "An Up next list on the overview, sorted by due date." },
|
|
338
|
+
{ title: "Last week", body: "Archive and restore for projects." },
|
|
339
|
+
{ title: "Earlier", body: "Task boards with priorities and due dates." },
|
|
544
340
|
],
|
|
545
341
|
},
|
|
546
342
|
{
|
|
547
343
|
slug: "api",
|
|
548
344
|
navLabel: "API reference",
|
|
549
|
-
|
|
550
|
-
|
|
551
|
-
summary: "A typed REST API and webhooks for everything in Acme.",
|
|
345
|
+
title: "API reference",
|
|
346
|
+
summary: "Read and write your workspace's projects and tasks over HTTP.",
|
|
552
347
|
sections: [
|
|
553
|
-
{ title: "Authentication", body: "
|
|
554
|
-
{ title: "
|
|
555
|
-
{ title: "
|
|
556
|
-
],
|
|
557
|
-
},
|
|
558
|
-
{
|
|
559
|
-
slug: "status",
|
|
560
|
-
navLabel: "Status",
|
|
561
|
-
eyebrow: "Resources",
|
|
562
|
-
title: "System status.",
|
|
563
|
-
summary: "Live status for every Acme service.",
|
|
564
|
-
sections: [
|
|
565
|
-
{ title: "API", body: "Operational — 99.99% over the last 90 days." },
|
|
566
|
-
{ title: "Web app", body: "Operational — no incidents this week." },
|
|
567
|
-
{ title: "Webhooks", body: "Operational — delivering within seconds." },
|
|
348
|
+
{ title: "Authentication", body: "Requests carry a session token scoped to one workspace." },
|
|
349
|
+
{ title: "Projects and tasks", body: "List, create, and update them with the same checks the app uses." },
|
|
350
|
+
{ title: "Live updates", body: "Subscribe to changes over a WebSocket." },
|
|
568
351
|
],
|
|
569
352
|
},
|
|
570
353
|
],
|
|
@@ -573,92 +356,63 @@ export const siteConfig: SiteConfig = {
|
|
|
573
356
|
{
|
|
574
357
|
slug: "about",
|
|
575
358
|
navLabel: "About",
|
|
576
|
-
|
|
577
|
-
|
|
578
|
-
summary: "We build the workspace we always wanted: fast, focused, and a pleasure to use.",
|
|
359
|
+
title: "About Acme",
|
|
360
|
+
summary: "A small team building a fast, focused place to track work.",
|
|
579
361
|
sections: [
|
|
580
|
-
{ title: "
|
|
581
|
-
{ title: "How we work", body: "Small team, weekly releases
|
|
582
|
-
{ title: "Where we are", body: "Remote
|
|
583
|
-
],
|
|
584
|
-
},
|
|
585
|
-
{
|
|
586
|
-
slug: "blog",
|
|
587
|
-
navLabel: "Blog",
|
|
588
|
-
eyebrow: "Company",
|
|
589
|
-
title: "The Acme blog.",
|
|
590
|
-
summary: "Notes on building Acme, and on building product in general.",
|
|
591
|
-
sections: [
|
|
592
|
-
{ title: "Why one tool beats ten", body: "The hidden cost of stitching your stack together." },
|
|
593
|
-
{ title: "Shipping weekly", body: "How a small team keeps a steady release cadence." },
|
|
594
|
-
{ title: "Designing for focus", body: "The principles behind the Acme interface." },
|
|
595
|
-
],
|
|
596
|
-
},
|
|
597
|
-
{
|
|
598
|
-
slug: "careers",
|
|
599
|
-
navLabel: "Careers",
|
|
600
|
-
eyebrow: "Company",
|
|
601
|
-
title: "Work at Acme.",
|
|
602
|
-
summary: "We are a small team that ships a lot. If that sounds good, come build with us.",
|
|
603
|
-
sections: [
|
|
604
|
-
{ title: "Engineering", body: "Full-stack engineers who care about craft and speed." },
|
|
605
|
-
{ title: "Design", body: "Product designers who sweat the details." },
|
|
606
|
-
{ title: "Support", body: "People who love helping customers succeed." },
|
|
362
|
+
{ title: "What we build", body: "Project and task tracking for teams of two to fifty." },
|
|
363
|
+
{ title: "How we work", body: "Small team, weekly releases." },
|
|
364
|
+
{ title: "Where we are", body: "Remote, across several time zones." },
|
|
607
365
|
],
|
|
608
366
|
},
|
|
609
367
|
{
|
|
610
368
|
slug: "contact",
|
|
611
369
|
navLabel: "Contact",
|
|
612
|
-
|
|
613
|
-
|
|
614
|
-
summary: "Contact the Acme team about sales, support, or press.",
|
|
370
|
+
title: "Contact",
|
|
371
|
+
summary: "Reach the Acme team about sales, support, or press.",
|
|
615
372
|
sections: [
|
|
616
|
-
{ title: "Sales", body: "
|
|
617
|
-
{ title: "Support", body: "
|
|
618
|
-
{ title: "Press", body: "
|
|
373
|
+
{ title: "Sales", body: "hello@acme.example" },
|
|
374
|
+
{ title: "Support", body: "support@acme.example, answered within one business day." },
|
|
375
|
+
{ title: "Press", body: "press@acme.example" },
|
|
619
376
|
],
|
|
620
377
|
},
|
|
621
378
|
{
|
|
622
379
|
slug: "privacy",
|
|
623
380
|
navLabel: "Privacy",
|
|
624
|
-
|
|
625
|
-
|
|
626
|
-
summary: "How Acme handles your data, in plain language.",
|
|
381
|
+
title: "Privacy",
|
|
382
|
+
summary: "How Acme handles your data.",
|
|
627
383
|
sections: [
|
|
628
|
-
{ title: "What we collect", body: "
|
|
629
|
-
{ title: "How we use it", body: "To
|
|
630
|
-
{ title: "Your control", body: "
|
|
384
|
+
{ title: "What we collect", body: "Your account details and the content you add to your workspaces." },
|
|
385
|
+
{ title: "How we use it", body: "To run Acme for you. We don't sell it." },
|
|
386
|
+
{ title: "Your control", body: "Delete your account or a workspace at any time from Settings." },
|
|
631
387
|
],
|
|
632
388
|
},
|
|
633
389
|
{
|
|
634
390
|
slug: "terms",
|
|
635
391
|
navLabel: "Terms",
|
|
636
|
-
|
|
637
|
-
|
|
638
|
-
summary: "The rules for using Acme, in plain language.",
|
|
392
|
+
title: "Terms of Service",
|
|
393
|
+
summary: "The rules for using Acme.",
|
|
639
394
|
sections: [
|
|
640
|
-
{ title: "Using Acme", body: "Use it for lawful work
|
|
641
|
-
{ title: "Your content", body: "You own your data
|
|
642
|
-
{ title: "Changes
|
|
395
|
+
{ title: "Using Acme", body: "Use it for lawful work, and don't abuse the service or other customers." },
|
|
396
|
+
{ title: "Your content", body: "You own your data. You grant us only what we need to run the product for you." },
|
|
397
|
+
{ title: "Changes and cancellation", body: "Cancel any time. We give notice before any material change to these terms." },
|
|
643
398
|
],
|
|
644
399
|
},
|
|
645
400
|
],
|
|
646
401
|
|
|
647
|
-
//
|
|
402
|
+
// Made-up competitors, so the template ships no real brand names. Replace
|
|
403
|
+
// them with real comparisons, or delete the entries to drop the pages.
|
|
648
404
|
comparisons: [
|
|
649
405
|
{
|
|
650
406
|
slug: "beacon",
|
|
651
407
|
navLabel: "Acme vs Beacon",
|
|
652
408
|
competitor: "Beacon",
|
|
653
409
|
title: "Acme vs Beacon",
|
|
654
|
-
summary:
|
|
655
|
-
"Beacon separates projects, docs, and automation across products. Acme keeps them in one workspace.",
|
|
410
|
+
summary: "Beacon is built for large programs. Acme is built for small teams that want to start the same day.",
|
|
656
411
|
rows: [
|
|
657
|
-
{ dim: "
|
|
658
|
-
{ dim: "
|
|
659
|
-
{ dim: "
|
|
660
|
-
{ dim: "
|
|
661
|
-
{ dim: "Setup time", acme: "Minutes", them: "Hours" },
|
|
412
|
+
{ dim: "Setup", acme: "One form and you're in", them: "Guided onboarding call" },
|
|
413
|
+
{ dim: "Live updates", acme: "Every screen, within a second", them: "On refresh" },
|
|
414
|
+
{ dim: "Free plan", acme: `${FREE_PROJECT_LIMIT} active projects`, them: "14-day trial only" },
|
|
415
|
+
{ dim: "Members", acme: "Unlimited on every plan", them: "Priced per seat" },
|
|
662
416
|
],
|
|
663
417
|
},
|
|
664
418
|
{
|
|
@@ -666,36 +420,19 @@ export const siteConfig: SiteConfig = {
|
|
|
666
420
|
navLabel: "Acme vs Orbit",
|
|
667
421
|
competitor: "Orbit",
|
|
668
422
|
title: "Acme vs Orbit",
|
|
669
|
-
summary:
|
|
670
|
-
"Orbit requires more setup and administration. Acme focuses on same-day setup and a smaller operational footprint.",
|
|
671
|
-
rows: [
|
|
672
|
-
{ dim: "Time to first project", acme: "Same day", them: "Onboarding required" },
|
|
673
|
-
{ dim: "Speed", acme: "Instant, real-time", them: "Page reloads" },
|
|
674
|
-
{ dim: "Per-seat pricing", acme: "No surprises", them: "Adds up fast" },
|
|
675
|
-
{ dim: "Analytics", acme: "Built in", them: "Separate tool" },
|
|
676
|
-
{ dim: "Learning curve", acme: "Gentle", them: "Steep" },
|
|
677
|
-
],
|
|
678
|
-
},
|
|
679
|
-
{
|
|
680
|
-
slug: "tempo",
|
|
681
|
-
navLabel: "Acme vs Tempo",
|
|
682
|
-
competitor: "Tempo",
|
|
683
|
-
title: "Acme vs Tempo",
|
|
684
|
-
summary:
|
|
685
|
-
"Tempo centers management reporting. Acme gives the whole team a shared view of daily work.",
|
|
423
|
+
summary: "Orbit is a spreadsheet with task features. Acme is a task board with the essentials and nothing else.",
|
|
686
424
|
rows: [
|
|
687
|
-
{ dim: "
|
|
688
|
-
{ dim: "
|
|
689
|
-
{ dim: "
|
|
690
|
-
{ dim: "
|
|
691
|
-
{ dim: "Self-serve", acme: "Yes", them: "Sales-led" },
|
|
425
|
+
{ dim: "Main view", acme: "Board per project", them: "Grid" },
|
|
426
|
+
{ dim: "Priorities", acme: "Built in", them: "Custom column" },
|
|
427
|
+
{ dim: "Due-date warnings", acme: "Built in", them: "Formula" },
|
|
428
|
+
{ dim: "Members", acme: "Unlimited on every plan", them: "Priced per seat" },
|
|
692
429
|
],
|
|
693
430
|
},
|
|
694
431
|
],
|
|
695
432
|
};
|
|
696
433
|
|
|
697
|
-
/*
|
|
698
|
-
//
|
|
434
|
+
/* ------------------------- lookups + helpers ---------------------- */
|
|
435
|
+
// `@/lib/products` and `@/lib/site` re-export these.
|
|
699
436
|
|
|
700
437
|
export const PRODUCTS = siteConfig.products;
|
|
701
438
|
export function productBySlug(slug: string): Product | undefined {
|