Wiring Up the Numbers, and Catching a Few of Them Lying
- Projects
- 10
- Commits
- 43
- Lines
- +145k / −75k
- Files
- 1701
- Claude time
- 16h
- Tokens
- 15.4M
Commits by day
Where the work went
LuckyCoin36%
LuckyFind23%
Arby21%
Park'd18%
Lucky RNG2%
This was a measurement week. Across most of the portfolio the theme was the same: get honest numbers flowing, then stare at them long enough to notice which ones were quietly broken. The answer, it turns out, was several.
The paywalls were measuring themselves wrong
LuckyFind shipped releases on both platforms this week — iOS 2.3 (build 1), Android versionCode 12 — and the reason to cut them was analytics. On iOS we started measuring the paywall past the impression: previously we knew people saw it, but not what happened next. The first attempt shipped in two halves and we only merged the first, so there's a follow-up commit that is, in plain terms, "ship the other half."
Android was in worse shape. We made the funnel visible at all — it wasn't — and then immediately found the app-open paywall was poisoning its own numbers, counting the launch prompt in with the intentional ones so the conversion rate was measuring the wrong thing. Fixing that is the difference between a funnel you can act on and a funnel that just makes you feel bad.
There's a small running joke in here: you don't find out your instrumentation is wrong until you finally look at it. Which brings us to the newsletter.
LuckyCoin's newsletter had been recording nothing
LuckyCoin-Android got four commits of newsletter plumbing, and the standout is the one that fixes click attribution — which, per the commit, recorded nothing for all of W31. So the entire previous week's worth of "who clicked what" was an empty table. We also started recording first-touch open times, taught the code the actual event payload rather than what we assumed it was, made send pacing respect the rate cap (and record the misses instead of silently dropping them), and stopped a rate gate from blocking before there was enough volume to mean anything.
On the web side this dovetailed with a newsletter admin rebuild in luckycoin-next: send-timing analytics, subscriber tooling, and — the phrase we'll stand behind — honest A/B reporting. If the numbers are going to drive decisions, they at least shouldn't flatter themselves.
LuckyCoin killed its made-up rarity index
The more interesting LuckyCoin work was the report and catalog overhaul. The headline change: we replaced an invented R0–100 rarity index with real scarcity tiers. That old number looked authoritative and meant nothing; the new tiers are a common-to-scarce ladder with a colour ramp, a proper key, and a consistent presentation across the report tables, the set highlights, and the individual coin pages. Coin pages now show in-collection rarity and link to their specific melt page instead of a generic form.
Underneath, the report's charts were rebuilt on recharts so they match the /stats page and are actually interactive, and we deferred loading them on coin pages so the charts don't tax a page someone opened to read about a coin. Rounding it out: a premium masthead, a contents-and-glossary card, and a fistful of leftover July SEO audit items closed — including a fix where the Learn hub was rendering raw translation key names in production instead of English, and Spanish-to-English redirects that needed to live in middleware to work at all. The i18n cleanup is the unglamorous tax on being a bilingual site.
Search Console, GA4, and a hub that reads it all
The quieter connective tissue this week was getting sites measurable. LuckyFind-Web activated GA4 and wired measurement plus install attribution across all 128 pages, then finished the half-done items the SEO audit had flagged — de-cannibalizing two competing beginner's guides, fixing a 404 hub link, and pointing the beach guide at permission-intent searches. PoultryPal got a redeploy purely to pick up its GA measurement ID.
Parkd, RandomBay, and RandomNum each got a Search Console verification token, all with the same stated purpose: so the hub can read that site's search data. Parkd-Android also declared its advertising ID honestly for Play review and added NPS attribution. And Parkd-Web and RandomBay account for nearly all of the week's enormous line counts — the parks engine that was already live got committed, and RandomBay ran its weekly refresh of all 1,911 pages, this time under the new content guard. That guard also got hardened: it now never strips listings off live pages when an eBay fetch fails, and we closed three holes an adversarial audit found in it. Generated content churn is loud in the diff and quiet in the story.
None of this week ships a marquee feature. It's the layer underneath: knowing what the apps are actually doing, on both platforms, in numbers we can trust. Turns out we couldn't, until now.





