My personal website powered by Astro, with a focus on performance, scalability, and expressive UI animation using GSAP and Three.js. It runs on an Express server with security middleware like Helmet and supports compression out of the box.
- ⚡ Built with Astro 5
- 🧱 Runs on Express with Helmet + Compression
- 💨 CSS with TailwindCSS
- 🎞️ Animations via GSAP
- 🌌 WebGL experiences powered by Three.js
- 📦 Uses pnpm and
corepack - 🐳 Built for Docker with minimal final image (
node:slim) - 🧼 Linting & formatting with ESLint and Prettier
This project uses pnpm.
npmandyarnare explicitly disallowed.
pnpm install| Script | Description |
|---|---|
pnpm dev |
Start the Astro development server |
pnpm build |
Build the site for production |
pnpm start |
Start the Express server (serves dist/) |
pnpm lint |
Fix lint issues using ESLint |
pnpm format |
Format code with Prettier |
pnpm test:unit |
Run unit tests (placeholder) |
pnpm test:e2e |
Run E2E tests (placeholder) |
These commands are meant to be run as part of CI:
pnpm lint
pnpm format
pnpm test:unit
pnpm test:e2eThis project is containerized with a multi-stage Dockerfile for optimal performance.
docker build -t website .docker run -p 8000:8000 websiteThe site will be accessible at: http://localhost:8000
This repository is designed to be used with a CI/CD pipeline that performs:
- ✅ Lint and format checks
- 🧪 Run tests
(if staging or production)
- 🏗️ Build the Docker image
- 📤 Push the image to Docker registry
- 🚀 Deploy on infrastructure
.
├── public/ # Static assets
├── src/ # Astro pages, components, styles
├── server.mjs # Express entry point
├── Dockerfile
├── astro.config.mjs
├── package.json
└── pnpm-lock.yaml
MIT © Guillaume CATEL