My personal website.
Alpha alpha.morrisoncole.co.uk. Production morrisoncole.co.uk is from https://github.com/MorrisonCole/morrisoncole.co.uk.
A React 19 single-page application built with Vite and TypeScript.
Node (version specified in .nvmrc). Using nvm
is recommended.
nvm install
npm install| Command | Description |
|---|---|
npm run dev |
Start Vite dev server |
npm run build |
Production build |
npm run preview |
Preview production build locally |
npm run lint |
ESLint |
npm run storybook |
Storybook dev server on port 6006 |
npm run storybook:build |
Build static Storybook |
Husky runs ESLint and Prettier on staged files via lint-staged before each commit.
Component tests use Vitest in browser mode (Playwright /
Chromium) via
@storybook/addon-vitest.
Stories live alongside components (e.g. button.stories.tsx).
lighthouse-ci runs on every
push and on a daily schedule. CI requires the LHCI_GITHUB_APP_TOKEN secret.
To run locally:
npm run build && npm run test:lighthouseGitHub Actions workflows in .github/workflows/:
| Workflow | Trigger | Description |
|---|---|---|
build.yml |
Every push + daily schedule | Lighthouse CI performance regression testing |
deploy.yml |
Push to main |
Lint, build, deploy to S3, invalidate CloudFront |
preview.yml |
PR opened / updated | Deploy PR preview to pr-<number>.previews.alpha.morrisoncole.co.uk |
preview-cleanup.yml |
PR closed | Delete PR preview from S3 and deactivate deployment |
Renovate is configured for automated dependency updates.
AWS infrastructure is managed with Terraform in
terraform/.
Terraform state is stored in S3 (alpha-morrisoncole-terraform-state). The
terraform/bootstrap/ directory contains the config that creates the state
bucket itself.