Personal portfolio site for Florian Riquelme — senior software engineer based in Hamburg, Germany.
Live: friquelme.dev
- Framework: Astro 5 (static output)
- Styling: Tailwind CSS 4 via Vite plugin
- Icons: astro-icon with Lucide
- Font: JetBrains Mono
- Infrastructure: AWS CDK (S3 + CloudFront + Route53 + ACM)
- CI/CD: GitHub Actions with OIDC authentication
- Package Manager: pnpm
pnpm install
pnpm dev # http://localhost:4321
pnpm build # Static output to ./dist/
pnpm preview # Preview production buildsrc/
├── assets/images/ # Project card images
├── components/
│ ├── content/ # ProjectCard, SkillBar, TerminalWindow, etc.
│ ├── forms/ # InputGroup, SearchField, TextareaGroup
│ ├── nav/ # HeaderBar, Footer, Logo, NavItem
│ └── ui/ # Badge, Button variants, Tag, Divider
├── layouts/Layout.astro # Base HTML layout with meta, fonts, analytics
├── pages/index.astro # Single-page site (hero, skills, projects, contact)
└── styles/global.css # Tailwind theme, animations, base styles
infra/ # AWS CDK stacks
├── lib/
│ ├── static-site-stack.ts # S3 + CloudFront + DNS + TLS
│ └── github-oidc-stack.ts # GitHub Actions deploy role
└── bin/infra.ts
Pushes to main trigger the GitHub Actions workflow which:
- Builds the static site with Astro
- Authenticates to AWS via OIDC (no stored credentials)
- Syncs to S3 with appropriate cache headers
- Invalidates CloudFront cache
Infrastructure is managed separately via CDK in the infra/ directory.