@@ -5,7 +5,7 @@ This file provides guidance to Claude Code (claude.ai/code) when working with co
55## What this is
66
77The documentation site for the FullStackHero .NET starter kit, served at ` fullstackhero.net ` .
8- It is ** not** the starter kit itself — only its docs. Built with Astro 6, Tailwind 4, MDX, and
8+ It is ** not** the starter kit itself - only its docs. Built with Astro 6, Tailwind 4, MDX, and
99deployed as a Cloudflare Worker that wraps a static build.
1010
1111## Commands
@@ -14,13 +14,13 @@ deployed as a Cloudflare Worker that wraps a static build.
1414npm run dev # astro dev on http://localhost:4321 (hot-reload of MDX)
1515npm run build # astro build && pagefind --site dist (produces dist/)
1616npm run preview # serve dist/ locally
17- npm run check # astro check — type + content-schema validation
17+ npm run check # astro check - type + content-schema validation
1818```
1919
20- - There is ** no test suite** . ` npm run check ` is the closest thing to a CI gate — run it after
20+ - There is ** no test suite** . ` npm run check ` is the closest thing to a CI gate - run it after
2121 touching ` .astro ` , ` .ts ` , layouts, or content schema.
2222- Search (Pagefind) only works after ` npm run build ` . In ` dev ` , the search modal reports
23- "index not available" — this is expected, not a bug.
23+ "index not available" - this is expected, not a bug.
2424
2525### Cloudflare / Worker (deploy-time)
2626
@@ -37,7 +37,7 @@ binding IDs live in `wrangler.toml`.
3737
3838This is the single most important thing to understand.
3939
40- 1 . ** Astro builds fully static** to ` dist/ ` . There is no SSR adapter in ` astro.config.mjs ` —
40+ 1 . ** Astro builds fully static** to ` dist/ ` . There is no SSR adapter in ` astro.config.mjs ` -
4141 every page, including the ` llms-full.txt ` endpoint, is prerendered at build time.
42422 . ** ` src/worker.ts ` is a standalone Cloudflare Worker** (not an Astro adapter). It serves
4343 ` dist/ ` through the ` ASSETS ` binding and adds one dynamic surface: ` /api/views/* ` . Static
@@ -50,7 +50,7 @@ Consequences:
5050- The page-view counter (` /api/views ` ) writes to D1 (` views ` table, see ` migrations/0001_init.sql ` )
5151 and dedups per IP+UA via KV with a 1h TTL. Slugs are whitelisted to ` /docs/* ` only.
5252- Anything dynamic must go through the worker; you cannot add an SSR Astro route and expect it
53- to run — the build is static.
53+ to run - the build is static.
5454
5555## Architecture: content → routes → sidebar
5656
@@ -87,13 +87,14 @@ BaseLayout.astro <head>: SEO meta, OG/Twitter, JSON-LD graph, fonts, them
8787
8888## MDX authoring
8989
90- - Frontmatter shape is enforced by the schema in ` src/content.config.ts ` — ` check ` fails the build
90+ - Frontmatter shape is enforced by the schema in ` src/content.config.ts ` - ` check ` fails the build
9191 on violations. ` sidebar.order ` is ascending (lower = higher in the list); ties break alphabetically.
9292- ** Only components registered in ` src/components/mdx.ts ` are usable inside MDX** : ` Callout ` ,
93- ` CategoryIndex ` , ` CodeGroup ` , ` Screenshot ` , ` SectionIndex ` . To expose a new one in MDX, add it there.
93+ ` CategoryIndex ` , ` CodeGroup ` , ` Faq ` , ` FolderTree ` , ` Screenshot ` , ` SectionIndex ` . To expose a new
94+ one in MDX, add it there.
9495- The docs ` <article> ` carries ` data-pagefind-body ` , which scopes the search index to docs content only.
9596
96- ## SEO surface (this site invests heavily here — don't regress it)
97+ ## SEO surface (this site invests heavily here - don't regress it)
9798
9899- ` astro.config.mjs ` ` sitemap.serialize() ` assigns per-path ` priority ` /` changefreq ` by URL prefix.
99100- ` public/robots.txt ` explicitly allow-lists AI + search crawlers (GPTBot, ClaudeBot, PerplexityBot, …).
@@ -104,7 +105,7 @@ BaseLayout.astro <head>: SEO meta, OG/Twitter, JSON-LD graph, fonts, them
104105## Styling
105106
106107- Tailwind 4 via the Vite plugin (no ` tailwind.config.js ` ). Tokens, prose, and code-block themes
107- in ` src/styles/*.css ` are ** forked verbatim from ` codewithmukesh/blog ` ** — preserve the provenance
108+ in ` src/styles/*.css ` are ** forked verbatim from ` codewithmukesh/blog ` ** - preserve the provenance
108109 comments when editing.
109110- Brand colors are split deliberately: primary is ` #15803d ` (green-700); the brighter brand green
110111 ` #16a34a ` lives in ` --primary-soft ` for accents/gradients. Don't collapse the two.
@@ -113,7 +114,7 @@ BaseLayout.astro <head>: SEO meta, OG/Twitter, JSON-LD graph, fonts, them
113114
114115## Client scripts & Astro view transitions
115116
116- - Inline ` <script is:inline> ` (e.g. theme bootstrap, Analytics) is shipped verbatim — Astro does not
117+ - Inline ` <script is:inline> ` (e.g. theme bootstrap, Analytics) is shipped verbatim - Astro does not
117118 bundle or typecheck it. Bundled client logic uses ` <script>import '...'</script> ` .
118119- The site uses view transitions, so interactive scripts must be ** idempotent and re-bind on
119120 ` astro:page-load ` / ` astro:after-swap ` ** (see ` views-counter.ts ` , the mobile sheet in
@@ -122,6 +123,6 @@ BaseLayout.astro <head>: SEO meta, OG/Twitter, JSON-LD graph, fonts, them
122123## Conventions
123124
124125- Formatting is Prettier with ` prettier-plugin-astro ` + ` prettier-plugin-tailwindcss ` (Tailwind class
125- sorting is automatic). No standalone config file — plugin defaults apply.
126+ sorting is automatic). No standalone config file - plugin defaults apply.
126127- TypeScript extends ` astro/tsconfigs/strict ` ; React JSX is enabled for ` .tsx ` islands.
127128- ` superpowers/ ` is gitignored and not part of the site.
0 commit comments