{"owner":"kriasoft","repo":"react-starter-kit","hasSkills":true,"hasMcp":false,"mcpConfig":null,"found":["CLAUDE.md","AGENTS.md"],"skills":{"CLAUDE.md":"@AGENTS.md\n\n## Claude-Specific Guidance\n\n- Use Plan mode for multi-file or architectural changes.\n- Prefer an existing project skill or command over improvising the same workflow.\n- See \"Agent Tooling\" in `AGENTS.md` before adding a command or skill.\n","AGENTS.md":"## Monorepo Structure\n\n- `apps/web/` – Astro marketing site, served by an edge worker that also routes traffic to the app/api workers via service bindings\n- `apps/app/` – Main SPA (React, TanStack Router file-based routing)\n- `apps/api/` – API server (Hono + tRPC + Better Auth)\n- `apps/email/` – React Email templates (built before API dev server starts)\n- `packages/ui/` – shadcn/ui components (new-york style)\n- `packages/core/` – Shared utilities\n- `db/` – Drizzle ORM schemas and migrations (Neon PostgreSQL)\n- `infra/` – Terraform (Hyperdrive and optional R2 storage; Wrangler owns Workers and DNS)\n- `docs/` – VitePress docs; `docs/adr/` for architecture decision records\n\n## Tech Stack\n\n- **Toolchain:** Bun >=1.3.0 (package manager, scripts, local API server), TypeScript 6.0, ESM (`\"type\": \"module\"`)\n- **Production runtime:** Cloudflare Workers (workerd) – not Bun. Code that ships must run on Workers APIs.\n- **Frontend:** React 19, TanStack Router, TanStack Query, Jotai, shadcn/ui (new-york), Tailwind CSS v4\n- **Backend:** Hono, tRPC 11, Better Auth (email OTP, passkey, Google OAuth, organizations)\n- **Database:** Neon PostgreSQL, Drizzle ORM (`snake_case` casing), Cloudflare Hyperdrive\n- **Email:** React Email, Resend\n- **Testing:** Vitest, Happy DOM\n- **Deployment:** Cloudflare Workers (Wrangler), Terraform\n\n## Commands\n\n```bash\nbun dev                        # Start web + api + app concurrently\nbun run build                  # Build email, web, api, and app workspaces\nbun run test                   # Vitest (watch mode; --run for single run)\nbun lint                       # ESLint with cache\nbun typecheck                  # tsc --build (builds apps/email for its types)\nbun infra:check                # Terraform fmt + validate, no credentials or state\nbun ui:add <component>         # Add shadcn/ui component to packages/ui\n\n# Per-app: bun {web,app,api}:{dev,build,deploy}; test for app/api, check for web\n# Database: bun db:{push,generate,migrate,studio,seed,export}\n#   :staging / :production on migrate, studio, export; seed stops at :staging;\n#   push and generate are local-only\n```\n\n## Verification\n\n- Run the narrowest checks covering what you changed, then report what you ran. Never imply verification you did not perform.\n- Do not run migrations, deployments, or Terraform `plan`/`apply` unless explicitly asked – they act on shared environments.\n\n## Architecture\n\n- Three workers: web (marketing site + edge router), app (SPA assets), api (Hono server).\n- API worker has `nodejs_compat` enabled; web and app workers do NOT.\n- Web worker routes: `/api/*` → API worker, app routes → App worker, static → assets.\n- Service bindings connect workers internally (no public cross-worker URLs).\n- Per-workspace conventions live in subdirectory `AGENTS.md` files: `apps/api/`, `apps/app/`, `db/`, `infra/`, `packages/ui/`.\n\n## Agent Tooling\n\n- `AGENTS.md` files are the canonical instructions; per-tool files (`CLAUDE.md`, `.gemini/settings.json`) only point at them.\n- **Every directory with an `AGENTS.md` needs a sibling `CLAUDE.md` containing `@AGENTS.md`.** Codex scopes nested `AGENTS.md` to its directory tree natively; Claude Code's nested lookup matches only `CLAUDE.md`, so without the adapter it never loads the scoped file. Adding a scoped `AGENTS.md` without one is a silent no-op for Claude.\n- **Skills live in `.agents/skills/<name>/SKILL.md`, symlinked into `.claude/skills/<name>/`.** Both vendors build on the Agent Skills format, but only the discovery paths differ: Codex scans `.agents/skills/` from the repo root natively, Claude Code scans `.claude/skills/`. One canonical copy plus a symlink is what makes a skill visible to both. Third-party skills installed by the `skills` CLI are tracked in `skills-lock.json` – do not hand-edit those directories.\n- Skills are for workflows the model should recognise and reach for on its own; their `description` is the trigger. A prompt you invoke deliberately stays a Claude Code command in `.claude/commands/<name>.md`, which has no portable equivalent.\n- `*.local.md` and `*.local.json` are gitignored – personal prompts and settings stay out of the repo.\n\n## Design Philosophy\n\n- Simplest correct solution. No speculative abstractions – add them only when a real second use case exists.\n- No superficial work: no coverage-only tests, no redundant comments, no wrappers that just forward calls.\n- Fail loudly in core logic. Do not silently swallow errors or mask incorrect state.\n- Three similar lines are better than a premature abstraction.\n- Prefer explicit, readable code over clever or compressed patterns.\n- Use precise TypeScript types. Avoid `any` and unnecessary type assertions – let the compiler enforce correctness.\n- Document non-obvious trade-offs and decisions. Explain why, not what – every word must add value.\n\n## Markdown\n\n- Prose is not hard-wrapped: keep each paragraph on one line and use paragraphs, lists and headings for structure. Prettier enforces this with `proseWrap: \"never\"`.\n- Keep a blank line after a VitePress container's opening marker and before its closing `:::`. Prettier does not recognise `:::`, so an adjacent line gets folded into the marker, turning the body into the container title and swallowing everything up to the next `:::`.\n"},"files":{"CLAUDE.md":"@AGENTS.md\n\n## Claude-Specific Guidance\n\n- Use Plan mode for multi-file or architectural changes.\n- Prefer an existing project skill or command over improvising the same workflow.\n- See \"Agent Tooling\" in `AGENTS.md` before adding a command or skill.\n","AGENTS.md":"## Monorepo Structure\n\n- `apps/web/` – Astro marketing site, served by an edge worker that also routes traffic to the app/api workers via service bindings\n- `apps/app/` – Main SPA (React, TanStack Router file-based routing)\n- `apps/api/` – API server (Hono + tRPC + Better Auth)\n- `apps/email/` – React Email templates (built before API dev server starts)\n- `packages/ui/` – shadcn/ui components (new-york style)\n- `packages/core/` – Shared utilities\n- `db/` – Drizzle ORM schemas and migrations (Neon PostgreSQL)\n- `infra/` – Terraform (Hyperdrive and optional R2 storage; Wrangler owns Workers and DNS)\n- `docs/` – VitePress docs; `docs/adr/` for architecture decision records\n\n## Tech Stack\n\n- **Toolchain:** Bun >=1.3.0 (package manager, scripts, local API server), TypeScript 6.0, ESM (`\"type\": \"module\"`)\n- **Production runtime:** Cloudflare Workers (workerd) – not Bun. Code that ships must run on Workers APIs.\n- **Frontend:** React 19, TanStack Router, TanStack Query, Jotai, shadcn/ui (new-york), Tailwind CSS v4\n- **Backend:** Hono, tRPC 11, Better Auth (email OTP, passkey, Google OAuth, organizations)\n- **Database:** Neon PostgreSQL, Drizzle ORM (`snake_case` casing), Cloudflare Hyperdrive\n- **Email:** React Email, Resend\n- **Testing:** Vitest, Happy DOM\n- **Deployment:** Cloudflare Workers (Wrangler), Terraform\n\n## Commands\n\n```bash\nbun dev                        # Start web + api + app concurrently\nbun run build                  # Build email, web, api, and app workspaces\nbun run test                   # Vitest (watch mode; --run for single run)\nbun lint                       # ESLint with cache\nbun typecheck                  # tsc --build (builds apps/email for its types)\nbun infra:check                # Terraform fmt + validate, no credentials or state\nbun ui:add <component>         # Add shadcn/ui component to packages/ui\n\n# Per-app: bun {web,app,api}:{dev,build,deploy}; test for app/api, check for web\n# Database: bun db:{push,generate,migrate,studio,seed,export}\n#   :staging / :production on migrate, studio, export; seed stops at :staging;\n#   push and generate are local-only\n```\n\n## Verification\n\n- Run the narrowest checks covering what you changed, then report what you ran. Never imply verification you did not perform.\n- Do not run migrations, deployments, or Terraform `plan`/`apply` unless explicitly asked – they act on shared environments.\n\n## Architecture\n\n- Three workers: web (marketing site + edge router), app (SPA assets), api (Hono server).\n- API worker has `nodejs_compat` enabled; web and app workers do NOT.\n- Web worker routes: `/api/*` → API worker, app routes → App worker, static → assets.\n- Service bindings connect workers internally (no public cross-worker URLs).\n- Per-workspace conventions live in subdirectory `AGENTS.md` files: `apps/api/`, `apps/app/`, `db/`, `infra/`, `packages/ui/`.\n\n## Agent Tooling\n\n- `AGENTS.md` files are the canonical instructions; per-tool files (`CLAUDE.md`, `.gemini/settings.json`) only point at them.\n- **Every directory with an `AGENTS.md` needs a sibling `CLAUDE.md` containing `@AGENTS.md`.** Codex scopes nested `AGENTS.md` to its directory tree natively; Claude Code's nested lookup matches only `CLAUDE.md`, so without the adapter it never loads the scoped file. Adding a scoped `AGENTS.md` without one is a silent no-op for Claude.\n- **Skills live in `.agents/skills/<name>/SKILL.md`, symlinked into `.claude/skills/<name>/`.** Both vendors build on the Agent Skills format, but only the discovery paths differ: Codex scans `.agents/skills/` from the repo root natively, Claude Code scans `.claude/skills/`. One canonical copy plus a symlink is what makes a skill visible to both. Third-party skills installed by the `skills` CLI are tracked in `skills-lock.json` – do not hand-edit those directories.\n- Skills are for workflows the model should recognise and reach for on its own; their `description` is the trigger. A prompt you invoke deliberately stays a Claude Code command in `.claude/commands/<name>.md`, which has no portable equivalent.\n- `*.local.md` and `*.local.json` are gitignored – personal prompts and settings stay out of the repo.\n\n## Design Philosophy\n\n- Simplest correct solution. No speculative abstractions – add them only when a real second use case exists.\n- No superficial work: no coverage-only tests, no redundant comments, no wrappers that just forward calls.\n- Fail loudly in core logic. Do not silently swallow errors or mask incorrect state.\n- Three similar lines are better than a premature abstraction.\n- Prefer explicit, readable code over clever or compressed patterns.\n- Use precise TypeScript types. Avoid `any` and unnecessary type assertions – let the compiler enforce correctness.\n- Document non-obvious trade-offs and decisions. Explain why, not what – every word must add value.\n\n## Markdown\n\n- Prose is not hard-wrapped: keep each paragraph on one line and use paragraphs, lists and headings for structure. Prettier enforces this with `proseWrap: \"never\"`.\n- Keep a blank line after a VitePress container's opening marker and before its closing `:::`. Prettier does not recognise `:::`, so an adjacent line gets folded into the marker, turning the body into the container title and swallowing everything up to the next `:::`.\n"},"items":[{"name":"CLAUDE.md","path":"CLAUDE.md","title":"CLAUDE.md","content":"@AGENTS.md\n\n## Claude-Specific Guidance\n\n- Use Plan mode for multi-file or architectural changes.\n- Prefer an existing project skill or command over improvising the same workflow.\n- See \"Agent Tooling\" in `AGENTS.md` before adding a command or skill.\n","category":"root","tokens":63},{"name":"AGENTS.md","path":"AGENTS.md","title":"AGENTS.md","content":"## Monorepo Structure\n\n- `apps/web/` – Astro marketing site, served by an edge worker that also routes traffic to the app/api workers via service bindings\n- `apps/app/` – Main SPA (React, TanStack Router file-based routing)\n- `apps/api/` – API server (Hono + tRPC + Better Auth)\n- `apps/email/` – React Email templates (built before API dev server starts)\n- `packages/ui/` – shadcn/ui components (new-york style)\n- `packages/core/` – Shared utilities\n- `db/` – Drizzle ORM schemas and migrations (Neon PostgreSQL)\n- `infra/` – Terraform (Hyperdrive and optional R2 storage; Wrangler owns Workers and DNS)\n- `docs/` – VitePress docs; `docs/adr/` for architecture decision records\n\n## Tech Stack\n\n- **Toolchain:** Bun >=1.3.0 (package manager, scripts, local API server), TypeScript 6.0, ESM (`\"type\": \"module\"`)\n- **Production runtime:** Cloudflare Workers (workerd) – not Bun. Code that ships must run on Workers APIs.\n- **Frontend:** React 19, TanStack Router, TanStack Query, Jotai, shadcn/ui (new-york), Tailwind CSS v4\n- **Backend:** Hono, tRPC 11, Better Auth (email OTP, passkey, Google OAuth, organizations)\n- **Database:** Neon PostgreSQL, Drizzle ORM (`snake_case` casing), Cloudflare Hyperdrive\n- **Email:** React Email, Resend\n- **Testing:** Vitest, Happy DOM\n- **Deployment:** Cloudflare Workers (Wrangler), Terraform\n\n## Commands\n\n```bash\nbun dev                        # Start web + api + app concurrently\nbun run build                  # Build email, web, api, and app workspaces\nbun run test                   # Vitest (watch mode; --run for single run)\nbun lint                       # ESLint with cache\nbun typecheck                  # tsc --build (builds apps/email for its types)\nbun infra:check                # Terraform fmt + validate, no credentials or state\nbun ui:add <component>         # Add shadcn/ui component to packages/ui\n\n# Per-app: bun {web,app,api}:{dev,build,deploy}; test for app/api, check for web\n# Database: bun db:{push,generate,migrate,studio,seed,export}\n#   :staging / :production on migrate, studio, export; seed stops at :staging;\n#   push and generate are local-only\n```\n\n## Verification\n\n- Run the narrowest checks covering what you changed, then report what you ran. Never imply verification you did not perform.\n- Do not run migrations, deployments, or Terraform `plan`/`apply` unless explicitly asked – they act on shared environments.\n\n## Architecture\n\n- Three workers: web (marketing site + edge router), app (SPA assets), api (Hono server).\n- API worker has `nodejs_compat` enabled; web and app workers do NOT.\n- Web worker routes: `/api/*` → API worker, app routes → App worker, static → assets.\n- Service bindings connect workers internally (no public cross-worker URLs).\n- Per-workspace conventions live in subdirectory `AGENTS.md` files: `apps/api/`, `apps/app/`, `db/`, `infra/`, `packages/ui/`.\n\n## Agent Tooling\n\n- `AGENTS.md` files are the canonical instructions; per-tool files (`CLAUDE.md`, `.gemini/settings.json`) only point at them.\n- **Every directory with an `AGENTS.md` needs a sibling `CLAUDE.md` containing `@AGENTS.md`.** Codex scopes nested `AGENTS.md` to its directory tree natively; Claude Code's nested lookup matches only `CLAUDE.md`, so without the adapter it never loads the scoped file. Adding a scoped `AGENTS.md` without one is a silent no-op for Claude.\n- **Skills live in `.agents/skills/<name>/SKILL.md`, symlinked into `.claude/skills/<name>/`.** Both vendors build on the Agent Skills format, but only the discovery paths differ: Codex scans `.agents/skills/` from the repo root natively, Claude Code scans `.claude/skills/`. One canonical copy plus a symlink is what makes a skill visible to both. Third-party skills installed by the `skills` CLI are tracked in `skills-lock.json` – do not hand-edit those directories.\n- Skills are for workflows the model should recognise and reach for on its own; their `description` is the trigger. A prompt you invoke deliberately stays a Claude Code command in `.claude/commands/<name>.md`, which has no portable equivalent.\n- `*.local.md` and `*.local.json` are gitignored – personal prompts and settings stay out of the repo.\n\n## Design Philosophy\n\n- Simplest correct solution. No speculative abstractions – add them only when a real second use case exists.\n- No superficial work: no coverage-only tests, no redundant comments, no wrappers that just forward calls.\n- Fail loudly in core logic. Do not silently swallow errors or mask incorrect state.\n- Three similar lines are better than a premature abstraction.\n- Prefer explicit, readable code over clever or compressed patterns.\n- Use precise TypeScript types. Avoid `any` and unnecessary type assertions – let the compiler enforce correctness.\n- Document non-obvious trade-offs and decisions. Explain why, not what – every word must add value.\n\n## Markdown\n\n- Prose is not hard-wrapped: keep each paragraph on one line and use paragraphs, lists and headings for structure. Prettier enforces this with `proseWrap: \"never\"`.\n- Keep a blank line after a VitePress container's opening marker and before its closing `:::`. Prettier does not recognise `:::`, so an adjacent line gets folded into the marker, turning the body into the container title and swallowing everything up to the next `:::`.\n","category":"root","tokens":1319}]}