# CV Site - Go + HTMX

[![Go Version](https://img.shields.io/badge/Go-1.21%2B-00ADD8?logo=go)](https://go.dev/)
[![HTMX](https://img.shields.io/badge/HTMX-1.9.10-3366CC)](https://htmx.org/)
[![License](https://img.shields.io/badge/License-MIT-green.svg)](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](doc/SECURITY.md) process.

## 📑 Table of Contents

- [Features](#-features)
- [Demo](#-demo)
- [Quick Start](#-quick-start)
- [Updating Your CV](#-updating-your-cv)
- [Export to PDF](#-export-to-pdf)
- [Key Technologies](#-key-technologies)
- [Documentation](#-documentation)
- [Deployment](#-deployment)
- [Customization](#-customization)
- [Privacy & Analytics](#-privacy--analytics)
- [Contributing](#-contributing)
- [License](#-license)
- [Support](#-support)

## 🚀 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
- ✅ **Zoom Control** - Adjustable zoom (25%-300%) with persistence across sessions
- ✅ **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 analytics (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 Demo:** [https://juan.andres.morenorub.io/](https://juan.andres.morenorub.io/)

**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

- 🇬🇧 **English version:** http://localhost:1999/?lang=en
- 🇪🇸 **Spanish version:** http://localhost:1999/?lang=es

**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

### Server-Side PDF Generation (Recommended)

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

This project includes comprehensive documentation organized by purpose:

### 📖 Getting Started
- **[README.md](README.md)** - Project overview, quick start, and features (you are here)
- **[DEPLOYMENT.md](doc/DEPLOYMENT.md)** - Production deployment guides for VPS and cloud platforms
- **[CUSTOMIZATION.md](doc/CUSTOMIZATION.md)** - How to customize this CV template for your own use

### 🔧 Technical Reference
- **[ARCHITECTURE.md](doc/ARCHITECTURE.md)** - System design, patterns, and technical decisions
- **[API.md](doc/API.md)** - Complete HTTP API reference and HTMX integration

### 📋 Policies & Standards
- **[SECURITY.md](doc/SECURITY.md)** - Security policy, vulnerability reporting, and best practices
- **[PRIVACY.md](doc/PRIVACY.md)** - Privacy policy template and analytics guidance
- **[CODE_OF_CONDUCT.md](CODE_OF_CONDUCT.md)** - Community standards (Contributor Covenant)
- **[CONTRIBUTING.md](CONTRIBUTING.md)** - Contribution policy (personal project notice)

### 📄 License
- **[LICENSE](LICENSE)** - MIT License

## 🚀 Deployment

This project is production-ready with multiple deployment options. See **[DEPLOYMENT.md](doc/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](doc/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](doc/SECURITY.md) for production deployment best practices.

## 🎨 Customization

**Want to use this template for your own CV?** See **[CUSTOMIZATION.md](doc/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](doc/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 demonstrates self-hosted analytics implementation for privacy-conscious tracking.

**Key features:**
- Self-hosted analytics (no third-party data sharing)
- Privacy-friendly (respects Do Not Track)
- Fully configurable

See **[PRIVACY.md](doc/PRIVACY.md)** for complete privacy policy template.

---

## 🤝 Using This Template

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

**If you use this as a template, you should:**
1. Review the analytics implementation in `templates/index.html`
2. Either configure your own analytics server or remove the tracking code
3. Update CSP headers in `internal/middleware/security.go` accordingly
4. Customize `PRIVACY.md` with your own privacy policy

See **[CUSTOMIZATION.md](doc/CUSTOMIZATION.md#analytics-configuration)** for detailed analytics configuration

**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](doc/CUSTOMIZATION.md)** for the complete customization guide.

## 📄 License

This project is licensed under the **MIT License** - see the [LICENSE](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?

- **Questions:** Feel free to fork and modify - this is a template!
- **Security Issues:** See [SECURITY.md](doc/SECURITY.md) for reporting security vulnerabilities
- **Documentation:** Check [CUSTOMIZATION.md](doc/CUSTOMIZATION.md) and [DEPLOYMENT.md](doc/DEPLOYMENT.md)

## 🙏 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**
