The codebase for seanmcn.com, a Gatsby-powered personal site and blog built with React, MDX, and Bulma.
- Blog content is sourced from Markdown and MDX files in
content/blog. - Pages are statically generated with Gatsby and deployed via AWS Amplify.
- Search is powered client-side with Fuse.js and
match-sorter. - End-to-end coverage is handled with Cypress.
- Production: seanmcn.com
- Development: develop.seanmcn.com
- Gatsby 5
- React 18
- MDX
- Bulma + Sass
- AWS Amplify
- Cypress
- Node.js 22
- npm 10+
nvm use
npm cinpm run developThe site will start on port 8000, or the next available port if 8000 is already in use.
npm run develop # Start the Gatsby dev server
npm run build # Create a production build
npm run serve # Serve the production build locally
npm run clean # Remove Gatsby caches and build output
npm run post:create # Scaffold a new post
npm run test:e2e # Open Cypress against a local Gatsby instance
npm run test:e2e:ci # Run Cypress headlessly
npm run test:e2e:record # Run Cypress headlessly and record to the dashboardAdd OPENAI_API_KEY=... to a repo-root .env file, open a post under
content/blog, then run the Generate Featured Image VS Code task.
The task will:
- ask for an internal illustration style (
basic-cartoon,mascot-cartoon,chibi-cartoon, orcozy-cartoon-scene) - ask for the image concept prompt
- ask for a palette mode (
pastel,balanced, orbright) - generate a square OpenAI image using the built-in cartoon editorial style prompt, with automatic variation in palette emphasis, character treatment, and finish
- save the PNG into the post's sibling
images/directory - update the post's
featured:frontmatter automatically
For example, running it from
content/blog/2026/04/world-models-(trying-to-understand-them).md writes the
image into content/blog/2026/04/images/.
content/blog/ Blog posts and MDX content
src/components/ Reusable UI components
src/pages/ Route-level pages
src/templates/ Gatsby page templates
gatsby-*.mjs Gatsby config and build hooks
amplify.yml AWS Amplify build configuration
AWS Amplify builds and deploys the site from this repository using the default Amplify build image and the configuration in amplify.yml.
Branch mapping:
main-> productiondevelop-> development
GitHub Actions runs Cypress on pushes to main and develop, and on pull requests.
To keep the Cypress Dashboard badge accurate, add CYPRESS_RECORD_KEY as a GitHub Actions repository secret.
- Some Gatsby config changes depend on environment variables used in CI and E2E runs.
- Cypress is included for test runs, but its binary download is skipped during Amplify deployment.