**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.
- 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.
- 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.
- 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
- 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.
**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.
- 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
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.
- 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.
- 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
- Update .cv-title-badges-header background color
- Change from #2c3e50 (dark blue-gray) to #303030 (dark gray)
- Provides a more neutral, professional appearance
- 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"
- 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"
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.
- 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.
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
- 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
- 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
- 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
- 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).
- 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
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)
- 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