Changelog — Michael Kaminski
Every sizable update in one place: a site going live, an essay published, a clip posted, a piece of platform work landing. Each entry is dated the day it shipped and links to the thing itself.
- · Essay — Provenance in the Primary Key: 54 Facts In, 49 Stored, and a Dedupe That Has Never Fired: My Analysis Engine's fact base promises to deduplicate and keep the most confident copy. Its identity hash includes the collector and the file location, so two reports of the same fact can never collide. Measured 2026-10-18: 54 observations emitted, 49 stored, 41 distinct facts, 7 stored more than once, Stripe three times, and zero comparisons where the more confident copy won. Nothing broke because the graph builder re-merges by key one layer down, with insertion order instead of confidence. Two honest fixes, each costing provenance or reconciliation, and 45 days in which I built neither. Read the essay
- · Essay — Superior: The Company We Built, and the Paperwork I Never Did: Superior Contracting & Maintenance started in 2007 with my brother, Erik, working as an office assistant for a plumber. By the time I stepped back in 2023, it ran on 50 employees, hundreds of contractors across eight states, and more than $1 million a month in revenue. This is the candid version of how we built it: the contractors I paid from my front door, the 30% I was offered on a handshake, the CEO equity plan I wrote for someone else, and the one document I never wrote for myself. Read the essay
- · Paper — When Caching Meets Routing: Per-turn routing from Opus 5.5 to Haiku 4.5 saves 51.3% at list prices but 9.2% once prompt caching is modeled. Routing to Sonnet 5.5 raises cost 15.5%. Read the PDF
- · Feature — Added the Papers section — long-form write-ups as PDFs: Three white papers with the arithmetic shown: a generator for trade-business websites, the operating system behind a six-person services company, and the instrument behind the nine-idea demand test. Each PDF is the artifact of record; the essays are the short version. Every number is sourced to a repository, a live URL or a measurement you can rerun. Read the papers
- · Essay — The Banner Is Not a Lock: A Shadow Session Wrote the Row It Was Told Not To: My LinkedIn engine runs every job in shadow mode before it is allowed to publish. On 2026-09-22 a shadow scorecard session wrote a ledger row anyway, with the shadow banner at the top of its prompt. The fix was not a better banner. The engine now reads a mode from the environment, and in shadow every command that records a publish or a send exits 3 and writes nothing, a passing gate exits 3, and the session cannot fill forms or attach files. A prompt is an instruction; an exit code is a lock. 27 invariants, 57 differential cases, 2,760 ledger rows reconciled row-for-row. Read the essay
- · Paper — Sites That Differ by Data, Not Code: A generator builds a lead-gen site for a trade business from one intake file, deploys it to the edge and verifies it live in 46.5 s. The content is the part that does not fit in five minutes yet. Read the PDF
- · Site launch — linkedin-engine — control plane on Cloudflare, runner on the Mac, every job in shadow: The LinkedIn posting, engagement, outreach and job-search scripts lifted into one package with 27 named invariants, 57 differential cases against the originals, 24 tables in D1 (2,760 rows reconciled row-for-row), a 5-minute scheduler cron over a schedules table, and a console behind Cloudflare Access. All 15 schedules run in shadow, and shadow is now enforced by the engine (exit 3, nothing written), not by the prompt. The banner is not a lock
- · Essay — Guard Jobs Are Free: Four Agents, Three Human Gates, and Zero Model Calls on a Bad Request: A four-agent pipeline turns a sentence in Slack into a planned, tested, reviewed feature in GitHub. The design constraint is that no code can be written from an unrefined request: a bash guard job checks the Definition of Ready before any model is invoked, and a story with no Given-When-Then never reaches the dev agent. Labels are the only orchestration primitive, GitHub issues are the database, and a five-story feature costs 16 model runs. Three gates stay human on purpose: scope, sequencing, and merge. Read the essay
- · Paper — One Database, Many Connectors: A six-person maintenance company runs on one Postgres database, a static page and twelve serverless functions, with the rule that no tool ever talks to another tool. Three production incidents and the hand-over rule for an agent with a queue. Read the PDF
- · Site launch — trade-site-template — a website generator for trade businesses, two client sites live: A private Astro-on-Cloudflare template and generator: one intake file in, a built, deployed and verified lead-gen site out. Twelve decision records, ten quality gates, a fabrication rule enforced in the schema, and a measured 46.5 s deploy path. The first launched site was destroyed for being 21% of a reference on content; the fix went into the kit. Client sites generated 2026-09-21 and 2026-09-22. White paper (PDF) Case study
- · Essay — The Statute Rewrote the Product: A Permit Service That Had to Refuse Its Own Launch Pitch: A self-serve product let a homeowner put a licensed contractor's name on their permit and keep their own crew. Georgia's license-lending rules made that pitch the textbook prohibited fact pattern. The product was rebuilt in a day as a contractor-of-record model: scope approval gates the documents, the intake refuses unlicensed crews and trade permits on both the client and the server, and a full refund closes the order. 63 tests, zero credentials to build, and a rule I keep relearning: design against the statute, not the pitch. Read the essay
- · Paper — The Demand Instrument: Nine business ideas on nine landing pages built from one template, each with a pass/fail bar set before the traffic. The instrument, the funnel plumbing most templates get wrong, and a read model that refuses three misreads. Read the PDF
- · Essay — Measure Reach on the Log Scale: 738 Weeks Became 30 on the Same 182 Posts: My LinkedIn scheduler moves a slot on eight observations, so I priced the plan to fix it with volume. On raw impressions (182 posts, mean 223, SD 983, one post carrying 31.9% of all impressions) a two-arm test for a 20% lift needs 7,747 posts per arm, 738 weeks at 21 a week. On log impressions the same posts need 314 per arm, 30 weeks. Reach is multiplicative, so the log scale asks the question the data was generated by. The admitted cost: a log-scale test measures the geometric mean and is partly blind to the 12,959-impression outlier that carried the account. Read the essay
- · Site launch — Transparent Maintenance OS — Growth tab, Claude desk hand-over rule, licences with a voice gate: The operating system for a six-person maintenance company reached the shape in the white paper: a Growth tab with pipeline clocks, an events ledger, a scorecard against plan and a Monday report card; an ad-spend mirror attributing by phone identity; a licences panel whose sayable column gates what the calling agent may state; and a Call button that hands an account to TM Voice and says queued, never called. White paper (PDF) Case study
- · Essay — Prompt Cache Floors Are Per-Model, and the Cheap Model Has the Highest One: Claude's minimum cacheable prompt is 512 tokens on Opus 5, 1,024 on Sonnet 5, and 4,096 on Haiku 4.5, so the cheapest model is the hardest to cache and a miss bills silently at base rate. I measured the 53 SKILL.md files this machine loads: 53 clear the Opus floor, 44 clear Sonnet, 12 clear Haiku. On the median file, Sonnet 5 with caching is 57% cheaper on input than Haiku 4.5 without it, and the two cross at a 65% hit rate. The admitted cost: a harness I don't own sends the request, so file length is the only lever I hold. Read the essay
- · Site launch — Bloodline — a browser roguelike with no asset files: An isometric action RPG in Phaser 3 where every sprite, tile and note is generated at boot from code, including a synthesised adaptive score whose harmony, percussion and arpeggio cycles do not repeat for 168 bars. Resumable single-slot save that refuses payloads from a future build, boss HP scaling simulated against the real loot and levelling code, and a headless smoke test that fails on console errors and frame rate under 55. MAKaminski/bloodline
- · Open source — sdlc-agents — four agents, three human gates, guard jobs before any model call: A label-driven state machine on GitHub Issues that turns a sentence in Slack into a planned, tested, reviewed feature. A bash guard checks the Definition of Ready before any model is invoked, so a story with no Given-When-Then never costs a run. Scope, sequencing and merge stay human. A five-story feature is 16 model runs. Guard jobs are free
- · Essay — Designing Tools an Agent Can Actually Call: The brokerage MCP server connected to my agent exposes 34 tools and not one takes an account identifier, so it can never answer a question across my three accounts. The 228-line read-only script I wrote around it taught five rules: the variable the user changes is an argument, enumerate before you fetch, return the decision variable, make read-only structural, and keep retry and fallback inside the tool. The admitted cost: the tool has never completed a pull, because I designed it for auth a scheduler cannot satisfy. Read the essay
- · Site launch — Transparent Permits — rebuilt as contractor-of-record after reading the statute: A self-serve product for a licensed Georgia residential contractor: structured intake, server-priced Stripe checkout, a private portal, seven drip sequences, sixteen county pages from GeoNames data, and PostHog with a reverse proxy. Launched 2026-09-02; on 2026-09-03 the intake gained six hard stops and scope approval began gating the documents, because the launch pitch matched the licence-lending fact pattern. 63 tests, zero credentials to build. transparent-permits.vercel.app The statute rewrote the product
- · Essay — Human Approval Gates for Irreversible Agent Actions: I run 47 agent skills against my own accounts. Two of them stop at the moment of action and wait for me. The gate that protects you is not the one that fires on every run — it is capability removal, which costs zero human attention, and kill gates, which cost nothing until they fire. The axis is reversibility, not importance: a cancelled tutoring appointment gets no gate and a $60 order does. Three of the 47 honor the kill switch, which is the part I got wrong. Read the essay
- · Essay — One Knowledge Base, Four Surfaces: Pages, Graph, Search Index, and MCP: The Genome of Games publishes 1,180 records four ways — 1,245 static pages, an interactive graph, a 126 KB search index, and an 8-tool MCP server. One build writes all four in 0.39 seconds. The MCP server never queries the site; it imports a build artifact, so an agent and a crawler cannot disagree. The one surface the build does not own has already drifted by 7,492 links. Read the essay
- · Site launch — The Demand Test — nine ideas, fourteen days, zero spend: A public validation experiment running August 17–31: nine business ideas, each with its own landing page and its own pass/fail threshold — a booked call, a $1 refundable deposit, a written reply. One idea gets built on August 30, and the data behind the pick is published with it. ten-experiments.vercel.app
- · Site launch — Demand Desk — the funnel behind the demand test: The instrumentation half of the demand test: nine landing-page funnels compared side by side on one dashboard, so the August 30 decision is read off a chart rather than argued. Access is allowlisted; the public entry point is the sign-in screen. demand-desk-rho.vercel.app
- · Site launch — DealPacket — one address in, a packet every party can read: Real-estate underwriting as an MCP server. One address returns ARV, rent estimates, comps and ownership, then renders the same packet five ways — investor, GC, lender, CPA, title — with the source and fetch timestamp printed next to every figure so the recipient can verify instead of trust. dealpacket.vercel.app
- · Site launch — The Genome of Games — an ontology of game mechanics: 168 mechanics, 618 games, 394 studios and 4,366 inheritance links from 1962 to 2025. Mechanics are grouped by the design problem they solve rather than by genre, and every one traces its descent — contextual execution in Gears of War back to collision detection in Spacewar!. genome-of-games.vercel.app Source
- · Feature — Added this changelog: A running log of every sizable update: sites launched, essays published, clips posted, platform work shipped. Essays and clips derive from their own data files, so the page updates itself when the writing routine runs. You are here
- · Feature — Field clips get transcripts and VideoObject schema: A ten-second vertical video is opaque to every crawler that matters, so /clips writes the spoken line and the finding behind it into the static HTML and into VideoObject schema. Clips that tease an essay now attach to that essay in the prerendered markup too. /clips
- · Open source — launch-template — a new product launch in under fifteen minutes: A repo template that stands up a marketing site, analytics, database, payments and booking for a new idea in one command. One Vercel project per launch so each gets its own domain and deploy cadence; everything underneath is shared and joined by a single launch_slug. This is the machine the demand test runs on. MAKaminski/launch-template
- · Field clip — The gate that stops nothing: A statistical gate on an agent's instruction file, and the power calculation that shows the 5% threshold written next to it never binds. At this variance a 14-day window catches a true 5% lift 44% of the time — a coin flip on your own best edits. Watch the clip
- · Field clip — Zero trades, and the level still moved: A dealer-gamma pipeline walked the QQQ gamma flip 3.9 points and dropped the put wall ten dollars across eight consecutive writes with spot pinned at 717.12. Nothing traded. An overwritten file has no history to argue with — one append-only CSV is what caught it. Watch the clip
- · Essay — Shipping an AI Agent Through Compliance Review in Regulated Lending: On May 12, 2025 the CFPB withdrew 67 guidance documents in a single notice, including both circulars covering adverse-action notices for complex algorithms. The underlying duty did not move. Build the agent against the statute and against the evidence it will have to produce — starting with a 120-day retention floor that most agent logs miss. Read the essay
- · Feature — Prerendered the SPA so crawlers see prose, not a stub: The site is a CRA single-page app, so the HTML leaving the server was <div id="root"></div> and nothing else — the portfolio and the writing were effectively invisible to search and LLM crawlers. A postbuild step now writes real prose into #root for the home page, /writing and every essay, with no headless browser and no new dependencies. /writing
- · Feature — Charts and per-article social cards for the essays: Essays got generated figures — a retention floor, an animated counter bug — plus a per-article OG card so a shared link carries the piece rather than the site-wide image. The figure generator is checked in, so the charts are reproducible rather than pasted screenshots.
- · Essay — Statistical Gating for Agent Instruction Changes: Every edit to an agent's instruction file is an experiment. Mine requires a statistically significant improvement — Welch's t-test, p < 0.10, at least a 5% lift — against a 14-day rolling baseline before the change is allowed to stay. Then the power calculation showed the 14-day window can only detect a 0.97 standard-deviation shift, which makes the 5% threshold decorative. Read the essay
- · Essay — I Gave My Website a Voice, and the Voice Was the Easy Part: There is now a digital twin on my homepage you can talk to out loud, hands-free, in a clone of my voice. Getting it to sound like me took an afternoon. Getting it to sound like a person took rewriting how it writes. Read the essay
- · Site launch — Commitgraph — GitHub leaderboards that show the data: Worldwide, country and city rankings for the most active developers on GitHub. Existing ranking sites ship a paginated table of logins and one number; this one adds 371-day contribution heatmaps, rank-movement bump charts, a tile-grid world map, and a follower/contribution scatter that shows fame and output are different axes. It also labels what it does not know. top-github-users-amber.vercel.app Source
- · Site launch — YardLine and VendorLink go live: Two marketplaces in one week. YardLine is a roster-gated prospecting CRM for heavy-duty truck salvage yards around metro Atlanta; VendorLink pairs event organizers with local vendors through profiles, one-click applications, digital contracts and payment. yard-line.vercel.app vendor-link-web.vercel.app
- · Feature — A voice-capable digital twin on the home page: An ElevenLabs-backed twin that answers questions about the work out loud, with hands-free conversation mode, TTS-aware text so it reads numbers like a person, and a visible reason when a speech request is rejected instead of silent failure.
- · Essay — I Shipped the Same Pull Request Twice and Only Noticed the Second Time: Behind the Build, Vol. 8: two new tabs — Websites and Products — landed a day apart and turned out to be the exact same diff wearing different screenshots. What that repetition taught me about when a pattern is worth abstracting (and when it very much is not). Read the essay
- · Essay — Every URL on My Site Returns 200, Including the Ones That Don't Exist: Behind the Build, Vol. 7: I had to prove four recovered articles were actually live, and discovered my own verification was a test that could never fail. The fix came from a filename. Read the essay
- · Essay — My Automations Didn't Crash. They Just Stopped Talking.: Behind the Build, Vol. 6: the daily-article robot quietly skipped four days without erroring once. A look at the fleet of small agents I now run across a portfolio site, a trading account, a resale business, and a spend audit — and why silence is the failure mode nobody instruments for. Read the essay
- · Site launch — COT Signal — CFTC positioning for Bitcoin and Ether: Weekly CME futures positioning read straight off the Commitments of Traders report: asset managers, hedge funds and dealers, net long against net short, with no interpretation layer between the filing and the chart. cot-signal.vercel.app
- · Essay — My Portfolio's Robot Diarist Cloned Itself Three Times, and They All Wrote About the Same Week: Behind the Build, Vol. 5: I sat down to write today's "what I shipped" entry and found three separate unmerged pull requests already fighting over the same volume number. A classic race condition, just wearing a writer's hat. Read the essay
- · Essay — I Built Analytics to Watch My Site, and Discovered It Was Watching Nothing: Behind the Build, Vol. 4: wiring up real product analytics turned up a silent reverse proxy eating every POST request, a dropped entry pageview, and a Gantt chart bug where two bars collided despite their dates never touching. Read the essay
- · Essay — I Got Locked Out of My Own GitHub Account (Sort Of), So I Found the Back Door: Behind the Build, Vol. 3: adding a Products tab for my desktop tools meant fetching screenshots from repos my own session wasn't allowed to touch — and learning the honest way to handle a missing screenshot instead of faking one. Read the essay
- · Feature — Added the Products directory: A home for the desktop tools and open-source utilities that live on GitHub rather than on a URL — the macOS monitor, the touchscreen daemon, the on-device context capture. /products
- · Essay — I Built a Blog That Yells at Me If Two Robots Write the Same Diary Entry: Behind the Build, Vol. 2: today's work was a new Websites tab showcasing live production sites, plus a small guardrail that stops this very writing series from ever double-booking a day. Read the essay
- · Feature — Added the Websites directory: A directory of every production site running under the Kaminski Vercel account, each card linking straight to the live deploy. It has grown from four entries to twenty-one since. /websites
- · Essay — Why Fintech Belongs in Atlanta — and Why That Matters for Your Cap Table: Atlanta quietly processes a huge share of the world's card transactions and has produced a run of fintech exits. Here's what that ecosystem means for founders building here — and the finance-plus-engineering talent it creates. Read the essay
- · Feature — Rebuilt the site on a dark editorial theme: A full redesign: one dark palette with an electric-yellow accent, kinetic motion, a company-logo marquee in the hero, and role-specific landing pages that no longer leak a pastel background onto the home page when a role is persisted. Home
- · Essay — I Spent a Day Teaching Robots How to Read My Résumé (So You Don't Have To): Behind the Build, Vol. 1: a lighthearted look at the SEO/AEO overhaul of this very site — JSON-LD schema soup, an llms.txt for AI crawlers, and the great WebP-ification of my own face. Read the essay
- · Essay — Fractional CFO vs. Fractional CTO: Which Does Your Early Fintech Need First?: A practical guide for fintech founders deciding between fractional CFO and CTO help — the signals that tell you which seat is actually on fire, and how to sequence the two. Read the essay
- · Essay — Quality of Earnings, Explained for Fintech Founders: What a Quality of Earnings (QoE) analysis actually looks at, why fintech QoE is different, and how founders can be ready before a buyer or lender runs one. Read the essay
- · Essay — Why Your Fintech's CFO Should Be Able to Read the Codebase: In fintech the ledger is the product. A finance leader who can read the code that produces the numbers removes the most expensive translation layer in the company. Read the essay
Book a Call · Download Resume · MKaminski1337@gmail.com · (404) 838-8613 · LinkedIn · GitHub · DEV · X