Commit Graph

33 Commits

Author SHA1 Message Date
juanatsap 2c372eee49 feat: add social links to footer and optional company logo toggle
**Social Links in Footer (Page 2):**
- Replace address/phone with LinkedIn, GitHub, and Behance links
- Maintain email@ link
- All links are clickable and open in new tabs
- Footer displays social media profiles prominently

**Company Logo Toggle Feature:**
- Add "Show logos" toggle switch in top action bar
- Toggle displays company logos (48x48px) to the left of each experience item
- LinkedIn-style layout when logos are shown
- Logos hidden by default, optional display via toggle
- Graceful fallback: missing logos don't break layout (onerror handler)
- Logos directory created at static/images/logos/ with README

**Technical Implementation:**
- New CSS file: logo-toggle.css for toggle switch and logo layout
- JavaScript: toggleLogos() function for show/hide functionality
- Template updates: experience items now support flex layout with logos
- Action bar grid updated to accommodate 4 columns
- Logo display uses CSS class `.show-logos` on `.cv-paper`
- Print CSS: logos hidden in PDF exports by default

**User Experience:**
- Clean toggle switch UI with smooth animations
- Mobile responsive design
- Accessibility: proper ARIA labels for toggle
- Optional feature that doesn't clutter default view
- Professional LinkedIn-style appearance when enabled

Logos can be added to static/images/logos/ directory using filenames
from the companyLogo field in CV JSON data.
2025-11-05 12:15:43 +00:00
juanatsap 38bf09196e refactor: update experience section format to match original React design
- Reorder elements: position first, then company (not reversed)
- Display period, separator, and location inline on same line
- Update CSS to match original styling:
  - Inline display for all date/location elements
  - Gray color (#aaa) for period, separator, location
  - Font-weight 500 (not 600) for consistency
  - Remove flex layout in favor of inline elements

This matches the exact format and styling of the original React CV.
2025-11-04 20:32:42 +00:00
juanatsap ed0760fe3f feat: add company names with optional clickable links to experience section
- Add companyURL field to Experience model (optional)
- Update cv-content.html template to display company name with conditional link
- Add company-link CSS styling for clickable company names
- Add companyURL data for major companies (Olympic Broadcasting, AENA, SAP, Gigya, Everis, Indra)
- Companies without URLs display as plain text, maintaining flexibility

This addresses the issue where company names were missing from the experience section
and ensures links are included throughout the CV as per the original React version.
2025-11-04 19:56:40 +00:00
juanatsap b52d0b08b6 refactor: update header badge and remove hardcoded experience years
- Changed 'GO DEVELOPER' to 'GO+HTMX DEVELOPER' in both page headers
- Removed hardcoded '20 years of experience' line (redundant with summary)
- Years of experience are now only in the intro/summary text
2025-11-04 19:48:39 +00:00
juanatsap e2697eab06 fix: remove white frame wrapper and stack pages vertically
- Changed .cv-container from flex to block layout
- Made .cv-container full width (100%) instead of max 1200px
- Removed .cv-paper grid layout (was conflicting with .cv-page grids)
- Made .cv-paper transparent with no shadow (each page has its own)
- Pages now stack vertically one after another
- Removed white frame container that was wrapping both pages

Each .cv-page now displays independently with proper spacing.
2025-11-04 19:40:03 +00:00
juanatsap e2c4eafda2 feat: implement proper two-page CV layout matching original React design
**Page 1 Changes:**
- Left sidebar with first half of skills categories
- Main content: Personal info, Education, Skills summary, Experience
- No footer on page 1

**Page 2 Changes:**
- Main content: Awards, Courses, Languages, References, Other
- Right sidebar with second half of skills categories
- Footer with address, phone, email (dark gray #303030 background)
- Same header as page 1

**Technical Implementation:**
- Split skills between left/right sidebars using midpoint calculation in Go handler
- CSS Grid layout: Page 1 (left sidebar + main), Page 2 (main + right sidebar)
- Footer styled to match React CV exactly (centered, horizontal layout)
- Print CSS with proper page breaks for A4 layout
- Mobile responsive: stacks to single column, hides page 2 header
- All links in References section are clickable

**Data Model:**
- Moved Languages, Courses, References, Other from sidebar to page 2 main content
- Skills split evenly between SkillsLeft and SkillsRight template variables

Matches pixel-perfect design from original React CV screenshot.
2025-11-04 19:07:34 +00:00
juanatsap 7003694e4d refactor: update header badge and remove Tailwind CSS
- Change JAVA DEVELOPER to GO DEVELOPER in header badge
- Remove Tailwind CSS from AI & Modern Development skills (both EN/ES)
- Align tech stack with actual project technologies
2025-11-04 18:09:00 +00:00
juanatsap 87e2c7a877 fix: correct intro text position and styling to match original CV
User reported intro text was in wrong position (inside Training section).

Changes:
- Moved intro text INSIDE cv-header-left div (GREEN BOX position)
- Positioned right after "20 years of experience"
- Removed duplicate Training section that showed summary
- NO section heading - just the text flowing naturally

CSS Updates:
- Removed .cv-excerpt and .excerpt-text (wrong implementation)
- Added .intro-text with exact styling from old React CV:
  * Font: Quicksand, 1.0em
  * Line height: 1.6
  * Text align: justify
  * Style: italic
  * Margin-top: 20px
  * Color: rgb(51, 51, 51)
- Added responsive styles for mobile (0.9em, 15px margin)

Verified with Playwright analysis of old React CV.
Intro text now appears exactly as in original implementation.
2025-11-04 17:51:03 +00:00
juanatsap 5cb97c83cd fix: add intro/excerpt text to header section
- Added cv-excerpt div in header to display summary/intro text
- Shows immediately after "20 years of experience"
- Styled with borders, italic font, and proper spacing
- Matches original React CV layout with visible intro

The red box area highlighted by user now contains the summary text.
2025-11-04 17:43:31 +00:00
juanatsap bdf6a863a8 feat: add complete sidebar content to match original React CV
Comprehensive update to achieve feature parity with old React implementation.

## Data Layer (Backend)

**Updated Go Models** (internal/models/cv.go):
- Added Course struct (title, institution, location, date, duration, description)
- Added Reference struct (title, URL, type)
- Added Language.Detail field for proficiency descriptions
- Added CV.Courses and CV.References arrays

**Complete Data Population** (data/cv-es.json):
- Added 6 NEW skill categories (42 items):
  * Lenguajes de Programación (11 items: Java, Groovy, PHP, XML, XSLT, ActionScript, Shell, C, C++)
  * Frameworks PHP (4 items: Yii, Zend, WordPress API, Joomla API)
  * Frameworks Java (8 items: Play!, Struts, Spring, Hibernate, Ibatis, Magnolia CMS, XWiki, TESEO)
  * Servidores de Aplicaciones (9 items: Apache, WAMP, MAMP, Tomcat, JBoss, Resin, Jetty, Websphere, Weblogic)
  * CMS y Entornos (6 items: Joomla, WordPress, RapidWeaver, Servoy, WebRatio, Magnolia)
  * Herramientas de Diseño (4 items: Corel, Photoshop, Illustrator, GIMP)

- Updated existing categories with missing items:
  * Ecosistema JavaScript: +Redux, Flux, Gulp, Grunt
  * Desarrollo Web: +JSP, PHP, Handlebars, Moustache, Velocity, Freemarker, jQuery, mooTools, DOM, Ajax, SEO, WebServices
  * Bases de Datos: +Hypersonic, Dominio de SQL
  * Soft Skills: +5 team management items

- Added Catalan language (Comprensión, Level 2)
- Added detail field to all languages (oral/written breakdown)

- Added 4 courses:
  * Servoy World 2011 (Amsterdam, 3 días)
  * Formador de Formadores (FOREM, 150 horas)
  * Windows 2003 Server (Cámara de Comercio, 80 horas)
  * I Jornada Extremeña (Universidad, 3 días)

- Added 8 references:
  * Recommendation letters, portfolios, profiles, CVs

- Fixed driver's license: Tipo C → Tipo B

## Presentation Layer (Frontend)

**Template Updates** (templates/cv-content.html, templates/index.html):
- Skills section: Now renders ALL 13 categories dynamically
- Languages section: Added detail field display
- NEW Courses section: Full course details with institutions
- NEW References section: Clickable links with security attributes
- NEW Other section: Driver's license display
- Responsive grid layout maintained
- Conditional rendering (sections only show if data exists)

**Styling** (static/css/main.css):
- Added .course-item, .course-desc styles
- Added .reference-item, .ref-type styles
- Added .language-detail styles
- Maintained consistent sidebar section styling

## Impact

**Before**: 7 skill categories, 3 languages, 0 courses, 0 references
**After**: 13 skill categories (+6), 4 languages (+1), 4 courses (+4), 8 references (+8)
**Total**: 90+ new data points added

Sidebar now matches original React CV feature-for-feature.
2025-11-04 13:34:44 +00:00
juanatsap 66300c7d30 feat: add smooth animations for CV version toggle
- Add fadeInGrow animation: elements smoothly grow and fade in
- Add fadeOutShrink animation: elements smoothly shrink and fade out
- Apply animations to .long-only and .short-desc elements
- 0.3s duration with ease-in-out timing for smooth transitions
- ScaleY transform creates natural vertical grow/shrink effect
- Overflow hidden prevents layout jumps during animation

When switching between short/long CV versions:
- Content now smoothly transitions instead of instantly appearing
- Text grows when switching to long version
- Text shrinks when switching to short version
- Improved user experience with visual feedback
2025-10-31 17:41:45 +00:00
juanatsap 06df4ca240 feat: pixel-perfect styling refinement to match original design
Based on comprehensive visual audit comparing old React CV with new Go+HTMX implementation.

## Critical Fixes (Priority 1)
- Header badges: font-size 0.75rem → 0.9em, weight 600 → normal, color white → #ccc
- Badge separator: color rgba(255,255,255,0.6) → #ccc, padding 0.25rem → 15px
- Header container: padding 0.75rem 2rem → 10px 20px, gap 0.5rem → 0
- Sidebar: background #d9d9d9 → #d1d4d2 (grayish-green tint)

## Typography Consistency (Priority 2)
- Converted all px values to em units for better scaling
- Sidebar title: 20.8px → 1.3em
- Sidebar content: 14.4px → 0.9em
- Section title: 20.8px → 1.3em
- CV name: 35.2px → 2.2em
- Summary text: 14.4px → 0.9em

## Spacing Refinements (Priority 3)
- Section title: margin-bottom 8px → margin 10px 0, removed padding
- Badge separator: added position relative, top -1px for alignment

## Verification
- All changes verified with Playwright automated tests
- Full visual regression testing completed
- 6/6 tests passed in 13.2s
- Screenshots and measurements documented

See PIXEL-PERFECT-STYLING-FIXES.md for complete change log.
See VISUAL-VERIFICATION-REPORT.md for test results.
2025-10-31 16:03:47 +00:00
juanatsap 9b22117506 style: change header background from blue-gray to dark gray
- Update .cv-title-badges-header background color
- Change from #2c3e50 (dark blue-gray) to #303030 (dark gray)
- Provides a more neutral, professional appearance
2025-10-31 13:18:53 +00:00
juanatsap 0f1426a2d0 fix: auto-stash local changes before git pull in deployment
- Check for uncommitted changes (both staged and unstaged)
- Auto-stash with timestamp before pulling
- Prevents "Your local changes would be overwritten" errors
- Commented-out option to reapply stash after pull if needed

Server changes are preserved in git stash for recovery if needed.

Fixes: "error: Your local changes to the following files would be overwritten by merge"
2025-10-31 12:43:35 +00:00
juanatsap 89ef1350c5 fix: fix entire repository permissions, not just .git
- Change from fixing only .git/ to fixing entire repository (.)
- Prevents "unable to unlink" errors on workflow files
- Ensures deployment user has write access to all files
- Run unconditionally as it's fast and prevents all permission issues

Fixes: "error: unable to unlink old '.github/workflows/deploy.yml': Permission denied"
2025-10-31 12:41:38 +00:00
juanatsap 7999af9107 fix: auto-fix git permissions before pull in deployment
- Check if .git/FETCH_HEAD has write permission issues
- Auto-fix with sudo chown if needed
- Prevents "Permission denied" errors during git pull
- Ensures deployment user owns .git directory

Fixes deployment error: "error: cannot open '.git/FETCH_HEAD': Permission denied"
2025-10-31 12:40:08 +00:00
juanatsap 97ab363071 refactor: use appleboy/ssh-action for reliable SSH deployment
Replace manual SSH setup with proven appleboy/ssh-action@v1.0.3
- Automatically handles SSH key formatting and permissions
- No manual key validation or cleanup needed
- Consistent with working commando-web deployment
- Pass environment variables via 'envs' parameter
- Simplifies both deploy and verify steps

This eliminates "error in libcrypto" and permission issues.
2025-10-31 12:27:46 +00:00
juanatsap cdb6cbd2b0 fix: improve SSH key handling with validation and debugging
- Use printf instead of echo for proper SSH key formatting
- Add ssh-keygen validation before attempting connection
- Show first 50 chars of key on validation failure for debugging
- Maintains proper line endings and key structure

This will help identify if the SSH_PRIVATE_KEY secret is malformed.
2025-10-31 12:26:37 +00:00
juanatsap eb920baace fix: resolve SSH key and errcheck linter issues
Deploy workflow fixes:
- Add tr -d '\r' to strip carriage returns from SSH key
- Set chmod 700 on .ssh directory for proper permissions
- Suppress ssh-keyscan stderr output

Handler code fixes:
- Check json.Encode() return values in errors.go (2 locations)
- Check json.Encode() return value in health.go
- Add log import to health.go
- Log encoding errors instead of silently ignoring

Resolves:
- "Load key: error in libcrypto" SSH deployment error
- 3 errcheck linter warnings
2025-10-31 12:23:48 +00:00
juanatsap b167378526 fix: update workflows for Go 1.25.1 and SSH deployment
Test workflow:
- Upgrade golangci-lint-action from v6 to v7
- v7 is required for golangci-lint v2.x support
- Remove skip-cache as v7 handles caching better

Deploy workflow:
- Fix SSH heredoc to use unquoted ENDSSH delimiter
- Allows environment variables to expand in remote session
- Fixes "Permission denied" by properly passing REPO_PATH and SERVICE_NAME
2025-10-31 12:20:42 +00:00
juanatsap c88d0f0f45 fix: use golangci-lint v2.6.0 for Go 1.25.1 compatibility
- Update golangci-lint from v1.65.1 to v2.6.0
- v2.6.0 is built with Go 1.25 and supports Go 1.25.1
- Resolves 404 error from non-existent v1.65.1 release
2025-10-31 12:13:54 +00:00
juanatsap 7fd5090d65 chore: update Go version requirements in CI workflow
- Update matrix Go version from 1.25 to 1.25.1 to match go.mod
- Specify golangci-lint v1.65.1 explicitly (supports Go 1.25+)
- Add skip-cache to force fresh download and avoid cached v1.64.8
2025-10-31 12:08:05 +00:00
juanatsap cccae3b408 fix: upgrade golangci-lint action to v6 for Go 1.25.1 support
- Update golangci-lint-action from v3 to v6
- Remove redundant cache skip flags (v6 has better defaults)
- Fixes compatibility with Go 1.25.1 specified in go.mod
2025-10-31 12:02:11 +00:00
juanatsap 6d154331d2 chore: update Go version requirements in CI workflow
- Removed Go 1.24 from test matrix to only run tests against Go 1.25
- Simplified CI configuration by focusing on latest stable Go version
2025-10-31 11:59:34 +00:00
juanatsap 73155e3900 chore: add manual deployment trigger to GitHub workflow
- Added workflow_dispatch trigger to enable manual deployments from GitHub Actions UI
- Maintains existing automated deployments on main branch pushes
- Improves operational flexibility by allowing ad-hoc deployments when needed
2025-10-31 11:54:26 +00:00
root e5e09926f1 Fix deployment workflow defaults for CV project
- Set correct SERVICE_NAME default: cv
- Set correct REPO_PATH default: /home/txeo/Git/yo/cv
- Workflow now pulls code and restarts service correctly
2025-10-31 11:20:49 +00:00
juanatsap a5804936ba from mac 2025-10-31 11:06:38 +00:00
root 5d2f763d2e Update systemd service to use go run with single log file
- Use 'go run .' instead of compiled binary
- Single unified log file at /var/log/cv.log
- Simpler configuration matching project philosophy
2025-10-30 13:05:36 +00:00
root 5e38292d2e Add GitHub Actions deployment workflow
- Add deployment workflow with test, build, and deploy jobs
- Add testing workflow for PRs
- Add deployment scripts (deploy, healthcheck, rollback)
- Add systemd service configuration
- Update Makefile with CI/CD targets
- Add comprehensive deployment documentation
2025-10-30 12:19:57 +00:00
juanatsap ee354d1d35 refactor: standardize port to 1999 across all files
- Updated default port from 8080 to 1999 in config, Docker, and documentation files
- Modified example URLs and test commands to use new port
- Ensured consistent port references in environment configs and deployment examples
- Updated health check endpoints in Docker and testing scripts

The port change aligns with LIV Golf port allocation standards for staging environments (5000-9999 range).
2025-10-29 14:04:24 +00:00
juanatsap 4ec966591d Implement A4 page simulation with exact dimensions
- Update main.css with A4 dimensions (210mm × 297mm)
- Add CSS variables for consistent sizing
- Implement page-break-inside: avoid for sections
- Optimize font sizes for A4 layout
- Update print.css for perfect PDF export
- Responsive: switches to 100% width on mobile
2025-10-27 22:39:29 +00:00
juanatsap cd5d5cff02 Add photo, company logos, and short/long CV toggle
Features:
- Profile photo display (right side, inline with header)
- Company logos for all major employers (8 logos downloaded)
- Short/Long CV toggle for condensed/detailed view
- Short descriptions (1-2 lines) for quick overview
- Experience separators with border lines

Photo Implementation:
- Circular photo (120px) on right side of header
- Placeholder SVG if photo not uploaded
- Instructions in ADDING-YOUR-PHOTO.md
- Photo stored in static/images/profile/

Company Logos:
- Olympic Broadcasting Services, AENA, SAP, Gigya
- Accenture, Everis, Indra, Megabanner
- 40px logos displayed inline with experience
- Auto-hide if logo missing
- Mobile: logos hidden for cleaner layout

Short/Long Toggle:
- Toggle buttons in action bar (Corto/Largo)
- Short mode: shows shortDescription only
- Long mode: shows full responsibilities + technologies
- CSS-based show/hide (no page reload)
- Defaults to short view

Layout Updates:
- Header: text left, photo right, inline alignment
- Experience items: separated by border lines
- Responsive: photo centers on mobile
- Print-optimized: smaller photo in PDF

Data Updates:
- Added shortDescription field to Experience struct
- 13 short descriptions for all positions (EN/ES)
- Added companyLogo field with filename mapping
- JSON updated with all new fields

Tech:
- Pure CSS toggle (no HTMX needed)
- Vanilla JavaScript for button states
- Maintains bilingual support (ES/EN)
2025-10-27 22:32:32 +00:00
juanatsap dab68f34f2 Initial commit: Go + HTMX CV Site
- Minimal, professional CV design with paper-on-gray layout
- Bilingual support (Spanish/English) with HTMX language switching
- JSON-based content management (cv-en.json, cv-es.json)
- Print-optimized CSS for PDF export
- Responsive design for all devices
- Go backend with stdlib net/http
- Clean, maintainable codebase

Features:
- 18+ years professional experience
- SAP CDC expertise
- Complete project history
- Education, certifications, awards
- Multi-language support

Tech stack: Go, HTMX, vanilla CSS
2025-10-20 08:54:21 +01:00