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.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