This project was created by Pedro Monteiro
Personal portfolio and resume website for Pedro Monteiro, a Full-Stack Engineer based in São Paulo, Brazil. Hosted on GitHub Pages.
A static, bilingual (Portuguese BR / English) resume site built with plain HTML and CSS, generated by a small Node script (scripts/build.js) from a single content source (src/content.js). No frontend frameworks and no external runtime dependencies — the build output is plain static files served as-is. The only development dependencies are Playwright (for end-to-end tests) and serve (for local preview).
- Plain HTML/CSS over frameworks: The site is content-driven and has a single navigational concern (language switching via a plain link). A framework runtime adds unnecessary bytes and complexity for this use case.
- Minimal build step: A dependency-free Node script renders both locales from
src/content.jsintopublic/. Generated HTML is not versioned; CI builds it, keeping deployed output deterministic and the source of truth single. - Self-hosted assets: Fonts, favicon, and Open Graph image are stored locally under
public/assets/so the site has no third-party requests. - File-based i18n: Two static HTML pages (
/for pt-BR,/en/for English) share a single CSS file.
scripts/
└── build.js # Static page generator (no dependencies)
src/
└── content.js # Single source of truth for both locales
public/
├── index.html # Portuguese (default locale) — generated
├── en/
│ └── index.html # English locale — generated
├── assets/
│ ├── css/
│ │ └── main.css # Site-wide stylesheet and design tokens
│ └── fonts/ # Self-hosted subsetted WOFF2 fonts
├── favicon.svg
├── og-image.png
├── robots.txt
└── sitemap.xml
- Node.js >= 24.16.0 (for the build script, Playwright E2E tests, and local preview)
- npm (bundled with Node.js)
npm installnpm run build # regenerate public/index.html and public/en/index.html
npm run dev # build, then serve public/ → http://localhost:4321npm run test:e2ePlaywright starts a local static server automatically and runs the test suite.
- CI (
.github/workflows/ci.yml): installs Playwright dependencies, caches browsers, and runs E2E tests on every push / pull request tomain. - Deploy (
.github/workflows/deploy.yml): runs the build and uploads the generatedpublic/to GitHub Pages after CI succeeds onmain, or on manualworkflow_dispatch.