Personal portfolio and blog, built with Astro.
- Bilingual content with English and Spanish routes
- Blog with localized posts
- Projects and experience powered by Astro Content Collections
- Content editing through Sveltia CMS
- Dynamic Open Graph images for blog posts
- RSS feeds per locale
- Sitemap and robots.txt
- SEO metadata validation with
astro-seo-graph - Light and dark theme support
- Responsive, content-first design
- Consent management with c15t hosted mode through the shared consent service
- Astro + TypeScript
- Tailwind CSS
- Astro Content Collections
- Sveltia CMS
- @astrojs/rss
- @astrojs/sitemap
- astro-expressive-code
- @vercel/og
| Command | Action |
|---|---|
pnpm install |
Install dependencies |
pnpm dev |
Start local dev server at localhost:4321 |
pnpm check |
Run Astro checks |
pnpm build |
Check and build production site to dist/ |
pnpm preview |
Preview production build locally |
pnpm lint |
Run ESLint with fixes |
pnpm format |
Format files with Prettier |
Main content lives in src/content:
home/- localized homepage copyprojects/- localized projectsexperience/- localized experienceblog/- localized blog postsintegrations.md- Google Tag Manager and AdSense settingsstack.md- stack itemstags.md- taxonomy tags
CMS config lives in public/cms-rxtsel/config.yml.
- Google integrations - GA4, AdSense, ads.txt, and Search Console notes.
- Cloudflare Access for Sveltia CMS - Protect the static CMS admin route with Cloudflare Zero Trust.
- c15t consent - Frontend consent runtime and shared consent service integration.
- Cloudflare Workers deployment - Workers Builds, static assets, cache headers, and CI/CD setup.