# Xabier Lameiro > Personal site and technical blog of Xabier Lameiro, a software architect from Galicia (Spain) > specialised in web development with React, Next.js and TypeScript. Posts are practical, > first-hand guides about errors, testing, CI/CD and web tooling, available in English, > Spanish (/es) and Galician (/gl). English URLs below are canonical. ## Pages - [Home](https://xabierlameiro.com): Who Xabier Lameiro is — bio, experience, stack and contact details - [next-leak](https://xabierlameiro.com/next-leak): CLI that measures Next.js memory leaks per route — verdict, retainer chain and the real Next.js issues it was verified against - [next-coverage](https://xabierlameiro.com/next-coverage): CLI that reads a Next.js App Router project and sorts the framework's APIs into used, would apply, not applicable and not evaluated ## Blog: Error - [Fix "Failed to replace env in config: ${NPM_TOKEN}" in npm and yarn](https://xabierlameiro.com/blog/error/npm-token-solution-error): How to fix the npm/yarn error "Failed to replace env in config: ${NPM_TOKEN}" in one minute: define the missing environment variable that your .npmrc expects, or remove the stale entry. - [Address already in use fix: free the port (EADDRINUSE)](https://xabierlameiro.com/blog/error/solve-address-in-use-error): Address already in use fix for Node.js, Python, Docker, netcat and Playwright: find and kill the process holding the port on macOS, Linux and Windows. - [How to fix Minified React error #425 (hydration mismatch)](https://xabierlameiro.com/blog/error/uncaught-error-minified-react-error): Fix Minified React error #425 ("Text content does not match server-rendered HTML"): every common cause of a hydration mismatch — dates, random values, locale formatting, browser-only APIs, invalid HTML — and the right fix for each, with Next.js examples. ## Blog: Javascript - [Lighthouse report automation](https://xabierlameiro.com/blog/javascript/lighthouse-reporting-automation): Automation of Lighthouse reporting using playwright and the lightouse api on a deployed website in a real example ## Blog: Nextjs - [Continuous Integration with Github Actions workflow](https://xabierlameiro.com/blog/nextjs/continuous-integration-with-github-actions-workflow): Set up CI/CD for a Next.js project with GitHub Actions: lint, test and build on every push, then deploy to Vercel. The workflow YAML explained step by step. - [Get a GitHub repo's star count without hitting rate limits](https://xabierlameiro.com/blog/nextjs/counter-for-github-stars-repository): Read a GitHub repository's star count from stargazers_count, understand the 60 vs 5,000 requests-per-hour limits, and cache the call so a live counter costs one API request an hour. - [Dark mode in Next.js without the flash of the wrong theme](https://xabierlameiro.com/blog/nextjs/dark-theme): Dark mode in Next.js with CSS variables: resolve the theme before the first paint, persist the choice, and set color-scheme so scrollbars and form controls follow it. - [GA4 saw 12 of my 23 Google clicks. Where did the rest go?](https://xabierlameiro.com/blog/nextjs/ga4-consent-mode-small-site): Same 28 days: Search Console counted 23 Google clicks, GA4 counted 12 sessions. Why Consent Mode v2 hides half the visits on a small site. - [Make a views counter with google analytics](https://xabierlameiro.com/blog/nextjs/make-a-views-counter-with-google-analytics): Add a page-views counter to your Next.js blog using the Google Analytics Data API (BetaAnalyticsDataClient) behind an API route — auth, the report query and caching explained. - [Heap snapshot diffs: how to prove a Next.js memory leak](https://xabierlameiro.com/blog/nextjs/measure-nextjs-memory-leak): Forced GC, heap snapshot diffs and retainer chains: the protocol that proved a Next.js leak (28.7 → 138.9 MB) and the fix that flattened it. - [3 Next.js memory leaks measured in production: yours?](https://xabierlameiro.com/blog/nextjs/nextjs-memory-leak-in-production): Next.js leaking memory? Upgrade to 16.3.5 first. Otherwise heap snapshots show which of the 3 leaks you have, and why serverless hides them as 504s. - [One page, 32,800 file reads: the O(N²) behind a Vercel 504](https://xabierlameiro.com/blog/nextjs/quadratic-mdx-loader-vercel-504): A tag page on my Next.js blog read its 39 MDX files 32,800 times per render and hit a Vercel 504. How I counted the reads, and the fix. - [Why I couldn't 301, noindex or disallow my blog's tag URLs](https://xabierlameiro.com/blog/nextjs/tag-facet-urls-query-parameter): My blog served every post under each of its tags. A 301, noindex and robots.txt each failed for a different reason. What works: the tag as ?tag=. - [How to translate URL slugs in a Next.js site](https://xabierlameiro.com/blog/nextjs/translate-slugs-web-pages): Translate your URLs per language for a fully internationalized Next.js site using static MDX pages — map localized slugs, keep canonicals clean, and link locales with hreflang. ## Blog: React - [Deploying my storybook is very simple](https://xabierlameiro.com/blog/react/deploying-my-storybook-is-very-simple): Deploy your Storybook as a static site so anyone can browse your React components online — the build command, where to host it, and how to wire it into CI. Step by step. - [Filter for positions, survey to check compatibility](https://xabierlameiro.com/blog/react/filter-for-positions): Survey for recruiters to find out if I am compatible with a specific job position - [How to document React components with JSDoc](https://xabierlameiro.com/blog/react/how-document-my-react-components-with-jsdoc): Generate documentation for your React components automatically with JSDoc and publish it as a static site — the setup, the annotations that matter, and how to deploy it. - [How to publish the test coverage report in your React application](https://xabierlameiro.com/blog/react/publish-report-testing-react): I show you how to publish the testing coverage report with jest in your React or Nextjs application, so you or people can see the testing coverage of your project. ## Optional - [Full content](https://xabierlameiro.com/llms-full.txt): Every post inlined as plain markdown - [Sitemap](https://xabierlameiro.com/sitemap.xml): All URLs including /es and /gl locales