Wigley Studios Blog

Expert insights on AI-powered UI generation, media deduplication, UI kit design, and developer tools.

Products

A Murder Mystery Party You Play on Your Phones: The Cold Ledger Digital Editions

The Hundredth Episode, a murder mystery party for 8 to 20, and The Orpheum File, a cold case for one or two, now play in the browser on your phones: nothing to print, no app, players buy nothing, the host plays too, and both work in one room or on a video call. What each edition does, what you need, how long each takes, what each costs, where to buy, and which one to pick.

Read Article
October 7, 2026 12 min read
Engineering

How to Build a Series of Static Pages From One JSON File, and Make the Build Refuse Bad Data

Every case in The 90-Second Case comes out of one data file and one command, and most of the command is a refusal: a gap in the numbering, a suspect with no explanation, a stray year or a reused name stops it before it writes anything. The shape of one case, exactly which fields the year check reads, the template guard that refuses an unfilled placeholder, share cards that show the cover and never a page from inside, and why the same validation runs in the test suite the deploy already runs.

Read Article
October 2, 2026 10 min read
Products

Free Browser Mystery Games: The 90-Second Case, and What You Get in 90 Seconds

The 90-Second Case is a series of free one-screen mysteries in the browser. What a minute and a half buys, in order: a page that waits until you open the file, four exhibits you can enlarge, one name per opening, an explanation and a grade, a share line that carries the case’s own link and never the answer, which link to send for one case and which for the series, and the door to the two long cases in the same archive.

Read Article
October 1, 2026 6 min read
Insights

Caught by Paper, Never by Motive: 5 Rules for a Mystery You Can Solve Fairly in 90 Seconds

Every free 90-Second Case is built to one five-line design table: exactly one statement contradicted by a document, every other statement backed by a document rather than by another witness, the tell readable on one screen inside ninety seconds, caught by paper and never by motive, years redacted. What each rule is for and what it costs, the same rule in the printable case file and the party game, and why a log line that says something succeeded is testimony, not proof.

Read Article
September 30, 2026 9 min read
Comparisons

3 Ways to Play a Mystery: Free in Your Browser, a Printable Cold Case File, or a Murder Mystery Party

Three ways into the Cold Ledger archive, compared on what each one costs. The 90-Second Case is free in the browser and asks for ninety seconds of attention; The Orpheum File is a $6.99 case file for one or two over an evening; The Hundredth Episode is a $29.99 party for eight to twenty that needs two days of notice. Who each one is for, what you give up, what you can replay, and what carries from one to the next.

Read Article
September 29, 2026 6 min read
Guides

How to Tell Whether Your Shopify Payments Account Is on a Reserve

Shopify’s terms name no threshold for a reserve and keep the decision to Shopify’s discretion, so how does a merchant know? Four places to look, in order: the Payouts page’s own wording, the transaction list’s three reserve-typed entries, the terms’ description of a reserve account, and only then any app, ours included, judged by one question: what does it do when it is not sure? Worked through against Payout Guard with its thirty-day window, its 15-point pillar, its weakest-pillar-dominant formula and its two known limits printed.

Read Article
September 18, 2026 8 min read
Products

Find the Script Tags on Your Storefront Before They Stop on March 1, 2027

Shopify stops injecting script tags into storefronts on March 1, 2027, and apps cannot create or update them from October 1, 2026. Nothing will error, and there is no page in the admin that lists them. How to find the ones on your storefront in five minutes, which vendors have already moved to an app embed or a pixel, what the free public check can and cannot tell you, and where CheckoutProof’s scan stops.

Read Article
September 17, 2026 9 min read
Products

Every Failing Element, With Its Reason

AccessGuard’s audit now keeps every failing element on a page and what axe measured about each one: for a contrast failure, the ratio, both colours, the font size and the ratio the criterion requires, for that element. The lists are capped, the cap is printed, and nothing cut from a list is cut from the count. The passing colour is computed rather than suggested, the twelve checks automation cannot make have a checklist that never scores, findings are labelled by who owns them, and the dated remediation record at the end is never a certificate.

Read Article
September 17, 2026 8 min read
Engineering

The Lot Dev Log: The Bug Report That Could Not Be Filed

Instalment two gave three builds one dated paragraph. Here is the story they add up to: the game’s own way of telling us it had broken was itself broken, in a way no log could show, because the reporter was built seventh in a chain where any earlier failure deleted it. What replaced it: a reporter that rebuilds itself and is built first, a sweep for the same shape everywhere else, three routes in that each send less than the last, an opt-in that is off until you switch it on, the log on screen so you can see what would leave, and the fault it found two days later.

Read Article
September 16, 2026 9 min read
Comparisons

Cited vs Asking the AI Yourself

Typing a buyer question into a chat window and reading the answer is a legitimate first look, and it measures the model’s memory. Cited queries three assistants in their web-grounded mode on purpose, scores mentioned, cited and prominence as three separate things across a prompt set generated from your own catalog, and records a provider that could not answer as a named error rather than a result. Two different questions, which one you are asking, and what the sixty-second test still does better.

Read Article
September 15, 2026 8 min read
Insights

The Two Names Every Shopify App Has, and Which One a Link Must Use

A Shopify app has a listing slug for its App Store page and an admin handle for the merchant's own admin, and a deep link in an email has to use the second. They are set separately and often nearly match, which is exactly why a value copied from your own configuration is a claim rather than a verification. How the seven apps' mailers build their links now, the test that records where every handle was read, and three rules worth stealing.

Read Article
September 14, 2026 7 min read
Guides

Reading a Free Scan You Did Not Run

Somebody hands you a scan result with a score, a grade and a colour. Four questions settle almost any automated report, and none of them need you to know the tool: what did it read and from where, what could it not see, what is its scoring shape, and can it report something that costs nothing? Worked through against our own engines, where a single constant decides what the number can possibly mean and a normalised score reads 43 from outside and 82 from inside for the identical defect.

Read Article
September 11, 2026 8 min read
Products

What CheckoutProof Checks Before It Calls a Tracker Broken

CheckoutProof's free check reads a store's public home page and sorts the trackers it recognises into two buckets: the eleven with a checkout counterpart worth confirming, and the five whose Shopify installs never had one. It reports medium and info and never HIGH, because nothing observable from outside can support the sentence “this is broken”. The rule behind the buckets, the two traps the classification walked into (adding an enum member is a breaking change, and a measurement tool that is also a load generator reports its own footprint as a finding), and why a question beats an alarm.

Read Article
September 10, 2026 8 min read
Engineering

The Lot Dev Log: Five Builds in Three Days

Instalment one was about what must not ship. This one is the opposite problem: five builds went out between 5 and 7 September, and almost every entry in them is the same kind of entry — a thing that existed but was not yet behaving like an object. A roof that did not meet the walls, ceiling lights hung inside a beam, concrete floors playing footsteps on soil, flight that was a debug camera. Plus the best bug of the five, which is that Windows renumbered the virtual monitor and The Lot stopped recognising its own display.

Read Article
September 9, 2026 9 min read
Comparisons

AgeProof vs an Age Gate in Your Theme

A theme snippet runs in the shopper’s browser, so everything it knows the shopper controls. It can present, remember and hide; it cannot decide, because deciding needs something the shopper did not tell you. AgeProof takes the decision on the server: it fails closed, reads the minimum age from the shop rather than the request, and returns a signed token for a pass and never for a block — which is what lets the checkout validation function refuse an order that never cleared the gate. Including the August version of ours that got this wrong, quoted with the one-line expression that did it.

Read Article
September 8, 2026 9 min read
Insights

It Passed for the One Input I Happened to Give It

A verification that passed end to end can still have proved one thing: that the tool works for the one input it was given. A single green path is not coverage. The three shapes of URL every store checker must be handed before anyone declares it working, how our public checkers follow the apex-to-www redirect with the address re-validated and the connection re-pinned on every hop, the guide that had already described the mechanism, and the CI assertion that can outlive the condition it was written for.

Read Article
September 7, 2026 9 min read
Guides

Three Scans You Can Run on Your Own Store Right Now, and the Question Each One Cannot Answer

Three of our Shopify tools have a public front door: a real accessibility audit, a Merchant Center readiness check and a Made-in-USA claim check. No install, no account, no permissions granted to anyone. This guide is built around the half the marketing page does not lead with — the accessibility scan reads exactly one page because the code says MAX_PAGES = 1, the readiness score refuses to stack its own penalties on purpose, the origin check can read what your store says and never what your catalog declares, and none of the three makes you compliant. Every limit read out of the running code.

Read Article
September 4, 2026 9 min read
Products

Four Killers in One Box, and the Host Does Not Know Either

Every murder mystery party game hands the host the answer and asks them to keep a straight face for three hours. The Hundredth Episode ships four complete sealed cases and a picker that selects one without ever showing them which — so the host plays too, finds out with the room, and three cases stay unopened for next time. What is in the box, the honest cost of a host who cannot steer, and how it differs from the quieter solo file it is a sequel to. No spoilers for either.

Read Article
September 3, 2026 9 min read
Engineering

The Lot Dev Log #1: What Must Not Ship

First entry in a build log for The Lot, a Windows app that hangs your real software on the walls of a 3D world. It is not released; there is a private playtest behind a password. This entry is the unglamorous question: what separates a build that runs on your machine from one you can hand to somebody else? The version comes from source while the build comes from disk. The executable's timestamp lies. Ship by hash rather than by filename, and refuse on the unknown hash. Plus why the interpreter is embedded rather than copied — 2.4 GB against 660 MB, measured.

Read Article
September 2, 2026 11 min read
Insights

The Failures That Log Success: Why a Log Line Is a Claim, Not Evidence

An error is a gift — it has a timestamp and a place to start looking. The failures worth designing against are the ones that finish cleanly and write a reassuring line. Four shapes of them, each found in one sweep of our own Shopify fleet and fixed at the shared layer: an error with no identity attached, an erasure narrower than its log line, a mailer that degrades so gracefully it does nothing (which no deploy dry run could catch, because a dry run skips the transport), and a retry with no stop condition. What connects them, and the testing move that turns a restated list into a re-derived one.

Read Article
September 1, 2026 10 min read
Comparisons

Payout Guard vs the Payouts Page: Your Dashboard Shows You a Number, and It Is Not the Number That Decides

Read Shopify's Payments terms looking for the chargeback rate that triggers a reserve and you will not find one — reserves and suspension are set “in our sole discretion,” and a reserve may hold the full amount. The only published numeric threshold in the chain belongs to Visa, counts fraud reports plus disputes over settled card-not-present transactions, and does not identify a merchant below 1,500 events a month. What is left worth measuring, why winning a dispute does not lower your rate, and the four scopes that decide what a payout scanner cannot see.

Read Article
August 31, 2026 12 min read
Guides

Proving the Ban Lands: fail2ban Config You Can Actually Verify

A fail2ban can be installed, configured and enabled and still not be running, because “enabled” describes what systemd intends at boot, not what survived it, and an empty firewall chain looks identical to a working one. The four-command drill that proves a ban reaches the kernel, why “grep for your f2b chain” turns out not to be a readiness test at all, the five clocks to read together, the two honest side effects of testing on a live box, and the 95-day gap on our own box that produced the drill.

Read Article
August 21, 2026 11 min read
Products

Six Tools That Never Send Anything — and the Ninety-Second Way to Check

Every tool page promises "your data never leaves your browser." A promise is not a receipt. The six free-resources scripts — 1,592 lines re-audited on publish morning — contain no network primitive at all; here's the DevTools drill that proves your input stays in the tab, the full inventory of what the pages do load (CDN engines, icons on every page, first-party analytics, and the one form that sends what you type when you submit it), and what blocking the CDN actually costs.

Read Article
August 20, 2026 10 min read
Engineering

How to Fetch a URL a Stranger Typed: SSRF, DNS Rebinding, and the Transport That Pins

Four of our public checkers fetch whatever URL a stranger submits — the textbook SSRF setup, operated on purpose. Why "validate the hostname, then fetch the hostname" fails to DNS rebinding, the httpx transport that pins the validated IP while SNI and the Host header keep the typed name, why refusing redirects is the half everyone omits — and the honest census: one guard, four copies, and the browser path where the pattern ends.

Read Article
August 19, 2026 11 min read
Insights

The Expiry Date Someone Else Set: Building Against a Deadline You Don't Own

Shopify shuts off legacy checkout ScriptTags for non-Plus stores on August 26 — eight days after this publishes. Inside the app built for that date, the deadline lives two ways: as data read by a function that takes the clock as an argument (whose Plus arm was born already flipped), and as English prose — a plan card, a scan line, two marketing headings — that will sit in the wrong tense the morning after. A census of both, recomputed on publication morning.

Read Article
August 18, 2026 10 min read
Comparisons

Old Glory vs the FTC "All or Virtually All" Standard: What a Scanner Can Flag, and What Only Your Records Can Prove

The FTC says an unqualified Made in USA claim needs competent and reliable evidence before it goes up — and nothing that reads a storefront can supply that. What the scanner actually reads (five fields and your declared origin data, under a ruleset dated 2026-06-05), the FTC-charged phrase its keyword layer misses, why one qualified phrase stands it down at the product level — and the executive order, April sweep, and July warning letters that made this the year to keep records.

Read Article
August 17, 2026 12 min read
Guides

Knowing It Broke Before Your Users Do: The Fourth Leg of a VPS Deploy

Deploy, migrate, restore — and then the box sits unwatched. The recurring process the series never built: a five-minute watcher that dedupes its own alerts (four ticks, one mail, one all-clear), the phantom unit that paged 187 times about a service that didn't exist, cron's compiled-in thin PATH and the single binary it broke, the expired cert an edge served over a healthy origin — and the greenest checkmark on the box, guarding a truncated file. All production, all dated.

Read Article
August 14, 2026 12 min read
Products

Inside AgeProof: How a Checkout Block Survives a Shopper With DevTools

The age-gate cart attribute is buyer-writable — one console POST rewrites it — so the block verifies a signed token in Shopify's Function sandbox with hand-written, vector-pinned crypto (50/50 tests this morning). The honest spine: the mint endpoint was fail-open until this month, we found it auditing our own claims, and the fix — fail-closed verdict, merchant-owned minimum age, server-side age check — is the best illustration of the design principle the product is built on. Plus the metafield cliff, the fail-open/fail-closed merchant switch, and the boundary no cryptography moves.

Read Article
August 13, 2026 12 min read
Engineering

How to Verify a Webhook Chain: Declared, Registered, Delivered, Recorded

Webhooks die in the gap between configuration and reality, and that gap is four separate links proven at four different surfaces. Worked against two live systems — a TOML-declared Shopify app and a FastAPI service taking Stripe events — including the retry-storm signature, the 401 you're required to return, and the uncomfortable truth: the registered link can't be checked from your own infrastructure, and silence never answers it.

Read Article
August 12, 2026 12 min read
Insights

Seven Apps, No Order or Customer Scopes: What Least Privilege Actually Costs

18 permission slots, 12 distinct scopes, zero order or customer access — recomputed from the config files on publication morning. What each refusal cost and how every capability came back a different way: a theme extension instead of theme edits, an app-owned metafield instead of a write scope, a crawler where a permission would have been — plus the places the boundary is thinner than the scope list suggests.

Read Article
August 11, 2026 11 min read
Guides

Backups You've Actually Tested: The Third Leg of a VPS Deploy

A backup nobody has restored is a belief, not a backup — so we ran the rehearsal against our own four production databases while writing this, and one of them does not restore. The dump flags that matter, the scratch-schema procedure, the timing number nobody knows, and the errno 150 that passed every artifact check for months.

Read Article
August 7, 2026 11 min read
Products

Inside Cited: How to Ask Three AI Models Whether They Know Your Store

The Inside series reaches the other shelf. Eight deterministic buyer questions, three web-grounded providers queried concurrently (never bare models — that would measure training memory), substring scoring that never asks an AI to judge an AI — and the disclaimer the app doesn't say yet: one run is a sample, not a verdict.

Read Article
August 6, 2026 10 min read
Engineering

How to Handle File Uploads in FastAPI: Validation, Limits, and the Traps

An upload endpoint is the one place strangers hand your server arbitrary bytes to keep. The validation gauntlet in the order an attacker defeats it — with production constants, the decompression-bomb guard, the re-encode that strips GPS data, and the .read() trap our own oldest handler still walks into.

Read Article
August 5, 2026 12 min read
Insights

What $918 of Ads Bought: A Distribution Post-Mortem

A year of arguing that building is the easy part, and here is the receipt: $918.50 of marketplace ads, 17 installs, zero customers. The bid experiment that proved neither bids nor budget was the constraint — impression supply was — and the narrow lesson that beats “ads don't work.”

Read Article
August 4, 2026 9 min read
Insights

Stale by Tuesday: Why Your Product Claims Rot Faster Than Your Code

Your code has tests, CI, and a deploy gate. The sentences about your code have nothing — and they decay silently, because no build goes red when a claim stops being true. Four false claims from our own site last week, the one mechanism behind all of them, and the certificate-renewal fix.

Read Article
July 28, 2026 9 min read
Comparisons

UI Kit Packs vs shadcn/ui: Buying Components vs Copying Them

Both sides say “you own the code” and mean different things by it. shadcn/ui is free, excellent, and the right default on React + Tailwind — we say so plainly. The honest axis is framework lock-in: what your project is built on decides this before taste does.

Read Article
July 27, 2026 9 min read
Insights

Nobody Agrees What "Production-Ready" Means. Here's the Bar.

The phrase appears on thirty pages of this site, including the homepage — and means something different to everyone who reads it. It isn't a property of your code; it's a property of what happens when things go wrong. Four checkable questions, and permission to ship when you can't clear them.

Read Article
July 21, 2026 9 min read
Products

The Wigley Studios Lineup, Mid-2026: What Ships Today

A mid-year catalog of every Wigley Studios developer tool that ships today — what each one is, its current price, and who it's for. The design pipeline, the backend pipeline, and the standalones (PicSift, PostPilot, Chiave), grounded entirely in the live product pages.

Read Article
July 15, 2026 10 min read
Engineering

How to Run Zero-Downtime Database Migrations with Alembic

A schema change shouldn't take your site down. Where autogenerate lies (renames become data loss), the expand-contract pattern step by step, why additive migrations run before the code, and the MySQL-vs-Postgres DDL gotchas that bite. SQLAlchemy + Alembic.

Read Article
July 14, 2026 11 min read
Insights

Software You Can Finish: The Case for Done

The industry reads “last commit 8 months ago” as a death certificate — but some software is simply done. Finishability is a design property: a bounded problem, few dependencies, a stable platform underneath. The case for building things that can actually be finished.

Read Article
July 13, 2026 9 min read
Insights

The Maintenance Tax: What Software Really Costs After You Ship

Launch day isn't the finish line — it's day zero of a bill nobody prices in: dependency churn, security patches, breaking upgrades, and bit-rot. The recurring cost of keeping software alive, and why you should choose tools by their maintenance surface. The tax trilogy's closer.

Read Article
July 10, 2026 9 min read
Insights

The Hidden Cost of Free Developer Tools

Free developer tools extract value in ways that aren’t always obvious. Data, lock-in, feature gates, and ecosystem dependency — how to evaluate total cost of ownership.

Read Article
Apr 1, 2026 10 min read

Stay Updated

Get the latest articles on AI UI generation, photo management, and frontend design delivered to your inbox.