Commit Graph

171 Commits

Author SHA1 Message Date
juanatsap 04fdae2347 feat: add collapsible accordion for sidebars on mobile
PROBLEM:
- Left and right sidebars occupy too much space on mobile
- User wants curriculum (main content) prioritized on mobile
- Sidebars should be collapsed by default, expand only on user interaction

SOLUTION:
HTML Changes (cv-content.html):
- Wrapped each sidebar in accordion structure
- Added .sidebar-accordion-header with brain icon, title, and chevron
  * Left sidebar: "Technical Skills" / "Competencias Técnicas"
  * Right sidebar: "More Skills" / "Más Competencias"
- Added .sidebar-accordion-content wrapper around sidebar sections
- Added onclick="toggleSidebar(this)" handler

CSS Changes (main.css):
Desktop (default):
- .sidebar-accordion-header: display: none (hidden on desktop)
- .sidebar-accordion-content: always visible (no restrictions)

Mobile @ 900px:
- .sidebar-accordion-header: display: flex, styled as clickable bar
  * Padding: 1rem 1.5rem
  * Background: var(--sidebar-gray) with hover effects
  * Font: 700 weight, 1.1rem size
  * Chevron rotates 180deg when active
- .sidebar-accordion-content: collapsed by default
  * max-height: 0 (collapsed)
  * max-height: 5000px when .active (expanded)
  * Smooth transitions: 0.3s ease-out (close) / 0.5s ease-in (open)
  * Padding: 0 when closed, 1.5rem when open
- .cv-sidebar: padding: 0 (accordion header handles padding)

JavaScript Changes (index.html):
- Added toggleSidebar(header) function
  * Toggles .active class on header and content
  * Smooth expand/collapse animation via CSS max-height transition

DATA Changes (cv-en.json, cv-es.json):
- Updated summary with more professional, experience-focused description
- Emphasizes 18+ years experience, international clients, practical solutions

BEHAVIOR:
- Desktop: Sidebars always visible, no accordion headers
- Mobile: Sidebars collapsed by default showing only header bar
- Click header: Expands sidebar with smooth animation
- Click again: Collapses sidebar
- Main content prioritized and always visible
- Each sidebar toggles independently
2025-11-10 18:16:54 +00:00
juanatsap e211f78c64 fix: comprehensive mobile responsive fixes for default theme
PROBLEM:
- Left and right sidebars overlapping main content on mobile
- Headers and footers with incorrect padding/font sizes
- Page margins too large for mobile screens
- Badge sizes not optimized for mobile

SOLUTION @ 900px breakpoint:
- Changed page-content from CSS Grid to Flexbox for proper stacking
- Set all sections to width: 100% and position: static
- Added proper flexbox ordering (sidebar-left → header → main → sidebar-right → footer)
- Reduced cv-page margin to 0.5rem, removed border and box-shadow
- Reduced padding: sidebars and main content to 2rem 1.5rem
- Fixed title badges header: 0.75rem 1rem padding, 0.85rem font
- Fixed badges: 0.75rem font, 0.25rem 0.5rem padding
- Fixed footer: 1.5rem 1rem padding, 0.9rem label, 1.2rem value

SOLUTION @ 768px breakpoint:
- Further reduced margins and padding for small screens
- cv-page margin: 0.25rem
- Sidebar/main padding: 1.5rem 1rem
- Header padding: 0.5rem 0.75rem
- Badge font: 0.7rem
- Footer fonts: 0.85rem label, 1.1rem value, 1.2rem value bold
- Sidebar title: 1.1rem, content: 0.85rem
- Section titles: 1.1rem
- Added text-align: left for right sidebar on mobile

TECHNICAL CHANGES:
- Replaced grid-template-columns with display: flex + flex-direction: column
- Unset grid-column and grid-row properties on mobile
- Used !important flags to override desktop positioning
- Ensured all sections render in proper flow order
2025-11-10 18:00:41 +00:00
juanatsap 49946acfcf feat: enhance info modal with inline photo and updated GitHub link
- Update modal title from "CV 2025 - {JAMR}" to "CV 2025 JAMR -" with inline photo
- Add .info-modal-photo CSS with flexbox layout for proper photo alignment
- Change button text from "View Source Code" to "View Project in Github" (EN/ES)
- Photo styled with green border and shadow matching modal theme
2025-11-10 17:37:17 +00:00
juanatsap 73b402173c fix: check error return value in ExportPDF handler
- Add proper error handling for w.Write() call in ExportPDF function
- Fixes golangci-lint errcheck issue at cv.go:285
- Log error if response write fails
2025-11-10 17:26:05 +00:00
root a5d369625c fix: clean untracked files before pull in deployment workflow 2025-11-10 17:22:50 +00:00
juanatsap 69ca8b77be feat: update CV with live project badges and PDF download links
- Changed project status badges from "CURRENT" to "LIVE" with wifi icon for active projects
- Updated CV reference links to direct PDF downloads instead of modal popups
- Marked SAP CDC Demo and Client Projects as currently live/maintained
2025-11-10 17:03:00 +00:00
juanatsap fc0eb8443a feat: update references section and fix experience logos in print
References section improvements:
- Remove TwenTIC recommendation letter
- Add Megabanner recommendations with author attribution (David Amorós)
- Update Presentation Letter URL to Domestika profile
- Update Chronological CV link to trigger PDF download modal
- Add 'action' field to Reference struct for custom behaviors

Print layout fixes:
- Show experience company logos in print view (40×40px)
- Remove print media query that was hiding .company-logo elements
- Maintain consistency with other logo types (courses, projects, awards)

Technical changes:
- Add Action field to Reference model with omitempty JSON tag
- Implement conditional rendering for downloadPDF action in template
- Links with action="downloadPDF" now call openPdfModal() function
2025-11-10 16:34:30 +00:00
juanatsap 7e2d31f441 chore: update profile DNI image 2025-11-10 16:05:36 +00:00
juanatsap d9bea8a923 feat: print-friendly improvements and PDF download modal
Print CSS enhancements:
- Show ALL icons, logos, and badges by default in print (16px section icons, 40px company/project logos)
- Improved header layout with bigger photo (110x147px, 3:4 ratio) positioned on right
- Name and years right-aligned with justified intro text below
- Maintained flex layout for experience/project items to show logos side-by-side
- Compact badge sizing (7pt font) for print

PDF Download UX:
- Replaced direct download links with modal popup
- Shows work-in-progress message directing users to Print Friendly feature
- Bilingual modal (English/Spanish) matching info modal styling
- Modal closable via backdrop click, X button, or Escape key
- Prevents accidental downloads of outdated PDFs

UI improvements:
- Enhanced icon toggle contrast and visibility
- Consistent modal behavior across info and PDF modals
2025-11-10 16:03:29 +00:00
juanatsap fc700f1f0e feat: optimize mobile layout with unified design system
Comprehensive mobile optimization (≤768px) for improved consistency and readability:

- Center profile photo between name and intro text on mobile
- Unify all logo/icon sizes to 60×60px for visual consistency
- Standardize spacing across experience, courses, projects, and awards
- Reduce font sizes proportionally for better mobile readability
- Remove justified text alignment (except intro/skills) to prevent awkward spacing
- Apply consistent 1rem gaps and 1.5rem padding throughout
- Optimize sidebar items with reduced margins and font sizes

Technical improvements:
- Add comprehensive mobile breakpoint rules at 768px
- Implement flexible photo positioning (absolute on desktop, static on mobile)
- Ensure uniform typography scale across all content types
2025-11-10 15:45:55 +00:00
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
juanatsap eda746407e feat: add responsive design for medium screens (901-1023px)
- Implemented collapsible UI elements with hover expansion for language selector, action buttons, and sidebar content
- Reduced global font sizes and adjusted spacing to optimize layout for medium-width displays
- Added smooth transitions for interactive elements to enhance user experience
2025-11-10 10:24:34 +00:00
juanatsap fb7c86391b feat: update LinkedIn course thumbnail image 2025-11-10 08:58:33 +00:00
juanatsap 1a5ba16121 fix: add visible animation to hamburger menu
Changes to make the menu animation clearly visible:
- Added opacity transition (0 → 1) with 0.3s ease
- Changed max-height to fixed 800px for consistent timing
- Used cubic-bezier(0.4, 0, 0.2, 1) easing for natural feel
- Increased transition duration to 0.5s
- Combined max-height and opacity creates smooth expand + fade effect

The menu now smoothly grows from top-to-bottom with a visible fade-in,
making the animation much more apparent when hovering the hamburger button.
2025-11-09 21:15:38 +00:00
juanatsap 26e6ec14c0 fix: make hamburger menu animation smooth
The menu was appearing instantly without animation because the overflow
property was changing from 'hidden' to 'auto' on hover, which disrupted
the max-height transition.

Fix: Keep overflow-y: auto consistent at all times. This allows the
max-height animation to work smoothly from 0 to calc(100vh - 50px),
creating a smooth top-to-bottom expansion effect.
2025-11-09 21:14:04 +00:00
juanatsap 91a73e27fb feat: update professional summary with modern tech stack
English summary:
- Remove outdated: J2EE, PHP, generic descriptions
- Add modern stack: Go, Node.js, React, HTMX
- Add infrastructure: VPS, CI/CD pipelines
- Highlight: AI methodologies in software engineering
- Emphasize: 40+ national and international clients
- Maintain: Frontend expertise, problem-solving, team collaboration

Spanish summary:
- Eliminar obsoleto: J2EE, PHP, descripciones genéricas
- Añadir stack moderno: Go, Node.js, React, HTMX
- Añadir infraestructura: VPS, pipelines CI/CD
- Destacar: Metodologías de IA en ingeniería de software
- Enfatizar: Más de 40 clientes nacionales e internacionales
- Mantener: Experiencia frontend, resolución de problemas, colaboración

Both summaries modernized to reflect current expertise and AI-assisted development practices.
2025-11-09 21:12:26 +00:00
juanatsap b6e7f705e0 feat: improve menu animations to grow top-to-bottom
Main menu changes:
- Changed from translateX (left-to-right slide) to max-height animation
- Menu now grows from top to bottom with smooth transition
- Transition time: 0.4s ease-in-out for natural feel

Submenu changes:
- Removed display:none which prevented animation
- Now uses only max-height and opacity transitions
- Submenu smoothly expands downward with fade-in effect
- Transition time: 0.4s for height, 0.3s for opacity

Both animations now provide better visual feedback and follow the natural
top-to-bottom reading pattern.
2025-11-09 21:06:52 +00:00
juanatsap 13c59c3699 refactor: separate UI translations from CV data
- Created separate ui-en.json and ui-es.json files for UI strings
- Removed 'ui' section from cv-en.json and cv-es.json
- Added LoadUI() function to load UI translations separately
- Updated handlers to load UI data independently from CV data
- Updated template to use .UI instead of .CV.UI

This separation follows proper concerns:
- CV JSON files contain only professional CV content
- UI JSON files contain only application interface strings
- Each can be updated independently without affecting the other
2025-11-09 21:03:39 +00:00
juanatsap de0c443764 feat: add bilingual support to info modal
- Added 'ui' section to cv-en.json and cv-es.json with modal translations
- Updated Go models to include UI, InfoModal, and TechStack structs
- Modified template to use JSON data instead of inline if/else statements
- Used template.HTML for Description field to allow HTML rendering
- Modal now fully supports English and Spanish translations

Translations include:
- Modal title
- Description text
- Tech stack labels (HTML5 Semántico vs Semantic HTML5, etc.)
- View source button text
2025-11-09 20:59:10 +00:00
juanatsap 1fc30f6525 docs: fix all documentation links in README to point to doc/ folder
- Update all DEPLOYMENT.md links → doc/DEPLOYMENT.md
- Update all CUSTOMIZATION.md links → doc/CUSTOMIZATION.md
- Update all API.md links → doc/API.md
- Update all SECURITY.md links → doc/SECURITY.md
- Update all PRIVACY.md links → doc/PRIVACY.md
- Add PRIVACY.md to Documentation section
- All 11 references updated to reflect new doc/ folder structure
2025-11-09 20:51:45 +00:00
juanatsap 0e52d625a1 refactor: remove API documentation files and add binary to gitignore
- Removed redundant API documentation (API.md and API-QUICK-REFERENCE.md)
- Added cv-app binary to gitignore to prevent committing build artifacts
2025-11-09 20:48:24 +00:00
juanatsap 3f573697be style: match back-to-top button opacity to info button
Both buttons now have 20% opacity (0.2) until hovered, providing consistent UI behavior.
2025-11-09 20:27:36 +00:00
juanatsap fd0251b21f Integrate 'by myself' into description and improve spacing
Changes:
- Removed third line subtitle 'Built by myself'
- Added 'by myself' directly into the description text
- English: 'was built by myself with'
- Spanish: 'fue construido por mí mismo con'
- Increased spacing between title and CV title (1rem → 1.5rem)
- Removed unused .info-modal-subtitle CSS
- Cleaner, more natural text flow
2025-11-09 20:24:34 +00:00
juanatsap 7ad338f3d4 Reorganize info modal header with personal touch
Changes:
- Switched order: 'About this CV' now first, then CV title
- Changed format to 'CV 2025 - {JAMR}' (braces only around JAMR)
- Added subtitle 'Built by myself' / 'Construido por mí mismo'
- Adjusted spacing and styling for new hierarchy
- Subtitle is italic, gray, and smaller font size
- More personal and authentic presentation
2025-11-09 20:23:02 +00:00
juanatsap 3b626194c2 Add curly braces around CV title for code aesthetic
- Changed from 'CV 2025 - JAMR' to '{CV 2025 - JAMR}'
- Emphasizes that this CV is about code
- Matches the coding/developer theme of the modal
2025-11-09 20:20:41 +00:00
juanatsap f2d8e9e71d Center tech stack items in info modal
- Added justify-content: center to .info-tech-item
- Icons and text now centered within each tech item box
- Better visual alignment for Go + Hono, HTMX, HTML5, and CSS3 items
2025-11-09 20:19:37 +00:00
juanatsap 1be40912f7 Update info modal header design
Changes per user request:
- Replaced bouncing code icon with 'CV {YEAR} - JAMR' text (dynamic year)
- Made 'About this CV' title dark (#333) instead of green gradient
- Removed floating animation (@keyframes float)
- CV title styled in green with bold weight and letter spacing
- Cleaner, more professional header appearance
2025-11-09 20:18:08 +00:00
juanatsap b515842e3a Fix CSS selector to target span inside menu-item-action
- Changed from .menu-item-action to .menu-item-action span
- Correctly applies width and text-align to the span element
- More specific targeting as intended by user
2025-11-09 20:06:02 +00:00
juanatsap 431a6aae7a Convert menu to hover-triggered behavior
- Hamburger menu now opens on hover instead of click
- Menu stays open while hovering over button OR menu
- Added 100ms delay to prevent accidental closes
- Submenu opens on pure CSS :hover (no JavaScript)
- Smooth transitions for both main menu and submenu
- Proper ARIA attributes for accessibility
- Legacy click functions kept for backward compatibility
- Menu closes when mouse leaves both button and menu area
2025-11-09 20:05:24 +00:00
juanatsap 4c7086000b Add centered styling for Expand/Collapse All menu items
- Created semantic class 'menu-item-action' for action controls
- Applied width: calc(100% - 65px) to make items slightly narrower
- Applied text-align: center to center content
- Affects only Expand All and Collapse All menu items
- Preserves all existing functionality and base menu-item styles
- Makes action items visually distinct from navigation items
2025-11-09 19:55:01 +00:00
juanatsap 94bb67a429 Set info button to 50% opacity until hover
- Changed default opacity from 0.9 to 0.5
- Button becomes fully opaque on hover
- Makes button less intrusive while still discoverable
2025-11-09 19:36:38 +00:00
juanatsap a6d439b5ed docs: add comprehensive privacy policy and analytics documentation
New documentation:
- PRIVACY.md: Complete privacy policy covering Matomo analytics, cookies, and data handling
- Clear opt-out instructions and developer guidelines

README.md updates:
- Add Privacy & Analytics section with clear disclosure
- List what's tracked vs. what's NOT tracked
- Add "Privacy-Friendly Analytics" to features list
- Add critical configuration requirements for template users
- Crystal clear instructions: MUST change Matomo Site ID and server URL
- OR remove analytics entirely if not needed

CUSTOMIZATION.md updates:
- Add comprehensive "Analytics Configuration" section (120+ lines)
- Option 1: Configure your own Matomo instance (step-by-step)
- Option 2: Remove Matomo completely (clean removal steps)
- Option 3: Use alternative analytics providers (Google Analytics, Plausible, etc.)
- Include exact file locations and line numbers for changes
- Privacy compliance checklist (GDPR, CCPA, cookie banners)
- Testing instructions to verify analytics configuration

Key highlights for template users:
- MUST change: Site ID (line 644), Server URL (line 642), CSP headers
- MUST update: PRIVACY.md with own contact info
- Complete removal guide if analytics not wanted
- Legal compliance reminders

All documentation is crystal clear with exact locations, code examples, and warnings.
2025-11-09 19:33:20 +00:00
juanatsap 4b5c0df75d Add stunning info button with glassmorphism modal
Features:
- Info button fixed on bottom-left (matches back-to-top on bottom-right)
- Modern glassmorphism modal with backdrop blur
- Smooth animations: scale + bounce effect on open
- Floating code icon animation
- Gradient text for title
- Tech stack showcase with hover effects (Go, HTMX, HTML5, CSS3)
- Beautiful GitHub link button with gradient and hover effects
- Multiple close methods: X button, click backdrop, Escape key
- Fully responsive for mobile devices
- No external libraries - pure CSS3 magic

Design highlights:
- Backdrop blur for depth
- White glass-effect card with subtle gradient
- Green accent color (#27ae60) throughout
- Smooth cubic-bezier transitions
- Rotating close button on hover
- Tech items lift on hover with shadows
- GitHub button with gradient that reverses on hover

Showcases modern web development skills with cutting-edge CSS
2025-11-09 19:30:05 +00:00
juanatsap 523e882286 Store language preference in localStorage for clean URL persistence
Changes:
- Save selected language to localStorage when user switches languages
- On page load with clean URL: check localStorage and load saved language preference
- If no localStorage preference exists, default to server's language choice
- Update language button active states based on localStorage preference
- Keep URLs clean (no lang parameter added) while maintaining language choice
- If URL has lang parameter, save it to localStorage for consistency

How it works:
1. Visit / (clean) → Shows English (default)
2. Switch to Spanish → Saves 'es' to localStorage, loads Spanish content
3. Click logo (clean URL /) → Page loads, checks localStorage, loads Spanish
4. Language persists across clean URL navigations via localStorage

This solves: Clean URLs + Language persistence
2025-11-09 15:31:03 +00:00
juanatsap 624b6acac8 Fix language switcher to maintain clean URLs and dynamic logo links
Changes:
- Logo and title links now start with clean URLs (href="/")
- Track if URL originally had lang parameter (urlHadLangParam variable)
- If URL had lang param: update URL when switching languages, update logo/title links dynamically
- If URL was clean: keep it clean, don't add lang to URL, keep logo/title links clean
- Logo/title links now update dynamically when language changes (no more stale language issue)
- Initialize logo/title links properly on page load based on URL state

This fixes both issues:
1. Logo clicking with wrong language after language switch
2. Clean URLs stay clean unless explicitly using ?lang= parameter
2025-11-09 15:10:13 +00:00
juanatsap 69d9dcad79 Move language switcher next to site title
- Repositioned language selector from center controls to left side after title
- Updated CSS: reduced padding-left from 3rem to 1rem for better spacing
- Center section now contains only: Length, Logos, and View toggles
- Left section now has: Logo icon + Menu + Title + Language switcher
2025-11-09 15:06:38 +00:00
juanatsap b6dbd6af75 Make site logo and title clickable links to homepage
- Wrapped site icon and title text in anchor tags linking to homepage
- Added hover effect (opacity: 0.8) for better UX
- Maintained current language when navigating to home
- Added aria-label for accessibility
- No text decoration or color changes on links
2025-11-09 15:04:42 +00:00
juanatsap 857162385f feat: add Matomo analytics tracking
Tracking features:
- Matomo analytics integration (site ID: 4)
- Initial pageview tracking on load
- HTMX language change tracking as virtual pageviews
- Link tracking enabled for outbound clicks

Security updates:
- Update CSP to allow matomo.drolo.club for script-src and connect-src
- Matomo script loaded asynchronously

Implementation:
- Added Matomo tracking code before </body>
- Track HTMX navigation events (language changes)
- Preserve privacy with self-hosted Matomo instance
2025-11-09 15:02:31 +00:00
juanatsap 6da7da0c49 Add missing badge rendering for experience items and projects
- Added CURRENT badge for current positions (green)
- Added EXPIRED badge for expired positions (red)
- Added MAINTAINED BY badge for projects maintained by third parties (blue)
- Badges support both English and Spanish translations
- Fixes issue where badge data existed in JSON but wasn't being rendered
2025-11-09 14:41:03 +00:00
juanatsap fbb8d2fa25 chore: add issue template config to redirect to CONTRIBUTING.md 2025-11-09 14:25:57 +00:00
juanatsap d6036ea11a docs: clarify template usage is welcome in README 2025-11-09 14:22:37 +00:00
juanatsap ea6ccf9cdd feat: add origin validation and rate limiting for PDF endpoint
Security enhancements:
- Implement origin/referer validation middleware
- Add rate limiting (3 requests/min per IP)
- Default to production domain (juan.andres.morenorub.io)
- Verify all protection mechanisms working correctly

Documentation updates:
- Update README to reflect personal portfolio nature
- Remove template encouragement from README
- Add verification status to API-PROTECTION.md
- Document ALLOWED_ORIGINS configuration in .env.example

Cleanup:
- Remove templates.backup/ folder
- Remove old test screenshots
2025-11-09 14:13:22 +00:00
juanatsap 24b2401519 feat: add origin validation and rate limiting for PDF endpoint
- Implemented origin checker middleware to prevent external sites from hotlinking the PDF generation endpoint
- Added rate limiter (3 requests per minute per IP) to protect resource-intensive PDF operations
- Configured allowed origins via ALLOWED_ORIGINS environment variable with localhost defaults for development
2025-11-09 14:00:10 +00:00
juanatsap 5e132e7ec7 docs: finalize documentation as personal portfolio project
- Add clear disclaimers: personal site, not a template
- Update CONTRIBUTING.md: not seeking contributions
- Remove all Docker files and references (11 files)
- Rewrite DEPLOYMENT.md without Docker (VPS/cloud focus)
- Add comprehensive API documentation with verified endpoints
- Add complete CUSTOMIZATION guide
- Add project status sections to all major docs
- Clarify MIT license but personal use intent

Created documentation files:
- API.md (70KB) - Complete API reference with live testing
- API-QUICK-REFERENCE.md - Quick command reference
- DEPLOYMENT.md (45KB) - VPS, cloud, manual deployment (no Docker)
- CUSTOMIZATION.md (38KB) - Complete customization guide
- PROJECT-DOCUMENTATION-SUMMARY.md - Complete project overview

This is my personal CV site. While code is public (MIT),
it's designed for my personal use, not as a template.
2025-11-09 13:54:31 +00:00
juanatsap 31dae9fa19 Add collapsible sections, restructure menu, and refine sidebar layouts
- Wrapped all CV sections and sidebar sections in <details> tags for collapsibility
- Added Expand All/Collapse All menu options with CV Sections submenu
- Implemented smooth CSS animations for section expansion/collapse using max-height transitions
- Fixed menu item alignment issues (removed extra padding)
- Added dash between company name and duration in experience section
- Moved SAP Technologies and AI-Assisted Development to bottom of right sidebar
- Reordered JavaScript Ecosystem above Go Ecosystem in left sidebar
- Implemented different layouts for left vs right sidebars:
  - Left sidebar: title left-aligned, triangle on right
  - Right sidebar: title right-aligned, triangle on left
- Adjusted sidebar spacing for better visual hierarchy when sections are open/closed
2025-11-09 13:43:29 +00:00
juanatsap 2ce13481d0 feat: enhance CV with project title links, experience durations, certifications, and improved navigation
## Project Title Links
- Add projectName and projectDesc fields to Project struct
- Split project titles to make only project name clickable
- Update template logic for conditional title rendering
- Apply changes to both English and Spanish versions

## Experience Duration Display
- Restore duration calculation display in experience section
- Move duration from date line to after company name
- Style duration in light gray (#999) for subtle appearance
- Calculate durations dynamically (e.g., "4 years 10 months")

## Certifications Section Enhancement
- Add Codecademy Certifications (2022-2024) with AI Transformers and React courses
- Add LinkedIn Learning Certifications (2019-2020) with 5 professional courses
- Implement colored icon system with brand colors (purple, cyan, green, etc.)
- Use responsibilities format matching Third Party Contributions layout
- Reorder courses chronologically (most recent first)

## localStorage Improvements
- Save CV length preference (short/long)
- Save logos visibility preference (show/hide)
- Save theme preference (default/clean)
- Restore all preferences on page load

## Navigation UX Enhancements
- Fix scroll positioning to show sections below action bar
- Add keepHeaderVisible flag to maintain header visibility after navigation
- Ensure smooth scrolling with proper offset calculations
- Reset flag on scroll up to restore normal hide/show behavior

## Files Modified
- internal/models/cv.go: Add ProjectName, ProjectDesc fields
- templates/cv-content.html: Update project and experience rendering
- static/css/main.css: Add duration-text styling
- templates/index.html: Enhance scroll behavior and localStorage
- data/cv-*.json: Add certifications, split project titles, reorder courses
- static/images/courses/: Add codecademy.png, linkedin.png
2025-11-09 11:42:52 +00:00
juanatsap e64e63de98 style: increase spacing between subtitle and responsibilities list
Increase margin-top of .responsibilities from 0.5rem to 1rem to add more breathing room between the date/location subtitle and the list of responsibilities in Experience and Projects sections.
2025-11-09 04:42:00 +00:00
juanatsap b83f8e0801 fixed icons 2025-11-09 04:34:40 +00:00
juanatsap ed5a324f44 style: apply grid texture to original gray background
Changed from dark charcoal to original gray (var(--bg-gray)):
- Base color: rgb(82, 86, 89) - original gray background
- Large grid: 50px × 50px with rgba(0,0,0,0.05) lines
- Fine grid: 10px × 10px with rgba(0,0,0,0.02) lines
- Semi-transparent black lines create subtle texture on gray base

Maintains familiar gray appearance with added subtle grid pattern.
2025-11-09 04:33:42 +00:00
juanatsap a336f0f131 style: replace gradient with dark circuit board grid background
Replace moonlit fog gradient with clean tech-inspired grid pattern:
- Base color: #171717 (dark charcoal)
- Layered grid lines using linear gradients
- Large grid: 50px × 50px (#171717 lines)
- Fine grid: 10px × 10px (#262626 lines)
- Fixed attachment for consistent appearance while scrolling

Creates subtle circuit board aesthetic with dual-layer grid system.
2025-11-09 04:32:58 +00:00