Dark Hours vs. DarkHours: Claude Built the Same App for Two Strangers
TL;DR
Indie developer Terry Godier had a rough weekend, in two acts. Act one: John Gruber issued the first retraction in Daring Fireball's 24-year history after the "absurd" App Store rejection Godier described turned out to be Apple correctly rejecting an astrology app named Asterly, tarot-card-of-the-day feature and all. Act two: Godier's Claude-built stargazing site Dark Hours turned out to be a near-twin of DarkHours.app, an MIT-licensed open-source project by Miguel Beher, matching its name, its feature set, and a location bug Beher had already fixed. Godier redirected his domain to Beher's app, killed his iOS plans, and swore off vibe-coding web products. The uncomfortable part for everyone else: Beher's original is Claude-built too.
Act One: The Rejection That Wasn't
Godier is not a random. His RSS reader Current is a small indie hit, and Gruber had linked his essays approvingly since February. So when Godier wrote on Thursday's blog post that his "astronomy website for normal people" had been rejected from the App Store as astrology, despite having "no tarot function, no horoscopes, and nothing that I, or anyone else I've asked, would associate with astrology," Gruber ran with it. App Store Rejection of the Week. Hacker News picked it up from there.
It unraveled in a day. Per Gruber's retraction, the app Godier actually submitted in January was named Asterly, and it "was entirely dedicated to astrology, not astronomy, and did in fact include a 'Tarot card of the day' feature amongst other occultist horseshit." The App Review Board upheld the rejection in April, correctly, under the same guideline 4.3(b) that throttles new fortune-telling apps. Gruber, who had shown Godier the draft before publishing and gotten "not a word of caution, only gratitude," retracted the whole post on Saturday: "I was misled, both overtly and through omissions."
Act Two: "Same Name and Feature Set Even"
The Hacker News attention is what triggered act two. Miguel Beher had spent since late May building DarkHours, an open-source astrophotography and dark-sky planner: moonlight modeling, Milky Way visibility, light pollution, meteor showers, aurora forecasts, and a finder for dark-sky sites within driving distance. MIT license, full commit history, live at darkhours.app. He had just posted it to Reddit.
Then he saw Godier's launch. His reply in the Bluesky thread is a masterclass in controlled fury: "Here's the source code from an open source project I wrote that is nearly exactly like it. That's such a strange coincidence. Same name and feature set even." When Godier offered to rename and differentiate, Beher got specific: "Feature by feature dude. The day after I post to Reddit. Seriously? You couldn't even setup the data sources correctly because that was not done in the repo."
The Bug That Snitched
Godier's defense was that he had never seen Beher's project, and that Claude adapted ephemeris code he wrote in January for the ill-fated Asterly. Beher's counter was the kind of evidence you cannot argue with: "Want me to point out the commit I did to my app where I fixed the problem where it routes people to random fields in Mexico? That one took me several nights to fix. Yours also has it! Weird right?"
Independently, on launch day, another user reported that Godier's site suggested dark-sky spots located "In The Pacific Ocean." Beher, dryly: "My app doesn't have the location bug, btw." Somewhere off the coast of Isla Vista, the world's best stargazing site remains unvisited.
Beher tagged Gruber into the thread. "Noted. I'm on it," Gruber replied, and the retraction followed. By Saturday Godier had taken his site down and pointed darkhours.io at Beher's darkhours.app. Sunday's mea culpa, at 447 points and 203 comments on Hacker News as of this writing, concedes the core of it: the Claude-generated app was "strikingly similar to his open source project, even reproducing a bug he had later fixed." Godier: "I was careless in relying on AI to generate the project without doing the work to understand whether it closely resembled an existing project. That's on me."
Same Model, Same Bug
Here is where it gets interesting for everyone who is not Terry Godier, because the obvious reading, "Claude plagiarized an open-source repo," is not the only one that fits the evidence. Beher's app is also Claude-coded. He is upfront about it: "Claude coded it. But the features weren't decided by an LLM. My specs and feature set. It wasn't a one shot build. I've added on each section of the app through different iterations. The commit history shows this."
So the thread split into two camps. One holds that a model cannot independently reproduce a specific app, name included, the day after it hits Reddit, and notes Claude Code can search the web while it builds. The other, voiced by a neutral observer in the thread, is that "you both had an idea for something and Claude put together effectively the same app for both of you," and that a fresh generation would likely converge on the same thing independently. Supporting the convergence read: a commenter who actually diffed the two found the frontend JS, CSS, and HTML "look different at first glance," and Beher's repo was created May 23, eleven weeks ago, a stretch for training-data memorization even before you argue about cutoffs.
The reproduced bug feels like the smoking gun, but it is exactly what convergence predicts. Ask the same model for the same niche app and you get the same default implementation, including the same naive nearest-dark-pixel routing that dumps users in rural Mexico or the open ocean. Beher's fix was a hand-crafted correction to a mistake the model makes by default. Patching your repo does not patch the model: it is like correcting one student's exam paper while every other student with the same tutor keeps getting problem 7 wrong, because the mistake lives in the tutor, not the paper.
Nobody outside Anthropic can adjudicate which reading is true, and nothing public settles it. Both are bad news, just for different people. If Claude lifted from the repo, every vibe-coded product is one Bluesky reply away from a licensing dispute. If Claude converged, your "original" app has an unknown number of near-twins in flight right now, and your moat was never the code.
If You Ship Vibe-Coded Products
The practical lessons here are cheap to apply and Godier paid retail for them, so you don't have to.
- Search prior art before you ship. Godier searched the name and found only a video game. A five-minute sweep of Reddit, GitHub, and the App Store for your name plus your niche is now part of shipping, because your model may have already built this exact thing for someone else.
- Treat MIT as a live wire, not a formality. If generated code did derive from an MIT repo, the attribution obligation transfers to you whether you knew the source existed or not. Beher's deadpan "Mind the licensing agreements" is the whole compliance seminar.
- Your differentiation is the spec, not the build. Beher's defense of his own Claude-coded app was the commit history: months of his own feature decisions, iterated. If your entire product is one prompt's default output, it is also everyone else's.
- The blast radius is reputational. The code cost a weekend. The fallout cost a domain, an iOS app, a standing invitation to Daring Fireball's front page, and a credibility hit that started with tarot cards, not with Claude.
Key Takeaways
- Terry Godier's Claude-built Dark Hours site matched Miguel Beher's open-source DarkHours.app in name and feature set, and reproduced a location-routing bug Beher had already fixed. Godier redirected his domain to Beher's app and canceled his iOS version.
- John Gruber retracted a Daring Fireball post for the first time in 24 years after learning the "wrongly rejected astronomy app" he defended was submitted as Asterly, an astrology app with a tarot-card-of-the-day feature.
- Both apps were Claude-coded, which keeps two explanations alive: the model reproduced an eleven-week-old repo, or two similar prompts converged on the same default app, same bug included.
- A bug fix in your repo does not fix the model. Fresh generations of the same idea can regress to the exact mistake you spent nights correcting.
- Before shipping AI-generated products: search prior art for your name and niche, assume open-source license exposure, and treat your spec, not the generated code, as the moat.
Sources: Terry Godier, "Mea Culpa - Dark Hours", Daring Fireball retraction, Bluesky thread, DarkHours on GitHub, Hacker News discussion, Michael Tsai