juanatsap 18db4011f8 feat: comprehensive print optimization for professional PDF output
Print CSS overhaul:
- Fixed photo aspect ratio (60x80, 3:4 portrait) with contain fit
- Unified font sizes across all sections (10pt titles, 9pt content, 8pt metadata)
- Removed excessive spacing (reduced by 50-70%)
- Applied clean theme automatically (no sidebars, icons, logos, badges)
- Force short version for concise 5-page output
- Natural page breaks (removed forced breaks causing blank spaces)
- Consistent section title spacing with proper breathing room
- Match Training/Skills spacing pattern across all sections
- Fixed Languages and References spacing
- Equalized Experience, Courses, Projects, and Awards formatting
- Single separator for "See all projects" link

UI improvements:
- Enhanced icon toggle visibility with better contrast
- Reorganized navigation menu structure
2025-11-10 14:00:32 +00:00

CV Site - Go + HTMX

Go Version HTMX License

Modern, minimal curriculum vitae website for Juan Andrés Moreno Rubio built with Go and HTMX.

A professional, bilingual CV site with server-side PDF generation, HTMX interactivity, and a clean paper design aesthetic. Built as a personal portfolio project showcasing production-grade Go and HTMX development.

📌 Project Status

This is a personal portfolio project demonstrating production-grade Go and HTMX development.

Open Source: The code is MIT licensed and available for educational purposes. You're welcome to use it as a template or reference for your own projects. This repository is maintained as my personal CV site and may be modified without notice.

Contributions: This is a personal CV project and is feature-complete. I'm not seeking contributions, but you're welcome to use it as a template! If you find a critical security vulnerability, please follow the SECURITY.md process.

📑 Table of Contents

🚀 Features

  • Bilingual Support - Spanish and English with instant switching (no page reload)
  • Server-Side PDF Export - Professional PDF generation using chromedp (headless Chrome)
  • Browser Print - Alternative print-friendly layout for manual PDF creation
  • HTMX Dynamic Updates - Smooth UX without heavy JavaScript
  • Paper Design - Professional CV on elegant white paper with gray background
  • Responsive - Mobile, tablet, and desktop friendly
  • JSON-Based Content - Easy to update without touching code
  • AI Development Section - Showcases modern AI-assisted development skills
  • Fast & Lightweight - Go backend with chromedp for PDF generation
  • Privacy-Friendly Analytics - Self-hosted Matomo tracking (no third-party data sharing)
  • Security Hardened - CSP headers, XSS protection, origin validation, rate limiting
  • Production Ready - Systemd service, CI/CD workflows, deployment guides
  • Developer Friendly - Hot reload, clear code structure, comprehensive Makefile

📸 Demo

Live Features:

  • Single-page application with no page reloads
  • Instant language switching (English ↔ Spanish)
  • Professional PDF export with perfect font rendering
  • Responsive design from mobile to desktop
  • Clean paper aesthetic on gray background
  • Print-friendly layouts

Note: This is my personal CV site. The code is open source for learning and reference purposes.

📋 Running Locally

If you want to explore the code or run it locally:

Prerequisites

  • Go 1.21+ installed
  • Chrome/Chromium (for PDF generation)
  • Make (optional, for easier development)

Local Development

```bash

Download the code

git clone https://github.com/txemac/cv.git cd cv

Option 1: Using Make (recommended)

make dev

Option 2: Using Go directly

go run main.go

Option 3: Build and run binary

go build -o cv-server && ./cv-server ```

Access the Site

Open http://localhost:1999 in your browser

Language switching is instant via HTMX - no page reload required!

📄 Updating Your CV

Edit JSON files in data/:

  • English: data/cv-en.json
  • Spanish: data/cv-es.json

No code changes needed - just refresh browser!

🖨️ Export to PDF

  1. Click "Download as PDF" button in the action bar
  2. PDF is generated server-side using headless Chrome
  3. File downloads automatically: CV-Juan-Andres-Moreno-Rubio-{lang}.pdf

Advantages:

  • Consistent rendering across all platforms
  • Perfect font rendering
  • No browser compatibility issues
  • Professional quality output

Browser Print (Alternative)

  1. Click "Print Friendly" button
  2. Use browser print dialog (Cmd/Ctrl + P)
  3. Select "Save as PDF"

Endpoints:

  • English PDF: http://localhost:1999/export/pdf?lang=en
  • Spanish PDF: http://localhost:1999/export/pdf?lang=es

🎯 Key Technologies

  • Backend: Go 1.21+ (stdlib net/http, graceful shutdown)
  • PDF Generation: chromedp (headless Chrome automation)
  • Frontend: HTMX 1.9.10 (hypermedia-driven interactions)
  • Styling: Custom CSS with Quicksand font from Google Fonts
  • Data: JSON files for easy content management
  • Deployment: Systemd service, manual binary, GitHub Actions CI/CD

📚 Documentation

  • DEPLOYMENT.md - Production deployment guides (VPS, cloud platforms, systemd)
  • CUSTOMIZATION.md - Complete guide to customizing this template for your CV
  • API.md - HTTP endpoints documentation and HTMX integration
  • SECURITY.md - Security policy, vulnerability reporting, deployment considerations
  • PRIVACY.md - Privacy policy and analytics disclosure
  • LICENSE - MIT License

🚀 Deployment

This project is production-ready with multiple deployment options. See DEPLOYMENT.md for complete guides.

Systemd Service

```bash

Install as systemd service

make install-service

Update running service

make update-service ```

Manual Deployment

```bash

Build optimized binary

make build

Run in production mode

GO_ENV=production ./cv-server ```

Cloud Platforms

Deployment guides available for:

  • Fly.io - Complete fly.toml configuration
  • Google Cloud Run - Container deployment
  • AWS ECS - Task definitions
  • Railway / Render - Auto-deploy configs

See DEPLOYMENT.md for detailed instructions.

Environment Configuration: Copy .env.example to .env and customize:

  • PORT - Server port (default: 1999)
  • GO_ENV - Environment (development/production)
  • TEMPLATE_HOT_RELOAD - Enable template hot-reload in development

Security: See SECURITY.md for production deployment best practices.

🎨 Customization

Want to use this template for your own CV? See CUSTOMIZATION.md for the complete guide!

Quick Start Customization

  1. Update Content: Edit data/cv-en.json and data/cv-es.json with your information
  2. Customize Styling: Modify static/css/main.css (colors, fonts, layout)
  3. Adjust Templates: Edit files in templates/ directory
  4. Add Sections: Update internal/models/cv.go and JSON files

The CUSTOMIZATION.md guide includes:

  • Complete JSON schema documentation
  • Visual customization (colors, fonts, layout)
  • Template modification examples
  • Adding new languages
  • Advanced customization patterns

🔒 Privacy & Analytics

This site uses self-hosted Matomo analytics to understand visitor behavior while respecting privacy.

What's tracked:

  • Page views and language changes (EN/ES)
  • Visitor country/city (approximate)
  • Browser type and referring site
  • Time on site and navigation patterns

What's NOT tracked:

  • Personal identifying information
  • Precise geolocation
  • Cross-site behavior
  • Any data is NOT shared with third parties

Your privacy:

  • All data stored on my own server (matomo.drolo.club)
  • Respects "Do Not Track" browser settings
  • You can disable cookies in browser settings

See PRIVACY.md for complete details and opt-out instructions.


🤝 Using This Template

This project is open-source and available for you to use!

If you use this as a template, you MUST change:

  1. Matomo Site ID in templates/index.html (line 644): Change setSiteId from '4' to your own
  2. Matomo Server URL in templates/index.html (line 642): Change https://matomo.drolo.club/ to your instance
  3. CSP Headers in internal/middleware/security.go: Update allowed domains for your Matomo server
  4. OR remove Matomo entirely if you don't want analytics (see PRIVACY.md)

Other recommended changes:

  • Update all personal information in data/cv-en.json and data/cv-es.json
  • Replace profile photo in static/images/profile/
  • Update ALLOWED_ORIGINS in .env for API protection
  • Customize colors and branding in static/css/main.css

See CUSTOMIZATION.md for the complete customization guide.

📄 License

This project is licensed under the MIT License - see the LICENSE file for details.

TL;DR: You can use this template for your own CV site, modify it, and distribute it. Just keep the original copyright notice.

💬 Questions or Issues?

🙏 Acknowledgments

  • HTMX - For making hypermedia-driven applications enjoyable
  • chromedp - For reliable headless Chrome automation
  • Go Community - For excellent standard library and tooling
  • AI Assistance - For accelerating development and documentation

Built with ❤️ using Go, HTMX, and AI assistance

S
Description
💼 Professional CV - 🐹 Go • HTMX • 🌐 Bilingual • 📄 Print-ready
Readme MIT 76 MiB
Languages
JavaScript 45.8%
Go 29%
CSS 14.6%
HTML 8.9%
Shell 1.5%
Other 0.2%