Personal site and consulting presence for David Smith / LabSmith.net.
Live site: https://labsmith.net (after Cloudflare Pages cutover) Repo: https://github.com/LabSmithNet/labsmith-site
- Framework: Astro 5 (static output)
- Hosting: Cloudflare Pages (free tier)
- Comments: Giscus on GitHub Discussions
- Domain: labsmith.net (registered at Cloudflare)
npm install
npm run devOpens on http://localhost:4321
npm run build
npm run preview # to test the production build locallyOutputs static files to dist/.
labsmith-site/
├── public/ static assets copied verbatim into dist/
│ ├── favicon.svg
│ └── images/
├── src/
│ ├── components/ reusable .astro components (StarForge, SiteHeader, Giscus, etc.)
│ ├── layouts/ page shells (BaseLayout, ArticleLayout)
│ ├── styles/ global.css with the LabSmith 7-stop palette
│ ├── content.config.ts article collection schema (Astro 5 loader API)
│ ├── content/articles/ blog posts as markdown
│ └── pages/ routes
│ ├── index.astro → / (resume landing)
│ └── articles/
│ ├── index.astro → /articles (post index)
│ └── [...slug].astro → /articles/<slug>
└── astro.config.mjs
-
Create
src/content/articles/your-slug.md -
Add frontmatter matching the schema in
src/content.config.ts:--- title: "Your Title" description: "One-line summary for index + meta." pubDate: 2026-05-01 heroImage: "/images/your-hero.svg" # optional tags: ["f5", "tls"] draft: false ---
-
git add . && git commit -m "article: your title" && git push -
Cloudflare Pages deploys automatically.
Cloudflare Pages watches main. Push to deploy.
Cloudflare Pages build settings:
- Framework preset: Astro
- Build command:
npm run build - Build output directory:
dist - Environment variables:
NODE_VERSION=22
Comments require a one-time setup:
- Create the GitHub repo (public) at https://github.com/LabSmithNet/labsmith-site
- In repo Settings → General → Features, enable Discussions
- Install the Giscus GitHub App: https://github.com/apps/giscus (grant access to this repo only)
- Visit https://giscus.app/ and fill in:
- Repository:
LabSmithNet/labsmith-site - Mapping: pathname
- Category: Announcements (or create a "Comments" category)
- Features: reactions on, metadata off, input position top
- Repository:
- Copy
data-repo-idanddata-category-idfrom the snippet giscus.app generates. - Paste them into
src/components/Giscus.astrowhere the TODO placeholders live.
LabSmith 7-stop green palette, wired as CSS variables in src/styles/global.css. Star Forge hexagram lives in src/components/StarForge.astro as inline SVG — scales crisply at any size. Canonical brand story: Star of David (name) → star topology → mesh topology → lab+smith = forge.
Canonical domain is labsmith.net. If .com appears anywhere in output, it is a bug.