Hello, I'm Benjamin 👋
A curious software engineer based in Skopje, North Macedonia, solving engineering problems, building products people use, and sharing what I learn along the way.
-
Astro Hydration Mismatch Appears When Server and Client Render Different Text Content
Astro throws a hydration mismatch when a component renders different text on the server and in the browser.
-
Vite Throws
Module "fs" has been externalized for browser compatibilityWhen Browser Code Imports Node Built-insExplain why Vite externalizes Node built-ins in browser bundles and how to keep server-only modules out of client code.
-
Cloudflare Workers Read
undefinedEnvironment Bindings Becausewrangler.tomlDoes Not Declare ThemShow why a Worker sees missing secrets or vars at runtime and how to define bindings in
wrangler.tomlcorrectly. -
Nginx Sends the Wrong Host Header to an Upstream App Behind a Reverse Proxy
Show how Nginx rewrites Host and
X-Forwarded-*headers and how to preserve the original domain upstream. -
Remix Loses Session Cookies on a Cross-Site Callback Because
SameSiteBlocks the CookieExplain why a Remix session cookie disappears on a third-party redirect and how to set cookie attributes correctly.
-
Deno Fails to Resolve an npm Package Imported Without the
npm:PrefixShow why Deno treats bare npm specifiers differently and how to import packages with the right resolver rules.
-
Cloudflare Workers Reject a Second Read with
TypeError: body used alreadyAfterrequest.text()Fix Workers handlers that consume a request body twice and learn when to clone or cache the parsed data.
-
ESLint Fails with
Parsing error: Cannot read file tsconfig.jsonAfter Switching to Flat ConfigExplain why ESLint can no longer find the TypeScript project file and how to point the parser at the right path.
-
Vercel Builds a Next.js App with
process.envUndefined in Client CodeShow why browser bundles cannot read server-only env vars and how to separate build-time, server, and client values.
-
Turborepo Keeps Rebuilding the Same Package Because a Task Writes Into Its Own Input Directory
Stop a watch loop caused by generated files landing inside a task's watched inputs and triggering endless rebuilds.