Personal brand site for John Schoonover, optimized for fast, accessible storytelling about cybersecurity engineering leadership. This repository houses the Astro-based site, content collections, infrastructure automation, and operational runbooks required to deploy on a Synology RackStation.
- Framework: Astro with React islands, Tailwind CSS, and shadcn/ui components.
- Content Strategy: Git-driven MDX collections for case studies, writing, talks, and patents with structured data helpers.
- Deployment Target: Synology RackStation (DSM) behind reverse proxy at
theschoonover.netwith optional self-hosted Plausible analytics. - Quality Gates: CI enforces typecheck, build, lint, accessibility (axe), and Lighthouse performance budgets.
- Node.js 20.11.x (use
fnm/nvmor Docker image to match production). - pnpm 8.15.1 (
corepack enablerecommended). - GitHub deploy key (read access) for CI/CD interactions.
pnpm install
cp .env.example .env.local # populate with local secrets
pnpm devVisit http://localhost:4321 to preview the site.
| Command | Description |
|---|---|
pnpm dev |
Start Astro dev server with hot reload. |
pnpm build |
Generate static production build in dist/. |
pnpm preview |
Serve the production build locally. |
pnpm lint |
Run linting suite (ESLint, style checks). |
pnpm test |
Execute unit/integration tests (placeholder until implemented). |
pnpm check |
Aggregate command to run typecheck + lint + tests. |
pnpm content:lint |
Validate MDX frontmatter and content guidelines (to be implemented per docs/content-guide.md). |
pnpm analytics:export |
Planned CLI to snapshot Plausible metrics (see docs/analytics.md). |
- Work on feature branches; open PRs with updated documentation and passing CI.
- Merge to
mainto trigger GitHub Actions build pipeline (Astro build, Lighthouse, accessibility checks). - CI publishes the
dist/artifact and deploys to RackStation via rsync or container push depending on environment configuration. - Post-deploy, validate
/health, run Lighthouse smoke test, and update the ops journal perdocs/OPS.md.
Refer to docs/OPS.md for full deployment, backup, and rollback procedures.
- Author MDX content within
/contentusing the conventions indocs/content-guide.md. - Store assets in
/apps/site/public/imagesand/downloadsfollowing naming standards. - Update analytics taxonomy and dashboards when adding new CTAs or conversion points (see
docs/analytics.md). - Maintain search metadata and rebuild the index per
docs/search-indexing.md.
- Product requirements and roadmap:
docs/PRD.md - Operations runbook:
docs/OPS.md - Content voice & MDX conventions:
docs/content-guide.md - Analytics playbook:
docs/analytics.md - Search indexing guide:
docs/search-indexing.md
- DSM Reverse Proxy routes
theschoonover.net→sitecontainer with HSTS and Let’s Encrypt certificates. - Docker Compose stack includes site container, nginx reverse proxy, and optional Plausible analytics.
- Backups handled via DSM Hyper Backup; retain daily and monthly snapshots as documented in
docs/OPS.md. - Watchtower or Portainer can automate container updates; ensure rollbacks are available by keeping previous build artifacts.
- Fork/branch from
main. - Follow Conventional Commit formatting (
type(scope): message). - Update relevant documentation and add links in README if new guides are created.
- Ensure CI passes locally before pushing (
pnpm check). - Request reviews from designated owners (Content, Infra, QA) based on change surface.
- Ops & Infra: [email protected] (Agent E)
- Content & Editorial: [email protected] (Agent B)
- Analytics & QA: [email protected] (Agent F)
- Site Owner: John Schoonover — [email protected]
For urgent incidents, follow the escalation protocol outlined in docs/OPS.md.