Move the app into apps/web as a pnpm workspace#17

merged1
feat/tanstack-start
chore/repo-layout-tidy
opened21d agobySScreen
View on GitHubTwo-way sync enabledPR last imported 21d ago

Top of the stack: #15 → #16 → #17

Merge order: #15, then #16, then #17. delete_branch_on_merge is off, so click Delete branch after each merge; that makes GitHub retarget the next PR to main.

This PR targets feat/tanstack-start (#16). Closing keywords take effect once #15 and #16 merge and their branches are deleted.

Summary

Moves the app into apps/web and makes the repo a pnpm workspace. The root keeps only repo-wide files.

diff
1 Syllo/
2 ├── .agents/ .github/ docs/ CONTEXT.md README.md skills-lock.json
3+├── apps/
4+│ └── web/ # @syllo/web
5+│ ├── src/ public/ prompts/ mcp/ convex/ scripts/
6+│ ├── server.mjs package.json .env.example
7+│ └── tsconfig.json vite.config.ts vitest.config.ts eslint.config.mjs
8-├── src/ public/ prompts/ mcp/ convex/ scripts/ server.mjs
9-├── tsconfig.json vite.config.ts vitest.config.ts eslint.config.mjs .env.example
10-├── package-lock.json
11+├── pnpm-workspace.yaml # apps/*, packages/*
12+├── pnpm-lock.yaml
13 └── package.json # root scripts: dev, build, start, lint, typecheck, test
  • npm becomes pnpm. pnpm ignores npm's overrides, so the epubjs>@xmldom/xmldom: 0.9.12 override moves to pnpm-workspace.yaml (the old pnpm lock had resolved 0.7.13).
  • pnpm typecheck now covers convex/ as well.
  • Env files and the Scout .data/ folder now live in apps/web. Move an existing .env.local or .data/syllo.db there.
  • README and docs/syllo-setup.md use the new paths and pnpm commands.

Evidence

  • Before: the app's files sat at the root next to repo files, with two lockfiles. After: from the root:
    • pnpm typecheck: exit 0
    • pnpm test: 12 files, 50 tests passed
    • pnpm lint: 0 errors, 32 warnings (same as before)
    • pnpm build: built
    • pnpm start: / 307, /library 200
    • node mcp/server.mjs (in apps/web): answers MCP initialize
  • git grep finds no root src/, mcp/, convex/ or npm references outside apps/web.

Merge Danger

Door: two-way

Blast Radius: tooling

Local setups need pnpm install, and any deploy must build from apps/web (root directory apps/web, or pnpm build from the root).

🤖 Generated with Claude Code

Checks

2 successful
All checks passed
fb0732f

Added 1 commit

  • Move the app into apps/web as a pnpm workspacefb0732f
Synced from GitHub

Important

Review skipped

Too many files!

This PR contains 268 files, which is 168 over the limit of 100.

To get a review, reduce the PR to 100 files or fewer by splitting it into smaller PRs or changing its base branch.

Upgrade to a paid plan to raise the limit.

This review couldn't start because sufficient usage credits or metered capacity aren't available. Add credits or update usage-based reviews in the billing tab, then retry.

Check out review usage here.

⚙️ Run configuration
  • Source mode: Auto
  • Repository: Unavailable
  • Branch: Unavailable
  • File: No configuration file from this repository applied
  • Commit: Unavailable
  • Layers: Organization UI
  • Review profile: ASSERTIVE
  • Plan: Advanced
  • Run ID: 37c2b1a6-2b13-4475-b24f-84c1f6b966ca
📥 Commits

Reviewing files that changed from the base of the PR and between 7aaa13a53767f48955af7e6f128501f5fc5a6fdc and fb0732f6dd92cba872e4acf6ed78ad560da1a339.

⛔ Files ignored due to path filters: 11
  • apps/web/public/brand-assets/exact-logo-render.png is excluded by !**/*.png
  • apps/web/public/brand-assets/roadmap-footer-full.png is excluded by !**/*.png
  • apps/web/public/brand-assets/roadmap-full-black.png is excluded by !**/*.png
  • apps/web/public/brand-assets/roadmap-full-white.png is excluded by !**/*.png
  • apps/web/public/brand-assets/roadmap-nav-full.png is excluded by !**/*.png
  • apps/web/public/brand-assets/roadmap-studio-logo.png is excluded by !**/*.png
  • apps/web/public/brand-assets/zns-logo.png is excluded by !**/*.png
  • apps/web/public/favicon.svg is excluded by !**/*.svg
  • apps/web/public/og.png is excluded by !**/*.png
  • package-lock.json is excluded by !**/package-lock.json
  • pnpm-lock.yaml is excluded by !**/pnpm-lock.yaml
📒 Files selected for processing: 268
  • .gitignore
  • README.md
  • apps/web/.env.example
  • apps/web/convex/auth.config.ts
  • apps/web/convex/auth.ts
  • apps/web/convex/cloud.ts
  • apps/web/convex/fileIds.ts
  • apps/web/convex/http.ts
  • apps/web/convex/model.ts
  • apps/web/convex/schema.ts
  • apps/web/convex/tsconfig.json
  • apps/web/eslint.config.mjs
  • apps/web/mcp/server.mjs
  • apps/web/package.json
  • apps/web/prompts/scout/book.v1.md
  • apps/web/prompts/scout/extract.v1.md
  • apps/web/prompts/scout/plan.v1.md
  • apps/web/prompts/scout/quiz.v1.md
  • apps/web/public/manifest.json
  • apps/web/public/sw.js
  • apps/web/scripts/prepare-convex-auth.mjs
  • apps/web/server.mjs
  • apps/web/src/client.tsx
  • apps/web/src/components/credits/CreditBadge.tsx
  • apps/web/src/components/dashboard/AtRiskAlerts.tsx
  • apps/web/src/components/dashboard/CoachingLog.tsx
  • apps/web/src/components/dashboard/ModuleCompletionTable.tsx
  • apps/web/src/components/dashboard/SkillHeatmap.tsx
  • apps/web/src/components/dashboard/VelocityChart.tsx
  • apps/web/src/components/gallery/GalleryCard.tsx
  • apps/web/src/components/gallery/GalleryFilters.tsx
  • apps/web/src/components/gallery/GalleryGrid.tsx
  • apps/web/src/components/layout/Footer.tsx
  • apps/web/src/components/layout/Header.tsx
  • apps/web/src/components/layout/LearningLayout.tsx
  • apps/web/src/components/layout/LearningSidebar.tsx
  • apps/web/src/components/layout/LoadingExperience.tsx
  • apps/web/src/components/layout/MarketingHeroShell.tsx
  • apps/web/src/components/layout/SettingsSection.tsx
  • apps/web/src/components/layout/StudioSidebar.tsx
  • apps/web/src/components/learning/BookCover.tsx
  • apps/web/src/components/learning/OfflineSupport.tsx
  • apps/web/src/components/learning/Pomodoro.tsx
  • apps/web/src/components/learning/ReviewComposer.tsx
  • apps/web/src/components/learning/StudyVideo.tsx
  • apps/web/src/components/scout/CostMeter.tsx
  • apps/web/src/components/scout/ManualRoadmap.tsx
  • apps/web/src/components/scout/PickList.tsx
  • apps/web/src/components/scout/ScoutProgress.tsx
  • apps/web/src/components/scout/SourcesPanel.tsx
  • apps/web/src/components/seo/FaqSchema.tsx
  • apps/web/src/components/seo/GallerySchema.tsx
  • apps/web/src/components/seo/HowToSchema.tsx
  • apps/web/src/components/seo/WebAppSchema.tsx
  • apps/web/src/components/shared/ContentViewer.tsx
  • apps/web/src/components/shared/EmptyState.tsx
  • apps/web/src/components/shared/Logo.tsx
  • apps/web/src/components/shared/Modal.tsx
  • apps/web/src/components/shared/ProgressRing.tsx
  • apps/web/src/components/shared/Providers.tsx
  • apps/web/src/components/shared/SmartEmbed.tsx
  • apps/web/src/components/shared/StatusBadge.tsx
  • apps/web/src/components/shared/ThemeToggle.tsx
  • apps/web/src/components/shared/VideoPlayer.tsx
  • apps/web/src/components/sharing/ViralBadge.tsx
  • apps/web/src/components/sync/CloudSync.tsx
  • apps/web/src/components/sync/SyncSettings.tsx
  • apps/web/src/components/ui/alert-dialog.tsx
  • apps/web/src/components/ui/button.tsx
  • apps/web/src/components/ui/card.tsx
  • apps/web/src/components/ui/input.tsx
  • apps/web/src/components/ui/segmented.tsx
  • apps/web/src/components/ui/select.tsx
  • apps/web/src/components/ui/separator.tsx
  • apps/web/src/components/ui/switch.tsx
  • apps/web/src/components/ui/textarea.tsx
  • apps/web/src/components/workspace/ContextPanel.tsx
  • apps/web/src/components/workspace/SectionRenderer.tsx
  • apps/web/src/components/workspace/SettingsModal.tsx
  • apps/web/src/components/workspace/ShareEmbedModal.tsx
  • apps/web/src/components/workspace/SrsReviewModal.tsx
  • apps/web/src/components/workspace/WorkspaceShell.tsx
  • apps/web/src/components/workspace/WorkspaceSplitView.tsx
  • apps/web/src/components/workspace/sections/CalendarSection.tsx
  • apps/web/src/components/workspace/sections/CustomSection.tsx
  • apps/web/src/components/workspace/sections/GlossarySection.tsx
  • apps/web/src/components/workspace/sections/MilestonesSection.tsx
  • apps/web/src/components/workspace/sections/ModuleSection.tsx
  • apps/web/src/components/workspace/sections/NotesSection.tsx
  • apps/web/src/components/workspace/sections/ProgressSection.tsx
  • apps/web/src/components/workspace/sections/ResourcesSection.tsx
  • apps/web/src/components/workspace/sections/SubmissionsSection.tsx
  • apps/web/src/components/workspace/sections/TaskListSection.tsx
  • apps/web/src/components/workspace/sections/VideosSection.tsx
  • apps/web/src/components/workspaces/WorkspaceLibraryCard.tsx
  • apps/web/src/hooks/useAchievements.ts
  • apps/web/src/hooks/useLearningRoadmaps.ts
  • apps/web/src/hooks/useProgress.ts
  • apps/web/src/hooks/useRoadmap.ts
  • apps/web/src/hooks/useStreak.ts
  • apps/web/src/hooks/useTimeTracker.ts
  • apps/web/src/lib/__tests__/epub-library.test.ts
  • apps/web/src/lib/__tests__/learning-session.test.ts
  • apps/web/src/lib/__tests__/navigation.test.ts
  • apps/web/src/lib/__tests__/personal-learning.test.ts
  • apps/web/src/lib/__tests__/private-mode.test.ts
  • apps/web/src/lib/__tests__/roadmap-intake.test.ts
  • apps/web/src/lib/__tests__/workspace-persistence.test.ts
  • apps/web/src/lib/accent-theme.ts
  • apps/web/src/lib/ai-config.ts
  • apps/web/src/lib/ai-policy.ts
  • apps/web/src/lib/aiClient.ts
  • apps/web/src/lib/analytics.ts
  • apps/web/src/lib/app-url.ts
  • apps/web/src/lib/billing.ts
  • apps/web/src/lib/constants.ts
  • apps/web/src/lib/credits.ts
  • apps/web/src/lib/export.ts
  • apps/web/src/lib/gallery.ts
  • apps/web/src/lib/learning-session.ts
  • apps/web/src/lib/learning.ts
  • apps/web/src/lib/navigation.ts
  • apps/web/src/lib/openai.ts
  • apps/web/src/lib/personal/books.ts
  • apps/web/src/lib/personal/cloud-api.ts
  • apps/web/src/lib/personal/files.ts
  • apps/web/src/lib/personal/schema.ts
  • apps/web/src/lib/personal/store.ts
  • apps/web/src/lib/plans.ts
  • apps/web/src/lib/private-api-fetch.ts
  • apps/web/src/lib/reviews.ts
  • apps/web/src/lib/router-nav.ts
  • apps/web/src/lib/scout/__tests__/agent.test.ts
  • apps/web/src/lib/scout/__tests__/format.test.ts
  • apps/web/src/lib/scout/__tests__/jobs.test.ts
  • apps/web/src/lib/scout/__tests__/source-evidence.test.ts
  • apps/web/src/lib/scout/__tests__/youtube-feed.test.ts
  • apps/web/src/lib/scout/agent-runner.ts
  • apps/web/src/lib/scout/api-client.ts
  • apps/web/src/lib/scout/client.ts
  • apps/web/src/lib/scout/db.ts
  • apps/web/src/lib/scout/digest.ts
  • apps/web/src/lib/scout/discovery/combine.ts
  • apps/web/src/lib/scout/discovery/exa.ts
  • apps/web/src/lib/scout/discovery/free-web.ts
  • apps/web/src/lib/scout/discovery/index.ts
  • apps/web/src/lib/scout/discovery/youtube.ts
  • apps/web/src/lib/scout/extract.ts
  • apps/web/src/lib/scout/fetch/reader.ts
  • apps/web/src/lib/scout/fetch/transcripts.ts
  • apps/web/src/lib/scout/format.ts
  • apps/web/src/lib/scout/http.ts
  • apps/web/src/lib/scout/jobs.ts
  • apps/web/src/lib/scout/library.ts
  • apps/web/src/lib/scout/llm.ts
  • apps/web/src/lib/scout/pack.ts
  • apps/web/src/lib/scout/pipeline.ts
  • apps/web/src/lib/scout/plan.ts
  • apps/web/src/lib/scout/prompts.ts
  • apps/web/src/lib/scout/runner.ts
  • apps/web/src/lib/scout/schema.sql
  • apps/web/src/lib/scout/settings.ts
  • apps/web/src/lib/scout/sources.ts
  • apps/web/src/lib/scout/spend.ts
  • apps/web/src/lib/scout/types.ts
  • apps/web/src/lib/server/access.ts
  • apps/web/src/lib/server/ai.ts
  • apps/web/src/lib/server/auth.ts
  • apps/web/src/lib/server/credits.ts
  • apps/web/src/lib/server/dashboard.ts
  • apps/web/src/lib/server/fns.ts
  • apps/web/src/lib/server/gallery.ts
  • apps/web/src/lib/server/quiz.ts
  • apps/web/src/lib/server/roadmap-intake.ts
  • apps/web/src/lib/server/settings.ts
  • apps/web/src/lib/server/srs.ts
  • apps/web/src/lib/server/store.ts
  • apps/web/src/lib/server/workspaces.ts
  • apps/web/src/lib/spaced-repetition.ts
  • apps/web/src/lib/srs.ts
  • apps/web/src/lib/storage.ts
  • apps/web/src/lib/submissions-api.ts
  • apps/web/src/lib/userConfig.ts
  • apps/web/src/lib/utils.ts
  • apps/web/src/lib/versioning.ts
  • apps/web/src/lib/video-utils.ts
  • apps/web/src/lib/workspace-persistence.ts
  • apps/web/src/lib/workspace-stats.ts
  • apps/web/src/routeTree.gen.ts
  • apps/web/src/router.tsx
  • apps/web/src/routes/__root.tsx
  • apps/web/src/routes/_marketing.tsx
  • apps/web/src/routes/_marketing/contact.tsx
  • apps/web/src/routes/_marketing/gallery.tsx
  • apps/web/src/routes/_marketing/index.tsx
  • apps/web/src/routes/_marketing/pricing.tsx
  • apps/web/src/routes/_marketing/privacy.tsx
  • apps/web/src/routes/_marketing/terms.tsx
  • apps/web/src/routes/_studio.tsx
  • apps/web/src/routes/_studio/analytics.tsx
  • apps/web/src/routes/_studio/create.tsx
  • apps/web/src/routes/_studio/dashboard.tsx
  • apps/web/src/routes/_studio/learn.tsx
  • apps/web/src/routes/_studio/library.tsx
  • apps/web/src/routes/_studio/notes.tsx
  • apps/web/src/routes/_studio/read.$id.tsx
  • apps/web/src/routes/_studio/reviews.tsx
  • apps/web/src/routes/_studio/scout.tsx
  • apps/web/src/routes/_studio/settings.tsx
  • apps/web/src/routes/_studio/workspaces.tsx
  • apps/web/src/routes/api/credits/status.ts
  • apps/web/src/routes/api/dashboard/coaching.ts
  • apps/web/src/routes/api/dashboard/review.ts
  • apps/web/src/routes/api/gallery/fork.ts
  • apps/web/src/routes/api/gallery/list.ts
  • apps/web/src/routes/api/gallery/set-public.ts
  • apps/web/src/routes/api/parse-roadmap.ts
  • apps/web/src/routes/api/quiz/generate.ts
  • apps/web/src/routes/api/scout/agents.ts
  • apps/web/src/routes/api/scout/digest.ts
  • apps/web/src/routes/api/scout/packs.$id.approve.ts
  • apps/web/src/routes/api/scout/packs.$id.ts
  • apps/web/src/routes/api/scout/recent.ts
  • apps/web/src/routes/api/scout/resources.ts
  • apps/web/src/routes/api/scout/settings.ts
  • apps/web/src/routes/api/scout/sources.ts
  • apps/web/src/routes/api/scout/start.ts
  • apps/web/src/routes/api/settings/delete.ts
  • apps/web/src/routes/api/settings/export.ts
  • apps/web/src/routes/api/settings/privacy.ts
  • apps/web/src/routes/api/srs/save.ts
  • apps/web/src/routes/embed.$id.tsx
  • apps/web/src/routes/robots[.]txt.ts
  • apps/web/src/routes/share.$id.tsx
  • apps/web/src/routes/sitemap[.]xml.ts
  • apps/web/src/routes/workspace.$id.tsx
  • apps/web/src/server.ts
  • apps/web/src/start.ts
  • apps/web/src/styles/globals.css
  • apps/web/src/styles/learning.css
  • apps/web/src/types/index.ts
  • apps/web/src/views/embed.tsx
  • apps/web/src/views/marketing/contact.tsx
  • apps/web/src/views/marketing/gallery.tsx
  • apps/web/src/views/marketing/home.tsx
  • apps/web/src/views/marketing/pricing.tsx
  • apps/web/src/views/marketing/privacy.tsx
  • apps/web/src/views/marketing/terms.tsx
  • apps/web/src/views/share.tsx
  • apps/web/src/views/studio/analytics.tsx
  • apps/web/src/views/studio/create.tsx
  • apps/web/src/views/studio/dashboard.tsx
  • apps/web/src/views/studio/home.tsx
  • apps/web/src/views/studio/learn.tsx
  • apps/web/src/views/studio/library.tsx
  • apps/web/src/views/studio/personal-settings.tsx
  • apps/web/src/views/studio/reader.tsx
  • apps/web/src/views/studio/reviews.tsx
  • apps/web/src/views/studio/scout.tsx
  • apps/web/src/views/studio/settings.tsx
  • apps/web/src/views/studio/workspaces.tsx
  • apps/web/src/views/workspace.tsx
  • apps/web/tsconfig.json
  • apps/web/vite.config.ts
  • apps/web/vitest.config.ts
  • docs/syllo-setup.md
  • package.json
  • pnpm-workspace.yaml

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

  • Autofix · Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.