How jjduques/jjduques.github.io works
This repository is a personal portfolio site with a static-export frontend and a small FastAPI service for health reporting and contact messages. A visitor reads the portfolio and can submit a message; the API validates and rate-limits it, stores it in SQLite, then retries notification through n8n. The frontend also presents experience, stack, project case studies, and the site’s architecture decisions. API calls and storage behavior are supported by sampled source; deployment and browser-to-service routing are documented in the About page, while unsampled frontend internals are not inferred.
Main entry points: main.py FastAPI endpoints · db.py SQLite access · page.tsx Home page · notify.py Pending notifier
Components 18
Portfolio frontend
- Home page
frontend/app/page.tsx - Project listing
frontend/app/projects/page.tsx - Project detail
frontend/app/projects/[slug]/page.tsx - Architecture page
frontend/app/about/page.tsx - Portfolio content
frontend/lib/content.ts - Contact form
frontend/components/contact-form.tsx
Contact and health API
- FastAPI endpoints
api/app/main.py - Runtime settings
api/app/config.py - Rate limiter
api/app/ratelimit.py - Host metrics
api/app/system.py
Message persistence
- SQLite access
api/app/db.py - Contact database
Operations and notification
- Database backup
api/app/backup.py - Pending notifier
api/app/notify.py
Other components
- Site visitor
- n8n webhook
- Tailscale Funnel
- GitHub Pages CDN
Connections 18
- Site visitor → GitHub Pages CDN: requests pages
- GitHub Pages CDN → Home page: serves static files
- Site visitor → Contact form: submits message
- Home page → Contact form: renders form
frontend/app/page.tsx - Home page → Portfolio content: loads portfolio data
frontend/app/page.tsx - Project listing → Portfolio content: loads projects
frontend/app/projects/page.tsx - Project detail → Portfolio content: loads project
- Site visitor → Tailscale Funnel: sends HTTPS request
- Tailscale Funnel → FastAPI endpoints: forwards request
- FastAPI endpoints → Runtime settings: loads settings
api/app/main.py - FastAPI endpoints → Rate limiter: checks limits
api/app/main.py - FastAPI endpoints → Host metrics: reads host metrics
api/app/main.py - FastAPI endpoints → SQLite access: reads and writes messages
api/app/main.py - SQLite access → Contact database: reads and writes
- FastAPI endpoints → Pending notifier: queues notification
api/app/main.py - Pending notifier → SQLite access: loads and updates pending
api/app/notify.py - Pending notifier → n8n webhook: posts webhook
api/app/notify.py - Database backup → SQLite access: creates safe copy
api/app/backup.py