Ibrahim Harbutlu
Building

How I shipped SubSaver in a weekend

3 min read

Editorial cover reading 'Shipping in public' with a sage-green motif

I don’t write code. I describe what I want, I read what the AI gives back, and I decide whether it’s right. That’s the whole job now. This is the story of one weekend where that loop produced a finished product, live on the internet.

The idea was boring on purpose

SubSaver does one thing: it watches your subscriptions and tells you when a free trial is about to start charging you. No dashboard empire, no AI chatbot bolted on. Boring is good — boring is shippable.

I gave myself a single weekend. The rule was simple: if it isn’t live by Sunday night, it doesn’t exist.

The fastest way to make an idea real is to put it live where people can actually use it. Everything before that is a rehearsal.

Friday night: the skeleton

I started by writing the README before the app. What does it do, who is it for, what does it cost. Then I handed that to Claude and asked for the smallest possible version that could take a payment.

The first working endpoint looked like this:

// The entire "business logic" on day one.
export function daysUntilCharge(trialEnds: Date): number {
  const ms = trialEnds.getTime() - Date.now();
  return Math.ceil(ms / (1000 * 60 * 60 * 24));
}

That’s it. One pure function. If I could compute the number of days, I could send the email. If I could send the email, I had a product.

Saturday: the part that actually mattered

Most of Saturday wasn’t code at all — it was the screenshot. The thing people see before they decide to trust you.

SubSaver dashboard showing revenue, active users and churn cards above a trend line
The first dashboard. Three numbers and a line — that was the whole pitch.

I spent four hours on that screen and twenty minutes on the database. That ratio felt wrong at the time. It was exactly right.

What I’d skip next time

  • The settings page nobody used.
  • The second pricing tier I invented out of fear.
  • Roughly half the copy on the landing page.

Sunday night: live

It went live at 11:40pm, right after I cleaned up the launch tweet. There’s no grand revenue story to tell here. The win that weekend was simpler and, to me, bigger: I took something from idea to live, by myself, in two days.

The point isn’t that it was easy. The point is that “I can’t code” stopped being the thing standing between me and a shipped product.