terminal~/graveyard

graveyard/

Not every project ships. These are the ones I started, learned from, and buried. I keep them here on purpose — the dead ends are part of the work, and pretending they never happened would be the dishonest version of this site.

9 buried1 ever shippedall gone but not wasted
web-app
shipped

OurStars

Personalized star maps of any moment in time.

Sep 2023Oct 2024lived 1 year

Sold a few skies. Couldn’t keep the lights on.

cause of death

A star-map gifting store — pick a date and place, get the night sky from that exact moment as a poster. It actually shipped and made sales, but it was deeply seasonal, low-margin, and every sale was a one-off that demanded constant marketing. The upkeep outweighed the return, so I let it sunset.

what it taught me

One-off gifting products are a treadmill — you market hard for every single sale with no retention to bank on. Recurring value beats novelty.

Next.jsThree.jsTypeScriptStripeVercel
tool
died in the workshop

ShopHealth

Store health monitoring for Shopify merchants.

Oct 2025Nov 2025lived 14 days

Great scanner. Brutal neighbourhood.

cause of death

A Shopify app that audited stores for speed, SEO and UX issues and explained the fixes in plain English. The MVP came together well — but it landed in a crowded category against well-funded incumbents, and out-marketing established store-audit apps as a solo dev was a different game entirely. Shelved before launch.

what it taught me

A good product in a saturated category still needs a distribution edge. Building it was never the hard part — being found was.

React RouterShopifyPrismaPolarisFly.io
tool
died in the workshop

Codiflow

Reusable product blueprints for Shopify.

Jan 2026Feb 2026lived 1 month

Solved a real problem too few people had.

cause of death

Let merchants define a product "blueprint" once and spin up consistent products from it. Genuinely useful, but niche enough that the addressable market never justified maintaining a full Shopify app. Parked once it was clear too few merchants would pay for it.

what it taught me

"Useful" isn’t "fundable." Pain has to be both real and widespread enough to support the cost of being a maintained product.

React RouterShopifyPrismaPolaris
desktop-app
died in the workshop

XRay

Xcode preview crash monitor for macOS.

Dec 2025Jan 2026lived 11 days

A dev tool for an audience of exactly me.

cause of death

A menu-bar app that caught Xcode preview crashes and handed me an AI explanation with the line to fix. Genuinely handy during SwiftUI work — but too narrow to be a product, and not worth maintaining as Xcode kept shifting the ground underneath it. Scratched my own itch, then stopped.

what it taught me

Scratching your own itch is a great reason to build and a weak reason to maintain. Know which one you’re doing.

SwiftUImacOSAppKitCombine
mobile-app
died in the workshop

Emberline

A calm, pixel-art breathing companion.

Apr 2025Apr 2025lived 9 days

Beautiful to build. Invisible in the store.

cause of death

A guided breathing app with a pixel-art skin and session streaks. The Skia rendering was a joy to build, but the calm/breathing category is brutally saturated with polished, well-funded apps, and the retro angle was charm, not a real wedge. Stayed a prototype.

what it taught me

A fun visual hook isn’t a differentiator users will switch for. In a crowded category you need a reason to be chosen, not just admired.

ExpoReact NativeSkiaTypeScript
mobile-app
died in the workshop

Resist

Put the apps you doom-scroll behind a speed bump.

Feb 2026Feb 2026lived 7 days

The OS owns the off switch, not me.

cause of death

An app-blocking focus tool — pick the offenders, gate them, track your relapses. The problem: iOS hands that power to Screen Time / Family Controls behind tight entitlements, so a third-party version was always going to be hobbled. Killed once the platform limits made the core promise undeliverable.

what it taught me

Check what the platform will actually let you do before building the feature it’s all built around. Some walls don’t move.

ExpoReact NativeTypeScript
mobile-app
died in the workshop

Samskritam

A Duolingo-shaped path for learning Sanskrit.

Feb 2026Feb 2026lived 7 days

Built the engine. Never wrote the lessons.

cause of death

A lesson-based Sanskrit learning app — alphabet, greetings, verbs, the usual path. The mechanics came together fast, but for a language app the content *is* the product, and building a real curriculum solo was a mountain I didn’t have the bandwidth for. Stalled at the skeleton.

what it taught me

For content-driven apps, the code is the easy 20%. If you can’t commit to the content, the app was never the real project.

ExpoReact NativeTypeScript
web-app
died in the workshop

Tweetwit

Authentic Twitter growth, minus the guesswork.

Nov 2024Dec 2024lived 18 days

Built the growth engine. Couldn’t afford the fuel.

cause of death

A Twitter/X growth tool that needed the X API to do anything useful — daily tasks, analytics, a Python niche-detector, the whole thing. By late 2024 that API had become an enterprise-priced toll booth on top of a hobby-scale idea. The product worked; the economics never would. Pulled the plug before launch and salvaged the idea into Twitalyst.

what it taught me

Don’t build a business on a platform that can change your unit economics overnight. Validate the cost of your hardest dependency before writing the fun parts.

Next.jsTypeScriptDrizzle ORMAuth.jsFlaskTailwind CSS
lived on as Twitalyst
web-app
died in the workshop

Twitalyst

Track and analyze your Twitter performance.

Dec 2024Dec 2024lived 1 day

The leaner reboot that hit the exact same wall.

cause of death

Tweetwit, stripped down and rebuilt to be cheaper to run. Same X API, same enterprise pricing, same dead end — just confirmed faster this time. Killed within days once it was clear a lighter codebase doesn’t fix a broken dependency. That was the end of the Twitter-tools chapter for me.

what it taught me

Rewriting the code doesn’t fix a problem that lives outside the code. Sometimes the right move is to stop, not to refactor.

Next.jsTypeScriptDrizzle ORMTailwind CSS

$ git log --dead — 9 entries. Looking for the living? cd ~/projects