My personal website built with Astro, featuring a blog, case studies portfolio, and serverless contact functionality.
Live Site: fridgren.se
- Astro 5.16+ - Static site generator with content collections
- TypeScript - Strict mode enabled
- MDX - Content with frontmatter validation (Zod schemas)
- React - Component support via @astrojs/react
- Custom CSS - Design tokens and CSS custom properties (no Tailwind)
- GSAP 3.13 - Scroll animations with ScrollTrigger
- Mux - Video playback
- SendGrid - Transactional emails via Netlify functions
- Netlify - Deployment with serverless functions
- 📝 MDX Blog with draft support and RSS feed
- 💼 Case Studies with video support via Mux
- 📧 Contact Form with rate limiting and spam protection
- 🌙 Dark Mode via
prefers-color-scheme - ✨ Scroll Animations using GSAP
- 🔍 SEO Optimized with IndexNow integration
- 🎨 Custom Design System with CSS tokens
Requirements: pnpm 10.28.1+
# Install dependencies
pnpm install
# Start dev server (with --host flag)
pnpm dev
# Visit http://localhost:4321# Build for production + submit to IndexNow
pnpm build
# Preview production build
pnpm previewThe build command runs astro build followed by scripts/submit-indexnow.js which automatically submits your sitemap URLs to search engines.
scripts/ # Build scripts (IndexNow submission)
netlify/functions/ # Serverless functions (contact, newsletter)
src/
components/ # Reusable UI components (.astro)
content/
blog/ # Blog posts (MDX with frontmatter)
work/ # Case studies (MDX with frontmatter)
config.ts # Content collection schemas (Zod)
layouts/ # Page layouts (Layout, BlogPost, CaseLayout)
pages/ # Routes and pages (.astro)
scripts/ # Client-side scripts (GSAP animations)
global.css # Global styles and design tokens
public/ # Static assets (fonts, images)
Required for full functionality:
SENDGRID_API_KEY- SendGrid API key for contact formSENDGRID_FROM_EMAIL- Verified sender emailCONTACT_EMAIL- Recipient email for contact formINDEXNOW_KEY- Key for IndexNow API (optional)
Deployed on Netlify with:
- Automatic builds on push
- Serverless functions for contact/newsletter
- Redirects: www → non-www, http → https
- Build command:
pnpm build
For detailed technical documentation, architecture details, and code conventions, see CLAUDE.md.
This project uses multi-licensing:
- Code (MIT License) - Source code, configuration, and build scripts are free to use, modify, and distribute
- Content & Design (All Rights Reserved) - Blog post text, case studies, design assets, and visual styling remain copyrighted
- Blog Images (Unsplash License) - Photos from Unsplash, free to use under Unsplash License
See LICENSE for full details.