{"id":49889727,"url":"https://github.com/sergiomarquezdev/sergiomarquez-dev","last_synced_at":"2026-05-15T20:10:43.147Z","repository":{"id":303667106,"uuid":"1016269144","full_name":"sergiomarquezdev/sergiomarquez-dev","owner":"sergiomarquezdev","description":"This repository contains the source code for my personal portfolio website. Built with Astro and Tailwind CSS following the KISS principle (Keep It Simple, Stupid).","archived":false,"fork":false,"pushed_at":"2026-05-05T22:39:11.000Z","size":5204,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-05-06T00:29:31.716Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"https://sergiomarquez.dev","language":"Astro","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/sergiomarquezdev.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null}},"created_at":"2025-07-08T18:40:49.000Z","updated_at":"2026-05-05T22:39:16.000Z","dependencies_parsed_at":"2025-09-10T16:16:03.467Z","dependency_job_id":"5992fb1d-8832-4a34-9cc7-661fdebb438b","html_url":"https://github.com/sergiomarquezdev/sergiomarquez-dev","commit_stats":null,"previous_names":["sergiomarquezdev/sergiomarquez-dev"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/sergiomarquezdev/sergiomarquez-dev","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sergiomarquezdev%2Fsergiomarquez-dev","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sergiomarquezdev%2Fsergiomarquez-dev/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sergiomarquezdev%2Fsergiomarquez-dev/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sergiomarquezdev%2Fsergiomarquez-dev/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/sergiomarquezdev","download_url":"https://codeload.github.com/sergiomarquezdev/sergiomarquez-dev/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/sergiomarquezdev%2Fsergiomarquez-dev/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33078257,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-15T20:05:40.333Z","status":"ssl_error","status_checked_at":"2026-05-15T20:05:38.672Z","response_time":103,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2026-05-15T20:10:42.407Z","updated_at":"2026-05-15T20:10:43.141Z","avatar_url":"https://github.com/sergiomarquezdev.png","language":"Astro","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Sergio Marquez - Personal Portfolio\n\n\u003e **Bilingual (ES/EN) portfolio with \"AI Engineer\" personal brand — built with Astro and Tailwind CSS**\n\n[![Lighthouse Performance](https://img.shields.io/badge/Lighthouse-95%2B-brightgreen)](https://pagespeed.web.dev/)\n[![Lighthouse SEO](https://img.shields.io/badge/SEO-100%2F100-brightgreen)](https://pagespeed.web.dev/)\n[![CI](https://github.com/sergiomarquezdev/sergiomarquez-dev/actions/workflows/ci.yml/badge.svg)](https://github.com/sergiomarquezdev/sergiomarquez-dev/actions/workflows/ci.yml)\n\nSource code for my **personal portfolio**, positioned as an applied AI engineer with a backend-of-truth track record. Built with Astro 5 (SSG) + Tailwind v4, fully driven by `public/cv.{es,en}.json`.\n\nLive Site: [sergiomarquez.dev](https://sergiomarquez.dev)\n\n---\n\n## Design system\n\nDark theme with lime (`#A3E635`) accent — distinctive in a sea of blue AI sites. Three-font typography system:\n\n| Role | Family | Use |\n|---|---|---|\n| Display | **Instrument Serif** | Hero headline, section titles |\n| Body / UI | **Geist Variable** | Paragraphs, navigation, labels |\n| Mono | **JetBrains Mono Variable** | KPIs, eyebrows (`// Section`), code, dates, stack chips |\n\nAll design tokens are CSS custom properties in [`src/styles/global.css`](./src/styles/global.css). Backwards-compat aliases preserved (`--background`, `--primary-text`, etc.) so legacy components keep working during migration.\n\n---\n\n## Key Features\n\n- **Bilingual (i18n)**: Full ES/EN support with automatic locale detection, language switcher and hreflang tags.\n- **Data-driven content**: All sections rendered from `public/cv.{es,en}.json`. Optional brand fields (`metrics`, `kpis`, `headline`, `writing`, `featured`) are validated for parity in tests.\n- **Hero section**: Serif headline, animated `DotGrid` canvas (vanilla, \u003c1KB, respects `prefers-reduced-motion`), stack chips and dual CTAs.\n- **Impact Bar**: Four production metrics in mono lime — cost, validation rate, time saved, latency. Pulled from `cv.metrics`.\n- **Cases (replaces flat Experience timeline)**: Each work entry is a card with KPI badges front-and-center, headline in serif and arrow-marker bullets.\n- **Projects**: Featured project gets a large card with KPI and lime accent border; secondary projects in a responsive grid.\n- **Writing \u0026 Presence**: Consolidated grid of blog + social channels (YouTube, LinkedIn, X, TikTok, blog) with platform icon, handle and one-line description.\n- **CTA Footer**: Full-width \"¿Llevamos IA a producción?\" — serif headline + lime button + socials.\n- **Sidebar layout** (desktop): Sticky left sidebar with name (serif), tagline, GitHub activity, scroll-spy navigation and social links. Right sidebar shows vertical email.\n- **Mobile bottom nav**: Sticky bar with icons, scroll-spy and safe-area support.\n- **Spotlight effect**: Subtle cursor-tracking radial gradient.\n- **GitHub activity widget**: Latest commit fetched at build time from GitHub Events API.\n- **Accessibility**: Skip links, ARIA labels, keyboard nav, `prefers-reduced-motion` support, focus-visible with lime outline.\n- **SEO**: Canonical URLs, hreflang alternates, JSON-LD `Person` schema, OG/Twitter cards, sitemap, PWA manifest.\n- **Vanity redirects**: `/linkedin`, `/github`, `/x`, `/twitter`, `/youtube`, `/yt`, `/blog`, `/tiktok` → external profiles.\n- **Performance**: Lighthouse 95+ on every metric. Static output, compressed HTML, CSS minification via lightningcss.\n\n---\n\n## Tech Stack\n\n- **[Astro](https://astro.build/) ^5.16.0** -- Static site generator with i18n routing\n- **[Tailwind CSS](https://tailwindcss.com/) ^4.1.17** -- Utility-first CSS framework (via Vite plugin)\n- **[TypeScript](https://www.typescriptlang.org/)** -- Type-safe JavaScript\n- **[Vitest](https://vitest.dev/) ^4.0.18** -- Unit testing framework\n- **[lightningcss](https://lightningcss.dev/)** -- CSS minification\n- **[non.geist](https://vercel.com/font/sans)** -- Modern typography (Geist Variable)\n- **[Biome](https://biomejs.dev/)** -- Fast linting and formatting\n- **[Bun](https://bun.sh/)** -- Preferred package manager (local dev)\n- **[Cloudflare Pages](https://pages.cloudflare.com/)** -- Hosting \u0026 CDN (uses `npm ci`)\n\n---\n\n## Project Structure\n\n```\nsergiomarquez-dev/\n├── .github/workflows/ci.yml     # GitHub Actions CI pipeline\n├── .husky/                      # Git hooks (pre-commit via lint-staged)\n├── .vscode/                     # Shared VS Code settings \u0026 extensions\n├── docs/\n│   └── ARCHITECTURE.md          # Architecture documentation\n├── public/                      # Static assets served as-is\n│   ├── ads.txt                  # Google AdSense verification\n│   ├── cv.es.json               # Portfolio data (Spanish)\n│   ├── cv.en.json               # Portfolio data (English)\n│   ├── manifest.webmanifest     # PWA manifest\n│   ├── og-image.svg\n│   ├── Profile.pdf              # Downloadable resume\n│   ├── favicon.ico\n│   └── robots.txt\n├── src/\n│   ├── components/\n│   │   ├── About.astro\n│   │   ├── BaseHead.astro       # Meta tags, hreflang, JSON-LD\n│   │   ├── Certifications.astro\n│   │   ├── Experience.astro\n│   │   ├── GitHubActivity.astro # Live latest commit widget\n│   │   ├── HomePage.astro       # Section composition\n│   │   ├── LanguageSwitcher.astro\n│   │   ├── Projects.astro\n│   │   ├── Spotlight.astro      # Cursor-tracking spotlight effect\n│   │   ├── icons/               # SVG icon components (Link, Lock, User, Briefcase, Code, Award, GitHub, etc.)\n│   │   └── layout/              # Layout sub-components\n│   │       ├── Footer.astro     # CTA + copyright footer\n│   │       ├── MainContent.astro\n│   │       ├── MobileNav.astro  # Bottom nav bar with scroll-spy\n│   │       ├── Navigation.astro # Scroll-spy sidebar nav\n│   │       ├── SidebarLeft.astro\n│   │       ├── SidebarRight.astro\n│   │       └── SocialLinks.astro\n│   ├── data/\n│   │   ├── cv.ts                # Typed loader + locale cache for cv JSON\n│   │   ├── github.ts            # GitHub Events API client\n│   │   └── __tests__/           # Unit tests (cv, github)\n│   ├── i18n/\n│   │   └── index.ts             # Locale config, translation dict, helpers\n│   ├── layouts/\n│   │   └── Layout.astro         # Base layout (sidebar + mobile header)\n│   ├── pages/\n│   │   ├── index.astro          # Home page (ES, default locale)\n│   │   ├── en/index.astro       # Home page (EN)\n│   │   ├── linkedin/index.astro # Vanity redirect pages\n│   │   ├── github/index.astro\n│   │   ├── x/index.astro\n│   │   ├── twitter/index.astro\n│   │   ├── youtube/index.astro\n│   │   ├── yt/index.astro\n│   │   └── blog/index.astro\n│   └── styles/\n│       └── global.css           # Design tokens, animations, print styles\n├── astro.config.mjs\n├── tailwind.config.ts           # Bridges CSS custom properties to Tailwind\n├── vitest.config.ts\n├── biome.json\n├── CLAUDE.md\n├── AGENTS.md\n├── CHANGELOG.md\n└── package.json\n```\n\n---\n\n## Quick Start\n\n### Prerequisites\n\n- **Node.js 20+** (LTS recommended)\n- **[Bun](https://bun.sh/)** (recommended) or **npm**\n\n### Installation\n\n1. **Clone the repository**\n\n   ```bash\n   git clone https://github.com/sergiomarquezdev/sergiomarquez-dev.git\n   cd sergiomarquez-dev\n   ```\n\n2. **Install dependencies**\n\n   ```bash\n   bun install\n   ```\n\n3. **Start the development server**\n\n   ```bash\n   bun run dev\n   ```\n\n   - Spanish (default): `http://localhost:4321/`\n   - English: `http://localhost:4321/en/`\n   - Hot reload enabled for instant feedback\n\n---\n\n## Available Scripts\n\n```bash\n# Development\nbun run dev            # Start development server with hot reload\nbun run build          # Create production build\nbun run preview        # Preview production build locally\n\n# Quality checks\nbun run type-check     # TypeScript validation with Astro\nbun run lint           # Biome linting\nbun run lint:fix       # Auto-fix linting issues\nbun run format         # Auto-format with Biome\nbun run format:check   # Check formatting without modifying\n\n# Testing\nbun run test           # Run unit tests (Vitest)\nbun run test:watch     # Run tests in watch mode\n\n# Full validation (mandatory before committing)\nbun run validate       # type-check + lint + test + build\n```\n\n---\n\n## Development Workflow\n\n1. Update content in `public/cv.es.json` / `public/cv.en.json` or tweak components.\n2. Test locally with `bun run dev` -- check both `/` (ES) and `/en/` (EN).\n3. Run `bun run validate` to ensure everything passes.\n4. Commit changes (pre-commit hook runs lint-staged on `src/`).\n5. Push to `main` -- Cloudflare Pages builds and deploys automatically.\n\n---\n\n## Performance \u0026 SEO\n\n- **Lighthouse**: 95+ performance, 100/100 SEO\n- **Sitemap**: Generated automatically via `@astrojs/sitemap` with i18n support\n- **Hreflang**: `\u003clink rel=\"alternate\"\u003e` tags for ES, EN, and x-default\n- **Structured data**: JSON-LD Person schema via `BaseHead.astro`\n- **Canonical URLs**: Per-page canonical links\n- **PWA manifest**: `manifest.webmanifest` for installability\n- **Fast delivery**: Static output served from Cloudflare Pages CDN\n\n---\n\n## Contact\n\n**Sergio Marquez**\n_Python AI Developer -- FastAPI, LLMs, RAG_\n\n- Website: [sergiomarquez.dev](https://sergiomarquez.dev)\n- Email: [contacto@sergiomarquez.dev](mailto:contacto@sergiomarquez.dev)\n- LinkedIn: [sergiomarquezp](https://www.linkedin.com/in/sergiomarquezp/)\n- GitHub: [sergiomarquezdev](https://github.com/sergiomarquezdev)\n- X (Twitter): [@sergiomarquezp\\_](https://x.com/sergiomarquezp_)\n- YouTube: [@sergiomarquezp](https://www.youtube.com/@sergiomarquezp)\n\n---\n\n\u003cdiv align=\"center\"\u003e\n\n[![Astro](https://img.shields.io/badge/Astro-FF5D01?style=for-the-badge\u0026logo=astro\u0026logoColor=white)](https://astro.build/)\n[![TypeScript](https://img.shields.io/badge/TypeScript-007ACC?style=for-the-badge\u0026logo=typescript\u0026logoColor=white)](https://www.typescriptlang.org/)\n[![Tailwind CSS](https://img.shields.io/badge/Tailwind_CSS-38B2AC?style=for-the-badge\u0026logo=tailwind-css\u0026logoColor=white)](https://tailwindcss.com/)\n\n\u003c/div\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsergiomarquezdev%2Fsergiomarquez-dev","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fsergiomarquezdev%2Fsergiomarquez-dev","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fsergiomarquezdev%2Fsergiomarquez-dev/lists"}