<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>Shadiul Huda — Blog</title><description>Technical writing by Shadiul Huda — systems, frontend, and building a second brain that rewrites itself.</description><link>https://shadiul.github.io/</link><item><title>A .gitignore entry silently broke my CSS</title><link>https://shadiul.github.io/blog/a-gitignore-entry-silently-broke-my-css/</link><guid isPermaLink="true">https://shadiul.github.io/blog/a-gitignore-entry-silently-broke-my-css/</guid><description>Tailwind v4 reads your .gitignore to decide what to scan. One broad ignore pattern excluded real source dirs, so my styles never compiled.</description><pubDate>Sun, 12 Jul 2026 00:00:00 GMT</pubDate></item><item><title>Generating OG images at build time with Astro</title><link>https://shadiul.github.io/blog/generating-og-images-at-build-time-with-astro/</link><guid isPermaLink="true">https://shadiul.github.io/blog/generating-og-images-at-build-time-with-astro/</guid><description>A per-page OG image endpoint rendering with satori and resvg at build time, seeded for reproducible builds — plus the font-path bug that cost me an afternoon.</description><pubDate>Sun, 12 Jul 2026 00:00:00 GMT</pubDate></item><item><title>Is your knowledge base actually retrievable?</title><link>https://shadiul.github.io/blog/is-your-knowledge-base-actually-retrievable/</link><guid isPermaLink="true">https://shadiul.github.io/blog/is-your-knowledge-base-actually-retrievable/</guid><description>A knowledge base you can&apos;t search is a diary. I built an eval harness that scores recall@k and MRR against my real search engine, and the baseline humbled me.</description><pubDate>Sun, 12 Jul 2026 00:00:00 GMT</pubDate></item><item><title>Moving shadcn from Radix to Base UI</title><link>https://shadiul.github.io/blog/moving-shadcn-from-radix-to-base-ui/</link><guid isPermaLink="true">https://shadiul.github.io/blog/moving-shadcn-from-radix-to-base-ui/</guid><description>shadcn flipped its default primitives from Radix to Base UI. Here&apos;s the migration, and the one API change that actually matters — asChild becomes render.</description><pubDate>Sun, 12 Jul 2026 00:00:00 GMT</pubDate></item><item><title>Never overwrite a fact: bi-temporal notes</title><link>https://shadiul.github.io/blog/never-overwrite-a-fact-bi-temporal-notes/</link><guid isPermaLink="true">https://shadiul.github.io/blog/never-overwrite-a-fact-bi-temporal-notes/</guid><description>When a role or status changes, I don&apos;t delete the old value. I append to a timeline that tracks when it became true and when my notes learned it.</description><pubDate>Sun, 12 Jul 2026 00:00:00 GMT</pubDate></item><item><title>React 19 will suspend on your stylesheets</title><link>https://shadiul.github.io/blog/react-19-will-suspend-on-your-stylesheets/</link><guid isPermaLink="true">https://shadiul.github.io/blog/react-19-will-suspend-on-your-stylesheets/</guid><description>React 19 treats precedence stylesheet links as Suspense resources. Render one inside your tree and the whole thing can blank. Here is the rule I landed on.</description><pubDate>Sun, 12 Jul 2026 00:00:00 GMT</pubDate></item><item><title>Building a second brain that rewrites itself</title><link>https://shadiul.github.io/blog/second-brain-that-rewrites-itself/</link><guid isPermaLink="true">https://shadiul.github.io/blog/second-brain-that-rewrites-itself/</guid><description>Most note apps are filing cabinets. I wanted one that thinks — where new information rewrites old pages, contradictions get reconciled, and agents tidy up while I sleep.</description><pubDate>Sun, 12 Jul 2026 00:00:00 GMT</pubDate></item><item><title>Shipping shadcn with zero JavaScript</title><link>https://shadiul.github.io/blog/shipping-shadcn-with-zero-javascript/</link><guid isPermaLink="true">https://shadiul.github.io/blog/shipping-shadcn-with-zero-javascript/</guid><description>shadcn is React, but in Astro it can server-render to static HTML and ship no JS at all — until you opt a component into hydration. Here&apos;s the catch.</description><pubDate>Sun, 12 Jul 2026 00:00:00 GMT</pubDate></item><item><title>Tailwind v4 in a monorepo — the @source you&apos;re missing</title><link>https://shadiul.github.io/blog/tailwind-v4-monorepo-the-source-youre-missing/</link><guid isPermaLink="true">https://shadiul.github.io/blog/tailwind-v4-monorepo-the-source-youre-missing/</guid><description>Tailwind v4 auto-scans the project it lives in and quietly skips your sibling workspace packages. Here&apos;s why shared UI classes vanish, and the one-line fix.</description><pubDate>Sun, 12 Jul 2026 00:00:00 GMT</pubDate></item><item><title>The Vite version that silently broke my dev server</title><link>https://shadiul.github.io/blog/the-vite-version-that-silently-broke-my-dev-server/</link><guid isPermaLink="true">https://shadiul.github.io/blog/the-vite-version-that-silently-broke-my-dev-server/</guid><description>Production built clean. Dev 500&apos;d on every transform with a cryptic Missing field moduleType error. The culprit was a version my lockfile hoisted unasked.</description><pubDate>Sun, 12 Jul 2026 00:00:00 GMT</pubDate></item><item><title>Writing notes for a machine to read</title><link>https://shadiul.github.io/blog/writing-notes-for-a-machine-to-read/</link><guid isPermaLink="true">https://shadiul.github.io/blog/writing-notes-for-a-machine-to-read/</guid><description>My notes have one primary reader, and it isn&apos;t me. Here&apos;s what changes when you write your second brain AI-first instead of human-first.</description><pubDate>Sun, 12 Jul 2026 00:00:00 GMT</pubDate></item></channel></rss>