Skip to content

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

Merged
screen-gd merged 1 commit into
feat/tanstack-startfrom
chore/repo-layout-tidy
Oct 22, 2026
Merged

screen-gd merged 1 commit into
feat/tanstack-startfrom
chore/repo-layout-tidy

Conversation

@screen-gd

@screen-gd screen-gd commented Oct 22, 2026 •

Copy link
Copy Markdown
Owner

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.

 Syllo/
 ├── .agents/  .github/  docs/  CONTEXT.md  README.md  skills-lock.json
+├── apps/
+│   └── web/            # @syllo/web
+│       ├── src/  public/  prompts/  mcp/  convex/  scripts/
+│       ├── server.mjs  package.json  .env.example
+│       └── tsconfig.json  vite.config.ts  vitest.config.ts  eslint.config.mjs
-├── src/  public/  prompts/  mcp/  convex/  scripts/  server.mjs
-├── tsconfig.json  vite.config.ts  vitest.config.ts  eslint.config.mjs  .env.example
-├── package-lock.json
+├── pnpm-workspace.yaml # apps/*, packages/*
+├── pnpm-lock.yaml
 └── 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

The app's source, config, Convex functions, MCP server, prompts and
scripts now live in apps/web. The root keeps only repo-wide files: the
workspace config, lockfile, docs and agent tooling.

pnpm replaces npm. The epubjs @xmldom/xmldom override moves into
pnpm-workspace.yaml, since pnpm ignores npm's overrides field. Root
scripts run the app's checks, and `typecheck` now covers convex/ too.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@coderabbitai

coderabbitai Bot commented Oct 22, 2026 •

Copy link
Copy Markdown

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 7aaa13a and fb0732f.

⛔ 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.

@screen-gd
screen-gd added this pull request to stack #18 October 22, 2026 23:22
@screen-gd
screen-gd merged commit 2696d81 into main Oct 22, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant