353 Commits

Author SHA1 Message Date
juanatsap 450ae2a738 feat: add Go-Docs MCP project to CV (EN/ES)
Multi-format document MCP server — 13 tools, single Go binary,
PDF/DOCX/MD/CSV/image support with OCR.
2026-05-20 12:24:54 +01:00
juanatsap 8f4d0e9433 feat: self-host HTMX 2.0.10 and Hyperscript 0.9.91, remove unpkg CDN
- Download htmx.min.js v2.0.10 and _hyperscript.min.js v0.9.91 locally
- Update head-scripts.html to load from /static/ instead of unpkg CDN
- Remove https://unpkg.com from CSP script-src whitelist
- Update all documentation references to reflect self-hosted paths
- No breaking changes: all hx-* attributes are HTMX 2.0 compatible
2026-05-14 12:59:30 +01:00
juanatsap 46912f0bf3 feat: add collab category for gh-dashboard project
New COL badge (soft green) for collaboration projects, distinct from
OSS contributions.
2026-05-07 23:12:32 +01:00
juanatsap 33354509ce fix: replace gh-dashboard logo with GitHub octocat icon 2026-05-07 23:08:13 +01:00
juanatsap d768908b1c feat: add gh-dashboard project logo from upstream repo 2026-05-07 22:59:58 +01:00
juanatsap f3fc6a2632 feat: add gh-dashboard project, language switch partial, header alignment fix
- Add gh-dashboard (debba/gh-dashboard) as collaboration project in EN/ES CV data
- Add head-language-switch.html template partial with test
- Change CV header text-align-last from justify to left
- Update .gitignore to exclude prompt symlinks and cv-site binary
2026-05-07 22:52:46 +01:00
juanatsap aae1a28627 feat: Cmd+K search — rich keywords, real logos, category icons
- Projects searchable by technologies, "open source", category (cli/app/web)
- Experience searchable by technologies, shows company logo + position
- Courses show institution logos
- Project logos used as icons instead of generic mdi:web
- Category-specific fallback icons (console, apple, puzzle, etc.)
2026-05-04 15:23:15 +01:00
juanatsap 88ecfed5c5 fix: icons toggle also hides all badges (LIVE, GitHub, stars, category) 2026-05-04 15:18:54 +01:00
juanatsap 075a58efe4 fix: category badge before project title 2026-05-04 14:53:01 +01:00
juanatsap ddd109d6a3 fix: GitHub+stars badge gold background with white icons/text 2026-05-04 14:41:32 +01:00
juanatsap c8e680f7ea feat: 3-letter category tags, merged GitHub+stars badge, pastel colors
- Category badges: CLI, APP, WEB, PLG, SDK, OSS in pastel tones
- GitHub + stars merged into single dark badge with gold star count
- La Porra fixed to "web" category
2026-05-04 14:37:36 +01:00
juanatsap 542419de45 feat: category icon badges on projects — CLI, App, Web, Plugin, SDK
Each project now shows a colored icon badge indicating its type:
- CLI (purple terminal), App (blue apple), Web (cyan globe)
- WebApp (teal app), Plugin (amber puzzle), SDK (violet package)
- Contrib (gray pull request)
2026-05-04 14:28:37 +01:00
juanatsap 76d9649ec2 feat: custom gold stars badge matching other badges, live count via GitHub API 2026-05-04 13:47:05 +01:00
juanatsap 9a2343a71e feat: GitHub stars badge on open-source projects via shields.io
- New openSource field in project model distinguishes OS from private
- shields.io badge shows live star count for open-source projects
- SoundInbox marked as NOT open source (no badge, no stars)
- Immich Photo Manager, Cmux Resurrect, Gotify Commander, CDC Starter Kit → open source
- Stars badge hidden in print view
2026-05-04 13:42:40 +01:00
juanatsap c1a32988cb feat: add SoundInbox project logo 2026-05-04 13:35:09 +01:00
juanatsap 9547bc7130 feat: remove Commando project, add Gotify Commander logo, drolosoft linked
- Remove unreleased Commando project from CV
- Add gotify-commander.png logo from GitHub repo
- "drolosoft" lowercase with link to drolosoft.com in summary
- Replace Certifications chip with Open source chip in chat
2026-04-27 00:32:54 +01:00
juanatsap ae7d0a9ab7 fix: white avatar circle background + dark theme uses same grid as light 2026-04-27 00:07:59 +01:00
juanatsap 13c409065e fix: chat avatar shows full face with neck and shoulders 2026-04-26 23:58:37 +01:00
juanatsap e9154b04f4 fix: chat avatar crop starts from top to show full face 2026-04-26 23:50:54 +01:00
juanatsap 614edac5b6 fix: chat avatar larger (36px) with face fully visible 2026-04-26 23:49:49 +01:00
juanatsap bc29ca4a05 feat: add Gotify Commander project + fix chat avatar + bold footer
- New project: Gotify Commander — bidirectional Gotify plugin (Go)
- Fix chat avatar: properly cropped square thumbnail (was squished)
- Footer text: bold + white + text-shadow for readability over bg photos
2026-04-26 23:46:40 +01:00
juanatsap 6204ffdd6c fix: chat uses second person (tú/you), footer text visible over background
- Chat suggestions and help modal questions now address Juan directly
- Footer text/links use white with text-shadow for readability over photos
2026-04-26 23:39:38 +01:00
juanatsap f5c78e6845 feat: chat speaks as Juan — first person, CV photo avatar, disclaimer tooltip
- Agent prompt rewritten to first person ("I worked at...", "I built...")
- Bot avatar replaced with dni-thumb.jpeg (2.6KB, 56x56 retina)
- Greeting: "Pregúntame lo que quieras sobre mi currículum"
- Underlined "mi currículum" with floating tooltip disclaimer
- Every response ends with cordial email contact invitation
- Background photos now visible in production (random per load)
- Toggle button remains dev-only
2026-04-26 23:32:48 +01:00
juanatsap 3b6d5e781a feat: background photo system — random Lanzarote landscapes behind CV grid
Dev-only toggle button enables/disables photo backgrounds. Photos are
auto-discovered from static/images/backgrounds/ and randomly selected
on each page load. Production is unaffected — no button, no photo.
2026-04-25 14:46:33 +01:00
juanatsap fc1ca90b38 fix: chat bubbles crushed to 6px — flex-shrink: 0 prevents row collapse
overflow: hidden on .chat-row made min-height resolve to 0 (CSS Flexbox §4.5),
so the flex column container crushed rows instead of scrolling. Also fix all
test selectors (.chat-agent→.chat-row-bot .chat-msg) and add bubble dimension
assertions.
2026-04-14 03:13:04 +01:00
juanatsap 574f97d5cd fix: mobile chat overflow — break long links, constrain msg width, scroll chips 2026-04-09 23:27:13 +01:00
juanatsap 42fe69f5a0 fix: mobile viewport overflow — no horizontal scroll on iPhone
- Replace 100vw with 100% on mobile chat panel (avoids scrollbar width)
- Add overflow-x: hidden on html/body for mobile
- Add box-sizing: border-box on mobile panel
- Add overflow: hidden and max-width: 100% on chat rows
- Add overflow-x: hidden on messages container
2026-04-09 23:19:23 +01:00
juanatsap 0b672447f6 feat: cog menu for layout modes, mobile viewport fix, better separation
Header UX:
- Replace 5 icon buttons with single cog (gear) dropdown menu
- Cog menu shows all layout options with icons + labels
- Help and Close buttons stay visible outside the cog
- Active mode highlighted in green

Mobile fixes:
- Fix viewport overflow (100vw + max-width: 100vw)
- Stronger shadow (0 -4px 20px) for clear CV/chat separation
- Rounded corners (12px) on top for recognizable chat window
- Hide desktop-only modes (side panel, floating, full) from cog on mobile
- max-height: 50vh ensures CV always visible above

Dark mode:
- Cog menu styled for dark backgrounds
2026-04-09 18:39:51 +01:00
juanatsap ef25a9e233 fix: add wiggle animation to zoom button, ensure icon animations on mobile 2026-04-09 14:05:58 +01:00
juanatsap c044f785f3 fix: chat X rotates clockwise, robot wiggles; PDF rotation now animated 2026-04-09 14:03:07 +01:00
juanatsap 9f6b44b478 fix: button hover animations — PDF 45°, wiggle for info/keyboard/bot 2026-04-09 14:01:25 +01:00
juanatsap e865e0d9e0 feat: hover animations on all floating buttons
- Rotate 90°: PDF, leaf, info, theme, chat (symmetric icons)
- Wiggle: email envelope (notification feel)
- Scale pulse: keyboard shortcut (key press feel)
- Bounce up: back-to-top arrow (reinforces direction)
2026-04-09 13:59:31 +01:00
juanatsap 328faae953 feat: chat module portability guide + fix mobile wave position
- doc/30-CHAT-MODULE-PORTABILITY.md: step-by-step guide to port the
  chat agent to other Go apps (files, dependencies, customization)
- Fix wave emoji position on mobile (follows button to bottom:5rem right:1rem)
2026-04-09 13:08:17 +01:00
juanatsap cfb1817daa fix: keep /text crawlable for LLMs, only noindex for search engines 2026-04-09 12:24:41 +01:00
juanatsap 08b39653ba fix: SEO — prevent Google from indexing /text instead of main page
- Add X-Robots-Tag: noindex, nofollow header to /text endpoint
- Add Link: canonical header pointing to HTML version
- Add Disallow: /text to robots.txt
- Update sitemap.xml lastmod to 2026-04-09
2026-04-09 12:24:06 +01:00
juanatsap 6e922fd1cb feat: mobile-first chat layout — split mode, hidden desktop modes, 79 tests
Mobile (≤480px):
- Hide Side Panel, Floating, Full Screen buttons
- Show Split button (50vh vertical split, CV visible above)
- Compact mode: 55vh max bottom sheet
- Force desktop modes to compact if somehow activated
- Disable tooltips on mobile (overflow prevention)
- Tighter header padding

Desktop (>480px):
- Split button hidden, all modes available as before

Tests: 85-chat-mobile.test.mjs — 79 assertions across
iPhone SE (320x568), iPhone 14 (393x852), iPhone 14 Pro Max (430x932),
plus desktop sanity check
2026-04-09 12:21:28 +01:00
juanatsap edf302b302 fix: dark mode chat — lighter panel to distinguish from CV background 2026-04-09 12:17:22 +01:00
juanatsap ddb2b843a4 fix: wave fully opaque (outside button), animation plays twice with pause 2026-04-09 11:41:18 +01:00
juanatsap 023c445a88 fix: wave — left side, 2s delay, larger emoji 2026-04-09 11:39:25 +01:00
juanatsap 33fd31d246 fix: wave animation — fade in, swing clockwise/counter, fade out 2026-04-09 11:37:37 +01:00
juanatsap 84d69fa8db feat: wave greeting animation on chat button to attract clicks
Emoji 👋 pops up 3 times with a waving motion (3s delay after page load),
then disappears. Hidden when chat is open.
2026-04-09 11:35:21 +01:00
juanatsap 21c33d2833 feat: chat icons — image fallbacks, external links, smaller inline size
- Support image file fallback when no sprite index exists
  (Immich Photo Manager, Cmux Resurrect now show their logos)
- Render external links [text](https://...) as clickable links
  (fixes Third Party Contributions raw markdown)
- Smaller inline icons (20px) to fit chat bubble aesthetic
- Separate icon-chat CSS class for chat-specific sizing
2026-04-09 11:34:14 +01:00
juanatsap 823030dcf2 test: 38 layout mode tests + fix half/full/float CSS positioning
- Fix side panel and full screen not covering full viewport
- Fix floating mode initial position (near chat button, not top-right)
- Reset width/height inline styles when switching modes
- Add 84-chat-layout-modes.test.mjs: 38 assertions covering
  compact, side panel, full screen, floating, drag, rapid switching,
  and user avatar rendering
2026-04-09 11:09:30 +01:00
juanatsap 8e029d1363 feat: chat UX overhaul — GLM local model, icons, layout modes, instant bubbles
- Add GLM-4.7-Flash as default Ollama model (replaces Mistral)
- Fix WRITE_TIMEOUT (15s→120s) and HTMX timeout (5s→120s) for local LLM
- Auto-warmup model on startup in development mode
- Add /api/chat/status endpoint for model readiness polling
- Show "Initializing AI model..." indicator while model loads
- Add user avatar (mdi:account) on chat messages
- Inject company/project/course sprite icons inline in chat responses
- Replace cramped header icons with 4 icon buttons + tooltips
  (Compact, Side panel, Floating, Full screen)
- Add floating/draggable chat mode with smooth drag support
- Chip questions show user bubble instantly and clear input
- Help modal prefills input instead of auto-sending
- User bubble rendered client-side for immediate feedback
2026-04-09 10:54:23 +01:00
juanatsap d5c90248cc feat: Teams-style chat UX overhaul
Bubbles:
- Teams-style layout: bot avatar (green circle) on left, message beside it
- User messages right-aligned, no avatar (clean, like Teams)
- Rounded bubbles (border-radius: 16px) instead of square
- Distinct corner radii for conversation flow

Navigation:
- Links no longer close the chat — panel stays open for continued navigation
- Added #certifications anchor (alias to courses section)
- Fixed agent instruction to use #courses for certifications references

Theme:
- All colors use CSS variables from _themes.css
- Automatically adapts to light/dark without explicit .theme-clean overrides
- Panel uses --paper-bg (white in light, dark in dark theme)

Size modes:
- 3 discrete toggle buttons: compact, half-screen, fullscreen
- Active state highlighted, direct selection (no confusing cycling)
- Removed chat-half-left (simplified to compact/half/full)

Intelligence:
- React query now returns results (verified: 4 companies + 2 projects + skills)
2026-04-08 17:51:14 +01:00
juanatsap be5fdd03c4 feat: chat avatars + dark theme fix + text overflow fix
Avatars:
- Robot icon (green circle) before each agent message
- Person icon (dark circle) before each user message
- New .chat-bubble wrapper with flex layout for avatar + message

Dark theme fixes:
- Panel background: #1e1e1e (not pure black)
- Agent bubbles: #2d2d2d with light text (not dark/invisible)
- Input area: #2d2d2d (not black)
- Header stays green (--accent-green) in both themes
- Chips, suggestions consistent with panel background

Text overflow:
- overflow-wrap + word-break on messages
- min-width: 0 prevents flex overflow
- User bubble properly right-aligned with avatar
2026-04-08 17:31:07 +01:00
juanatsap 5448c3cf7a feat: resizable chat panel (compact → half-right → half-left → full)
4 size modes cycled via expand button in header:
- Compact: 360px (default, bottom-right corner)
- Half-right: 50vw docked to right edge, full height
- Half-left: 50vw docked to left edge, full height
- Full: 100% viewport overlay

Also fixes text overflow in chat messages (overflow-wrap, word-break).
Messages area expands to fill available height in larger modes.
Size button uses mdi icons: arrow-expand, dock-right, dock-left, arrow-collapse.
CSS transitions for smooth size changes.
2026-04-08 17:24:35 +01:00
juanatsap c44e9e8c67 feat: CV navigation links in chat responses (GPS for the CV)
Agent instruction now requires markdown links to CV anchors:
- Companies: [Olympic Broadcasting](#exp-olympic-broadcasting)
- Projects: [Immich Photo Manager](#proj-immich-photo-manager)
- Sections: [Skills](#skills), [Experience](#experience)

formatResponse converts [text](#anchor) → clickable green links
that close the chat panel, smooth-scroll to the target, and
pulse a green highlight for 2 seconds.

All existing CV anchor IDs used: exp-{companyID}, proj-{projectID},
course-{courseID}, plus section IDs (experience, projects, skills, etc.)
2026-04-08 17:11:22 +01:00
juanatsap 25ddfff0da feat: redesign help modal with accordion and clickable questions
- Replace flat list with <details>/<summary> accordion (5 categories)
- Questions are clickable: close modal → open chat → send question
- closeChatHelpAndAsk() helper bridges modal and chat panel
- Green accent on category icons and question hover
- Chevron arrows for expand/collapse state
- Dark theme support for all accordion elements
- Compact layout with no wasted space
2026-04-08 14:01:17 +01:00
juanatsap 8e93d2b893 style: green theme for chat mascot, neutral back-to-top arrow
- Chat uses --accent-green (#27ae60) matching CV's green theme:
  header, user bubbles, send button, chip hover, input focus
- Dark theme uses deeper greens (#166b3a header, #1e8c4c interactions)
- Back-to-top arrow changed from green to neutral gray (#555555)
  to avoid visual conflict with the mascot button
2026-04-08 13:58:53 +01:00