September 9, 20267 min readJohnny UnarTag Pinning Is Not Supply Chain SecurityThe TeamPCP compromise of trivy-action rewrote 76 of 77 tags overnight. If your CI pins to @v0.34.2, you already lost.Read more
September 7, 20268 min readJohnny UnarYour Replication Account Is the Blast RadiusCVE-2026-6471 turns any REPLICATION-attributed Postgres account into RCE. Here's how to audit the credentials nobody has looked at since 2019.
September 2, 20266 min readJohnny UnarYour Image Optimization Pipeline Is a Remote Code Execution SurfaceThe Next.js AVIF CVE wasn't in Next.js. It lived four dependencies deep, in code nobody on your team has ever read, and it ran on every image request.
August 26, 20268 min readJohnny UnarThree WordPress SSO CVEs in 90 Days All Have the Same Root CauseSAML signature confusion keeps producing unauthenticated admin takeover. The problem isn't plugin hygiene, it's what you inherit when you delegate auth to a dependency.
August 24, 20268 min readJohnny UnarToken Spend Is an Architecture Problem, Not a Budget ProblemUber burned its 2026 AI budget by April. The fix isn't spending controls, it's fixing the lazy agent design that made the bill explode in the first place.
August 19, 20267 min readJohnny UnarYour AI Helpdesk Bot Has an Account Takeover Vector You Designed InMeta's 2026 chatbot password reset exploit wasn't an infra bug. It was an interaction design failure, and your SaaS assistant probably has the same one.
August 17, 20267 min readJohnny UnarContext Rot Is Not a Context Window ProblemBigger context windows don't fix agent drift. Your long-running agent loses the plot because of context rot, and no amount of tokens saves you.
August 12, 20267 min readJohnny UnarYour Agent Eval Sandbox Is the Attack SurfaceThe AISI July incident wasn't about frontier model danger. It was about containment design nobody actually does. Here's a checklist to fix that.
August 10, 20269 min readJohnny UnarThe Review Queue Is Now Your Deployment BottleneckAgents open more PRs in a day than your team used to see in a month. Your 2023 review process can't keep up. Time to redesign it.
August 3, 20267 min readJohnny UnarThe debug and chalk Hijack Was a Maintainer Identity Failure, Not a North Korea StoryAmazon tied the September 2025 npm hijack of debug and chalk to the same North Korean crew behind the axios compromise. The scary part isn't the attacker. It's the model.
July 29, 20268 min readJohnny UnarThe CRA 24-Hour Clock Starts September 11 and Your Dependency Graph Is the LiabilityArticle 14 of the EU Cyber Resilience Act lands on your codebase, not your legal team. Here is what the 24-hour reporting rule actually demands from engineering.
July 27, 20268 min readJohnny UnarYour LLM Gateway Is a Credential Vault, and the LiteLLM Breach Proved ItThe March 2026 LiteLLM supply chain attack showed why your AI proxy is the highest-value target in your stack, and why most teams still treat it like a utility library.
July 22, 20267 min readJohnny UnarPrompt Injection Is a Code Execution Primitive NowMicrosoft's CVE-2026-25592 showed a single injected prompt driving host-level RCE. Your threat model still treats it like a content problem. That's the bug.
July 20, 20268 min readJohnny UnarStop Constraining Agents With Prompts, Constrain Them With InfrastructureStripe's Minions ship 1,300 zero-human PRs a week against a trillion-dollar codebase. The trick isn't a smarter model, it's making the sandbox the permission system.
July 15, 20266 min readJohnny UnarThe Axios Postinstall Hook Was the Whole AttackSapphire Sleet published axios@1.14.1 with a RAT in a postinstall hook. OIDC Trusted Publishing didn't save anyone. Here's the misconfiguration that actually let it happen.
July 8, 20267 min readJohnny UnarAI Is Rewriting Your IAM Layer and Nobody Reviews the DiffA hands-on audit playbook for the overly broad permissions that LLM-generated backend code quietly bakes into your codebase on every PR.
July 1, 20269 min readJohnny UnarServer Actions Are Public Endpoints, Treat Them Like ItEvery exported Server Action is a callable HTTP endpoint with no auth, no rate limiting, no validation. Here's the hardening checklist we run on every Next.js project.
June 29, 20266 min readJohnny UnarThe Homogenization Trap: Why Every AI-Designed UI Looks Identical72% of designers now use generative AI, and the result is a sea of interchangeable SaaS dashboards. Tactile brutalism is the engineering answer.
June 24, 20268 min readJohnny UnarAI Code Passes CI and Breaks Production AnywayYour CI was built for deterministic human code. AI output is probabilistic and context-sensitive, and your validation pipeline has no primitives for catching where it fails.
June 22, 20266 min readJohnny UnarYou Are Paying for AI to Write the Bugs It Will Charge You to FixVelocity numbers measuring code written instead of value delivered are how engineering leaders are quietly fooling their own boards in 2026.
June 17, 20267 min readJohnny UnarYour Tests Passed and Production Still Broke: The AI Verification Gap Nobody Wants to Name81% of tech leaders report more production failures from AI code even with 92% pre-deploy confidence. The gap isn't volume, it's the pipeline itself.
June 15, 20269 min readJohnny UnarThe Vercel Breach Is a Template for How OAuth Sprawl Kills YouA hands-on audit guide for finding the silent OAuth grants, stale tokens, and unencrypted env vars that turn one phished laptop into a full breach.
June 10, 20267 min readJohnny UnarYour AI Dev Toolchain Is the Attack SurfaceThe June 2026 Microsoft GitHub compromise targeted developers running Claude Code and Gemini CLI. Your AppSec posture was never built for this.
June 8, 20268 min readJohnny UnarYour AI Coding Budget Is Buying the Illusion of Speed84% of developers use AI tools, but org-wide productivity is stuck at 10-30%. Here's where the ROI actually disappears and what to do about it.
June 3, 20268 min readJohnny UnarSLSA Provenance Did Not Save TanStack84 malicious package versions shipped with valid SLSA Build Level 3 attestations. The attacker hijacked the pipeline, not the credentials. Provenance signed the malware.
June 1, 20266 min readJohnny UnarThe METR Productivity Illusion in Real Engineering WorkMETR found senior devs were 19% slower with AI but felt 20% faster. That 39-point gap should change how you measure AI tooling.
May 13, 20269 min readJohnny UnarStructured Outputs Guarantee Syntax, Not SanityGPT-4o's JSON mode gives you valid JSON. It doesn't give you correct data. Here's why that distinction is destroying pipelines.
May 11, 202610 min readJohnny UnarPostgres + pgvector 0.8 Is Probably Enough for Your EmbeddingsBefore you spin up Pinecone or Qdrant, read this. We benchmarked pgvector 0.8 HNSW against Qdrant 1.13 and the results will bore you in the best way.
May 4, 202612 min readJohnny UnarTool Calls Are Not Actions: Build an Approval Queue FirstThe gap between an LLM returning a tool-call and actually running it against live data is where AI features go wrong. Here's the concrete pattern.
April 29, 20268 min readJohnny UnarStructured Outputs Guarantee Shape, Not SemanticsJSON mode doesn't mean your LLM output is safe to use. Here's why you need a schema contract layer on top of it.
April 27, 20269 min readJohnny UnarStructured Outputs Don't Mean Your LLM Data Is CorrectSchema conformance is trivially easy. Semantic correctness is where LLM pipelines actually fall apart, and most teams never notice until production.
April 22, 20269 min readJohnny UnarStop mocking your database: Postgres 17 makes it unnecessaryMocking your DB keeps tests green and production broken. Here's how transaction savepoints and schema isolation fix that.
April 20, 20269 min readJohnny UnarYour AI Feature Ships Fast and Rots FasterShipping a GPT-4o integration takes a weekend. Maintaining it takes a policy. Here's the one-page lifecycle template we actually use.
April 13, 20269 min readJohnny UnarPostgres Outbox Beats RabbitMQ for Webhook Ingestion Under 5k RPMBefore you bolt on SQS for webhook reliability, read this. A Postgres outbox table and a Go worker will serve most startups better.
April 8, 20269 min readJohnny UnarPostgres RLS Is Your Real Tenant Isolation Layer, Not DjangoManual WHERE clauses in your ORM will eventually leak tenant data. Here's how to wire Postgres 17 RLS into Django 6.x properly.
April 6, 202612 min readJohnny UnarStop warming pools: adaptive CPU-bursting that actually saves moneyWarm pools feel like a win until the AWS bill arrives. Here's a concrete pattern with Go worker pools, Redis token buckets, and KEDA that gets you sub-200ms p95 without paying for idle CPUs.
April 1, 202612 min readJohnny UnarEdge for delivery, Go for domainA strict partitioning recipe for Next.js 15 and Go 1.22, with auth, SSR streaming, flags, observability, and none of the hand-wavy edge hype.
March 30, 202610 min readJohnny UnarOne npm package nearly owned our Next.js 15 appA postinstall hook, a remote loader, and a few ugly hours in CI. The fixes were simple once we stopped pretending JavaScript supply chain risk was theoretical.
March 26, 202610 min readJohnny UnarStop Paginating in the Client, Let Next.js 16 Do ItClient-side pagination burns memory, inflates TTFB, and makes UX flaky. Cursor APIs plus route-segment caching fix the mess without a rewrite.
March 25, 202610 min readJohnny UnarA sane monorepo needs hard boundariesMonorepos work fine in 2026, if you treat boundaries as code and automate enforcement. Our setup is boring on purpose, and that’s why it holds.
March 24, 202610 min readJohnny UnarSwap Encoders Without Torching RetrievalEmbedding model upgrades break search in quiet, expensive ways. This is the rollout playbook we use to ship encoder changes without wrecking retrieval.
March 23, 202611 min readJohnny UnarEdge observability is mostly a telemetry problemNext.js 15 edge functions and Go 1.22 services need different observability than long-lived servers. Trace cold starts, collect sampled flamegraphs, and tail-sample hard.
March 22, 202610 min readJohnny UnarDon’t ship agent chains to SMB customersAgentic tool orchestration looks clever in demos and turns ugly in production. Use typed function calls, deterministic proxies, and explicit fallbacks instead.
March 21, 202610 min readJohnny UnarStop shipping business logic in Next.js edgeUse Edge for fast decisions, keep stateful work in Go. This split fixes correctness bugs, retries, and observability holes that keep showing up in SaaS systems.
March 20, 202610 min readJohnny UnarKill the GraphQL gateway at 12 servicesFederation adds a governance tax most mid-stage startups can't afford. Typed OpenAPI and consumer-driven contracts bring back speed and make failures obvious.
March 19, 20269 min readJohnny UnarZero-Downtime Django Postgres Migrations Need Multi-Step PlansSafe schema changes in a Django monolith come from staged rollouts, backfills, and boring operational discipline. Squashed migrations won't save you.
March 18, 202614 min readJohnny UnarMulti-tenant Postgres 16: pick RLS unless proven otherwiseMost SaaS teams should default to Row Level Security in Postgres 16. The hard part isn't SQL, it's pooling, migrations, and operational discipline.
March 17, 202610 min readJohnny UnarStop Forcing Analytics Through Django ORMReporting code packed into chained QuerySets gets slow, fragile, and unreadable. Put heavy analytics back in SQL, where Postgres can actually help you.
March 16, 20269 min readJohnny UnarShip prompts like code, or expect regressionsProduction LLM features rot quietly. Version prompts, test them in CI, canary against shadow traffic, and make rollback boring.
March 15, 20269 min readJohnny UnarShip one correct admin workflowConfig panels feel like product progress until they turn your SMB app into a support machine. Pick one strong admin path and defend it.