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 #564data/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/react12.10.2 — new dependency for interactive flow diagrams in blog postscomponents/flow-diagrams.tsx: new client component exportingFlowContextSources,FlowCaotico, andFlowDDD— theme-aware (dark/light), non-interactive, with skeleton loading stateapp/globals.css: added@xyflow/react/dist/style.cssimport (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.4gsap: 3.14.2 → 3.15.0i18next: 26.0.4 → 26.0.6react-i18next: 17.0.2 → 17.0.4eslint: 10.2.0 → 10.2.1postcss: 8.5.9 → 8.5.10prettier: 3.8.2 → 3.8.3typescript: 6.0.2 → 6.0.3
Changed
public/locales/en/translation.json: renamedsections.client_workfrom "Client Work" to "Selected Work" to avoid implying active freelance availabilitypublic/locales/es/translation.json: renamedsections.client_workfrom "Trabajos para Clientes" to "Trabajo Seleccionado"public/locales/{en,es}/translation.json: renamedsocial_media.links.professionallabel 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 sitepublic/llms.txt: changedFreelance:contact label toAgency: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: newISODatetype alias (\${number}-${number}-${number}``) for compile-time date format safetydata/contributions.ts: addedvercel-labs/visual-jsonPR #36 andFrancisDeea/pocketoolPRs #1–#5
Changed
types/types.ts:BlogPost.datenow typed asISODateinstead ofstringdata/contributions.ts:FrancisDeea/pocketoolPRs #1–#5 updated fromopentomerged
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 appendingT00:00:00so JS parses as local timecomponents/writing-section.tsx: same timezone fix applied to the production filter
4.6.3 - 2026-04-18
Added
data/open-source.ts: addedollama-tui— terminal interface to browse, chat, download and delete local Ollama modelspublic/llms.txt: addedollama-tuito Open Source section
Changed
data/open-source.ts: reordered entries — Ollama TUI 2nd, Freelow 3rd, Formachine and Numeric Background moved to the endcomponents/cv-download-button.tsx: excludedformachineandnumeric-backgroundfrom 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 publishedcomponents/cv-download-button.tsx: reducedROW_Hfrom 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: 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