Skip to content

Move to TanStack Start and add personal learning - #16

Merged
screen-gd merged 20 commits into
security/secret-scanningfrom
feat/tanstack-start
Oct 22, 2026
Merged

screen-gd merged 20 commits into
security/secret-scanningfrom
feat/tanstack-start

Conversation

@screen-gd

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

Copy link
Copy Markdown
Owner

Middle 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 the branch of the PR below it, so GitHub ignores closing keywords (Closes #n) here until #15 merges and its branch is deleted, which retargets this PR to main.

Summary

Replaces the Next.js app with Vite + TanStack Start, then builds the personal learning app on it.

build      Next.js            -> Vite 8 + TanStack Start, served by server.mjs (Node)
routing    app/ directory     -> src/routes/ file routes + server functions
features   + Scout: free-resource discovery, transcripts, LLM plan, SQLite job queue, MCP bridge
           + Today, Library, EPUB reader, reviews (FSRS), Pomodoro, manual roadmaps
           + optional owner-only Convex sync (convex/, scripts/prepare-convex-auth.mjs)
           + service worker for offline use
removed    password gate, ui-analysis module

The last commit (Add personal learning, the reader and optional Convex sync) was uncommitted work in the local checkout until now.

Evidence

  • Before: main is the Next.js app.
    After: on this branch:
    • npm run typecheck: exit 0
    • npm run typecheck:convex: exit 0
    • npm test: 12 files, 50 tests passed
    • npm run lint: 0 errors, 32 warnings
    • npm run build: built
  • gitleaks git over this PR's commits with .gitleaks.toml from Security: fail CI when a commit adds a secret #15: no leaks found.

Merge Danger

Door: two-way

Revertable, but it swaps the framework, so a revert means going back to the Next.js build.

Blast Radius: whole app

Every route, the build and the production host change. #14 (Next.js security patch) does not apply on top of this branch; there is no Next, sharp or React Server Components package left.

🤖 Generated with Claude Code

screen-gd and others added 20 commits October 23, 2026 03:14
The app now builds with Vite and runs on TanStack Start while every route,
component and localStorage key keeps its current behaviour.

- package.json: drop Next/PostCSS, add @tanstack/react-start and
  @tanstack/react-router, Vite 8 and Tailwind's Vite plugin; scripts become
  dev/build/start/lint/typecheck/test
- vite.config.ts: Tailwind plugin, React plugin and TanStack Start configured
  with srcDirectory "src" and routesDirectory "routes"
- tsconfig.json: bundler resolution, "@/*" path alias, Vite client types
- eslint.config.mjs: flat config that reproduces the six jsx-a11y rules plus
  the two react-hooks rules the previous next/core-web-vitals preset enforced,
  so the port does not smuggle in an accessibility or behaviour refactor
- .gitignore: ignore dist/ and .tanstack/ instead of .next/, and stop
  ignoring .env.example
- remove next.config.ts, proxy.ts, postcss.config.mjs, next-env.d.ts and the
  one-off migration helper scripts
…uter

Components, hooks, lib, types and the stylesheet now live under src/ so the
Vite root and the "@/*" alias have a single source directory. File contents
change only where they touched Next.js APIs.

- components/hooks/lib/types: relocated with git mv so history follows
- router-nav.ts: usePathname/useSearchParams adapters over TanStack Router
  state, so call sites keep their shape
- next/link -> @tanstack/react-router Link, next/navigation -> the adapters
- next/image usages were already plain <img> elements; drop the stale
  @next/next disable comments that no longer refer to an installed plugin
- app-url.ts: VITE_APP_URL-backed public origin helper
- globals.css: import the self-hosted Fontsource Geist families and keep the
  "--font-geist-*" variables the theme tokens already referenced
- roadmap-intake: read the body from a standard Request instead of NextRequest
Loaders run in the browser on client-side navigation, so anything that reads
the in-memory store now crosses a server-function boundary explicitly. The
password gate becomes request middleware instead of Next.js edge middleware.

- fns.ts: listGalleryFn and getPublicWorkspaceFn wrap the existing store
  readers, so gallery and public workspace loaders keep the same data shape
- gate.ts: reproduces proxy.ts behaviour with the same cookie, the same
  "/gate" and "/api/gate" exemptions, redirects to /gate?next=..., and the
  same fail-closed treatment of /share/* and /embed/*. Static asset prefixes
  and file extensions pass through so the bundle and /robots.txt load before
  the gate
- start.ts: registers the gate as request middleware for every request
Each App Router page becomes a thin file route plus a view component that
holds the body it already had. Every URL keeps its current path, so links,
bookmarks and client fetches are unaffected.

- routes/: route definitions only - path, search validation, per-page head()
  metadata and loaders; the former page bodies move to views/ unchanged
  apart from receiving their data as props instead of reading loader params
  from Next.js
- views/: prop-driven page components (GalleryView, ShareView, EmbedView,
  WorkspaceView take their data as arguments), so the same markup renders on
  the server and on client-side navigation
- /gallery keeps its q/mode/contentType search params through validateSearch
  and loaderDeps; /settings keeps its tab param
- /api/* handlers keep their exact paths and response shapes
- robots.txt and sitemap.xml become routes instead of metadata files
- /notes rewrites to /workspaces the way next.config.ts did
- routeTree.gen.ts is checked in, matching the generated-router convention
- delete the app/ tree now that nothing imports it
TanStack Start needs three files that Next.js used to synthesise: the router
factory, the browser hydration entry and the server entry.

- router.tsx: single getRouter() with scroll restoration and intent
  preloading, written side-effect free because both the client and the server
  entries import it
- client.tsx: hydrateRoot over <StartClient /> in StrictMode
- server.ts: default-export the framework's { fetch } handler. The Vite dev
  middleware calls `.default.fetch`, so exporting a bare function makes every
  request fail with "(intermediate value).default.fetch is not a function"
`vite build` leaves dist/client (assets) and dist/server/server.js (a fetch
handler). Without Nitro or srvx installed, this file is the whole production
server: one process, one origin, no extra runtime dependency.

- serves dist/client directly for existing files, with an immutable one-year
  cache on /assets/* and a one-hour cache on the rest
- forwards every other request to the built handler as a web Request/Response,
  including multiple set-cookie headers, which a plain object would collapse
- rejects path traversal outside dist/client
- honours PORT and HOST (default 0.0.0.0:3000); `npm start` already points at
  this file from the tooling commit
- README: how to install, run the dev server and the production build, the
  gate password variable, and the in-memory store caveat that share and embed
  links do not survive a restart
- .env.example: VITE_APP_URL, GATE_PASSWORD, optional PORT and the BYO model
  keys the app already read, with no real values committed
- public/og.png: one static 1200x630 image referenced by the root head,
  replacing the opengraph-image and twitter-image routes that Next.js
  generated at request time
The analyzer, its validators, tests and config example were not imported by
the app, the routes or the tests. Nothing references "ui-analysis" after this
change, and the vitest suite still covers the modules the app does use.
Scout keeps packs, resources, sources and queue jobs in one SQLite file. Prompts are versioned markdown so a pack can record which versions built it.
YouTube discovery reads channel uploads or RSS, never search.list. Articles go through Jina Reader, and transcripts try the local helper before the hosted fallback.
One queue drives discovery, fetching, extraction and workspace builds. Approval copies the picks into an idempotent roadmap, and quiz cards keep their quotes and timestamps.
The wizard starts a pack, shows progress, and publishes approved picks into local storage. Agents reach the same SQLite library through a small stdio MCP server, and the research endpoint only accepts validated links.
The dashboard adds a Continue card, review count and reading shelf for the last published pack. Settings gains a sources panel, auto-check controls and copy-ready MCP configs for installed agents.
The README and env example list every key, fallback and agent path. Tests cover timestamp and chapter parsing, quote checks, RSS entries, agent output and the job queue.
The app is single-user and local-first, so the gate only got in the way.
With no login in front of it, server.mjs now listens on 127.0.0.1 unless
HOST is set.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Replace the zero-radius emerald/indigo look and the !important override
layer with honest tokens: #000 page, #111 surfaces, white text and pill
buttons, and a sky-blue accent kept for data marks. Components now use
the tokens directly. The studio gets a left sidebar, noun titles, a KPI
strip on Home, and no glows, gradients or pulsing dots. The accent and
density settings apply on every studio page.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Fix primary buttons that rendered as blank pills: element styles in
globals.css sat outside Tailwind's layers and beat every utility, so a
Link's text colour was always inherited. Base and component styles now
live in @layer base and @layer components.

Workspaces becomes one list of rows with a segmented filter and sort.
Create gets a compact parsing toggle and a single action row. Analytics
uses the same KPI strip as Home, a heatmap that fills its panel, and
plain lists for progress and milestones. Scout lists past goals with
their status, and its sources panel uses switches and no longer scrolls
inside itself.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Adds Today, Library, the EPUB reader, reviews with FSRS scheduling,
Pomodoro and manual roadmaps, all stored in the browser. Convex
functions and a setup script add optional owner-only sync. Scout gains
free-web discovery and source evidence, and the PWA gets a service
worker for offline use.

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 354 files, which is 254 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.

Usage-priced reviews support at most 300 files.

⚙️ 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: 796fe565-c249-4f8e-9fae-3e8a67e7ff89
📥 Commits

Reviewing files that changed from the base of the PR and between d1556fe and 7aaa13a.

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

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