@etus/bhono-app 0.1.1
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/dist/cli.d.ts +13 -0
- package/dist/cli.js +46 -0
- package/dist/cli.js.map +1 -0
- package/dist/cli.test.d.ts +1 -0
- package/dist/cli.test.js +26 -0
- package/dist/cli.test.js.map +1 -0
- package/dist/generator.d.ts +14 -0
- package/dist/generator.js +142 -0
- package/dist/generator.js.map +1 -0
- package/dist/generator.test.d.ts +1 -0
- package/dist/generator.test.js +127 -0
- package/dist/generator.test.js.map +1 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +97 -0
- package/dist/index.js.map +1 -0
- package/dist/prompts.d.ts +25 -0
- package/dist/prompts.js +83 -0
- package/dist/prompts.js.map +1 -0
- package/dist/prompts.test.d.ts +1 -0
- package/dist/prompts.test.js +24 -0
- package/dist/prompts.test.js.map +1 -0
- package/dist/providers/cloudflare.d.ts +37 -0
- package/dist/providers/cloudflare.js +61 -0
- package/dist/providers/cloudflare.js.map +1 -0
- package/dist/providers/cloudflare.test.d.ts +1 -0
- package/dist/providers/cloudflare.test.js +29 -0
- package/dist/providers/cloudflare.test.js.map +1 -0
- package/dist/providers/github.d.ts +16 -0
- package/dist/providers/github.js +57 -0
- package/dist/providers/github.js.map +1 -0
- package/dist/providers/github.test.d.ts +1 -0
- package/dist/providers/github.test.js +16 -0
- package/dist/providers/github.test.js.map +1 -0
- package/dist/templates.d.ts +8 -0
- package/dist/templates.js +88 -0
- package/dist/templates.js.map +1 -0
- package/dist/templates.test.d.ts +1 -0
- package/dist/templates.test.js +26 -0
- package/dist/templates.test.js.map +1 -0
- package/package.json +36 -0
- package/templates/base/.claude/agents/architect-review.md +160 -0
- package/templates/base/.claude/agents/backend-architect.md +308 -0
- package/templates/base/.claude/agents/code-reviewer.md +170 -0
- package/templates/base/.claude/agents/performance-engineer.md +166 -0
- package/templates/base/.claude/agents/test-automator.md +219 -0
- package/templates/base/.claude/commands/check-skill-rules.md +53 -0
- package/templates/base/.claude/commands/claude-md.md +250 -0
- package/templates/base/.claude/commands/code-prompt.md +212 -0
- package/templates/base/.claude/commands/explain-code.md +194 -0
- package/templates/base/.claude/commands/init-projec.md +89 -0
- package/templates/base/.claude/commands/linear/README.md +297 -0
- package/templates/base/.claude/commands/linear/create-issue.md +190 -0
- package/templates/base/.claude/commands/linear/implement-issue.md +248 -0
- package/templates/base/.claude/commands/linear/process-triage.md +399 -0
- package/templates/base/.claude/commands/linear/setup.md +180 -0
- package/templates/base/.claude/commands/prime.md +9 -0
- package/templates/base/.claude/commands/review-gap.md +10 -0
- package/templates/base/.claude/commands/setup-aa.md +311 -0
- package/templates/base/.claude/commands/ship.md +262 -0
- package/templates/base/.claude/commands/tools.md +3 -0
- package/templates/base/.claude/docs/claude-progress.txt +107 -0
- package/templates/base/.claude/hooks/package-lock.json +556 -0
- package/templates/base/.claude/hooks/package.json +16 -0
- package/templates/base/.claude/hooks/skill-activation-prompt.sh +7 -0
- package/templates/base/.claude/hooks/skill-activation-prompt.ts +142 -0
- package/templates/base/.claude/hooks/tsconfig.json +19 -0
- package/templates/base/.claude/scripts/check-updates.sh +85 -0
- package/templates/base/.claude/scripts/install_pkgs.sh +66 -0
- package/templates/base/.claude/scripts/setup-project.sh +177 -0
- package/templates/base/.claude/scripts/validate-skill-rules.sh +94 -0
- package/templates/base/.claude/settings.json +113 -0
- package/templates/base/.claude/settings.local.json +11 -0
- package/templates/base/.claude/skills/architecture-analyzer/SKILL.md +531 -0
- package/templates/base/.claude/skills/architecture-analyzer/assets/report-template.md +215 -0
- package/templates/base/.claude/skills/architecture-analyzer/references/c4-templates.md +234 -0
- package/templates/base/.claude/skills/architecture-analyzer/references/confidence-levels.md +203 -0
- package/templates/base/.claude/skills/architecture-analyzer/scripts/analyze_structure.py +266 -0
- package/templates/base/.claude/skills/architecture-analyzer/scripts/analyze_tech_debt.py +776 -0
- package/templates/base/.claude/skills/architecture-analyzer/scripts/extract_apis.py +338 -0
- package/templates/base/.claude/skills/architecture-analyzer/scripts/generate_c4.py +283 -0
- package/templates/base/.claude/skills/architecture-analyzer/scripts/generate_erd.py +935 -0
- package/templates/base/.claude/skills/architecture-analyzer/scripts/map_dependencies.py +555 -0
- package/templates/base/.claude/skills/dev-browser/SKILL.md +318 -0
- package/templates/base/.claude/skills/dev-browser/bun.lock +443 -0
- package/templates/base/.claude/skills/dev-browser/package-lock.json +2927 -0
- package/templates/base/.claude/skills/dev-browser/package.json +27 -0
- package/templates/base/.claude/skills/dev-browser/scripts/start-server.ts +117 -0
- package/templates/base/.claude/skills/dev-browser/server.sh +24 -0
- package/templates/base/.claude/skills/dev-browser/src/client.ts +403 -0
- package/templates/base/.claude/skills/dev-browser/src/index.ts +281 -0
- package/templates/base/.claude/skills/dev-browser/src/snapshot/__tests__/snapshot.test.ts +223 -0
- package/templates/base/.claude/skills/dev-browser/src/snapshot/browser-script.ts +877 -0
- package/templates/base/.claude/skills/dev-browser/src/snapshot/index.ts +14 -0
- package/templates/base/.claude/skills/dev-browser/src/snapshot/inject.ts +13 -0
- package/templates/base/.claude/skills/dev-browser/src/types.ts +27 -0
- package/templates/base/.claude/skills/dev-browser/tsconfig.json +36 -0
- package/templates/base/.claude/skills/dev-browser/vitest.config.ts +12 -0
- package/templates/base/.claude/skills/linear/SKILL.md +440 -0
- package/templates/base/.claude/skills/linear/examples.md +262 -0
- package/templates/base/.claude/skills/linear/lib/client.ts +51 -0
- package/templates/base/.claude/skills/linear/lib/config.ts +106 -0
- package/templates/base/.claude/skills/linear/lib/output.ts +34 -0
- package/templates/base/.claude/skills/linear/package-lock.json +698 -0
- package/templates/base/.claude/skills/linear/package.json +27 -0
- package/templates/base/.claude/skills/linear/reference.md +263 -0
- package/templates/base/.claude/skills/linear/scripts/comments/create.ts +47 -0
- package/templates/base/.claude/skills/linear/scripts/comments/list.ts +47 -0
- package/templates/base/.claude/skills/linear/scripts/issues/archive.ts +30 -0
- package/templates/base/.claude/skills/linear/scripts/issues/create.ts +279 -0
- package/templates/base/.claude/skills/linear/scripts/issues/get.ts +68 -0
- package/templates/base/.claude/skills/linear/scripts/issues/list.ts +67 -0
- package/templates/base/.claude/skills/linear/scripts/issues/update.ts +281 -0
- package/templates/base/.claude/skills/linear/scripts/labels/add-to-issue.ts +63 -0
- package/templates/base/.claude/skills/linear/scripts/labels/create.ts +45 -0
- package/templates/base/.claude/skills/linear/scripts/labels/list.ts +30 -0
- package/templates/base/.claude/skills/linear/scripts/list-teams.ts +52 -0
- package/templates/base/.claude/skills/linear/scripts/setup/setup-credentials.ts +96 -0
- package/templates/base/.claude/skills/linear/scripts/status/list.ts +31 -0
- package/templates/base/.claude/skills/linear/scripts/status/set-by-name.ts +78 -0
- package/templates/base/.claude/skills/linear/scripts/status/update.ts +44 -0
- package/templates/base/.claude/skills/linear/scripts/users/list.ts +59 -0
- package/templates/base/.claude/skills/linear/scripts/users/me.ts +20 -0
- package/templates/base/.claude/skills/linear/templates/README.md +203 -0
- package/templates/base/.claude/skills/linear/templates/api-reference.md +258 -0
- package/templates/base/.claude/skills/linear/templates/bug-report.md +99 -0
- package/templates/base/.claude/skills/linear/templates/feature-request.md +118 -0
- package/templates/base/.claude/skills/linear/templates/security-issue.md +162 -0
- package/templates/base/.claude/skills/linear/templates/sprint-task.md +175 -0
- package/templates/base/.claude/skills/linear/templates/tech-debt.md +137 -0
- package/templates/base/.claude/skills/linear/tsconfig.json +17 -0
- package/templates/base/.claude/skills/linear/workflows/issue-lifecycle.md +317 -0
- package/templates/base/.claude/skills/playwright-e2e-testing/SKILL.md +113 -0
- package/templates/base/.claude/skills/playwright-e2e-testing/assets/global-setup.template.js +97 -0
- package/templates/base/.claude/skills/playwright-e2e-testing/assets/playwright.config.template.js +171 -0
- package/templates/base/.claude/skills/playwright-e2e-testing/assets/test-template.spec.js +163 -0
- package/templates/base/.claude/skills/playwright-e2e-testing/examples/README.md +26 -0
- package/templates/base/.claude/skills/playwright-e2e-testing/examples/ads.email-deeplink.spec.ts +12 -0
- package/templates/base/.claude/skills/playwright-e2e-testing/examples/mobile.realism.spec.ts +16 -0
- package/templates/base/.claude/skills/playwright-e2e-testing/examples/smoke.home.spec.ts +6 -0
- package/templates/base/.claude/skills/playwright-e2e-testing/references/architecture.md +578 -0
- package/templates/base/.claude/skills/playwright-e2e-testing/references/best-practices.md +260 -0
- package/templates/base/.claude/skills/playwright-e2e-testing/references/ci-reporting.md +86 -0
- package/templates/base/.claude/skills/playwright-e2e-testing/references/debugging.md +629 -0
- package/templates/base/.claude/skills/playwright-e2e-testing/references/mobile-realism.md +50 -0
- package/templates/base/.claude/skills/playwright-e2e-testing/references/optimization.md +488 -0
- package/templates/base/.claude/skills/playwright-e2e-testing/references/patterns.md +513 -0
- package/templates/base/.claude/skills/playwright-e2e-testing/references/resources.md +44 -0
- package/templates/base/.claude/skills/playwright-e2e-testing/references/visual-a11y.md +66 -0
- package/templates/base/.claude/skills/playwright-e2e-testing/scripts/auth-setup.js +202 -0
- package/templates/base/.claude/skills/playwright-e2e-testing/scripts/performance-analyzer.js +240 -0
- package/templates/base/.claude/skills/playwright-e2e-testing/scripts/trace-url.js +132 -0
- package/templates/base/.claude/skills/playwright-e2e-testing/templates/ci/github-actions.playwright.yml +78 -0
- package/templates/base/.claude/skills/playwright-e2e-testing/templates/fixtures.ts +44 -0
- package/templates/base/.claude/skills/playwright-e2e-testing/templates/global-setup.template.js +97 -0
- package/templates/base/.claude/skills/playwright-e2e-testing/templates/global.setup.ts +35 -0
- package/templates/base/.claude/skills/playwright-e2e-testing/templates/helpers/ad-gpt-observer.ts +80 -0
- package/templates/base/.claude/skills/playwright-e2e-testing/templates/helpers/chromium-mobile-profile.ts +93 -0
- package/templates/base/.claude/skills/playwright-e2e-testing/templates/playwright.config.template.js +171 -0
- package/templates/base/.claude/skills/playwright-e2e-testing/templates/playwright.config.ts +126 -0
- package/templates/base/.claude/skills/playwright-e2e-testing/templates/test-template.spec.js +163 -0
- package/templates/base/.claude/skills/playwright-e2e-testing/templates/tests/email-deeplink.ads.spec.ts +44 -0
- package/templates/base/.claude/skills/skill-rules.json +184 -0
- package/templates/base/.claude/skills/wrangler/SKILL.md +209 -0
- package/templates/base/.claude/skills/wrangler/resources/api.md +494 -0
- package/templates/base/.claude/skills/wrangler/resources/bundling.md +83 -0
- package/templates/base/.claude/skills/wrangler/resources/commands/cert.md +64 -0
- package/templates/base/.claude/skills/wrangler/resources/commands/check.md +66 -0
- package/templates/base/.claude/skills/wrangler/resources/commands/containers.md +157 -0
- package/templates/base/.claude/skills/wrangler/resources/commands/d1.md +843 -0
- package/templates/base/.claude/skills/wrangler/resources/commands/delete.md +27 -0
- package/templates/base/.claude/skills/wrangler/resources/commands/deploy.md +139 -0
- package/templates/base/.claude/skills/wrangler/resources/commands/deployments.md +56 -0
- package/templates/base/.claude/skills/wrangler/resources/commands/dev.md +157 -0
- package/templates/base/.claude/skills/wrangler/resources/commands/dispatch-namespace.md +69 -0
- package/templates/base/.claude/skills/wrangler/resources/commands/docs.md +61 -0
- package/templates/base/.claude/skills/wrangler/resources/commands/how-to-run.md +62 -0
- package/templates/base/.claude/skills/wrangler/resources/commands/hyperdrive.md +425 -0
- package/templates/base/.claude/skills/wrangler/resources/commands/init.md +31 -0
- package/templates/base/.claude/skills/wrangler/resources/commands/kv-bulk.md +265 -0
- package/templates/base/.claude/skills/wrangler/resources/commands/kv-key.md +353 -0
- package/templates/base/.claude/skills/wrangler/resources/commands/kv-namespace.md +265 -0
- package/templates/base/.claude/skills/wrangler/resources/commands/login.md +23 -0
- package/templates/base/.claude/skills/wrangler/resources/commands/logout.md +19 -0
- package/templates/base/.claude/skills/wrangler/resources/commands/mtls-certificate.md +69 -0
- package/templates/base/.claude/skills/wrangler/resources/commands/pages.md +175 -0
- package/templates/base/.claude/skills/wrangler/resources/commands/pipelines.md +76 -0
- package/templates/base/.claude/skills/wrangler/resources/commands/queues.md +132 -0
- package/templates/base/.claude/skills/wrangler/resources/commands/r2-bucket.md +342 -0
- package/templates/base/.claude/skills/wrangler/resources/commands/r2-object.md +267 -0
- package/templates/base/.claude/skills/wrangler/resources/commands/r2-sql.md +65 -0
- package/templates/base/.claude/skills/wrangler/resources/commands/rollback.md +40 -0
- package/templates/base/.claude/skills/wrangler/resources/commands/secret.md +308 -0
- package/templates/base/.claude/skills/wrangler/resources/commands/secrets-store-secret.md +100 -0
- package/templates/base/.claude/skills/wrangler/resources/commands/secrets-store-store.md +60 -0
- package/templates/base/.claude/skills/wrangler/resources/commands/setup.md +67 -0
- package/templates/base/.claude/skills/wrangler/resources/commands/tail.md +37 -0
- package/templates/base/.claude/skills/wrangler/resources/commands/telemetry.md +64 -0
- package/templates/base/.claude/skills/wrangler/resources/commands/triggers.md +39 -0
- package/templates/base/.claude/skills/wrangler/resources/commands/types.md +73 -0
- package/templates/base/.claude/skills/wrangler/resources/commands/vectorize.md +941 -0
- package/templates/base/.claude/skills/wrangler/resources/commands/versions.md +95 -0
- package/templates/base/.claude/skills/wrangler/resources/commands/whoami.md +49 -0
- package/templates/base/.claude/skills/wrangler/resources/commands/workflows.md +117 -0
- package/templates/base/.claude/skills/wrangler/resources/commands.md +138 -0
- package/templates/base/.claude/skills/wrangler/resources/configuration.md +2176 -0
- package/templates/base/.claude/skills/wrangler/resources/custom-builds.md +55 -0
- package/templates/base/.claude/skills/wrangler/resources/deprecations.md +279 -0
- package/templates/base/.claude/skills/wrangler/resources/enviroments.md +416 -0
- package/templates/base/.claude/skills/wrangler/resources/extract_sections.py +119 -0
- package/templates/base/.claude/skills/wrangler/resources/process_content.py +94 -0
- package/templates/base/.claude/skills/wrangler/resources/system-enviroments-variables.md +120 -0
- package/templates/base/.dev.vars.example +15 -0
- package/templates/base/.env.example +29 -0
- package/templates/base/.github/workflows/test.yml +127 -0
- package/templates/base/.nycrc.json +16 -0
- package/templates/base/CLAUDE.md +218 -0
- package/templates/base/README.md +670 -0
- package/templates/base/auth-setup-error.png +0 -0
- package/templates/base/config/drizzle.config.ts +10 -0
- package/templates/base/config/eslint.config.js +364 -0
- package/templates/base/config/wrangler.json +76 -0
- package/templates/base/docs/app_spec.txt +879 -0
- package/templates/base/docs/app_spec_template.md +681 -0
- package/templates/base/docs/architecture/README.md +8 -0
- package/templates/base/docs/architecture/data-requirements.md +109 -0
- package/templates/base/docs/architecture/erd.md +91 -0
- package/templates/base/docs/features/feature_list.json +3128 -0
- package/templates/base/docs/hono-boilerplate-plan.md +1774 -0
- package/templates/base/docs/test-coverage-gap-analysis.md +242 -0
- package/templates/base/docs/testing.md +188 -0
- package/templates/base/index.html +16 -0
- package/templates/base/package.json +115 -0
- package/templates/base/playwright.config.ts +158 -0
- package/templates/base/pnpm-lock.yaml +8175 -0
- package/templates/base/scripts/capture-prod-session.ts +250 -0
- package/templates/base/scripts/generate-openapi.ts +23 -0
- package/templates/base/scripts/init.sh +121 -0
- package/templates/base/src/client/__tests__/button.test.tsx +30 -0
- package/templates/base/src/client/__tests__/routes/__screenshots__/dashboard.test.tsx/Dashboard-Page-when-authenticated-should-display-dashboard-stats-cards-1.png +0 -0
- package/templates/base/src/client/__tests__/routes/__screenshots__/dashboard.test.tsx/Dashboard-Page-when-authenticated-should-display-quick-action-cards-1.png +0 -0
- package/templates/base/src/client/__tests__/routes/__screenshots__/dashboard.test.tsx/Dashboard-Page-when-authenticated-should-display-recent-activity-section-1.png +0 -0
- package/templates/base/src/client/__tests__/routes/__screenshots__/dashboard.test.tsx/Dashboard-Page-when-authenticated-should-display-user-first-name-in-welcome-message-1.png +0 -0
- package/templates/base/src/client/__tests__/routes/__screenshots__/dashboard.test.tsx/Dashboard-Page-when-authenticated-should-display-user-information-in-sidebar-1.png +0 -0
- package/templates/base/src/client/__tests__/routes/__screenshots__/dashboard.test.tsx/Dashboard-Page-when-authenticated-should-render-dashboard-when-authenticated-1.png +0 -0
- package/templates/base/src/client/__tests__/routes/__screenshots__/dashboard.test.tsx/Dashboard-Page-when-authenticated-should-show-navigation-sidebar-1.png +0 -0
- package/templates/base/src/client/__tests__/routes/__screenshots__/dashboard.test.tsx/Dashboard-Page-when-unauthenticated-should-redirect-to-login-when-not-authenticated-1.png +0 -0
- package/templates/base/src/client/__tests__/routes/__screenshots__/login.test.tsx/Login-Page-should-display-Google-OAuth-login-button-1.png +0 -0
- package/templates/base/src/client/__tests__/routes/__screenshots__/login.test.tsx/Login-Page-should-have-a-link-back-to-home-page-1.png +0 -0
- package/templates/base/src/client/__tests__/routes/__screenshots__/login.test.tsx/Login-Page-should-render-login-content-without-waiting-for-authentication-1.png +0 -0
- package/templates/base/src/client/__tests__/routes/__screenshots__/login.test.tsx/Login-Page-should-render-login-page-at--login-route-1.png +0 -0
- package/templates/base/src/client/__tests__/routes/__screenshots__/login.test.tsx/Login-Page-should-show-Terms-of-Service-and-Privacy-Policy-links-1.png +0 -0
- package/templates/base/src/client/__tests__/routes/__screenshots__/login.test.tsx/Login-Page-should-trigger-OAuth-flow-when-clicking-login-button-1.png +0 -0
- package/templates/base/src/client/__tests__/routes/__screenshots__/navigation.test.tsx/Navigation-404-handling-should-display-404-text-on-not-found-page-1.png +0 -0
- package/templates/base/src/client/__tests__/routes/__screenshots__/navigation.test.tsx/Navigation-404-handling-should-have-navigation-options-on-404-page-1.png +0 -0
- package/templates/base/src/client/__tests__/routes/__screenshots__/navigation.test.tsx/Navigation-404-handling-should-render-404-page-for-unknown-routes-1.png +0 -0
- package/templates/base/src/client/__tests__/routes/__screenshots__/navigation.test.tsx/Navigation-authenticated-navigation-should-navigate-from-dashboard-to-account-page-1.png +0 -0
- package/templates/base/src/client/__tests__/routes/__screenshots__/navigation.test.tsx/Navigation-authenticated-navigation-should-navigate-from-dashboard-to-integrations-page-1.png +0 -0
- package/templates/base/src/client/__tests__/routes/__screenshots__/navigation.test.tsx/Navigation-authenticated-navigation-should-navigate-from-dashboard-to-settings-page-1.png +0 -0
- package/templates/base/src/client/__tests__/routes/__screenshots__/navigation.test.tsx/Navigation-authenticated-navigation-should-navigate-from-dashboard-to-team-page-1.png +0 -0
- package/templates/base/src/client/__tests__/routes/__screenshots__/navigation.test.tsx/Navigation-home-page-navigation-should-display-navigation-links-on-home-page-1.png +0 -0
- package/templates/base/src/client/__tests__/routes/__screenshots__/navigation.test.tsx/Navigation-home-page-navigation-should-have-correct-link-destinations-on-home-page-1.png +0 -0
- package/templates/base/src/client/__tests__/routes/__screenshots__/navigation.test.tsx/Navigation-unauthenticated-navigation-should-allow-access-to-home-page-without-authentication-1.png +0 -0
- package/templates/base/src/client/__tests__/routes/__screenshots__/navigation.test.tsx/Navigation-unauthenticated-navigation-should-allow-access-to-login-page-without-authentication-1.png +0 -0
- package/templates/base/src/client/__tests__/routes/__screenshots__/navigation.test.tsx/Navigation-unauthenticated-navigation-should-redirect-unauthenticated-users-from-dashboard-to-login-1.png +0 -0
- package/templates/base/src/client/__tests__/routes/__screenshots__/navigation.test.tsx/Navigation-unauthenticated-navigation-should-redirect-unauthenticated-users-from-settings-to-login-1.png +0 -0
- package/templates/base/src/client/__tests__/routes/__screenshots__/navigation.test.tsx/Navigation-unauthenticated-navigation-should-redirect-unauthenticated-users-from-team-to-login-1.png +0 -0
- package/templates/base/src/client/__tests__/routes/authenticated-layout.test.tsx +252 -0
- package/templates/base/src/client/__tests__/routes/dashboard.test.tsx +136 -0
- package/templates/base/src/client/__tests__/routes/error-components.test.tsx +186 -0
- package/templates/base/src/client/__tests__/routes/login.test.tsx +112 -0
- package/templates/base/src/client/__tests__/routes/navigation.test.tsx +272 -0
- package/templates/base/src/client/__tests__/routes/root-layout.test.tsx +65 -0
- package/templates/base/src/client/__tests__/setup-browser.ts +15 -0
- package/templates/base/src/client/__tests__/setup.ts +32 -0
- package/templates/base/src/client/__tests__/test-utils.tsx +135 -0
- package/templates/base/src/client/api/.gitkeep +0 -0
- package/templates/base/src/client/components/__tests__/__screenshots__/sidebar.test.tsx/Sidebar-can-be-collapsed-by-default-1.png +0 -0
- package/templates/base/src/client/components/__tests__/__screenshots__/sidebar.test.tsx/Sidebar-expands-when-collapsed-and-expand-button-is-clicked-1.png +0 -0
- package/templates/base/src/client/components/__tests__/__screenshots__/sidebar.test.tsx/Sidebar-handles-logout-button-click-1.png +0 -0
- package/templates/base/src/client/components/__tests__/__screenshots__/sidebar.test.tsx/Sidebar-handles-navigation-clicks-1.png +0 -0
- package/templates/base/src/client/components/__tests__/__screenshots__/sidebar.test.tsx/Sidebar-hides-navigation-labels-when-collapsed-1.png +0 -0
- package/templates/base/src/client/components/__tests__/__screenshots__/sidebar.test.tsx/Sidebar-highlights-active-route-1.png +0 -0
- package/templates/base/src/client/components/__tests__/__screenshots__/sidebar.test.tsx/Sidebar-renders-sidebar-navigation-items-1.png +0 -0
- package/templates/base/src/client/components/__tests__/__screenshots__/sidebar.test.tsx/Sidebar-shows-keyboard-shortcut-hint-when-expanded-1.png +0 -0
- package/templates/base/src/client/components/__tests__/__screenshots__/sidebar.test.tsx/Sidebar-shows-user-info-when-authenticated-1.png +0 -0
- package/templates/base/src/client/components/__tests__/__screenshots__/sidebar.test.tsx/Sidebar-shows-user-initials-in-avatar-fallback-1.png +0 -0
- package/templates/base/src/client/components/__tests__/error-boundary.test.tsx +97 -0
- package/templates/base/src/client/components/__tests__/sidebar.test.tsx +281 -0
- package/templates/base/src/client/components/error-boundary.tsx +68 -0
- package/templates/base/src/client/components/icons.tsx +106 -0
- package/templates/base/src/client/components/layout/.gitkeep +0 -0
- package/templates/base/src/client/components/sidebar.tsx +267 -0
- package/templates/base/src/client/components/ui/.gitkeep +0 -0
- package/templates/base/src/client/components/ui/__tests__/avatar.test.tsx +308 -0
- package/templates/base/src/client/components/ui/__tests__/card.test.tsx +214 -0
- package/templates/base/src/client/components/ui/__tests__/dialog.test.tsx +297 -0
- package/templates/base/src/client/components/ui/__tests__/error-fallback.test.tsx +145 -0
- package/templates/base/src/client/components/ui/__tests__/input.test.tsx +98 -0
- package/templates/base/src/client/components/ui/__tests__/loading-skeleton.test.tsx +139 -0
- package/templates/base/src/client/components/ui/__tests__/skeleton.test.tsx +44 -0
- package/templates/base/src/client/components/ui/__tests__/sonner.test.tsx +28 -0
- package/templates/base/src/client/components/ui/__tests__/tabs.test.tsx +233 -0
- package/templates/base/src/client/components/ui/avatar.tsx +101 -0
- package/templates/base/src/client/components/ui/badge.tsx +46 -0
- package/templates/base/src/client/components/ui/button.tsx +72 -0
- package/templates/base/src/client/components/ui/card.tsx +86 -0
- package/templates/base/src/client/components/ui/dialog.tsx +140 -0
- package/templates/base/src/client/components/ui/error-fallback.tsx +179 -0
- package/templates/base/src/client/components/ui/form.tsx +172 -0
- package/templates/base/src/client/components/ui/input.tsx +24 -0
- package/templates/base/src/client/components/ui/label.tsx +22 -0
- package/templates/base/src/client/components/ui/loading-skeleton.tsx +154 -0
- package/templates/base/src/client/components/ui/separator.tsx +33 -0
- package/templates/base/src/client/components/ui/skeleton.tsx +16 -0
- package/templates/base/src/client/components/ui/sonner.tsx +29 -0
- package/templates/base/src/client/components/ui/tabs.tsx +121 -0
- package/templates/base/src/client/hooks/.gitkeep +0 -0
- package/templates/base/src/client/hooks/__tests__/use-auth.test.tsx +306 -0
- package/templates/base/src/client/hooks/__tests__/use-theme.test.tsx +172 -0
- package/templates/base/src/client/hooks/use-auth.ts +53 -0
- package/templates/base/src/client/hooks/use-theme.tsx +78 -0
- package/templates/base/src/client/index.css +881 -0
- package/templates/base/src/client/lib/query-client.ts +11 -0
- package/templates/base/src/client/lib/utils.ts +7 -0
- package/templates/base/src/client/main.tsx +26 -0
- package/templates/base/src/client/routeTree.gen.ts +258 -0
- package/templates/base/src/client/router.ts +15 -0
- package/templates/base/src/client/routes/$.tsx +77 -0
- package/templates/base/src/client/routes/.gitkeep +0 -0
- package/templates/base/src/client/routes/__root.tsx +34 -0
- package/templates/base/src/client/routes/__tests__/__screenshots__/invite.test.tsx/Invite-Token-Page-pending-invitation-state-should-display-accept-invitation-button-1.png +0 -0
- package/templates/base/src/client/routes/__tests__/__screenshots__/invite.test.tsx/Invite-Token-Page-pending-invitation-state-should-display-decline-button-linking-to-homepage-1.png +0 -0
- package/templates/base/src/client/routes/__tests__/__screenshots__/invite.test.tsx/Invite-Token-Page-pending-invitation-state-should-display-invitation-details--email--workspace--role--1.png +0 -0
- package/templates/base/src/client/routes/__tests__/__screenshots__/invite.test.tsx/Invite-Token-Page-pending-invitation-state-should-have-a-logo-link-to-homepage-1.png +0 -0
- package/templates/base/src/client/routes/__tests__/__screenshots__/invite.test.tsx/Invite-Token-Page-pending-invitation-state-should-render-invitation-page-with-inviter-name-and-workspace-1.png +0 -0
- package/templates/base/src/client/routes/__tests__/__screenshots__/invite.test.tsx/Invite-Token-Page-pending-invitation-state-should-show-terms-of-service-and-privacy-policy-links-1.png +0 -0
- package/templates/base/src/client/routes/__tests__/invite.test.tsx +138 -0
- package/templates/base/src/client/routes/_authenticated/__tests__/__screenshots__/account.test.tsx/Account-Page-should-render-Active-Sessions-section-with-session-cards-1.png +0 -0
- package/templates/base/src/client/routes/_authenticated/__tests__/__screenshots__/account.test.tsx/Account-Page-should-render-page-with-correct-title--Account--1.png +0 -0
- package/templates/base/src/client/routes/_authenticated/__tests__/__screenshots__/account.test.tsx/Account-Page-should-show-API-Access-section-1.png +0 -0
- package/templates/base/src/client/routes/_authenticated/__tests__/__screenshots__/account.test.tsx/Account-Page-should-show-Connected-Accounts-section-with-Google-connected-1.png +0 -0
- package/templates/base/src/client/routes/_authenticated/__tests__/__screenshots__/account.test.tsx/Account-Page-should-show-Danger-Zone-section-with-delete-button-1.png +0 -0
- package/templates/base/src/client/routes/_authenticated/__tests__/__screenshots__/account.test.tsx/Account-Page-should-show-Security-section-with-Two-Factor-Authentication-1.png +0 -0
- package/templates/base/src/client/routes/_authenticated/__tests__/__screenshots__/integrations.test.tsx/Integrations-Page-API-documentation-section-should-display-API-documentation-link-section-1.png +0 -0
- package/templates/base/src/client/routes/_authenticated/__tests__/__screenshots__/integrations.test.tsx/Integrations-Page-Create-Webhook-Dialog-should-have-Add-Webhook-trigger-button-1.png +0 -0
- package/templates/base/src/client/routes/_authenticated/__tests__/__screenshots__/integrations.test.tsx/Integrations-Page-category-filters-should-display-all-category-buttons-1.png +0 -0
- package/templates/base/src/client/routes/_authenticated/__tests__/__screenshots__/integrations.test.tsx/Integrations-Page-integration-cards-should-display-all-integration-cards-with-names-1.png +0 -0
- package/templates/base/src/client/routes/_authenticated/__tests__/__screenshots__/integrations.test.tsx/Integrations-Page-integration-cards-should-display-category-badges-on-cards-1.png +0 -0
- package/templates/base/src/client/routes/_authenticated/__tests__/__screenshots__/integrations.test.tsx/Integrations-Page-integration-cards-should-show-Configure-button-for-connected-integrations-1.png +0 -0
- package/templates/base/src/client/routes/_authenticated/__tests__/__screenshots__/integrations.test.tsx/Integrations-Page-integration-cards-should-show-Connect-button-for-not-connected-integrations-1.png +0 -0
- package/templates/base/src/client/routes/_authenticated/__tests__/__screenshots__/integrations.test.tsx/Integrations-Page-integration-cards-should-show-Connected-badge-for-connected-integrations-1.png +0 -0
- package/templates/base/src/client/routes/_authenticated/__tests__/__screenshots__/integrations.test.tsx/Integrations-Page-page-rendering-should-display-Available-Integrations-section-1.png +0 -0
- package/templates/base/src/client/routes/_authenticated/__tests__/__screenshots__/integrations.test.tsx/Integrations-Page-page-rendering-should-display-Webhooks-section-1.png +0 -0
- package/templates/base/src/client/routes/_authenticated/__tests__/__screenshots__/integrations.test.tsx/Integrations-Page-page-rendering-should-display-connected-count-1.png +0 -0
- package/templates/base/src/client/routes/_authenticated/__tests__/__screenshots__/integrations.test.tsx/Integrations-Page-page-rendering-should-display-page-description-1.png +0 -0
- package/templates/base/src/client/routes/_authenticated/__tests__/__screenshots__/integrations.test.tsx/Integrations-Page-page-rendering-should-display-search-input-1.png +0 -0
- package/templates/base/src/client/routes/_authenticated/__tests__/__screenshots__/integrations.test.tsx/Integrations-Page-page-rendering-should-render-with-correct-title--Integrations--1.png +0 -0
- package/templates/base/src/client/routes/_authenticated/__tests__/__screenshots__/integrations.test.tsx/Integrations-Page-search-functionality-should-filter-integrations-based-on-search-query-1.png +0 -0
- package/templates/base/src/client/routes/_authenticated/__tests__/__screenshots__/integrations.test.tsx/Integrations-Page-search-functionality-should-search-by-description-1.png +0 -0
- package/templates/base/src/client/routes/_authenticated/__tests__/__screenshots__/integrations.test.tsx/Integrations-Page-search-functionality-should-show-no-results-message-when-search-has-no-matches-1.png +0 -0
- package/templates/base/src/client/routes/_authenticated/__tests__/__screenshots__/integrations.test.tsx/Integrations-Page-webhooks-section-should-display-existing-webhook-1.png +0 -0
- package/templates/base/src/client/routes/_authenticated/__tests__/__screenshots__/integrations.test.tsx/Integrations-Page-webhooks-section-should-display-webhook-events-1.png +0 -0
- package/templates/base/src/client/routes/_authenticated/__tests__/__screenshots__/integrations.test.tsx/Integrations-Page-webhooks-section-should-display-webhook-last-delivery-info-1.png +0 -0
- package/templates/base/src/client/routes/_authenticated/__tests__/__screenshots__/integrations.test.tsx/Integrations-Page-webhooks-section-should-display-webhook-success-status-1.png +0 -0
- package/templates/base/src/client/routes/_authenticated/__tests__/__screenshots__/integrations.test.tsx/Integrations-Page-webhooks-section-should-have-Add-Webhook-button-1.png +0 -0
- package/templates/base/src/client/routes/_authenticated/__tests__/__screenshots__/settings.test.tsx/Settings-Page-Account-tab-should-display-connected-accounts-section-with-Google-provider-1.png +0 -0
- package/templates/base/src/client/routes/_authenticated/__tests__/__screenshots__/settings.test.tsx/Settings-Page-Account-tab-should-display-sessions-and-danger-zone-sections-1.png +0 -0
- package/templates/base/src/client/routes/_authenticated/__tests__/__screenshots__/settings.test.tsx/Settings-Page-Notifications-tab-should-display-all-notification-toggle-options-1.png +0 -0
- package/templates/base/src/client/routes/_authenticated/__tests__/__screenshots__/settings.test.tsx/Settings-Page-Notifications-tab-should-display-email-notifications-section-1.png +0 -0
- package/templates/base/src/client/routes/_authenticated/__tests__/__screenshots__/settings.test.tsx/Settings-Page-Notifications-tab-should-display-toggle-switches-for-notification-options-1.png +0 -0
- package/templates/base/src/client/routes/_authenticated/__tests__/__screenshots__/settings.test.tsx/Settings-Page-Notifications-tab-should-have-toggles-checked-by-default-1.png +0 -0
- package/templates/base/src/client/routes/_authenticated/__tests__/__screenshots__/settings.test.tsx/Settings-Page-Profile-tab-should-display--Save-Changes--button-1.png +0 -0
- package/templates/base/src/client/routes/_authenticated/__tests__/__screenshots__/settings.test.tsx/Settings-Page-Profile-tab-should-display-personal-information-form-1.png +0 -0
- package/templates/base/src/client/routes/_authenticated/__tests__/__screenshots__/settings.test.tsx/Settings-Page-Profile-tab-should-display-profile-picture-section-1.png +0 -0
- package/templates/base/src/client/routes/_authenticated/__tests__/__screenshots__/settings.test.tsx/Settings-Page-Profile-tab-should-display-user-email-in-disabled-email-input-1.png +0 -0
- package/templates/base/src/client/routes/_authenticated/__tests__/__screenshots__/settings.test.tsx/Settings-Page-Profile-tab-should-display-user-initials-in-avatar-1.png +0 -0
- package/templates/base/src/client/routes/_authenticated/__tests__/__screenshots__/settings.test.tsx/Settings-Page-Profile-tab-should-display-user-name-in-the-name-input-1.png +0 -0
- package/templates/base/src/client/routes/_authenticated/__tests__/__screenshots__/settings.test.tsx/Settings-Page-page-rendering-should-display-all-three-tabs-1.png +0 -0
- package/templates/base/src/client/routes/_authenticated/__tests__/__screenshots__/settings.test.tsx/Settings-Page-page-rendering-should-display-page-description-1.png +0 -0
- package/templates/base/src/client/routes/_authenticated/__tests__/__screenshots__/settings.test.tsx/Settings-Page-page-rendering-should-render-with-correct-title--Settings--1.png +0 -0
- package/templates/base/src/client/routes/_authenticated/__tests__/__screenshots__/settings.test.tsx/Settings-Page-tab-navigation-should-show-Profile-tab-as-default-active-tab-1.png +0 -0
- package/templates/base/src/client/routes/_authenticated/__tests__/__screenshots__/settings.test.tsx/Settings-Page-tab-navigation-should-switch-to-Account-tab-when-clicked-1.png +0 -0
- package/templates/base/src/client/routes/_authenticated/__tests__/__screenshots__/settings.test.tsx/Settings-Page-tab-navigation-should-switch-to-Notifications-tab-when-clicked-1.png +0 -0
- package/templates/base/src/client/routes/_authenticated/__tests__/__screenshots__/team.test.tsx/Team-Page-should-display-Active-Members-section-with-member-count-1.png +0 -0
- package/templates/base/src/client/routes/_authenticated/__tests__/__screenshots__/team.test.tsx/Team-Page-should-display-Pending-Invitations-section-with-invitation-details-1.png +0 -0
- package/templates/base/src/client/routes/_authenticated/__tests__/__screenshots__/team.test.tsx/Team-Page-should-have-invite-member-button-that-can-be-clicked-1.png +0 -0
- package/templates/base/src/client/routes/_authenticated/__tests__/__screenshots__/team.test.tsx/Team-Page-should-render-page-with-correct-title-and-description-1.png +0 -0
- package/templates/base/src/client/routes/_authenticated/__tests__/__screenshots__/team.test.tsx/Team-Page-should-render-search-input-that-filters-team-members-1.png +0 -0
- package/templates/base/src/client/routes/_authenticated/__tests__/__screenshots__/team.test.tsx/Team-Page-should-show-current-user-with---you---indicator-and-role-badge-1.png +0 -0
- package/templates/base/src/client/routes/_authenticated/__tests__/account.test.tsx +324 -0
- package/templates/base/src/client/routes/_authenticated/__tests__/integrations.test.tsx +520 -0
- package/templates/base/src/client/routes/_authenticated/__tests__/settings.test.tsx +414 -0
- package/templates/base/src/client/routes/_authenticated/__tests__/team.test.tsx +374 -0
- package/templates/base/src/client/routes/_authenticated/account.tsx +416 -0
- package/templates/base/src/client/routes/_authenticated/dashboard.tsx +151 -0
- package/templates/base/src/client/routes/_authenticated/integrations.tsx +553 -0
- package/templates/base/src/client/routes/_authenticated/settings.tsx +310 -0
- package/templates/base/src/client/routes/_authenticated/team.tsx +395 -0
- package/templates/base/src/client/routes/_authenticated.tsx +69 -0
- package/templates/base/src/client/routes/index.tsx +155 -0
- package/templates/base/src/client/routes/invite.$token.tsx +191 -0
- package/templates/base/src/client/routes/login.tsx +92 -0
- package/templates/base/src/server/__tests__/fixtures.ts +461 -0
- package/templates/base/src/server/__tests__/mocks/__tests__/db.test.ts +239 -0
- package/templates/base/src/server/__tests__/mocks/__tests__/kv.test.ts +293 -0
- package/templates/base/src/server/__tests__/mocks/__tests__/r2.test.ts +363 -0
- package/templates/base/src/server/__tests__/mocks/db.ts +186 -0
- package/templates/base/src/server/__tests__/mocks/index.ts +33 -0
- package/templates/base/src/server/__tests__/mocks/kv.ts +286 -0
- package/templates/base/src/server/__tests__/mocks/r2.ts +397 -0
- package/templates/base/src/server/__tests__/setup.ts +281 -0
- package/templates/base/src/server/auth/__tests__/guards.test.ts +162 -0
- package/templates/base/src/server/auth/guards.ts +92 -0
- package/templates/base/src/server/auth/permissions.test.ts +45 -0
- package/templates/base/src/server/auth/permissions.ts +139 -0
- package/templates/base/src/server/auth/roles.test.ts +169 -0
- package/templates/base/src/server/auth/roles.ts +141 -0
- package/templates/base/src/server/db/client.ts +12 -0
- package/templates/base/src/server/db/schema/accounts.ts +20 -0
- package/templates/base/src/server/db/schema/audit-logs.ts +26 -0
- package/templates/base/src/server/db/schema/index.ts +7 -0
- package/templates/base/src/server/db/schema/invitations.ts +30 -0
- package/templates/base/src/server/db/schema/refresh-tokens.ts +22 -0
- package/templates/base/src/server/db/schema/user-accounts.ts +25 -0
- package/templates/base/src/server/db/schema/users.ts +33 -0
- package/templates/base/src/server/db/seed.ts +267 -0
- package/templates/base/src/server/env.test.ts +84 -0
- package/templates/base/src/server/env.ts +78 -0
- package/templates/base/src/server/index.ts +82 -0
- package/templates/base/src/server/lib/audit.ts +73 -0
- package/templates/base/src/server/lib/audited-db.test.ts +107 -0
- package/templates/base/src/server/lib/audited-db.ts +154 -0
- package/templates/base/src/server/lib/email.test.ts +116 -0
- package/templates/base/src/server/lib/email.ts +82 -0
- package/templates/base/src/server/lib/errors.test.ts +49 -0
- package/templates/base/src/server/lib/errors.ts +64 -0
- package/templates/base/src/server/lib/oauth.test.ts +238 -0
- package/templates/base/src/server/lib/oauth.ts +113 -0
- package/templates/base/src/server/lib/pagination.test.ts +52 -0
- package/templates/base/src/server/lib/pagination.ts +32 -0
- package/templates/base/src/server/lib/password.test.ts +151 -0
- package/templates/base/src/server/lib/password.ts +151 -0
- package/templates/base/src/server/lib/providers.test.ts +105 -0
- package/templates/base/src/server/lib/providers.ts +62 -0
- package/templates/base/src/server/lib/r2-storage.test.ts +202 -0
- package/templates/base/src/server/lib/r2-storage.ts +107 -0
- package/templates/base/src/server/lib/schema-helpers.ts +16 -0
- package/templates/base/src/server/lib/session.test.ts +758 -0
- package/templates/base/src/server/lib/session.ts +267 -0
- package/templates/base/src/server/lib/tokens.test.ts +208 -0
- package/templates/base/src/server/lib/tokens.ts +65 -0
- package/templates/base/src/server/lib/transaction.test.ts +45 -0
- package/templates/base/src/server/lib/transaction.ts +24 -0
- package/templates/base/src/server/middleware/account.test.ts +201 -0
- package/templates/base/src/server/middleware/account.ts +66 -0
- package/templates/base/src/server/middleware/auth.test.ts +345 -0
- package/templates/base/src/server/middleware/auth.ts +146 -0
- package/templates/base/src/server/middleware/cors.test.ts +88 -0
- package/templates/base/src/server/middleware/cors.ts +26 -0
- package/templates/base/src/server/middleware/error-handler.test.ts +69 -0
- package/templates/base/src/server/middleware/error-handler.ts +43 -0
- package/templates/base/src/server/middleware/index.ts +8 -0
- package/templates/base/src/server/middleware/rate-limit.test.ts +472 -0
- package/templates/base/src/server/middleware/rate-limit.ts +294 -0
- package/templates/base/src/server/middleware/request-context.test.ts +175 -0
- package/templates/base/src/server/middleware/request-context.ts +28 -0
- package/templates/base/src/server/middleware/request-logger.test.ts +92 -0
- package/templates/base/src/server/middleware/request-logger.ts +50 -0
- package/templates/base/src/server/routes/accounts/__tests__/handlers.test.ts +460 -0
- package/templates/base/src/server/routes/accounts/handlers.ts +179 -0
- package/templates/base/src/server/routes/accounts/index.ts +55 -0
- package/templates/base/src/server/routes/accounts/routes.ts +205 -0
- package/templates/base/src/server/routes/accounts/schemas.ts +31 -0
- package/templates/base/src/server/routes/api.ts +37 -0
- package/templates/base/src/server/routes/audits/__tests__/handlers.test.ts +349 -0
- package/templates/base/src/server/routes/audits/handlers.ts +37 -0
- package/templates/base/src/server/routes/audits/index.ts +14 -0
- package/templates/base/src/server/routes/audits/routes.ts +29 -0
- package/templates/base/src/server/routes/audits/schemas.ts +43 -0
- package/templates/base/src/server/routes/auth/__tests__/handlers.test.ts +381 -0
- package/templates/base/src/server/routes/auth/handlers.ts +222 -0
- package/templates/base/src/server/routes/auth/index.ts +37 -0
- package/templates/base/src/server/routes/auth/routes.ts +136 -0
- package/templates/base/src/server/routes/auth/schemas.ts +48 -0
- package/templates/base/src/server/routes/auth/test-login.ts +156 -0
- package/templates/base/src/server/routes/health/__tests__/handlers.test.ts +237 -0
- package/templates/base/src/server/routes/health/handlers.ts +83 -0
- package/templates/base/src/server/routes/health/index.ts +13 -0
- package/templates/base/src/server/routes/health/routes.ts +90 -0
- package/templates/base/src/server/routes/index.ts +53 -0
- package/templates/base/src/server/routes/invitations/__tests__/handlers.test.ts +473 -0
- package/templates/base/src/server/routes/invitations/handlers.ts +71 -0
- package/templates/base/src/server/routes/invitations/index.ts +25 -0
- package/templates/base/src/server/routes/invitations/routes.ts +69 -0
- package/templates/base/src/server/routes/invitations/schemas.ts +39 -0
- package/templates/base/src/server/routes/openapi.ts +14 -0
- package/templates/base/src/server/routes/schemas.ts +53 -0
- package/templates/base/src/server/routes/storage/__tests__/handlers.test.ts +408 -0
- package/templates/base/src/server/routes/storage/handlers.ts +100 -0
- package/templates/base/src/server/routes/storage/index.ts +42 -0
- package/templates/base/src/server/routes/storage/routes.ts +91 -0
- package/templates/base/src/server/routes/storage/schemas.ts +56 -0
- package/templates/base/src/server/routes/users/__tests__/handlers.test.ts +526 -0
- package/templates/base/src/server/routes/users/handlers.ts +228 -0
- package/templates/base/src/server/routes/users/index.ts +67 -0
- package/templates/base/src/server/routes/users/routes.ts +265 -0
- package/templates/base/src/server/routes/users/schemas.ts +67 -0
- package/templates/base/src/server/services/__tests__/accounts.test.ts +764 -0
- package/templates/base/src/server/services/__tests__/audits.test.ts +235 -0
- package/templates/base/src/server/services/__tests__/auth.test.ts +765 -0
- package/templates/base/src/server/services/__tests__/invitations.test.ts +704 -0
- package/templates/base/src/server/services/__tests__/users.test.ts +755 -0
- package/templates/base/src/server/services/accounts.ts +269 -0
- package/templates/base/src/server/services/audits.ts +82 -0
- package/templates/base/src/server/services/auth.ts +225 -0
- package/templates/base/src/server/services/index.ts +6 -0
- package/templates/base/src/server/services/invitations.ts +306 -0
- package/templates/base/src/server/services/users.ts +350 -0
- package/templates/base/src/server/types/auth.ts +36 -0
- package/templates/base/src/server/types/index.ts +117 -0
- package/templates/base/src/shared/schemas/.gitkeep +0 -0
- package/templates/base/src/shared/schemas/__tests__/schemas.test.ts +547 -0
- package/templates/base/src/shared/schemas/account.ts +15 -0
- package/templates/base/src/shared/schemas/index.ts +6 -0
- package/templates/base/src/shared/schemas/invitation.ts +9 -0
- package/templates/base/src/shared/schemas/profile.ts +10 -0
- package/templates/base/src/shared/schemas/user.ts +16 -0
- package/templates/base/src/shared/schemas/webhook.ts +12 -0
- package/templates/base/src/shared/types/.gitkeep +0 -0
- package/templates/base/src/shared/types/account.ts +12 -0
- package/templates/base/src/shared/types/api.ts +1399 -0
- package/templates/base/src/shared/types/auth.ts +24 -0
- package/templates/base/src/shared/types/index.ts +5 -0
- package/templates/base/src/shared/types/user.ts +31 -0
- package/templates/base/src/test/vitest-zod-matcher.ts +37 -0
- package/templates/base/src/test/vitest.d.ts +19 -0
- package/templates/base/tests/e2e/README.md +141 -0
- package/templates/base/tests/e2e/a11y/accessibility.spec.ts +925 -0
- package/templates/base/tests/e2e/a11y/keyboard-navigation.spec.ts +610 -0
- package/templates/base/tests/e2e/api/accounts.spec.ts +148 -0
- package/templates/base/tests/e2e/api/audit-logs.spec.ts +130 -0
- package/templates/base/tests/e2e/api/authenticated-api.spec.ts +311 -0
- package/templates/base/tests/e2e/api/storage.spec.ts +109 -0
- package/templates/base/tests/e2e/auth-flows.unauth.spec.ts +117 -0
- package/templates/base/tests/e2e/auth-logout.unauth.spec.ts +103 -0
- package/templates/base/tests/e2e/auth.setup.ts +115 -0
- package/templates/base/tests/e2e/auth.spec.ts +146 -0
- package/templates/base/tests/e2e/compatibility/cross-browser.spec.ts +152 -0
- package/templates/base/tests/e2e/compatibility/cross-browser.spec.ts-snapshots/login-chromium-chromium-darwin.png +0 -0
- package/templates/base/tests/e2e/crud/account.spec.ts +356 -0
- package/templates/base/tests/e2e/crud/integrations.spec.ts +419 -0
- package/templates/base/tests/e2e/crud/team.spec.ts +287 -0
- package/templates/base/tests/e2e/crud/users.spec.ts +239 -0
- package/templates/base/tests/e2e/errors/error-boundary.spec.ts +428 -0
- package/templates/base/tests/e2e/errors/error-handling.spec.ts +47 -0
- package/templates/base/tests/e2e/errors/error-handling.unauth.spec.ts +205 -0
- package/templates/base/tests/e2e/fixtures.ts +266 -0
- package/templates/base/tests/e2e/forms/validation.spec.ts +569 -0
- package/templates/base/tests/e2e/invitations/invite-flow.unauth.spec.ts +204 -0
- package/templates/base/tests/e2e/journeys/account-lifecycle.spec.ts +314 -0
- package/templates/base/tests/e2e/journeys/audit-investigation.spec.ts +299 -0
- package/templates/base/tests/e2e/journeys/auth-onboarding.spec.ts +232 -0
- package/templates/base/tests/e2e/journeys/critical-flows.spec.ts +281 -0
- package/templates/base/tests/e2e/journeys/error-recovery.spec.ts +354 -0
- package/templates/base/tests/e2e/journeys/file-management.spec.ts +307 -0
- package/templates/base/tests/e2e/journeys/integrations.spec.ts +372 -0
- package/templates/base/tests/e2e/journeys/multi-account.spec.ts +317 -0
- package/templates/base/tests/e2e/journeys/rbac-enforcement.spec.ts +389 -0
- package/templates/base/tests/e2e/journeys/settings-profile.spec.ts +400 -0
- package/templates/base/tests/e2e/journeys/team-collaboration.spec.ts +410 -0
- package/templates/base/tests/e2e/mobile/responsive.spec.ts +178 -0
- package/templates/base/tests/e2e/navigation/routing.spec.ts +371 -0
- package/templates/base/tests/e2e/navigation/sidebar.spec.ts +425 -0
- package/templates/base/tests/e2e/pages/ui-features.spec.ts +393 -0
- package/templates/base/tests/e2e/performance/baselines.spec.ts +162 -0
- package/templates/base/tests/e2e/performance/benchmarks.spec.ts +371 -0
- package/templates/base/tests/e2e/smoke.unauth.spec.ts +196 -0
- package/templates/base/tests/e2e/visual/components.spec.ts +650 -0
- package/templates/base/tests/e2e/visual/components.spec.ts-snapshots/confirmation-dialog-visual-darwin.png +0 -0
- package/templates/base/tests/e2e/visual/components.spec.ts-snapshots/dark-mode-background-visual-darwin.png +0 -0
- package/templates/base/tests/e2e/visual/components.spec.ts-snapshots/dark-mode-card-visual-darwin.png +0 -0
- package/templates/base/tests/e2e/visual/components.spec.ts-snapshots/dark-mode-sidebar-visual-darwin.png +0 -0
- package/templates/base/tests/e2e/visual/components.spec.ts-snapshots/dashboard-card-single-visual-darwin.png +0 -0
- package/templates/base/tests/e2e/visual/components.spec.ts-snapshots/dialog-content-visual-darwin.png +0 -0
- package/templates/base/tests/e2e/visual/components.spec.ts-snapshots/dialog-with-backdrop-visual-darwin.png +0 -0
- package/templates/base/tests/e2e/visual/components.spec.ts-snapshots/empty-search-results-visual-darwin.png +0 -0
- package/templates/base/tests/e2e/visual/components.spec.ts-snapshots/input-default-visual-darwin.png +0 -0
- package/templates/base/tests/e2e/visual/components.spec.ts-snapshots/input-focus-ring-visual-darwin.png +0 -0
- package/templates/base/tests/e2e/visual/components.spec.ts-snapshots/primary-button-focus-visual-darwin.png +0 -0
- package/templates/base/tests/e2e/visual/components.spec.ts-snapshots/primary-button-hover-visual-darwin.png +0 -0
- package/templates/base/tests/e2e/visual/components.spec.ts-snapshots/primary-button-visual-darwin.png +0 -0
- package/templates/base/tests/e2e/visual/components.spec.ts-snapshots/sidebar-active-nav-item-visual-darwin.png +0 -0
- package/templates/base/tests/e2e/visual/components.spec.ts-snapshots/sidebar-collapsed-visual-darwin.png +0 -0
- package/templates/base/tests/e2e/visual/components.spec.ts-snapshots/sidebar-navigation-visual-darwin.png +0 -0
- package/templates/base/tests/e2e/visual/core-components.spec.ts +192 -0
- package/templates/base/tests/e2e/visual/core-components.spec.ts-snapshots/account-page-visual-darwin.png +0 -0
- package/templates/base/tests/e2e/visual/core-components.spec.ts-snapshots/create-webhook-dialog-visual-darwin.png +0 -0
- package/templates/base/tests/e2e/visual/core-components.spec.ts-snapshots/dashboard-page-visual-darwin.png +0 -0
- package/templates/base/tests/e2e/visual/core-components.spec.ts-snapshots/delete-account-dialog-visual-darwin.png +0 -0
- package/templates/base/tests/e2e/visual/core-components.spec.ts-snapshots/integrations-page-visual-darwin.png +0 -0
- package/templates/base/tests/e2e/visual/core-components.spec.ts-snapshots/invite-member-dialog-visual-darwin.png +0 -0
- package/templates/base/tests/e2e/visual/core-components.spec.ts-snapshots/login-page-visual-darwin.png +0 -0
- package/templates/base/tests/e2e/visual/core-components.spec.ts-snapshots/settings-account-tab-visual-darwin.png +0 -0
- package/templates/base/tests/e2e/visual/core-components.spec.ts-snapshots/settings-profile-tab-visual-darwin.png +0 -0
- package/templates/base/tests/e2e/visual/core-components.spec.ts-snapshots/sidebar-navigation-visual-darwin.png +0 -0
- package/templates/base/tests/e2e/visual/core-components.spec.ts-snapshots/team-page-visual-darwin.png +0 -0
- package/templates/base/tests/e2e/visual/screenshots.spec.ts +230 -0
- package/templates/base/tests/e2e/visual/screenshots.spec.ts-snapshots/404-page-chromium-darwin.png +0 -0
- package/templates/base/tests/e2e/visual/screenshots.spec.ts-snapshots/404-page-visual-darwin.png +0 -0
- package/templates/base/tests/e2e/visual/screenshots.spec.ts-snapshots/account-page-visual-darwin.png +0 -0
- package/templates/base/tests/e2e/visual/screenshots.spec.ts-snapshots/login-page-chromium-darwin.png +0 -0
- package/templates/base/tests/e2e/visual/screenshots.spec.ts-snapshots/login-page-visual-darwin.png +0 -0
- package/templates/base/tests/e2e/visual/screenshots.spec.ts-snapshots/settings-page-visual-darwin.png +0 -0
- package/templates/base/tests/e2e/visual/screenshots.spec.ts-snapshots/team-invite-dialog-visual-darwin.png +0 -0
- package/templates/base/tests/e2e/visual/screenshots.spec.ts-snapshots/team-page-visual-darwin.png +0 -0
- package/templates/base/tests/e2e/visual/screenshots.spec.ts-snapshots/webhook-create-dialog-visual-darwin.png +0 -0
- package/templates/base/tests/e2e/visual/theme-colors.spec.ts +293 -0
- package/templates/base/tests/e2e/visual/ui-components.spec.ts +502 -0
- package/templates/base/tests/integration/accounts/crud.test.ts +1402 -0
- package/templates/base/tests/integration/audits/list.test.ts +1133 -0
- package/templates/base/tests/integration/auth/auth-service.test.ts +415 -0
- package/templates/base/tests/integration/auth/invitation-token.test.ts +529 -0
- package/templates/base/tests/integration/auth/logout.test.ts +524 -0
- package/templates/base/tests/integration/auth/oauth.test.ts +768 -0
- package/templates/base/tests/integration/auth/refresh-token.test.ts +364 -0
- package/templates/base/tests/integration/auth/session-expiry.test.ts +569 -0
- package/templates/base/tests/integration/auth/session.test.ts +520 -0
- package/templates/base/tests/integration/auth/super-admin.test.ts +451 -0
- package/templates/base/tests/integration/authorization/analytics-role.test.ts +1026 -0
- package/templates/base/tests/integration/authorization/billing-role.test.ts +776 -0
- package/templates/base/tests/integration/authorization/guards-roles.test.ts +539 -0
- package/templates/base/tests/integration/authorization/multi-tenancy.test.ts +1112 -0
- package/templates/base/tests/integration/authorization/role-hierarchy.test.ts +931 -0
- package/templates/base/tests/integration/authorization/roles.test.ts +1347 -0
- package/templates/base/tests/integration/config/production-behavior.test.ts +536 -0
- package/templates/base/tests/integration/db/constraints.test.ts +695 -0
- package/templates/base/tests/integration/fixtures/accounts.ts +136 -0
- package/templates/base/tests/integration/fixtures/index.ts +232 -0
- package/templates/base/tests/integration/fixtures/invitations.ts +195 -0
- package/templates/base/tests/integration/fixtures/users.ts +144 -0
- package/templates/base/tests/integration/health/health.test.ts +351 -0
- package/templates/base/tests/integration/invitations/crud.test.ts +1457 -0
- package/templates/base/tests/integration/invitations/email.test.ts +506 -0
- package/templates/base/tests/integration/lib/email.test.ts +174 -0
- package/templates/base/tests/integration/lib/oauth.test.ts +368 -0
- package/templates/base/tests/integration/lib/password.test.ts +192 -0
- package/templates/base/tests/integration/lib/schema-helpers.test.ts +129 -0
- package/templates/base/tests/integration/lib/tokens.test.ts +304 -0
- package/templates/base/tests/integration/middleware/auth.test.ts +499 -0
- package/templates/base/tests/integration/middleware/cors.test.ts +334 -0
- package/templates/base/tests/integration/middleware/request-context.test.ts +156 -0
- package/templates/base/tests/integration/middleware/request-logger.test.ts +313 -0
- package/templates/base/tests/integration/performance/response-times.test.ts +509 -0
- package/templates/base/tests/integration/security/cookie-security.test.ts +567 -0
- package/templates/base/tests/integration/security/csrf-protection.test.ts +542 -0
- package/templates/base/tests/integration/security/jwt-validation.test.ts +209 -0
- package/templates/base/tests/integration/security/log-sanitization.test.ts +658 -0
- package/templates/base/tests/integration/security/rate-limiting.test.ts +1251 -0
- package/templates/base/tests/integration/security/sql-injection.test.ts +663 -0
- package/templates/base/tests/integration/security/token-hashing.test.ts +371 -0
- package/templates/base/tests/integration/security/xss-prevention.test.ts +541 -0
- package/templates/base/tests/integration/setup.ts +834 -0
- package/templates/base/tests/integration/smoke.test.ts +288 -0
- package/templates/base/tests/integration/storage/upload.test.ts +1162 -0
- package/templates/base/tests/integration/storage/validation.test.ts +746 -0
- package/templates/base/tests/integration/users/crud.test.ts +1297 -0
- package/templates/base/tests/integration/users/list.test.ts +698 -0
- package/templates/base/tests/integration/vitest.config.ts +80 -0
- package/templates/base/tsconfig.app.json +18 -0
- package/templates/base/tsconfig.json +39 -0
- package/templates/base/tsconfig.node.json +16 -0
- package/templates/base/tsconfig.server.json +26 -0
- package/templates/base/tsconfig.tsbuildinfo +1 -0
- package/templates/base/vite.config.ts +46 -0
- package/templates/base/vitest.config.browser.ts +47 -0
- package/templates/base/vitest.config.frontend.ts +47 -0
- package/templates/base/vitest.config.ts +82 -0
- package/templates/base/vitest.workspace.ts +22 -0
- package/templates/modules/audit-logs/.gitkeep +0 -0
- package/templates/modules/billing/.gitkeep +0 -0
- package/templates/modules/invitations/.gitkeep +0 -0
- package/templates/modules/storage/.gitkeep +0 -0
- package/templates/modules/webhooks/.gitkeep +0 -0
- package/templates/providers/auth-email/.gitkeep +0 -0
- package/templates/providers/auth-github/.gitkeep +0 -0
- package/templates/providers/auth-google/.gitkeep +0 -0
- package/templates/providers/email-resend/.gitkeep +0 -0
- package/templates/providers/email-sendgrid/.gitkeep +0 -0
|
@@ -0,0 +1,681 @@
|
|
|
1
|
+
<project_specification>
|
|
2
|
+
<project_name>Claude.ai Clone - AI Chat Interface</project_name>
|
|
3
|
+
|
|
4
|
+
<overview>
|
|
5
|
+
Build a fully functional clone of claude.ai, Anthropic's conversational AI interface. The application should
|
|
6
|
+
provide a clean, modern chat interface for interacting with Claude via the API, including features like
|
|
7
|
+
conversation management, artifact rendering, project organization, multiple model selection, and advanced
|
|
8
|
+
settings. The UI should closely match claude.ai's design using Tailwind CSS with a focus on excellent
|
|
9
|
+
user experience and responsive design.
|
|
10
|
+
</overview>
|
|
11
|
+
|
|
12
|
+
<technology_stack>
|
|
13
|
+
<api_key>
|
|
14
|
+
You can use an API key located at /tmp/api-key for testing. You will not be allowed to read this file, but you can reference it in code.
|
|
15
|
+
</api_key>
|
|
16
|
+
<frontend>
|
|
17
|
+
<framework>React with Vite</framework>
|
|
18
|
+
<styling>Tailwind CSS (via CDN)</styling>
|
|
19
|
+
<state_management>React hooks and context</state_management>
|
|
20
|
+
<routing>React Router for navigation</routing>
|
|
21
|
+
<markdown>React Markdown for message rendering</markdown>
|
|
22
|
+
<code_highlighting>Syntax highlighting for code blocks</code_highlighting>
|
|
23
|
+
<port>Only launch on port {frontend_port}</port>
|
|
24
|
+
</frontend>
|
|
25
|
+
<backend>
|
|
26
|
+
<runtime>Node.js with Express</runtime>
|
|
27
|
+
<database>SQLite with better-sqlite3</database>
|
|
28
|
+
<api_integration>Claude API for chat completions</api_integration>
|
|
29
|
+
<streaming>Server-Sent Events for streaming responses</streaming>
|
|
30
|
+
</backend>
|
|
31
|
+
<communication>
|
|
32
|
+
<api>RESTful endpoints</api>
|
|
33
|
+
<streaming>SSE for real-time message streaming</streaming>
|
|
34
|
+
<claude_api>Integration with Claude API using Anthropic SDK</claude_api>
|
|
35
|
+
</communication>
|
|
36
|
+
</technology_stack>
|
|
37
|
+
|
|
38
|
+
<prerequisites>
|
|
39
|
+
<environment_setup>
|
|
40
|
+
- Repository includes .env with VITE_ANTHROPIC_API_KEY configured
|
|
41
|
+
- Frontend dependencies pre-installed via pnpm
|
|
42
|
+
- Backend code goes in /server directory
|
|
43
|
+
- Install backend dependencies as needed
|
|
44
|
+
</environment_setup>
|
|
45
|
+
</prerequisites>
|
|
46
|
+
|
|
47
|
+
<core_features>
|
|
48
|
+
<chat_interface>
|
|
49
|
+
- Clean, centered chat layout with message bubbles
|
|
50
|
+
- Streaming message responses with typing indicator
|
|
51
|
+
- Markdown rendering with proper formatting
|
|
52
|
+
- Code blocks with syntax highlighting and copy button
|
|
53
|
+
- LaTeX/math equation rendering
|
|
54
|
+
- Image upload and display in messages
|
|
55
|
+
- Multi-turn conversations with context
|
|
56
|
+
- Message editing and regeneration
|
|
57
|
+
- Stop generation button during streaming
|
|
58
|
+
- Input field with auto-resize textarea
|
|
59
|
+
- Character count and token estimation
|
|
60
|
+
- Keyboard shortcuts (Enter to send, Shift+Enter for newline)
|
|
61
|
+
</chat_interface>
|
|
62
|
+
|
|
63
|
+
<artifacts>
|
|
64
|
+
- Artifact detection and rendering in side panel
|
|
65
|
+
- Code artifact viewer with syntax highlighting
|
|
66
|
+
- HTML/SVG preview with live rendering
|
|
67
|
+
- React component preview
|
|
68
|
+
- Mermaid diagram rendering
|
|
69
|
+
- Text document artifacts
|
|
70
|
+
- Artifact editing and re-prompting
|
|
71
|
+
- Full-screen artifact view
|
|
72
|
+
- Download artifact content
|
|
73
|
+
- Artifact versioning and history
|
|
74
|
+
</artifacts>
|
|
75
|
+
|
|
76
|
+
<conversation_management>
|
|
77
|
+
- Create new conversations
|
|
78
|
+
- Conversation list in sidebar
|
|
79
|
+
- Rename conversations
|
|
80
|
+
- Delete conversations
|
|
81
|
+
- Search conversations by title/content
|
|
82
|
+
- Pin important conversations
|
|
83
|
+
- Archive conversations
|
|
84
|
+
- Conversation folders/organization
|
|
85
|
+
- Duplicate conversation
|
|
86
|
+
- Export conversation (JSON, Markdown, PDF)
|
|
87
|
+
- Conversation timestamps (created, last updated)
|
|
88
|
+
- Unread message indicators
|
|
89
|
+
</conversation_management>
|
|
90
|
+
|
|
91
|
+
<projects>
|
|
92
|
+
- Create projects to group related conversations
|
|
93
|
+
- Project knowledge base (upload documents)
|
|
94
|
+
- Project-specific custom instructions
|
|
95
|
+
- Share projects with team (mock feature)
|
|
96
|
+
- Project settings and configuration
|
|
97
|
+
- Move conversations between projects
|
|
98
|
+
- Project templates
|
|
99
|
+
- Project analytics (usage stats)
|
|
100
|
+
</projects>
|
|
101
|
+
|
|
102
|
+
<model_selection>
|
|
103
|
+
- Model selector dropdown with the following models:
|
|
104
|
+
- Claude Sonnet 4.5 (claude-sonnet-4-5-20250929) - default
|
|
105
|
+
- Claude Haiku 4.5 (claude-haiku-4-5-20251001)
|
|
106
|
+
- Claude Opus 4.1 (claude-opus-4-1-20250805)
|
|
107
|
+
- Model capabilities display
|
|
108
|
+
- Context window indicator
|
|
109
|
+
- Model-specific pricing info (display only)
|
|
110
|
+
- Switch models mid-conversation
|
|
111
|
+
- Model comparison view
|
|
112
|
+
</model_selection>
|
|
113
|
+
|
|
114
|
+
<custom_instructions>
|
|
115
|
+
- Global custom instructions
|
|
116
|
+
- Project-specific custom instructions
|
|
117
|
+
- Conversation-specific system prompts
|
|
118
|
+
- Custom instruction templates
|
|
119
|
+
- Preview how instructions affect responses
|
|
120
|
+
</custom_instructions>
|
|
121
|
+
|
|
122
|
+
<settings_preferences>
|
|
123
|
+
- Theme selection (Light, Dark, Auto)
|
|
124
|
+
- Font size adjustment
|
|
125
|
+
- Message density (compact, comfortable, spacious)
|
|
126
|
+
- Code theme selection
|
|
127
|
+
- Language preferences
|
|
128
|
+
- Accessibility options
|
|
129
|
+
- Keyboard shortcuts reference
|
|
130
|
+
- Data export options
|
|
131
|
+
- Privacy settings
|
|
132
|
+
- API key management
|
|
133
|
+
</settings_preferences>
|
|
134
|
+
|
|
135
|
+
<advanced_features>
|
|
136
|
+
- Temperature control slider
|
|
137
|
+
- Max tokens adjustment
|
|
138
|
+
- Top-p (nucleus sampling) control
|
|
139
|
+
- System prompt override
|
|
140
|
+
- Thinking/reasoning mode toggle
|
|
141
|
+
- Multi-modal input (text + images)
|
|
142
|
+
- Voice input (optional, mock UI)
|
|
143
|
+
- Response suggestions
|
|
144
|
+
- Related prompts
|
|
145
|
+
- Conversation branching
|
|
146
|
+
</advanced_features>
|
|
147
|
+
|
|
148
|
+
<collaboration>
|
|
149
|
+
- Share conversation via link (read-only)
|
|
150
|
+
- Export conversation formats
|
|
151
|
+
- Conversation templates
|
|
152
|
+
- Prompt library
|
|
153
|
+
- Share artifacts
|
|
154
|
+
- Team workspaces (mock UI)
|
|
155
|
+
</collaboration>
|
|
156
|
+
|
|
157
|
+
<search_discovery>
|
|
158
|
+
- Search across all conversations
|
|
159
|
+
- Filter by project, date, model
|
|
160
|
+
- Prompt library with categories
|
|
161
|
+
- Example conversations
|
|
162
|
+
- Quick actions menu
|
|
163
|
+
- Command palette (Cmd/Ctrl+K)
|
|
164
|
+
</search_discovery>
|
|
165
|
+
|
|
166
|
+
<usage_tracking>
|
|
167
|
+
- Token usage display per message
|
|
168
|
+
- Conversation cost estimation
|
|
169
|
+
- Daily/monthly usage dashboard
|
|
170
|
+
- Usage limits and warnings
|
|
171
|
+
- API quota tracking
|
|
172
|
+
</usage_tracking>
|
|
173
|
+
|
|
174
|
+
<onboarding>
|
|
175
|
+
- Welcome screen for new users
|
|
176
|
+
- Feature tour highlights
|
|
177
|
+
- Example prompts to get started
|
|
178
|
+
- Quick tips and best practices
|
|
179
|
+
- Keyboard shortcuts tutorial
|
|
180
|
+
</onboarding>
|
|
181
|
+
|
|
182
|
+
<accessibility>
|
|
183
|
+
- Full keyboard navigation
|
|
184
|
+
- Screen reader support
|
|
185
|
+
- ARIA labels and roles
|
|
186
|
+
- High contrast mode
|
|
187
|
+
- Focus management
|
|
188
|
+
- Reduced motion support
|
|
189
|
+
</accessibility>
|
|
190
|
+
|
|
191
|
+
<responsive_design>
|
|
192
|
+
- Mobile-first responsive layout
|
|
193
|
+
- Touch-optimized interface
|
|
194
|
+
- Collapsible sidebar on mobile
|
|
195
|
+
- Swipe gestures for navigation
|
|
196
|
+
- Adaptive artifact display
|
|
197
|
+
- Progressive Web App (PWA) support
|
|
198
|
+
</responsive_design>
|
|
199
|
+
</core_features>
|
|
200
|
+
|
|
201
|
+
<database_schema>
|
|
202
|
+
<tables>
|
|
203
|
+
<users>
|
|
204
|
+
- id, email, name, avatar_url
|
|
205
|
+
- created_at, last_login
|
|
206
|
+
- preferences (JSON: theme, font_size, etc.)
|
|
207
|
+
- custom_instructions
|
|
208
|
+
</users>
|
|
209
|
+
|
|
210
|
+
<projects>
|
|
211
|
+
- id, user_id, name, description, color
|
|
212
|
+
- custom_instructions, knowledge_base_path
|
|
213
|
+
- created_at, updated_at
|
|
214
|
+
- is_archived, is_pinned
|
|
215
|
+
</projects>
|
|
216
|
+
|
|
217
|
+
<conversations>
|
|
218
|
+
- id, user_id, project_id, title
|
|
219
|
+
- model, created_at, updated_at, last_message_at
|
|
220
|
+
- is_archived, is_pinned, is_deleted
|
|
221
|
+
- settings (JSON: temperature, max_tokens, etc.)
|
|
222
|
+
- token_count, message_count
|
|
223
|
+
</conversations>
|
|
224
|
+
|
|
225
|
+
<messages>
|
|
226
|
+
- id, conversation_id, role (user/assistant/system)
|
|
227
|
+
- content, created_at, edited_at
|
|
228
|
+
- tokens, finish_reason
|
|
229
|
+
- images (JSON array of image data)
|
|
230
|
+
- parent_message_id (for branching)
|
|
231
|
+
</messages>
|
|
232
|
+
|
|
233
|
+
<artifacts>
|
|
234
|
+
- id, message_id, conversation_id
|
|
235
|
+
- type (code/html/svg/react/mermaid/text)
|
|
236
|
+
- title, identifier, language
|
|
237
|
+
- content, version
|
|
238
|
+
- created_at, updated_at
|
|
239
|
+
</artifacts>
|
|
240
|
+
|
|
241
|
+
<shared_conversations>
|
|
242
|
+
- id, conversation_id, share_token
|
|
243
|
+
- created_at, expires_at, view_count
|
|
244
|
+
- is_public
|
|
245
|
+
</shared_conversations>
|
|
246
|
+
|
|
247
|
+
<prompt_library>
|
|
248
|
+
- id, user_id, title, description
|
|
249
|
+
- prompt_template, category, tags (JSON)
|
|
250
|
+
- is_public, usage_count
|
|
251
|
+
- created_at, updated_at
|
|
252
|
+
</prompt_library>
|
|
253
|
+
|
|
254
|
+
<conversation_folders>
|
|
255
|
+
- id, user_id, project_id, name, parent_folder_id
|
|
256
|
+
- created_at, position
|
|
257
|
+
</conversation_folders>
|
|
258
|
+
|
|
259
|
+
<conversation_folder_items>
|
|
260
|
+
- id, folder_id, conversation_id
|
|
261
|
+
</conversation_folder_items>
|
|
262
|
+
|
|
263
|
+
<usage_tracking>
|
|
264
|
+
- id, user_id, conversation_id, message_id
|
|
265
|
+
- model, input_tokens, output_tokens
|
|
266
|
+
- cost_estimate, created_at
|
|
267
|
+
</usage_tracking>
|
|
268
|
+
|
|
269
|
+
<api_keys>
|
|
270
|
+
- id, user_id, key_name, api_key_hash
|
|
271
|
+
- created_at, last_used_at
|
|
272
|
+
- is_active
|
|
273
|
+
</api_keys>
|
|
274
|
+
</tables>
|
|
275
|
+
</database_schema>
|
|
276
|
+
|
|
277
|
+
<api_endpoints_summary>
|
|
278
|
+
<authentication>
|
|
279
|
+
- POST /api/auth/login
|
|
280
|
+
- POST /api/auth/logout
|
|
281
|
+
- GET /api/auth/me
|
|
282
|
+
- PUT /api/auth/profile
|
|
283
|
+
</authentication>
|
|
284
|
+
|
|
285
|
+
<conversations>
|
|
286
|
+
- GET /api/conversations
|
|
287
|
+
- POST /api/conversations
|
|
288
|
+
- GET /api/conversations/:id
|
|
289
|
+
- PUT /api/conversations/:id
|
|
290
|
+
- DELETE /api/conversations/:id
|
|
291
|
+
- POST /api/conversations/:id/duplicate
|
|
292
|
+
- POST /api/conversations/:id/export
|
|
293
|
+
- PUT /api/conversations/:id/archive
|
|
294
|
+
- PUT /api/conversations/:id/pin
|
|
295
|
+
- POST /api/conversations/:id/branch
|
|
296
|
+
</conversations>
|
|
297
|
+
|
|
298
|
+
<messages>
|
|
299
|
+
- GET /api/conversations/:id/messages
|
|
300
|
+
- POST /api/conversations/:id/messages
|
|
301
|
+
- PUT /api/messages/:id
|
|
302
|
+
- DELETE /api/messages/:id
|
|
303
|
+
- POST /api/messages/:id/regenerate
|
|
304
|
+
- GET /api/messages/stream (SSE endpoint)
|
|
305
|
+
</messages>
|
|
306
|
+
|
|
307
|
+
<artifacts>
|
|
308
|
+
- GET /api/conversations/:id/artifacts
|
|
309
|
+
- GET /api/artifacts/:id
|
|
310
|
+
- PUT /api/artifacts/:id
|
|
311
|
+
- DELETE /api/artifacts/:id
|
|
312
|
+
- POST /api/artifacts/:id/fork
|
|
313
|
+
- GET /api/artifacts/:id/versions
|
|
314
|
+
</artifacts>
|
|
315
|
+
|
|
316
|
+
<projects>
|
|
317
|
+
- GET /api/projects
|
|
318
|
+
- POST /api/projects
|
|
319
|
+
- GET /api/projects/:id
|
|
320
|
+
- PUT /api/projects/:id
|
|
321
|
+
- DELETE /api/projects/:id
|
|
322
|
+
- POST /api/projects/:id/knowledge
|
|
323
|
+
- GET /api/projects/:id/conversations
|
|
324
|
+
- PUT /api/projects/:id/settings
|
|
325
|
+
</projects>
|
|
326
|
+
|
|
327
|
+
<sharing>
|
|
328
|
+
- POST /api/conversations/:id/share
|
|
329
|
+
- GET /api/share/:token
|
|
330
|
+
- DELETE /api/share/:token
|
|
331
|
+
- PUT /api/share/:token/settings
|
|
332
|
+
</sharing>
|
|
333
|
+
|
|
334
|
+
<prompts>
|
|
335
|
+
- GET /api/prompts/library
|
|
336
|
+
- POST /api/prompts/library
|
|
337
|
+
- GET /api/prompts/:id
|
|
338
|
+
- PUT /api/prompts/:id
|
|
339
|
+
- DELETE /api/prompts/:id
|
|
340
|
+
- GET /api/prompts/categories
|
|
341
|
+
- GET /api/prompts/examples
|
|
342
|
+
</prompts>
|
|
343
|
+
|
|
344
|
+
<search>
|
|
345
|
+
- GET /api/search/conversations?q=query
|
|
346
|
+
- GET /api/search/messages?q=query
|
|
347
|
+
- GET /api/search/artifacts?q=query
|
|
348
|
+
- GET /api/search/prompts?q=query
|
|
349
|
+
</search>
|
|
350
|
+
|
|
351
|
+
<folders>
|
|
352
|
+
- GET /api/folders
|
|
353
|
+
- POST /api/folders
|
|
354
|
+
- PUT /api/folders/:id
|
|
355
|
+
- DELETE /api/folders/:id
|
|
356
|
+
- POST /api/folders/:id/items
|
|
357
|
+
- DELETE /api/folders/:id/items/:conversationId
|
|
358
|
+
</folders>
|
|
359
|
+
|
|
360
|
+
<usage>
|
|
361
|
+
- GET /api/usage/daily
|
|
362
|
+
- GET /api/usage/monthly
|
|
363
|
+
- GET /api/usage/by-model
|
|
364
|
+
- GET /api/usage/conversations/:id
|
|
365
|
+
</usage>
|
|
366
|
+
|
|
367
|
+
<settings>
|
|
368
|
+
- GET /api/settings
|
|
369
|
+
- PUT /api/settings
|
|
370
|
+
- GET /api/settings/custom-instructions
|
|
371
|
+
- PUT /api/settings/custom-instructions
|
|
372
|
+
</settings>
|
|
373
|
+
|
|
374
|
+
<claude_api>
|
|
375
|
+
- POST /api/claude/chat (proxy to Claude API)
|
|
376
|
+
- POST /api/claude/chat/stream (streaming proxy)
|
|
377
|
+
- GET /api/claude/models
|
|
378
|
+
- POST /api/claude/images/upload
|
|
379
|
+
</claude_api>
|
|
380
|
+
</api_endpoints_summary>
|
|
381
|
+
|
|
382
|
+
<ui_layout>
|
|
383
|
+
<main_structure>
|
|
384
|
+
- Three-column layout: sidebar (conversations), main (chat), panel (artifacts)
|
|
385
|
+
- Collapsible sidebar with resize handle
|
|
386
|
+
- Responsive breakpoints: mobile (single column), tablet (two column), desktop (three column)
|
|
387
|
+
- Persistent header with project/model selector
|
|
388
|
+
- Bottom input area with send button and options
|
|
389
|
+
</main_structure>
|
|
390
|
+
|
|
391
|
+
<sidebar_left>
|
|
392
|
+
- New chat button (prominent)
|
|
393
|
+
- Project selector dropdown
|
|
394
|
+
- Search conversations input
|
|
395
|
+
- Conversations list (grouped by date: Today, Yesterday, Previous 7 days, etc.)
|
|
396
|
+
- Folder tree view (collapsible)
|
|
397
|
+
- Settings gear icon at bottom
|
|
398
|
+
- User profile at bottom
|
|
399
|
+
</sidebar_left>
|
|
400
|
+
|
|
401
|
+
<main_chat_area>
|
|
402
|
+
- Conversation title (editable inline)
|
|
403
|
+
- Model selector badge
|
|
404
|
+
- Message history (scrollable)
|
|
405
|
+
- Welcome screen for new conversations
|
|
406
|
+
- Suggested prompts (empty state)
|
|
407
|
+
- Input area with formatting toolbar
|
|
408
|
+
- Attachment button for images
|
|
409
|
+
- Send button with loading state
|
|
410
|
+
- Stop generation button
|
|
411
|
+
</main_chat_area>
|
|
412
|
+
|
|
413
|
+
<artifacts_panel>
|
|
414
|
+
- Artifact header with title and type badge
|
|
415
|
+
- Code editor or preview pane
|
|
416
|
+
- Tabs for multiple artifacts
|
|
417
|
+
- Full-screen toggle
|
|
418
|
+
- Download button
|
|
419
|
+
- Edit/Re-prompt button
|
|
420
|
+
- Version selector
|
|
421
|
+
- Close panel button
|
|
422
|
+
</artifacts_panel>
|
|
423
|
+
|
|
424
|
+
<modals_overlays>
|
|
425
|
+
- Settings modal (tabbed interface)
|
|
426
|
+
- Share conversation modal
|
|
427
|
+
- Export options modal
|
|
428
|
+
- Project settings modal
|
|
429
|
+
- Prompt library modal
|
|
430
|
+
- Command palette overlay
|
|
431
|
+
- Keyboard shortcuts reference
|
|
432
|
+
</modals_overlays>
|
|
433
|
+
</ui_layout>
|
|
434
|
+
|
|
435
|
+
<design_system>
|
|
436
|
+
<color_palette>
|
|
437
|
+
- Primary: Orange/amber accent (#CC785C claude-style)
|
|
438
|
+
- Background: White (light mode), Dark gray (#1A1A1A dark mode)
|
|
439
|
+
- Surface: Light gray (#F5F5F5 light), Darker gray (#2A2A2A dark)
|
|
440
|
+
- Text: Near black (#1A1A1A light), Off-white (#E5E5E5 dark)
|
|
441
|
+
- Borders: Light gray (#E5E5E5 light), Dark gray (#404040 dark)
|
|
442
|
+
- Code blocks: Monaco editor theme
|
|
443
|
+
</color_palette>
|
|
444
|
+
|
|
445
|
+
<typography>
|
|
446
|
+
- Sans-serif system font stack (Inter, SF Pro, Roboto, system-ui)
|
|
447
|
+
- Headings: font-semibold
|
|
448
|
+
- Body: font-normal, leading-relaxed
|
|
449
|
+
- Code: Monospace (JetBrains Mono, Consolas, Monaco)
|
|
450
|
+
- Message text: text-base (16px), comfortable line-height
|
|
451
|
+
</typography>
|
|
452
|
+
|
|
453
|
+
<components>
|
|
454
|
+
<message_bubble>
|
|
455
|
+
- User messages: Right-aligned, subtle background
|
|
456
|
+
- Assistant messages: Left-aligned, no background
|
|
457
|
+
- Markdown formatting with proper spacing
|
|
458
|
+
- Inline code with bg-gray-100 background
|
|
459
|
+
- Code blocks with syntax highlighting
|
|
460
|
+
- Copy button on code blocks
|
|
461
|
+
</message_bubble>
|
|
462
|
+
|
|
463
|
+
<buttons>
|
|
464
|
+
- Primary: Orange/amber background, white text, rounded
|
|
465
|
+
- Secondary: Border style with hover fill
|
|
466
|
+
- Icon buttons: Square with hover background
|
|
467
|
+
- Disabled state: Reduced opacity, no pointer events
|
|
468
|
+
</buttons>
|
|
469
|
+
|
|
470
|
+
<inputs>
|
|
471
|
+
- Rounded borders with focus ring
|
|
472
|
+
- Textarea auto-resize
|
|
473
|
+
- Placeholder text in gray
|
|
474
|
+
- Error states in red
|
|
475
|
+
- Character counter
|
|
476
|
+
</inputs>
|
|
477
|
+
|
|
478
|
+
<cards>
|
|
479
|
+
- Subtle border or shadow
|
|
480
|
+
- Rounded corners (8px)
|
|
481
|
+
- Padding: p-4 to p-6
|
|
482
|
+
- Hover state: slight shadow increase
|
|
483
|
+
</cards>
|
|
484
|
+
</components>
|
|
485
|
+
|
|
486
|
+
<animations>
|
|
487
|
+
- Smooth transitions (150-300ms)
|
|
488
|
+
- Fade in for new messages
|
|
489
|
+
- Slide in for sidebar
|
|
490
|
+
- Typing indicator animation
|
|
491
|
+
- Loading spinner for generation
|
|
492
|
+
- Skeleton loaders for content
|
|
493
|
+
</animations>
|
|
494
|
+
</design_system>
|
|
495
|
+
|
|
496
|
+
<key_interactions>
|
|
497
|
+
<message_flow>
|
|
498
|
+
1. User types message in input field
|
|
499
|
+
2. Optional: Attach images via button
|
|
500
|
+
3. Click send or press Enter
|
|
501
|
+
4. Message appears in chat immediately
|
|
502
|
+
5. Typing indicator shows while waiting
|
|
503
|
+
6. Response streams in word by word
|
|
504
|
+
7. Code blocks render with syntax highlighting
|
|
505
|
+
8. Artifacts detected and rendered in side panel
|
|
506
|
+
9. Message complete, enable regenerate option
|
|
507
|
+
</message_flow>
|
|
508
|
+
|
|
509
|
+
<artifact_flow>
|
|
510
|
+
1. Assistant generates artifact in response
|
|
511
|
+
2. Artifact panel slides in from right
|
|
512
|
+
3. Content renders (code with highlighting or live preview)
|
|
513
|
+
4. User can edit artifact inline
|
|
514
|
+
5. "Re-prompt" button to iterate with Claude
|
|
515
|
+
6. Download or copy artifact content
|
|
516
|
+
7. Full-screen mode for detailed work
|
|
517
|
+
8. Close panel to return to chat focus
|
|
518
|
+
</artifact_flow>
|
|
519
|
+
|
|
520
|
+
<conversation_management>
|
|
521
|
+
1. Click "New Chat" to start fresh conversation
|
|
522
|
+
2. Conversations auto-save with first message
|
|
523
|
+
3. Auto-generate title from first exchange
|
|
524
|
+
4. Click title to rename inline
|
|
525
|
+
5. Drag conversations into folders
|
|
526
|
+
6. Right-click for context menu (pin, archive, delete, export)
|
|
527
|
+
7. Search filters conversations in real-time
|
|
528
|
+
8. Click conversation to switch context
|
|
529
|
+
</conversation_management>
|
|
530
|
+
</key_interactions>
|
|
531
|
+
|
|
532
|
+
<implementation_steps>
|
|
533
|
+
<step number="1">
|
|
534
|
+
<title>Setup Project Foundation and Database</title>
|
|
535
|
+
<tasks>
|
|
536
|
+
- Initialize Express server with SQLite database
|
|
537
|
+
- Set up Claude API client with streaming support
|
|
538
|
+
- Create database schema with migrations
|
|
539
|
+
- Implement authentication endpoints
|
|
540
|
+
- Set up basic CORS and middleware
|
|
541
|
+
- Create health check endpoint
|
|
542
|
+
</tasks>
|
|
543
|
+
</step>
|
|
544
|
+
|
|
545
|
+
<step number="2">
|
|
546
|
+
<title>Build Core Chat Interface</title>
|
|
547
|
+
<tasks>
|
|
548
|
+
- Create main layout with sidebar and chat area
|
|
549
|
+
- Implement message display with markdown rendering
|
|
550
|
+
- Add streaming message support with SSE
|
|
551
|
+
- Build input area with auto-resize textarea
|
|
552
|
+
- Add code block syntax highlighting
|
|
553
|
+
- Implement stop generation functionality
|
|
554
|
+
- Add typing indicators and loading states
|
|
555
|
+
</tasks>
|
|
556
|
+
</step>
|
|
557
|
+
|
|
558
|
+
<step number="3">
|
|
559
|
+
<title>Conversation Management</title>
|
|
560
|
+
<tasks>
|
|
561
|
+
- Create conversation list in sidebar
|
|
562
|
+
- Implement new conversation creation
|
|
563
|
+
- Add conversation switching
|
|
564
|
+
- Build conversation rename functionality
|
|
565
|
+
- Implement delete with confirmation
|
|
566
|
+
- Add conversation search
|
|
567
|
+
- Create conversation grouping by date
|
|
568
|
+
</tasks>
|
|
569
|
+
</step>
|
|
570
|
+
|
|
571
|
+
<step number="4">
|
|
572
|
+
<title>Artifacts System</title>
|
|
573
|
+
<tasks>
|
|
574
|
+
- Build artifact detection from Claude responses
|
|
575
|
+
- Create artifact rendering panel
|
|
576
|
+
- Implement code artifact viewer
|
|
577
|
+
- Add HTML/SVG live preview
|
|
578
|
+
- Build artifact editing interface
|
|
579
|
+
- Add artifact versioning
|
|
580
|
+
- Implement full-screen artifact view
|
|
581
|
+
</tasks>
|
|
582
|
+
</step>
|
|
583
|
+
|
|
584
|
+
<step number="5">
|
|
585
|
+
<title>Projects and Organization</title>
|
|
586
|
+
<tasks>
|
|
587
|
+
- Create projects CRUD endpoints
|
|
588
|
+
- Build project selector UI
|
|
589
|
+
- Implement project-specific custom instructions
|
|
590
|
+
- Add folder system for conversations
|
|
591
|
+
- Create drag-and-drop organization
|
|
592
|
+
- Build project settings panel
|
|
593
|
+
</tasks>
|
|
594
|
+
</step>
|
|
595
|
+
|
|
596
|
+
<step number="6">
|
|
597
|
+
<title>Advanced Features</title>
|
|
598
|
+
<tasks>
|
|
599
|
+
- Add model selection dropdown
|
|
600
|
+
- Implement temperature and parameter controls
|
|
601
|
+
- Build image upload functionality
|
|
602
|
+
- Create message editing and regeneration
|
|
603
|
+
- Add conversation branching
|
|
604
|
+
- Implement export functionality
|
|
605
|
+
</tasks>
|
|
606
|
+
</step>
|
|
607
|
+
|
|
608
|
+
<step number="7">
|
|
609
|
+
<title>Settings and Customization</title>
|
|
610
|
+
<tasks>
|
|
611
|
+
- Build settings modal with tabs
|
|
612
|
+
- Implement theme switching (light/dark)
|
|
613
|
+
- Add custom instructions management
|
|
614
|
+
- Create keyboard shortcuts
|
|
615
|
+
- Build prompt library
|
|
616
|
+
- Add usage tracking dashboard
|
|
617
|
+
</tasks>
|
|
618
|
+
</step>
|
|
619
|
+
|
|
620
|
+
<step number="8">
|
|
621
|
+
<title>Sharing and Collaboration</title>
|
|
622
|
+
<tasks>
|
|
623
|
+
- Implement conversation sharing with tokens
|
|
624
|
+
- Create public share view
|
|
625
|
+
- Add export to multiple formats
|
|
626
|
+
- Build prompt templates
|
|
627
|
+
- Create example conversations
|
|
628
|
+
</tasks>
|
|
629
|
+
</step>
|
|
630
|
+
|
|
631
|
+
<step number="9">
|
|
632
|
+
<title>Polish and Optimization</title>
|
|
633
|
+
<tasks>
|
|
634
|
+
- Optimize for mobile responsiveness
|
|
635
|
+
- Add command palette (Cmd+K)
|
|
636
|
+
- Implement comprehensive keyboard navigation
|
|
637
|
+
- Add onboarding flow
|
|
638
|
+
- Create accessibility improvements
|
|
639
|
+
- Performance optimization and caching
|
|
640
|
+
</tasks>
|
|
641
|
+
</step>
|
|
642
|
+
</implementation_steps>
|
|
643
|
+
|
|
644
|
+
<success_criteria>
|
|
645
|
+
<functionality>
|
|
646
|
+
- Streaming chat responses work smoothly
|
|
647
|
+
- Artifact detection and rendering accurate
|
|
648
|
+
- Conversation management intuitive and reliable
|
|
649
|
+
- Project organization clear and useful
|
|
650
|
+
- Image upload and display working
|
|
651
|
+
- All CRUD operations functional
|
|
652
|
+
</functionality>
|
|
653
|
+
|
|
654
|
+
<user_experience>
|
|
655
|
+
- Interface matches claude.ai design language
|
|
656
|
+
- Responsive on all device sizes
|
|
657
|
+
- Smooth animations and transitions
|
|
658
|
+
- Fast response times and minimal lag
|
|
659
|
+
- Intuitive navigation and workflows
|
|
660
|
+
- Clear feedback for all actions
|
|
661
|
+
</user_experience>
|
|
662
|
+
|
|
663
|
+
<technical_quality>
|
|
664
|
+
- Clean, maintainable code structure
|
|
665
|
+
- Proper error handling throughout
|
|
666
|
+
- Secure API key management
|
|
667
|
+
- Optimized database queries
|
|
668
|
+
- Efficient streaming implementation
|
|
669
|
+
- Comprehensive testing coverage
|
|
670
|
+
</technical_quality>
|
|
671
|
+
|
|
672
|
+
<design_polish>
|
|
673
|
+
- Consistent with claude.ai visual design
|
|
674
|
+
- Beautiful typography and spacing
|
|
675
|
+
- Smooth animations and micro-interactions
|
|
676
|
+
- Excellent contrast and accessibility
|
|
677
|
+
- Professional, polished appearance
|
|
678
|
+
- Dark mode fully implemented
|
|
679
|
+
</design_polish>
|
|
680
|
+
</success_criteria>
|
|
681
|
+
</project_specification>
|