A clean, data-driven personal portfolio built with Streamlit and powered by RenderCV. This project serves as a web-based companion to your professional CV, rendering data directly from YAML files to maintain a single source of truth.
Keeping a CV and a personal website in sync is tedious — you end up updating the same information in two different places, and they inevitably drift apart.
This project solves that by using a single YAML file as the source of truth. Edit it once, and both your PDF CV and your web portfolio update automatically. No duplication, no inconsistencies, no wasted time.
Update your YAML → run one command → your PDF and website are both up to date.
- RenderCV Integration: Uses the standardized RenderCV YAML schema. One file updates both your LaTeX PDF and this web portfolio.
- Dynamic Language Detection: Automatically detects and serves content in English or Spanish based on browser settings.
- Minimalist Aesthetic: Focused on typography (Exo 2 & Orbitron) and clean spacing. No clutter, just information.
- Interactive Elements: Collapsible experience sections and tech stacks displayed as modern tags.
- Direct Downloads: Quick access to the latest PDF versions of your CV in multiple languages.
- Frontend: Streamlit
- CV Engine: RenderCV
- Data: YAML (PyYAML)
- Styling: Custom CSS Injection (Minimalist / High-Contrast)
├── main.py # Application logic & UI
├── language_detection.py # Browser language utility
├── requirements.txt # Dependencies
├── JuanFranMartin_English_CV.yaml # RenderCV Source (EN)
├── JuanFranMartin_Spanish_CV.yaml # RenderCV Source (ES)
- Generate CVs:
python render_cvs.py - Run streamlit:
streamlit run main.py