Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
108 commits
Select commit Hold shift + click to select a range
b64d7f4
Initial commit
lucasdoell Mar 12, 2026
4ee1136
Add tsconfig
lucasdoell Mar 12, 2026
8342a31
Add basic bot scaffolding
lucasdoell Mar 12, 2026
17d32d4
Add prisma install
lucasdoell Mar 12, 2026
456d903
Add guild configs schema
lucasdoell Mar 12, 2026
a04fe59
Add Prisma client setup with PostgreSQL adapter
lucasdoell Mar 12, 2026
2c1d580
Update setup command to await API key setting for guild
lucasdoell Mar 12, 2026
1a5600f
Remove loading of persisted guild keys during startup
lucasdoell Mar 12, 2026
6363a3f
Update API functions to await retrieval of API key for guild
lucasdoell Mar 12, 2026
b84a1a7
Refactor key store functions to use Prisma for API key management
lucasdoell Mar 12, 2026
b5110fc
Update webhook port configuration and fix syntax in event handler
lucasdoell Mar 12, 2026
8e9d143
Implement conditional command registration for development and produc…
lucasdoell Mar 12, 2026
744ed17
Add logger utility for structured logging with environment and commit…
lucasdoell Mar 12, 2026
1fde168
Refactor ready event to include structured logging for bot readiness …
lucasdoell Mar 12, 2026
fac6878
Add structured logging for command execution events in interaction ha…
lucasdoell Mar 12, 2026
658d99c
Add structured logging for webhook requests, including success and er…
lucasdoell Mar 12, 2026
a8992ae
Add development-specific logging to the logger utility, enhancing err…
lucasdoell Mar 12, 2026
6f0551e
Refactor ephemeral message handling to use MessageFlags for improved …
lucasdoell Mar 12, 2026
7365197
Refactor webhook server implementation by removing the existing serve…
lucasdoell Mar 12, 2026
cce88ee
Add server implementation for handling HTTP requests, including healt…
lucasdoell Mar 12, 2026
8867508
Add authentication middleware to verify bot secret from request headers
lucasdoell Mar 12, 2026
98741b5
Add guild and channel retrieval functions to the API, enabling fetchi…
lucasdoell Mar 12, 2026
f938a3c
Add notification sending functionality to the API
lucasdoell Mar 12, 2026
748c8f5
Refactor API request parameters in command files for consistency and …
lucasdoell Mar 12, 2026
7a0acbc
Remove setup command
lucasdoell Mar 12, 2026
789f17a
Refactor interaction response handling to use array syntax for Messag…
lucasdoell Mar 12, 2026
3a599cc
Remove setup command from the client ready event handler
lucasdoell Mar 12, 2026
1ae1d56
Refactor API functions to remove guild ID dependency and use bot secr…
lucasdoell Mar 12, 2026
d1469ef
Refactor logger utility to simplify entry handling in development env…
lucasdoell Mar 12, 2026
b177762
Remove unused key-store and webhook utility files to streamline the c…
lucasdoell Mar 12, 2026
51b1115
Add OpenTelemetry instrumentation for tracing and monitoring
lucasdoell Mar 12, 2026
9230710
Add OpenTelemetry tracing to API and interaction handling for improve…
lucasdoell Mar 12, 2026
d542ee2
Update dependencies for OpenTelemetry instrumentation and add bun.lockb
lucasdoell Mar 12, 2026
3676b58
Add trace context injection for OpenTelemetry in API requests to enha…
lucasdoell Mar 12, 2026
590c435
Enhance OpenTelemetry integration by adding trace context extraction …
lucasdoell Mar 12, 2026
ad2ac59
Update logger utility to change service name from 'parsertime-bot' to…
lucasdoell Mar 12, 2026
4b2aca9
Implement OpenTelemetry tracing in API GET requests, enhancing error …
lucasdoell Mar 12, 2026
fa04918
Integrate OpenTelemetry tracing into the compare command's interactio…
lucasdoell Mar 12, 2026
8e62f19
Integrate OpenTelemetry tracing into leaderboard command interactions
lucasdoell Mar 12, 2026
f52e2c9
Integrate OpenTelemetry tracing into profile command interactions
lucasdoell Mar 12, 2026
5fccef9
Integrate OpenTelemetry tracing into team command interactions
lucasdoell Mar 12, 2026
cf208c2
Refactor error handling in interactionCreate to ensure proper respons…
lucasdoell Mar 12, 2026
7670371
Add OpenTelemetry tracing for defer and edit reply interactions in Di…
lucasdoell Mar 12, 2026
d8492f1
Refactor compare and profile commands to handle undefined stats grace…
lucasdoell Mar 12, 2026
8f1d507
Refactor profile command to update ProfileData structure, enhancing p…
lucasdoell Mar 12, 2026
6cb405c
Enhance compare command to utilize structured PlayerCompareData, impr…
lucasdoell Mar 12, 2026
0dee866
Refactor formatStatValue function in compare and profile commands to …
lucasdoell Mar 12, 2026
0c8d1f6
Update settings.local.json to add new permissions for TypeScript task…
lucasdoell Mar 12, 2026
ed4b6a8
Integrate OpenTelemetry tracing into compare, leaderboard, profile, a…
lucasdoell Mar 12, 2026
7eab4b7
Add OpenTelemetry tracing enhancements in interactionCreate to captur…
lucasdoell Mar 12, 2026
86f66b9
Update settings.local.json to include a new Bash command for running …
lucasdoell Mar 12, 2026
1283c85
Add utility functions for number formatting, duration formatting, and…
lucasdoell Mar 13, 2026
db374f5
Export BRAND_COLOR constant and enhance brandEmbed function with foot…
lucasdoell Mar 13, 2026
e839bdb
Refactor compare, leaderboard, profile, and team commands to enhance …
lucasdoell Mar 13, 2026
36ab246
Update footer in embeds to include iconURL for consistent branding ac…
lucasdoell Mar 13, 2026
663b2f5
Handle availability.reminder notification event with role ping
lucasdoell Apr 24, 2026
c49e150
Poll parsertime for pending availability reminders on a schedule
lucasdoell Apr 24, 2026
0ed6af9
Include week range and role ping in reminder content
lucasdoell Apr 24, 2026
0ce5d85
Add /availability slash command with setup and trigger subcommands
lucasdoell Apr 24, 2026
6793769
Add /teams command listing your teams and their IDs
lucasdoell Apr 24, 2026
28dd318
Add help command for listing bot commands with descriptions
lucasdoell Apr 24, 2026
1f72127
Update API to require user ID for guild list
lucasdoell Apr 24, 2026
a3c06dd
Handle scrim.request notification event with bracket and roster embed
lucasdoell Apr 27, 2026
f2efb21
Update bun version
lucasdoell Apr 27, 2026
0c6604f
Initial commit from Create Fumadocs App
lucasdoell May 28, 2026
244f48e
Add design language from Parsertime
lucasdoell May 28, 2026
0895bc5
Add docs from v3 update
lucasdoell May 28, 2026
1fb9fcb
Update hero page with 3D rendered parsertime logo
lucasdoell May 28, 2026
cb2eda7
Update page layout to be more content-heavy
lucasdoell May 28, 2026
81d053f
Add edge config support for latest updates pill
lucasdoell May 28, 2026
d5363aa
Update styling to match landing page styles
lucasdoell May 28, 2026
ca1db58
Add structured data for SEO
lucasdoell May 28, 2026
57c1cfd
Rewrite meta description for length
lucasdoell May 28, 2026
b2f8d79
Fix sigil alignment on mobile
lucasdoell May 28, 2026
251e450
Document v3 feature wave and refresh landing page
lucasdoell Jun 15, 2026
6acf57e
Replace incorrect TSR acronym
lucasdoell Jun 15, 2026
30695e4
Update known-issues.mdx
lucasdoell Jun 15, 2026
d185792
Replace DKEEH with Z0ASA
lucasdoell Jun 15, 2026
ce77ad6
Correct feature availability tiers for v3.0 launch
lucasdoell Jun 16, 2026
79bec6b
Move web app into apps/web for monorepo migration
lucasdoell Jun 17, 2026
5c553b8
Merge parsertime-docs into apps/docs, preserving history
lucasdoell Jun 17, 2026
2df5204
Drop nested docs lockfile in favor of workspace root lockfile
lucasdoell Jun 17, 2026
6af439e
Merge bot into apps/bot, preserving history
lucasdoell Jun 17, 2026
da98a0f
Make bot a pnpm workspace member (parsertime-bot), keep Bun runtime
lucasdoell Jun 17, 2026
c3d4e28
Add Turborepo root scaffolding: turbo.json, delegating package.json, …
lucasdoell Jun 17, 2026
b8d57cc
Wire workspace install: resilient bot prisma config + workspace lockfile
lucasdoell Jun 17, 2026
5ed04ff
Fix CI for monorepo: root format:check task and filtered db:deploy
lucasdoell Jun 17, 2026
fa396a0
Extract shared oxlint/oxfmt config to @parsertime/lint-config
lucasdoell Jun 17, 2026
4a9b1f3
Document monorepo structure and per-app deployment in README
lucasdoell Jun 17, 2026
7d82725
Update docs port
lucasdoell Jun 18, 2026
9781ad8
Upgrade turbo version
lucasdoell Jun 18, 2026
a73ae0f
Enable Turborepo interactive TUI explicitly via ui: tui
lucasdoell Jun 18, 2026
ee8cd50
Merge latest main into monorepo migration
lucasdoell Jun 23, 2026
ebb244e
Scaffold @parsertime/transactional email package
lucasdoell Jun 23, 2026
3b5998c
Move email templates into @parsertime/transactional package
lucasdoell Jun 23, 2026
6aad86d
Add @react-email/ui for preview server and pin @types/node
lucasdoell Jun 23, 2026
683e121
Consume @parsertime/transactional email templates from the web app
lucasdoell Jun 23, 2026
14aa84e
Ignore superpowers docs at root level
lucasdoell Jun 23, 2026
0e2a563
Add PreviewProps to email templates so they render in the preview server
lucasdoell Jun 23, 2026
518ba38
Point transactional package formatter at the shared lint-config
lucasdoell Jun 23, 2026
fab37a4
Migrate typechecking to the TypeScript 7.0 RC native compiler
lucasdoell Jun 25, 2026
7977503
Update dependencies to clear all open security advisories
lucasdoell Jun 25, 2026
b524336
Migrate authentication from next-auth to Better Auth
lucasdoell Jun 26, 2026
9c1d319
Add internationalization instructions to AGENTS.md
lucasdoell Jun 26, 2026
0e06349
Reformat
lucasdoell Jun 26, 2026
5008902
Fix lint errors and prefer-template warnings
lucasdoell Jun 26, 2026
06d1fdc
Add oxlint-tsgolint to all type-aware lint workspaces
lucasdoell Jun 26, 2026
a055773
Add precommit checks to AGENTS.md
lucasdoell Jun 26, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
2 changes: 1 addition & 1 deletion .github/workflows/migrate.yml
Original file line number Diff line number Diff line change
Expand Up @@ -37,4 +37,4 @@ jobs:
env:
DATABASE_URL: ${{ secrets.DATABASE_URL_PROD }}
DIRECT_URL: ${{ secrets.DIRECT_URL_PROD }}
run: pnpm db:deploy
run: pnpm --filter parsertime db:deploy
69 changes: 26 additions & 43 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -1,66 +1,49 @@
# See https://help.github.com/articles/ignoring-files/ for more about ignoring files.
# Repo-wide ignores. Each app under apps/* also has its own .gitignore.

# dependencies
/node_modules
/.pnp
node_modules/
.pnp
.pnp.js
.yarn/install-state.gz
.npmrc

# testing
/coverage

# next.js
/.next/
/out/

# production
/build
# build outputs
.next/
out/
build/
dist/
*.tsbuildinfo
next-env.d.ts

# misc
.DS_Store
*.pem
# turborepo
.turbo/

# debug
npm-debug.log*
yarn-debug.log*
yarn-error.log*
# testing
coverage/

# local env files
.env
.env*.local

# vercel
.vercel

# typescript
*.tsbuildinfo
next-env.d.ts
# editor / OS
.DS_Store
*.pem
.idea/
.vscode/settings.json
.env

# intellij
.idea

# CI
/reports
# debug logs
npm-debug.log*
yarn-debug.log*
yarn-error.log*

# agents / tooling
.claude/settings.local.json

# Superpowers brainstorm files
.superpowers/
# next-agents-md
.next-docs/
# agent-browser auth state
.worktrees/
my-auth.json
*.auth.json

docs/superpowers/

# git worktrees
.worktrees/

# WP training output (derived from user data — never commit)
artifacts/

# Prisma generated client
src/generated/
docs/superpowers
37 changes: 29 additions & 8 deletions AGENTS.md
Original file line number Diff line number Diff line change
@@ -1,15 +1,36 @@
<!-- NEXT-AGENTS-MD-START -->[Next.js Docs Index]|root: ./.next-docs|STOP. What you remember about Next.js is WRONG for this project. Always search docs and read before any task.|If docs missing, run this command first: npx @next/codemod agents-md --output CLAUDE.md|01-app:{04-glossary.mdx}|01-app/01-getting-started:{01-installation.mdx,02-project-structure.mdx,03-layouts-and-pages.mdx,04-linking-and-navigating.mdx,05-server-and-client-components.mdx,06-fetching-data.mdx,07-mutating-data.mdx,08-caching.mdx,09-revalidating.mdx,10-error-handling.mdx,11-css.mdx,12-images.mdx,13-fonts.mdx,14-metadata-and-og-images.mdx,15-route-handlers.mdx,16-proxy.mdx,17-deploying.mdx,18-upgrading.mdx}|01-app/02-guides:{ai-agents.mdx,analytics.mdx,authentication.mdx,backend-for-frontend.mdx,caching-without-cache-components.mdx,ci-build-caching.mdx,content-security-policy.mdx,css-in-js.mdx,custom-server.mdx,data-security.mdx,debugging.mdx,draft-mode.mdx,environment-variables.mdx,forms.mdx,incremental-static-regeneration.mdx,instant-navigation.mdx,instrumentation.mdx,internationalization.mdx,json-ld.mdx,lazy-loading.mdx,local-development.mdx,mcp.mdx,mdx.mdx,memory-usage.mdx,migrating-to-cache-components.mdx,multi-tenant.mdx,multi-zones.mdx,open-telemetry.mdx,package-bundling.mdx,prefetching.mdx,preserving-ui-state.mdx,production-checklist.mdx,progressive-web-apps.mdx,public-static-pages.mdx,redirecting.mdx,sass.mdx,scripts.mdx,self-hosting.mdx,single-page-applications.mdx,static-exports.mdx,streaming.mdx,tailwind-v3-css.mdx,third-party-libraries.mdx,videos.mdx}|01-app/02-guides/migrating:{app-router-migration.mdx,from-create-react-app.mdx,from-vite.mdx}|01-app/02-guides/testing:{cypress.mdx,jest.mdx,playwright.mdx,vitest.mdx}|01-app/02-guides/upgrading:{codemods.mdx,version-14.mdx,version-15.mdx,version-16.mdx}|01-app/03-api-reference:{07-edge.mdx,08-turbopack.mdx}|01-app/03-api-reference/01-directives:{use-cache-private.mdx,use-cache-remote.mdx,use-cache.mdx,use-client.mdx,use-server.mdx}|01-app/03-api-reference/02-components:{font.mdx,form.mdx,image.mdx,link.mdx,script.mdx}|01-app/03-api-reference/03-file-conventions/01-metadata:{app-icons.mdx,manifest.mdx,opengraph-image.mdx,robots.mdx,sitemap.mdx}|01-app/03-api-reference/03-file-conventions/02-route-segment-config:{dynamicParams.mdx,instant.mdx,maxDuration.mdx,preferredRegion.mdx,runtime.mdx}|01-app/03-api-reference/03-file-conventions:{default.mdx,dynamic-routes.mdx,error.mdx,forbidden.mdx,instrumentation-client.mdx,instrumentation.mdx,intercepting-routes.mdx,layout.mdx,loading.mdx,mdx-components.mdx,not-found.mdx,page.mdx,parallel-routes.mdx,proxy.mdx,public-folder.mdx,route-groups.mdx,route.mdx,src-folder.mdx,template.mdx,unauthorized.mdx}|01-app/03-api-reference/04-functions:{after.mdx,cacheLife.mdx,cacheTag.mdx,catchError.mdx,connection.mdx,cookies.mdx,draft-mode.mdx,fetch.mdx,forbidden.mdx,generate-image-metadata.mdx,generate-metadata.mdx,generate-sitemaps.mdx,generate-static-params.mdx,generate-viewport.mdx,headers.mdx,image-response.mdx,next-request.mdx,next-response.mdx,not-found.mdx,permanentRedirect.mdx,redirect.mdx,refresh.mdx,revalidatePath.mdx,revalidateTag.mdx,unauthorized.mdx,unstable_cache.mdx,unstable_noStore.mdx,unstable_rethrow.mdx,updateTag.mdx,use-link-status.mdx,use-params.mdx,use-pathname.mdx,use-report-web-vitals.mdx,use-router.mdx,use-search-params.mdx,use-selected-layout-segment.mdx,use-selected-layout-segments.mdx,userAgent.mdx}|01-app/03-api-reference/05-config/01-next-config-js:{adapterPath.mdx,allowedDevOrigins.mdx,appDir.mdx,assetPrefix.mdx,authInterrupts.mdx,basePath.mdx,cacheComponents.mdx,cacheHandlers.mdx,cacheLife.mdx,compress.mdx,crossOrigin.mdx,cssChunking.mdx,deploymentId.mdx,devIndicators.mdx,distDir.mdx,env.mdx,expireTime.mdx,exportPathMap.mdx,generateBuildId.mdx,generateEtags.mdx,headers.mdx,htmlLimitedBots.mdx,httpAgentOptions.mdx,images.mdx,incrementalCacheHandlerPath.mdx,inlineCss.mdx,logging.mdx,mdxRs.mdx,onDemandEntries.mdx,optimizePackageImports.mdx,output.mdx,pageExtensions.mdx,poweredByHeader.mdx,productionBrowserSourceMaps.mdx,proxyClientMaxBodySize.mdx,reactCompiler.mdx,reactMaxHeadersLength.mdx,reactStrictMode.mdx,redirects.mdx,rewrites.mdx,sassOptions.mdx,serverActions.mdx,serverComponentsHmrCache.mdx,serverExternalPackages.mdx,staleTimes.mdx,staticGeneration.mdx,taint.mdx,trailingSlash.mdx,transpilePackages.mdx,turbopack.mdx,turbopackFileSystemCache.mdx,turbopackIgnoreIssue.mdx,typedRoutes.mdx,typescript.mdx,urlImports.mdx,useLightningcss.mdx,viewTransition.mdx,webVitalsAttribution.mdx,webpack.mdx}|01-app/03-api-reference/05-config:{02-typescript.mdx,03-eslint.mdx}|01-app/03-api-reference/06-cli:{create-next-app.mdx,next.mdx}|02-pages/01-getting-started:{01-installation.mdx,02-project-structure.mdx,04-images.mdx,05-fonts.mdx,06-css.mdx,11-deploying.mdx}|02-pages/02-guides:{analytics.mdx,authentication.mdx,babel.mdx,ci-build-caching.mdx,content-security-policy.mdx,css-in-js.mdx,custom-server.mdx,debugging.mdx,draft-mode.mdx,environment-variables.mdx,forms.mdx,incremental-static-regeneration.mdx,instrumentation.mdx,internationalization.mdx,lazy-loading.mdx,mdx.mdx,multi-zones.mdx,open-telemetry.mdx,package-bundling.mdx,post-css.mdx,preview-mode.mdx,production-checklist.mdx,redirecting.mdx,sass.mdx,scripts.mdx,self-hosting.mdx,static-exports.mdx,tailwind-v3-css.mdx,third-party-libraries.mdx}|02-pages/02-guides/migrating:{app-router-migration.mdx,from-create-react-app.mdx,from-vite.mdx}|02-pages/02-guides/testing:{cypress.mdx,jest.mdx,playwright.mdx,vitest.mdx}|02-pages/02-guides/upgrading:{codemods.mdx,version-10.mdx,version-11.mdx,version-12.mdx,version-13.mdx,version-14.mdx,version-9.mdx}|02-pages/03-building-your-application/01-routing:{01-pages-and-layouts.mdx,02-dynamic-routes.mdx,03-linking-and-navigating.mdx,05-custom-app.mdx,06-custom-document.mdx,07-api-routes.mdx,08-custom-error.mdx}|02-pages/03-building-your-application/02-rendering:{01-server-side-rendering.mdx,02-static-site-generation.mdx,04-automatic-static-optimization.mdx,05-client-side-rendering.mdx}|02-pages/03-building-your-application/03-data-fetching:{01-get-static-props.mdx,02-get-static-paths.mdx,03-forms-and-mutations.mdx,03-get-server-side-props.mdx,05-client-side.mdx}|02-pages/03-building-your-application/06-configuring:{12-error-handling.mdx}|02-pages/04-api-reference:{06-edge.mdx,08-turbopack.mdx}|02-pages/04-api-reference/01-components:{font.mdx,form.mdx,head.mdx,image-legacy.mdx,image.mdx,link.mdx,script.mdx}|02-pages/04-api-reference/02-file-conventions:{instrumentation.mdx,proxy.mdx,public-folder.mdx,src-folder.mdx}|02-pages/04-api-reference/03-functions:{get-initial-props.mdx,get-server-side-props.mdx,get-static-paths.mdx,get-static-props.mdx,next-request.mdx,next-response.mdx,use-params.mdx,use-report-web-vitals.mdx,use-router.mdx,use-search-params.mdx,userAgent.mdx}|02-pages/04-api-reference/04-config/01-next-config-js:{adapterPath.mdx,allowedDevOrigins.mdx,assetPrefix.mdx,basePath.mdx,bundlePagesRouterDependencies.mdx,compress.mdx,crossOrigin.mdx,deploymentId.mdx,devIndicators.mdx,distDir.mdx,env.mdx,exportPathMap.mdx,generateBuildId.mdx,generateEtags.mdx,headers.mdx,httpAgentOptions.mdx,images.mdx,logging.mdx,onDemandEntries.mdx,optimizePackageImports.mdx,output.mdx,pageExtensions.mdx,poweredByHeader.mdx,productionBrowserSourceMaps.mdx,proxyClientMaxBodySize.mdx,reactStrictMode.mdx,redirects.mdx,rewrites.mdx,serverExternalPackages.mdx,trailingSlash.mdx,transpilePackages.mdx,turbopack.mdx,typescript.mdx,urlImports.mdx,useLightningcss.mdx,webVitalsAttribution.mdx,webpack.mdx}|02-pages/04-api-reference/04-config:{01-typescript.mdx,02-eslint.mdx}|02-pages/04-api-reference/05-cli:{create-next-app.mdx,next.mdx}|03-architecture:{accessibility.mdx,fast-refresh.mdx,nextjs-compiler.mdx,supported-browsers.mdx}|04-community:{01-contribution-guide.mdx,02-rspack.mdx}<!-- NEXT-AGENTS-MD-END -->
# Parsertime Monorepo

## Agent skills
A Turborepo managed with pnpm workspaces. Three deployable services live under `apps/`.

### Issue tracker
## Layout

GitHub issues at `luxdotdev/parsertime` via the `gh` CLI. See `docs/agents/issue-tracker.md`.
- `apps/web` — Parsertime web platform (Next.js 16, React 19, Prisma 7, Vercel). Has its own `CLAUDE.md`/`AGENTS.md` carrying the Next.js docs index and agent skills — **read those before doing web work.**
- `apps/docs` — Documentation site (Next.js + fumadocs, Vercel).
- `apps/bot` — Discord bot (Bun runtime, discord.js, deployed on Railway). Its HTTP API is consumed by `apps/web` via `apps/web/src/lib/bot-discord-access.ts`; a contract change usually touches both apps.

### Triage labels
## Commands (from repo root)

Canonical defaults (`needs-triage`, `needs-info`, `ready-for-agent`, `ready-for-human`, `wontfix`); only `wontfix` exists today, the rest are created on first use. See `docs/agents/triage-labels.md`.
- `pnpm install` — install every workspace (single root lockfile)
- `pnpm dev` / `pnpm build` / `pnpm lint` / `pnpm typecheck` / `pnpm test` — delegate to `turbo run` across all packages
- Target one app: `pnpm --filter parsertime <script>` (web), `--filter parsertime-docs`, `--filter parsertime-bot`
- Or via turbo: `turbo run build --filter=parsertime`

### Domain docs
## Package manager

Single-context: one `CONTEXT.md` + `docs/adr/` at the repo root (created lazily by `/grill-with-docs`). See `docs/agents/domain.md`.
pnpm@9.15.9 installs dependencies for all apps. The bot still **runs** on Bun (`bun run index.ts`) on Railway, but its dependencies are installed by pnpm like every other workspace. Workspace-level pnpm config (`overrides`, `onlyBuiltDependencies`) lives in the root `package.json`.

## TypeScript (7.0 RC, dual-compiler)

The repo runs the TypeScript 7.0 native (Go) compiler for type-checking, with TypeScript 6 kept alongside for tools that still need the JS compiler API (Next.js, fumadocs). Each workspace pins two aliases:

- `typescript` → `npm:@typescript/typescript6` — the TS6 API the `node_modules/typescript` slot resolves to. Everything that `import`s `typescript` (Next.js typegen/build, fumadocs) gets this. Ships the **`tsc6`** binary.
- `typescript-7` → `npm:typescript@7.0.x-rc` — the real TS7 RC. Ships the **`tsc`** binary.

So `tsc --noEmit` (every `typecheck` script) runs the fast TS7 compiler, while `require("typescript")` stays on TS6. To run the TS6 checker explicitly, use `tsc6 --noEmit`.

Caveat: TS7's native compiler can't load `tsconfig` language-service plugins or be patched, so `@effect/language-service`'s build-time `tsc` diagnostics are gone (its `prepare` patch step was removed from `apps/web`). Effect diagnostics still work **in-editor** via the tsconfig plugin (the TS6-shim `tsserver` loads it).

## Deployment

- `apps/web` and `apps/docs` → separate Vercel projects, each with **Root Directory** set to its app folder.
- `apps/bot` → Railway, with **Root Directory** set to `apps/bot`.
Loading
Loading