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: addednumeric-backgroundnpm package entry (React component for animated numeric backgrounds)
Changed
data/work-experience.ts: removed external links from CREATIVOMA, Cronopios, and El Puente Publicidad entries;linkfield made optional inBaseEntitytypedata/education.ts: addedcurrent: trueto UOC B.S. Computer Engineering entry (started 2025, in progress)types/types.ts:Educationtype now supports optionalcurrentboolean fieldcomponents/education-section.tsx: current education entries display{year} – nowinstead of a fixed yeardata/labs.ts: movednumeric-backgroundto open source section
4.6.0 - 2026-04-03
Added
utils/is-published.ts—isPublished(date)helper that returnstruewhen the post date is in the pastcomponents/post-gate.tsx—<PostGate date={...} />client component; redirects to/in production if the post date is in the future, enabling scheduled / draft postsmdx-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.languageshreflang entries (en,es,x-default) for bilingual SEOapp/layout.tsx: JSON-LD Person enriched withimage(GitHub avatar),https://x.com/dev_creativomainsameAs,knowsLanguage, andknowsAboutfieldsapp/sitemap.xml/route.ts:<lastmod>on home URL entry (today's ISO date at build time)components/identity-section.tsx:SOCIAL_ARIA_LABELSmap; social icon links now usearia-labelinstead oftitlecomponents/footer-live.tsx:aria-labelon language toggle button describing the target languagecomponents/experience-section.tsx:aria-label/aria-hiddenon active-role pulsing dot
Changed
components/client-work-section.tsx: extractedProjectItemas a memoized component to avoid inline re-creationcomponents/contributions-section.tsx: extractedContributionItemas a memoized componentcomponents/experience-section.tsx: extractedWorkItemas a memoized componentcomponents/writing-section.tsx: extractedPostItemas a memoized componentcomponents/identity-section.tsx:yearsOfExperiencewrapped withuseMemo; social icon nodes markedaria-hidden="true"components/ui/text-morph.tsx:defaultVariants/defaultTransitionmoved to module-level constants;||replaced with??components/dropdown-versions.tsx:handleResizesimplified to one-liner; resize listener uses{ passive: true }hooks/useClickOutside.tsx:mousedown/touchstartlisteners use{ passive: true }app/layout.tsx: Figtree font trimmed to weights400–700anddisplay: 'swap'added
Fixed
components/client-work-section.tsx,contributions-section.tsx: replaced remaininghover:bg-black/[0.03]/hover:bg-white/[0.03]with Tailwind v4 syntaxhover:bg-black/3/hover:bg-white/3
4.4.2 - 2026-04-03
Fixed
app/layout.tsx: corrected Twitter cardcreatorfrom@creativomato@dev_creativomaapp/layout.tsx: corrected JSON-LDsameAsLinkedIn URL from/in/marianoalvarezto/in/ma-marianoalvarez/
4.4.1 - 2026-04-03
Changed
app/layout.tsx: expanded metadata withkeywords,authors,creator, completeopenGraphobject (type,url,siteName,title,description,locale), Twitter card, andcanonicalURL- Removed explicit
openGraph.imagespath — Next.js now picks upapp/opengraph-image.jpgautomatically
Added
- Schema.org JSON-LD (
Person) injected via<script type="application/ld+json">in the root layout, withname,url,jobTitle,description, andsameAslinks to GitHub and LinkedIn
4.4.0 - 2026-04-03
Added
- RSS feed at
/rss.xml— force-static route generated fromBLOG_POSTS, announced via<link rel="alternate">inapp/layout.tsxand linked in the footer - Sitemap at
/sitemap.xml— force-static route covering the home page and all blog posts public/robots.txtpointing to the sitemaputils/blog-metadata.ts—getBlogMetadata(uid)helper that returns a full Next.jsMetadataobject (title, description, OpenGraph article, Twitter card, canonical URL) for a given post- Per-post SEO metadata: all 12 MDX blog posts now export
metadataviagetBlogMetadata()
Changed
app/layout.tsx:metadataBaseset tohttps://marianoalvarez.dev(washttp://localhost:3000); site description updated to reflect 5+ years of experienceDateBlogPostcomponent: converted to client component; date now formatted using the active i18n locale (es-ES/en-US)getFormattedDateutility: added optionallocaleparameter (defaults to'es-ES')- Blog post dates in
WritingSectionnow usegetFormattedDatewith the active locale instead of raw ISO strings identity-section: layout adjusted toitems-start/ removed gap betweenThemeToggleand version selector
Fixed
writing-section: replacedhover:bg-black/[0.03]/hover:bg-white/[0.03]with Tailwind v4 syntaxhover:bg-black/3/hover:bg-white/3theme-toggle: addedh-4.5to keep button height consistent.htaccess: addedAddDefaultCharset UTF-8andAddCharsetdirectives 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
ThemeTogglecomponent 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) freelancefield onWorkExperiencetype; 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
currenttext viaw.current?.[lang]instead of i18n keyexperience.now - Spanish label for current role date changed from "Actual" to "Actualidad"
- Bumped dependencies:
next16.2.2,@next/mdx16.2.2,i18next26.0.3,react-i18next17.0.2,eslint-config-prettier10.1.8
Fixed
- Tailwind v4 syntax: replaced
hover:bg-black/[0.03]andhover:bg-white/[0.03]withhover:bg-black/3/hover:bg-white/3
4.2.2 - 2026-03-28
Fixed
- Removed
showSupportNoticefrom i18next.init()— option was dropped in i18next v26, causing TypeScript build failure
Security
- Added
pnpm.overridesto pinpicomatchto2.3.2/4.0.4andbrace-expansionto1.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) from4.8to4.7mm 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
DOMAINconstant inlib/constants.ts;WEBSITE_URLnow derived from it
Fixed
- i18n context default: set
showSupportNotice: falseexplicitly
4.1.4 - 2026-03-22
Changed
- Converted
next.config.mjstonext.config.tswith nativeNextConfigtype
4.1.3 - 2026-03-22
Fixed
load-more: simplified GSAP usage — replacedcontextSafe+buttonRefpattern with a reactiveuseGSAPeffect; registered plugin at module level
4.1.2 - 2026-03-22
Removed
- Unused UI components:
TextLoop,Magnetic,TextEffect - Unused
YEAR_OF_EXPERIENCEconstant fromapp/constant.ts - Leftover
// debug: truecomment in i18n settings
4.1.1 - 2026-03-19
Added
- tRPC, Zod, and tldraw to stack
- Changelog page at
/changelogrenderingCHANGELOG.mddirectly 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.txtstack section to reflect new categories
Fixed
llms.txtfooter link: replacednext/linkwith<a>to prevent RSC prefetch 404- CV download button: lazy-loaded with
next/dynamicandssr: falseto fix Turbopack SSR build error - i18n: added missing translation keys for new stack category labels (EN/ES)
scroll-progress: removedlayoutEffectoption no longer accepted byuseScrollaftermotionupgrade- ESLint: simplified config removing
FlatCompatdependency 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
WorkExperiencetype with optionalstartMonthandendMonthfields
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