Skip to content

thalesfb/curriculum

Repository files navigation

🎯 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.

CI/CD Release Astro Tailwind

πŸ”— Quick Navigation: Live β€’ Quick Start β€’ Architecture β€’ Documentation


πŸ”— Links

Resource URL
Live thalesfb.curriculum.optimizr.site
Design Figma
Design Guide Figma Design System
Repository github.com/thalesfb/curriculum

πŸ› οΈ Technology Stack

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

✨ Features

  • 🌍 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

πŸš€ Quick Start

Prerequisites

  • Node.js 22+
  • npm

Development

git clone https://github.com/thalesfb/curriculum.git
cd curriculum
npm install
npm run dev        # http://localhost:4321

Scripts

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)

πŸ—οΈ Architecture

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

Data Flow

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

Deploy Pipeline

Push to main β†’ GitHub Actions (npm test + npm build) β†’ SCP dist/ β†’ VPS β†’ NGINX (HTTPS)

πŸ“ Project Structure

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

πŸ“š Documentation

Doc Content
AGENTS.md AI agent governance & project rules
docs/adr/ 9 Architecture Decision Records
docs/guides/figma-design-system.md Figma design system guide
docs/DEVELOPMENT.md Dev setup & workflows
docs/DEPLOYMENT.md CI/CD & NGINX config
docs/SECURITY.md Security practices

πŸ§ͺ Testing

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

🎨 Design Principles

  • 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)

πŸ“„ License

Copyright 2026 Thales Ferreira. All rights reserved.