Proof library by Michał Gacek
Practical notes on AI workflows, architecture, quality, and full-stack delivery.
These posts document decisions behind real systems: TypeScript, backend architecture, testing strategy, developer workflows, and AI beyond demos.
Featured article
Anatomy of an Astro Blog: Islands, i18n, and a Strict CSP
A personal blog is a portfolio where every decision shows: static Astro, islands hydrated on demand, bilingual routing, and a hash-based CSP.
-
Value Objects in Python: Make Invalid States Unrepresentable
A practical guide to value objects in Python - frozen dataclasses, self-validation, behavior over primitives, and when not to use the pattern.
-
Redis in Practice: A Case Study with Hono and TypeScript
A practical case study of Redis in a Hono + TypeScript API - caching, counters, rate limiting, and short-lived state - solving real backend problems.
-
How I Built an LLM Workflow That Stabilized E2E Tests in a Real Project
Flaky E2E tests kill team velocity. How I turned an LLM from a code generator into a debugger, with skills and anti-flake rules from a real Playwright suite.
-
When to Use CPQ and the EAV Model - Lessons from Building a Prototype
When CPQ and the EAV model actually make sense, when they are overkill, and why the two so often end up in the same codebase.
-
How I Built an AI Agent From Scratch in TypeScript - No Frameworks, No Magic
How I built a real AI agent from scratch in TypeScript - no LangChain, just a loop, the OpenAI API, and the architecture lessons frameworks hide from you.
-
The End of Fast Coding: What Seniority Really Means in the Age of AI
In the age of AI, seniority is becoming less about writing code fast and more about making high-quality decisions in complex contexts.
-
MCP Is Not Dead. Most Teams Just Haven't Learned How to Evaluate It
A practical evaluation of MCP and CLI tooling for AI agents, covering centralization, security, observability, latency, and hybrid workflows.
-
Hard Negative Mining: A Practical Guide for Senior Developers
A practical explanation of hard negative mining for embeddings, ranking, recommendation systems, contrastive learning, and model evaluation.
-
TypeScript's `satisfies` Operator: When and How to Use It
Learn how TypeScript's satisfies operator preserves literal inference while checking object shapes, mapped types, and safer configuration objects.