Home

Changelog

All notable changes to this project will be documented in this file.

The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.

Unreleased

4.6.7 - 2026-04-23

Added

  • New blog post: "Por qué mis tests no me daban confianza" (blog18, published 2026-04-23) — personal reflection on Ignacio Meléndez's post about AI + mutation testing; shares own examples (isValidDate, formatPrice) and a 5-step workflow for writing tests that can actually fail
  • data/contributions.ts: added microlinkhq/unavatar PR #564
  • data/open-source.ts: added TopoJS

4.6.6 - 2026-04-20

Added

  • New blog post: "DDD en la era agéntica: tu código es el contexto" (blog17, published 2026-04-20) — on why the codebase is the real context for agentic tools, not just the prompt; includes three interactive React Flow diagrams (context sources, chaotic codebase, DDD layers)
  • @xyflow/react 12.10.2 — new dependency for interactive flow diagrams in blog posts
  • components/flow-diagrams.tsx: new client component exporting FlowContextSources, FlowCaotico, and FlowDDD — theme-aware (dark/light), non-interactive, with skeleton loading state
  • app/globals.css: added @xyflow/react/dist/style.css import (required after Tailwind v4 import per React Flow docs)

Removed

  • Blog post "El estrés y la ansiedad generados por el rechazo en los procesos de selección" (blog2) — removed to avoid signaling emotional vulnerability in hiring contexts
  • Blog post "Nuevas oportunidades" (blog4) — removed due to explicit mention of job loss, which could negatively frame the portfolio during selection processes

4.6.5 - 2026-04-20

Dependencies

  • next + @next/mdx: 16.2.3 → 16.2.4
  • gsap: 3.14.2 → 3.15.0
  • i18next: 26.0.4 → 26.0.6
  • react-i18next: 17.0.2 → 17.0.4
  • eslint: 10.2.0 → 10.2.1
  • postcss: 8.5.9 → 8.5.10
  • prettier: 3.8.2 → 3.8.3
  • typescript: 6.0.2 → 6.0.3

Changed

  • public/locales/en/translation.json: renamed sections.client_work from "Client Work" to "Selected Work" to avoid implying active freelance availability
  • public/locales/es/translation.json: renamed sections.client_work from "Trabajos para Clientes" to "Trabajo Seleccionado"
  • public/locales/{en,es}/translation.json: renamed social_media.links.professional label from "Professional Freelance Website" / "Sitio web profesional" to "creativoma.com"
  • data/projects.ts: updated CREATIVOMA project description to clarify it is a personal brand / past agency site
  • public/llms.txt: changed Freelance: contact label to Agency: for creativoma.com link

4.6.4 - 2026-04-19

Added

  • New blog post: "El proceso es el resultado" (blog16, published 2026-04-19) — on iterating fast, habits, rest, leaving the comfort zone, and why the process is the only thing worth optimizing
  • types/types.ts: new ISODate type alias (\${number}-${number}-${number}``) for compile-time date format safety
  • data/contributions.ts: added vercel-labs/visual-json PR #36 and FrancisDeea/pocketool PRs #1–#5

Changed

  • types/types.ts: BlogPost.date now typed as ISODate instead of string
  • data/contributions.ts: FrancisDeea/pocketool PRs #1–#5 updated from open to merged

Fixed

  • utils/is-published.ts: fixed timezone bug — new Date('YYYY-MM-DD') was parsed as UTC midnight causing posts to appear unpublished until 2 AM in UTC+2 timezones; fixed by appending T00:00:00 so JS parses as local time
  • components/writing-section.tsx: same timezone fix applied to the production filter

4.6.3 - 2026-04-18

Added

  • data/open-source.ts: added ollama-tui — terminal interface to browse, chat, download and delete local Ollama models
  • public/llms.txt: added ollama-tui to Open Source section

Changed

  • data/open-source.ts: reordered entries — Ollama TUI 2nd, Freelow 3rd, Formachine and Numeric Background moved to the end
  • components/cv-download-button.tsx: excluded formachine and numeric-background from PDF output (still shown on website)

4.6.2 - 2026-04-11

Fixed

  • components/writing-section.tsx: blog posts now sorted by date descending before slicing so future-scheduled posts appear in the correct order once published
  • components/cv-download-button.tsx: reduced ROW_H from 4.7 to 4.5 and section trailing gaps from 1.5 to 1.0 to prevent the Spanish CV from spilling onto a second page

4.6.1 - 2026-04-05

Added

  • data/open-source.ts: added numeric-background npm package entry (React component for animated numeric backgrounds)

Changed

  • data/work-experience.ts: removed external links from CREATIVOMA, Cronopios, and El Puente Publicidad entries; link field made optional in BaseEntity type
  • data/education.ts: added current: true to UOC B.S. Computer Engineering entry (started 2025, in progress)
  • types/types.ts: Education type now supports optional current boolean field
  • components/education-section.tsx: current education entries display {year} – now instead of a fixed year
  • data/labs.ts: moved numeric-background to open source section

4.6.0 - 2026-04-03

Added

  • utils/is-published.tsisPublished(date) helper that returns true when the post date is in the past
  • components/post-gate.tsx<PostGate date={...} /> client component; redirects to / in production if the post date is in the future, enabling scheduled / draft posts
  • mdx-components.tsx: registered <PostGate> as a custom MDX component so posts can embed it at the top
  • New blog post: "La IA como herramienta, no como muleta" (blog13, published 2026-04-03)
  • New blog post: "El mito del 10x developer" (blog14, scheduled for 2026-05-05)

Changed

  • components/writing-section.tsx: filters out future-dated posts in production so scheduled posts don't appear in the list before their publish date

4.5.0 - 2026-04-03

Added

  • app/layout.tsx: alternates.languages hreflang entries (en, es, x-default) for bilingual SEO
  • app/layout.tsx: JSON-LD Person enriched with image (GitHub avatar), https://x.com/dev_creativoma in sameAs, knowsLanguage, and knowsAbout fields
  • app/sitemap.xml/route.ts: <lastmod> on home URL entry (today's ISO date at build time)
  • components/identity-section.tsx: SOCIAL_ARIA_LABELS map; social icon links now use aria-label instead of title
  • components/footer-live.tsx: aria-label on language toggle button describing the target language
  • components/experience-section.tsx: aria-label / aria-hidden on active-role pulsing dot

Changed

  • components/client-work-section.tsx: extracted ProjectItem as a memoized component to avoid inline re-creation
  • components/contributions-section.tsx: extracted ContributionItem as a memoized component
  • components/experience-section.tsx: extracted WorkItem as a memoized component
  • components/writing-section.tsx: extracted PostItem as a memoized component
  • components/identity-section.tsx: yearsOfExperience wrapped with useMemo; social icon nodes marked aria-hidden="true"
  • components/ui/text-morph.tsx: defaultVariants / defaultTransition moved to module-level constants; || replaced with ??
  • components/dropdown-versions.tsx: handleResize simplified to one-liner; resize listener uses { passive: true }
  • hooks/useClickOutside.tsx: mousedown / touchstart listeners use { passive: true }
  • app/layout.tsx: Figtree font trimmed to weights 400–700 and display: 'swap' added

Fixed

  • components/client-work-section.tsx, contributions-section.tsx: replaced remaining hover:bg-black/[0.03] / hover:bg-white/[0.03] with Tailwind v4 syntax hover:bg-black/3 / hover:bg-white/3

4.4.2 - 2026-04-03

Fixed

  • app/layout.tsx: corrected Twitter card creator from @creativoma to @dev_creativoma
  • app/layout.tsx: corrected JSON-LD sameAs LinkedIn URL from /in/marianoalvarez to /in/ma-marianoalvarez/

4.4.1 - 2026-04-03

Changed

  • app/layout.tsx: expanded metadata with keywords, authors, creator, complete openGraph object (type, url, siteName, title, description, locale), Twitter card, and canonical URL
  • Removed explicit openGraph.images path — Next.js now picks up app/opengraph-image.jpg automatically

Added

  • Schema.org JSON-LD (Person) injected via <script type="application/ld+json"> in the root layout, with name, url, jobTitle, description, and sameAs links to GitHub and LinkedIn

4.4.0 - 2026-04-03

Added

  • RSS feed at /rss.xml — force-static route generated from BLOG_POSTS, announced via <link rel="alternate"> in app/layout.tsx and linked in the footer
  • Sitemap at /sitemap.xml — force-static route covering the home page and all blog posts
  • public/robots.txt pointing to the sitemap
  • utils/blog-metadata.tsgetBlogMetadata(uid) helper that returns a full Next.js Metadata object (title, description, OpenGraph article, Twitter card, canonical URL) for a given post
  • Per-post SEO metadata: all 12 MDX blog posts now export metadata via getBlogMetadata()

Changed

  • app/layout.tsx: metadataBase set to https://marianoalvarez.dev (was http://localhost:3000); site description updated to reflect 5+ years of experience
  • DateBlogPost component: converted to client component; date now formatted using the active i18n locale (es-ES / en-US)
  • getFormattedDate utility: added optional locale parameter (defaults to 'es-ES')
  • Blog post dates in WritingSection now use getFormattedDate with the active locale instead of raw ISO strings
  • identity-section: layout adjusted to items-start / removed gap between ThemeToggle and version selector

Fixed

  • writing-section: replaced hover:bg-black/[0.03] / hover:bg-white/[0.03] with Tailwind v4 syntax hover:bg-black/3 / hover:bg-white/3
  • theme-toggle: added h-4.5 to keep button height consistent
  • .htaccess: added AddDefaultCharset UTF-8 and AddCharset directives for correct encoding in HTTP headers

4.3.1 - 2026-04-02

Added

  • New blog post: "El FOMO tecnológico" — on staying current without chasing every trend, and why codebase quality matters more than ever in the AI era

4.3.0 - 2026-04-02

Added

  • New reusable ThemeToggle component extracted from footer — now shared across identity section and footer
  • Theme toggle placed next to version selector in the identity/header area for quick access
  • GSAP animation on theme toggle icon — rotates in from ±90° with scale and fade on each switch (back.out(1.7) ease)
  • freelance field on WorkExperience type; freelance entries now display a small pill badge next to the company name
  • Language toggle simplified to show only the target language (EN when in ES, ES when in EN) — removes the redundant double-label pattern

Changed

  • Experience section date display uses localized current text via w.current?.[lang] instead of i18n key experience.now
  • Spanish label for current role date changed from "Actual" to "Actualidad"
  • Bumped dependencies: next 16.2.2, @next/mdx 16.2.2, i18next 26.0.3, react-i18next 17.0.2, eslint-config-prettier 10.1.8

Fixed

  • Tailwind v4 syntax: replaced hover:bg-black/[0.03] and hover:bg-white/[0.03] with hover:bg-black/3 / hover:bg-white/3

4.2.2 - 2026-03-28

Fixed

  • Removed showSupportNotice from i18next .init() — option was dropped in i18next v26, causing TypeScript build failure

Security

  • Added pnpm.overrides to pin picomatch to 2.3.2 / 4.0.4 and brace-expansion to 1.1.13 / 2.0.3 / 5.0.5, resolving ReDoS and method-injection vulnerabilities in transitive dev dependencies

4.2.1 - 2026-03-22

Added

  • Freelow to open-source section: CLI in Go for freelancers to track hours, tasks, and commits from the terminal

Fixed

  • CV PDF: reduced row height (ROW_H) from 4.8 to 4.7 mm to tighten line spacing in experience section

4.2.0 - 2026-03-22

Added

  • Hidden interactive easter egg: a Battle City–inspired tank game triggered by a classic keyboard sequence, loaded dynamically (SSR disabled) with a NES sprite sheet, particle effects, score HUD, and GSAP-animated intro banner
  • Console hint for visitors who open DevTools — includes contact info and a nudge toward the easter egg
  • DOMAIN constant in lib/constants.ts; WEBSITE_URL now derived from it

Fixed

  • i18n context default: set showSupportNotice: false explicitly

4.1.4 - 2026-03-22

Changed

  • Converted next.config.mjs to next.config.ts with native NextConfig type

4.1.3 - 2026-03-22

Fixed

  • load-more: simplified GSAP usage — replaced contextSafe + buttonRef pattern with a reactive useGSAP effect; registered plugin at module level

4.1.2 - 2026-03-22

Removed

  • Unused UI components: TextLoop, Magnetic, TextEffect
  • Unused YEAR_OF_EXPERIENCE constant from app/constant.ts
  • Leftover // debug: true comment in i18n settings

4.1.1 - 2026-03-19

Added

  • tRPC, Zod, and tldraw to stack
  • Changelog page at /changelog rendering CHANGELOG.md directly via MDX import
  • Changelog and llms.txt links in footer

Changed

  • Reorganized stack section into clearer categories: Frameworks, UI & Motion, State & Data, Backend & DB
  • Moved Ruby on Rails and Hotwire from Backend to Frameworks
  • Moved Inertia.js from Frontend to State & Data
  • Stack label column width aligned to match Principles section layout
  • Updated llms.txt stack section to reflect new categories

Fixed

  • llms.txt footer link: replaced next/link with <a> to prevent RSC prefetch 404
  • CV download button: lazy-loaded with next/dynamic and ssr: false to fix Turbopack SSR build error
  • i18n: added missing translation keys for new stack category labels (EN/ES)
  • scroll-progress: removed layoutEffect option no longer accepted by useScroll after motion upgrade
  • ESLint: simplified config removing FlatCompat dependency that caused circular JSON error with updated packages

4.1.0 - 2026-03-18

Added

  • CV PDF generation with jsPDF and custom fonts (Geist)
  • CV download button integrated into the experience section
  • Two new education entries

Changed

  • Experience section layout updated to accommodate CV download button
  • Work experience data: added Project Lead role, month-level precision, and date corrections
  • Trimmed open source section description
  • Extended WorkExperience type with optional startMonth and endMonth fields

Fixed

  • Spanish i18n: replaced "ahora" with "actualidad" for natural phrasing

4.0.2 - 2026-03-17

Added

  • PrinciplesSection component with bilingual translations
  • CLAUDE.md for project guidance and AI assistant context

Fixed

  • Stack data: updated backend technologies and added MCPs to AI category
  • Temperature widget: switched from previous source to Open Meteo API for accurate data
  • Updated Next.js and @next/mdx dependencies

4.0.0 - 2026-03-15

Added

  • Initial release of v4.marianoalvarez.dev
  • App core: layout, home page, globals, and theme setup
  • Full component library (UI components, section components)
  • Data layer: projects, work experience, stack, education, social links, contributions
  • Blog with MDX support: custom components, code highlighting, post metadata
  • Internationalization (EN/ES) with i18next, language switcher, and cookie persistence
  • Lib, types, utils, and hooks (including useLanguageSwitch)
  • Public assets and GitHub API integration
  • GitHub Actions CI/CD workflow for static export and FTP deploy to Hostinger

Fixed

  • Deployment workflow: resolved lftp configuration and YAML parsing issues