# Blog

> Articles on development, design and ideas.

- [OG Images Without an Image CDN](https://brodin.dev/blog/og-images-without-an-image-cdn.md) - I render Open Graph previews as real React routes and screenshot them with Puppeteer in a build script, so my link previews reuse the same components as the site. | 2026-07-10
- [Every Optimization Behind a Perfect Lighthouse Score](https://brodin.dev/blog/every-optimization-behind-a-perfect-lighthouse-score.md) - The 100 on Lighthouse isn't luck or a clean stack. Here is every optimization I actually shipped to get brodin.dev to 100 locally and 100 in Vercel Real Experience Score. | 2026-07-03
- [react-i18next Was Fine. Then I Found Paraglide.](https://brodin.dev/blog/paraglide-vs-react-i18n.md) - A comparison of react-i18next and Paraglide JS from someone who has shipped both in production: what I was missing, why I switched, and the honest downsides. | 2026-05-04
- [A Totally Legitimate Way to Look More Productive on GitHub](https://brodin.dev/blog/fake-github-contribution-graph.md) - A tutorial on how to fake your GitHub contribution graph. | 2026-04-17
- [Between Tradition and Modernity: Building a Full Stack App with Django and React](https://brodin.dev/blog/building-a-full-stack-app.md) - A deep dive into bridging the gap between isolated APIs, enforcing type safety across the stack, and finding the value in building robust architecture for small user bases. | 2026-03-16
- ["You Wouldn’t Steal a DIV": How I Built My Portfolio](https://brodin.dev/blog/how-i-built-my-portfolio.md) - A story about how I built my portfolio and what went through my mind while building it | 2026-03-04
