Personal portfolio, project showcase, and engineering management CV for Aníbal Ribeiro — Software Engineering Manager based in Prague, Czech Republic.
🌐 Live Website: https://anibalribeiro.cz
📄 Interactive CV: https://anibalribeiro.cz/cv/
🐭 WinMice App: https://anibalribeiro.cz/Winmice/
This repository powers anibalribeiro.cz, designed with an emphasis on minimalist performance, clean typography, accessibility, and zero unnecessary client overhead.
- Zero Client-Side JavaScript: The main portfolio and project landing pages ship 0 bytes of client-side runtime JavaScript.
- Rich SEO & Social Sharing: Complete Open Graph, Twitter Cards, canonical URLs, and Schema.org JSON-LD structured data (
ProfilePage,Person,SoftwareApplication,FAQPage) across all routes. - Dedicated CV Experience: An interactive web CV with a tailored print stylesheet designed to produce a clean 2-page PDF, alongside raw Markdown and downloadable PDF formats.
- Automated Deployment: Custom FTPS deployment engine with diff-based remote synchronization and strict TLS verification.
- Fully Tested: Strict unit and integration test suite using Vitest and LinkeDOM ensuring zero regression across builds, SEO tags, and data integrity.
🐭 WinMice
Native macOS utility bringing Windows-style vector middle-click autoscroll and side button navigation to Mac.
- Middle-click mouse vector scrolling (click and drag in any direction to smoothly scroll).
- Native support for mouse side buttons 4 & 5 (Back and Forward) in Safari, Finder, Chrome, and system-wide apps.
- Lightweight menu-bar application built natively in Swift with a clean SwiftUI interface.
- Product showcase live at /Winmice/.
Fast, private in-page browser translation extension.
- Inline and tooltip page translations with zero telemetry and instant hotkey activations.
- Available on the Chrome Web Store.
├── astro.config.mjs # Astro configuration & sitemap integration
├── cv/ # Standalone interactive CV assets
│ ├── index.html # Full interactive CV page with print stylesheet
│ └── anibal-ribeiro-em.md # Plain-text / Markdown CV
├── public/ # Static assets served at root
│ ├── .htaccess # Apache redirection and casing rules
│ ├── cv/ # Synced CV assets and PDFs
│ ├── favicon.svg # Vector favicon
│ ├── og.png # Social share preview image (1200x630)
│ ├── robots.txt # Crawler instructions and sitemap link
│ └── winmice-*.png # WinMice iconography and preview assets
├── scripts/
│ └── deploy.mjs # FTPS incremental deployment script
├── src/
│ ├── assets/ # Optimized image assets (photo, screenshots)
│ ├── components/ # Reusable Astro UI components (Hero, Work, Cv, Contact, etc.)
│ ├── data/ # Typed project data and site constants (site.ts, winmice.ts)
│ ├── layouts/ # Base HTML shell with SEO & JSON-LD injection
│ ├── lib/ # SEO URL normalizer & JSON-LD schema generators
│ ├── pages/ # File-based routing (/, /Winmice/)
│ └── styles/ # Global CSS design tokens and component styling
└── tests/ # Vitest unit and DOM integration test suite
npm installStart the Astro local development server with Hot Module Replacement:
npm run devVisit http://localhost:4321 in your browser.
Run the test suite and typechecks before committing:
# Run all Vitest unit and integration tests
npm test
# Run Astro TypeScript and template diagnostics
npm run check
# Create production build in dist/
npm run build
# Preview production build locally
npm run previewThe site is hosted on a secure static server and deployed via FTPS using basic-ftp:
- Copy
.env.exampleto.env:cp .env.example .env
- Populate the required credentials:
FTP_HOST=your-ftp-host.com FTP_USER=your-ftp-user FTP_PASS=your-ftp-password FTP_DIR=public_html
- Run the automated build and deployment pipeline:
npm run deploy
Note: .env is ignored by Git and must never be committed.
Content, text, and personal branding © Aníbal Ribeiro. All rights reserved.
Source code structure available for reference under the MIT License.