# 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) [![PRs Welcome](https://img.shields.io/badge/PRs-welcome-brightgreen.svg)](CONTRIBUTING.md) **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. Perfect template for developers looking to create their own CV website with modern tech and minimal JavaScript. ## πŸ“‘ 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) - [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 - βœ… **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 - βœ… **Security Hardened** - CSP headers, XSS protection, secure defaults - βœ… **Production Ready** - Docker support, systemd service, CI/CD workflows - βœ… **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 a personal CV site template. Fork it and customize the JSON files with your own information! ## πŸ“‹ Quick Start ### Prerequisites - **Go 1.21+** installed - **Chrome/Chromium** (for PDF generation) - **Make** (optional, recommended for easier development) ### Installation & Run \`\`\`bash # Clone the repository git clone https://github.com/yourusername/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:** Docker, systemd service, GitHub Actions CI/CD ## πŸ“š Documentation - **[ARCHITECTURE.md](ARCHITECTURE.md)** - System design, data flow, and technical decisions - **[CONTRIBUTING.md](CONTRIBUTING.md)** - How to contribute (issues, PRs, code style) - **[SECURITY.md](SECURITY.md)** - Security policy, vulnerability reporting, deployment considerations - **[CODE_OF_CONDUCT.md](CODE_OF_CONDUCT.md)** - Community guidelines and standards - **[LICENSE](LICENSE)** - MIT License ## πŸš€ Deployment This project is production-ready with multiple deployment options: ### Docker Deployment \`\`\`bash # Build Docker image make docker-build # Run container make docker-run \`\`\` ### 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 \`\`\` **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](SECURITY.md) for production deployment best practices. ## 🎨 Customization ### Update Your CV Content 1. Edit `data/cv-en.json` and `data/cv-es.json` with your information 2. No code changes required - just refresh the browser! ### Customize Styling - **Main styles:** `static/css/main.css` - **Colors:** Modify CSS variables in `:root` selector - **Fonts:** Update Google Fonts import in HTML templates - **Layout:** Edit templates in `templates/` directory ### Add New Sections 1. Update the `CV` struct in `internal/models/cv.go` 2. Add content to JSON files in `data/` 3. Update templates in `templates/` to display new sections ## 🀝 Contributing Contributions are welcome! Whether it's: - πŸ› Bug reports - πŸ’‘ Feature suggestions - πŸ“ Documentation improvements - πŸ”§ Code contributions Please read [CONTRIBUTING.md](CONTRIBUTING.md) for guidelines on: - Submitting issues - Creating pull requests - Code style and testing requirements - Development workflow ## πŸ“„ 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. ## πŸ’¬ Support - **Issues:** [GitHub Issues](https://github.com/yourusername/cv/issues) for bug reports and feature requests - **Discussions:** [GitHub Discussions](https://github.com/yourusername/cv/discussions) for questions and ideas - **Security:** See [SECURITY.md](SECURITY.md) for reporting security vulnerabilities ## πŸ™ 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**