π― Curriculum β Professional Portfolio
Multilingual portfolio and CV for Thales Ferreira β Full Stack Data Engineer | Python & ML | DevOps Specialist. High-performance static site with Figma-integrated design system.
π Quick Navigation : Live β’ Quick Start β’ Architecture β’ Documentation
Layer
Technology
Details
Framework
Astro 6.1
Zero JS default, static output
Styling
Tailwind CSS 4
CSS custom properties, class-based dark mode
Interactivity
Vanilla JS
CSS-first, JS only when needed
i18n
Astro Routing
PT / EN / ES with prefix routing
Data
cv.json
Single source of truth for all CV content
Testing
Vitest
37 unit tests (i18n, data, build)
Design
Figma
Variables, components, light/dark themes
Deploy
GitHub Actions
Build β SCP to VPS β NGINX
Infrastructure
VPS + NGINX
HTTPS, HSTS, CSP headers
π Multilingual β PT, EN, ES with automatic routing and full i18n
π¨ Design System β Figma β CSS Custom Properties β Tailwind (never hardcoded)
π Dark Mode β Manual toggle, class-based (Tailwind CSS 4)
π Search β Real-time filtering of projects and services
π 5 Roles β Data Engineer, Backend, DevOps, Management, Frontend (auto-rotation)
π± Responsive β Desktop (1440px), Tablet (1024px), Mobile (375px)
βΏ Accessible β ARIA labels, skip-to-content, focus-visible, prefers-reduced-motion
π Secure β CSP, HSTS, X-Content-Type-Options, Referrer-Policy
π SEO β Open Graph, hreflang, JSON-LD, sitemap, canonical URLs
β‘ Performance β Zero JS default, lazy loading, optimized images
git clone https://github.com/thalesfb/curriculum.git
cd curriculum
npm install
npm run dev # http://localhost:4321
Command
Description
npm run dev
Dev server with hot reload
npm run build
Static build β dist/
npm run preview
Preview production build
npm test
Run 37 Vitest tests
npm run test:watch
Tests in watch mode
python generate_cvs.py
Generate 12 CV markdowns (5 roles Γ 3 langs)
flowchart TD
FIGMA[Figma Design System]
CV[cv.json]
UI[ui.ts i18n]
ASTRO[Astro Components]
TW[Tailwind CSS 4]
DIST[dist/ static]
GHA[GitHub Actions]
VPS[VPS + NGINX]
FIGMA -->|tokens| TW
CV -->|content| ASTRO
UI -->|translations| ASTRO
TW -->|classes| ASTRO
ASTRO -->|build| DIST
DIST -->|CI/CD| GHA
GHA -->|SCP| VPS
style FIGMA fill:#f3e5f5
style CV fill:#e8f5e9
style ASTRO fill:#e1f5ff
style VPS fill:#fff4e1
Loading
Figma (design) β CSS Custom Properties β Tailwind classes β Astro components
cv.json (data) β Hero, About, Services, Projects β Pages (/pt/, /en/, /es/)
ui.ts (labels) β All UI text β Translated per language
Push to main β GitHub Actions (npm test + npm build) β SCP dist/ β VPS β NGINX (HTTPS)
curriculum/
βββ .github/workflows/ CI/CD pipelines (ci, build, release)
βββ data/cv.json Single source of truth for CV content
βββ docs/
β βββ adr/ 9 Architecture Decision Records
β βββ guides/ Figma design system guide
β βββ DEPLOYMENT.md Deploy & NGINX docs
β βββ DEVELOPMENT.md Dev setup & workflows
β βββ SECURITY.md Security practices
βββ public/
β βββ icons/ Tech skill icons (SVG)
β βββ img/ UI icons + profile photo
β βββ logos/ Brand logos (IFC, SENAI, Alura, Red Hat, AWS, Cisco)
β βββ refs/ CV PDFs (PT, EN, ES)
βββ src/
β βββ __tests__/ Build + CV data tests
β βββ components/ 7 Astro components
β βββ i18n/ ui.ts + utils.ts + tests
β βββ layouts/ BaseLayout (SEO, OG, JSON-LD)
β βββ middleware.ts Security headers
β βββ pages/ index + /pt/ /en/ /es/
β βββ styles/ Design tokens + global CSS
βββ AGENTS.md AI agent governance
βββ astro.config.mjs Astro + sitemap config
βββ package.json Scripts + dependencies
npm test # 37 tests across 4 files
npm run test:watch # Watch mode
Test File
Tests
Coverage
i18n/utils.test.ts
15
getLangFromUrl, useTranslations, useTranslatedPath
i18n/ui.test.ts
6
Key parity PT/EN/ES, no empty strings
cv-data.test.ts
7
Schema validation, meta, roles, languages
build.test.ts
9
Page generation, lang attrs, OG tags, sitemap
KISS β HTML/CSS first, JS only when needed
YAGNI β Don't build it until you need it
DRY β Single source of truth (cv.json, ui.ts, CSS custom properties)
Clean Code β Meaningful names, small functions, no dead code
Design-First β Figma β CSS tokens β Tailwind β Code (never hardcoded colors)
Copyright 2026 Thales Ferreira. All rights reserved.