101 Days of Building in Public, Measured in Code, Users, and Mistakes
On 13 June, I typed the first prompt for a fishing app into Claude Code. On 2 September, it went liv 2026-9-30 18:28:36 Author: hackernoon.com(查看原文) 阅读量:1 收藏

On 13 June, I typed the first prompt for a fishing app into Claude Code. On 2 September, it went live on Google Play. On 22 September, Apple approved it for the App Store. That is 101 days, one owner, one collaborator on design and the website, and two AI coding agents working in the same repository.

This is the last article in my build-in-public series for the RevenueCat Shipaton. The other seven each took one idea. This one only takes numbers, and it puts the flattering ones next to the ones I would rather round up. Figures were measured on 25 September, from the repository or read-only from the production database, unless a different date is given.

Two panels: what got built, and what got used, in 101 days. Built: 873 commits, 790 merged pull requests, 134 release tags, 2,939 species in the encyclopedia, 49 preservation anchors. Used: 109 accounts, 90 excluded as throwaway or one-day sign-ups, weekly recorders at zero for five weeks and then one, zero accounts with enough points for Silver, and 2 approved catches across all users. Measured 25 September 2026.Two panels: what got built, and what got used, in 101 days. Built: 873 commits, 790 merged pull requests, 134 release tags, 2,939 species in the encyclopedia, 49 preservation anchors. Used: 109 accounts, 90 excluded as throwaway or one-day sign-ups, weekly recorders at zero for five weeks and then one, zero accounts with enough points for Silver, and 2 approved catches across all users. Measured 25 September 2026.

What got built

  • 873 commits and 790 merged pull requests (the highest number is #796; six were closed without merging).
  • 134 release tags: 69 for the app, 65 for the API. They are versioned separately.
  • 2,939 species in the fish encyclopedia, fish plus crustaceans, cephalopods, shellfish and jellyfish. 2,490 of them also have a second, habitat-style illustration.
  • 49 preservation anchors: rules in the repository that name something an AI agent must never simplify away, many of them pinned by a test. The count is derived from the text of four CLAUDE.md files by a script, because every hand-kept count I wrote down went stale.

Those are the numbers that go on a slide. They measure effort. None of them measures whether anybody wanted the thing.

What the checks passed that my eyes did not

The single most repeated lesson of the project, in three numbers:

  • A batch of 200 habitat illustrations passed every automated check: dimensions, file names, count, orientation. 20 of the 200 showed the wrong fish: a different species, or a juvenile where the brief asked for the adult.
  • 40 store screenshots passed a 40-for-40 automated check. Looking at them one by one found 134 problems, 22 of them blocking. The worst: a composited home-indicator bar covered the venomous-fish safety note. All 40 were regenerated.
  • I audited my own points ledger for an earlier article. The hash chain verified. 21 of 753 rows in the second ledger did not (measured 21 September). The cause is a floor, max(0, …), in the code that claws back points from fraudulent catches. It is still not fixed, because that code is one of the anchors above and I will not change it in a hurry.

A green check tells you the check passed. It does not tell you the thing is right. Every habitat-illustration batch since then has been reviewed by eye, every image.

Reach, honestly

I published seven articles on Medium and mirrored them on HackerNoon, posted to X most days, and put six Shorts and a handful of longer videos on YouTube.

  • HackerNoon: six of the seven are live there; the seventh is in editorial review. Three were tagged as top stories. Readers have spent 2 days, 1 hour and 36 minutes on them in total.
  • Medium: the same six articles had 24 views between them when I last counted (11 September).
  • X: a typical post reached 7 to 25 impressions (measured 10 September).

Three rows titled Same words, two orders of magnitude apart. HackerNoon: 2 days 1 hour 36 minutes of total reading time across six articles, from the public profile on 25 September. Medium: 24 views for the same six articles, lifetime, on 11 September. X: 7 to 25 impressions per post, from the API on 10 September.Three rows titled Same words, two orders of magnitude apart. HackerNoon: 2 days 1 hour 36 minutes of total reading time across six articles, from the public profile on 25 September. Medium: 24 views for the same six articles, lifetime, on 11 September. X: 7 to 25 impressions per post, from the API on 10 September.

Same words, two orders of magnitude apart. If I started again I would write for the platform that has readers and treat the others as archives.

X also suspended my account on 8 September. Almost certainly not for what I posted, but for how: I had been posting through browser automation, which X's rules name explicitly as grounds for permanent suspension. The appeal went through the same day. From the next day, every scripted post has gone out through the official API, one call at a time.

Users, honestly

  • 109 accounts exist, not counting deletions.
  • 90 of them (83%) are excluded from my own metrics, almost all by a rule: more than three days after sign-up with no catch of any kind, no recorded app activity, and no more than one day of visits. Many follow the same throwaway naming pattern. They are not people using the app.
  • Weekly active recorders — people who logged a catch in a given week — were zero for five complete weeks in a row. The launch did not move it. This week there is one: an account created on the day the App Store version went live recorded a catch the next day. It is still awaiting review, and one is not a trend.
  • Not one of the 109 accounts has enough points to reach Silver, the first tier above free. The one account that ever did has since been deleted. I set those thresholds before I had any data.
  • Revenue: zero.

I know how those read. I am putting them here because a build-in-public series that only reports commits is a changelog.

Where I was wrong in public

Building in public means you also get to be wrong in public. Three I corrected myself:

  1. Article #6 was wrong about its main point. I wrote that the people who signed up after launch were not indifferent, they were refused: the gate log showed tide requests being denied. Five days later I read the code. The home screen asks for tides on its own, four to five seconds after sign-up. The log was counting my app, not them. I corrected it on X that day, and I am correcting it here.
  2. "Five taps." In a draft post I wrote that the paywall was five taps deep and listed four steps. A reader who counted would have caught it. The code says four.
  3. "739 rows." The ledger in the audit above had grown to 753 by the time I posted about it. I re-ran the check before posting and changed the number. The ledger will keep growing, and the 21 rows cannot be edited away, because the ledger is append-only.

Three cards titled Where I was wrong in public. Article 6 said new users were refused tides; in fact the home screen asks for tides by itself four to five seconds after sign-up. A draft post said the paywall was five taps deep; it was four. A draft post said 21 of 739 ledger rows fail; by posting day it was 21 of 753.Three cards titled Where I was wrong in public. Article 6 said new users were refused tides; in fact the home screen asks for tides by itself four to five seconds after sign-up. A draft post said the paywall was five taps deep; it was four. A draft post said 21 of 739 ledger rows fail; by posting day it was 21 of 753.

Numbers in drafts rot. I now re-measure everything on the day it goes out, including this article.

What other people told me, and what changed

The Shipaton rules ask how community feedback changed the product. Here is the whole list, not a curated one:

  • An App Store reviewer could not find where to subscribe. They were right: the only path was four taps deep, and three screens that showed your tier led somewhere else. There are now four ways in; the nearest is one tap from home. The paywall itself did not change.
  • The same review process rejected a promo-code field. On iOS, the app no longer lets you type a code that unlocks paid features; Apple's own offer codes replace it. Android is unchanged.
  • An open tester reported that a "locked" notice would not go away. A framework update had changed the default so that a notice with a button stays until dismissed. Notices now go through one helper, and CI fails if a new notice with a button bypasses it.
  • HackerNoon's editors retitled all six articles they published. Every one of their titles was more concrete than mine. This article's title is my attempt to have learned something from that feedback loop.
  • X suspended the account. That was feedback too. The posting method changed the next day.

What I would tell you

If you are building in public: log what you refuse users, not only what they do, and then read what that log is actually counting. Re-measure on the day you publish. And when an automated check says 40 out of 40, look at the 40.

The app is World Fishing Map, a fishing log that checks its own records. It is on Google Play and, as of this week, the App Store.


World Fishing Map is built by one developer in Japan, with a collaborator on design and the website, and two AI coding agents (Claude Code and ChatGPT Codex) in one repository. Unless dated otherwise, the numbers in this article were measured on 25 September 2026.


文章来源: https://hackernoon.com/101-days-of-building-in-public-measured-in-code-users-and-mistakes?source=rss
如有侵权请联系:admin#unsafe.sh