12 Oct 20264 min read

My first SaaS: 62,000 sign-ups, 346 paid

Everything that brought people in was free. What I charged for didn't last. The numbers, and the five things I would do on day one.

  • 62,000sign-ups
  • 346paying users
  • 1 in 140ever paid
  • 2 yrsthe paid plan ran

In March 2021 a designer partner and I started Codewell: a site where new frontend developers practise on real design templates instead of to-do apps. You pick a design, build it in HTML and CSS, post your solution, and compare it with everyone else's. Sixteen templates were free, nine were behind a paid plan.

I wrote all the code. My partner did the designs, the templates and the community. We launched on 9 May 2021 and closed the paid plan in July 2023. Here is what the records say, now that I have gone back and read them.

Timeline: Mar 2021 Building; 9 May 2021 Launched; Aug 2021 Moved to Next.js; Mar 2022 Peak, 70 paying users; Mar 2023 Four-week rewrite, dropped; Jul 2023 Paid plan closed; Mar 2024 Last backup.
Codewell's home page in July 2023: log in with GitHub, pick a template, build it.
Codewell's home page in July 2023: log in with GitHub, pick a template, build it.

The numbers

  • 23,500 people signed up with GitHub in the first year. 62,000 by March 2024, when I took the last backup.
  • 346 of them paid: 308 on the monthly plan at $8, 38 on the yearly at $72. At the peak, in spring 2022, about 70 subscriptions were active at the same time.
  • 25 challenges: 16 free, 9 premium.
  • 1,466 solutions posted by 888 different people, and 245 comments on them.
  • An 8,400-reader newsletter, which I ran on Substack and later EmailOctopus.
  • Search sent 56,000 clicks in the last 16 months the site was up, most of them from India and Brazil. The paying users were mostly in the US.
Google Search Console for codewell.cc, 8 November 2022 to 7 March 2024: 55.9K clicks, 412K impressions, and "codewell" as the top query.
Google Search Console for codewell.cc, 8 November 2022 to 7 March 2024: 55.9K clicks, 412K impressions, and "codewell" as the top query.
Chart: Sign-ups per month (people), May 2021 to Feb 2024; peak 2,524 in Jan 2023.
Chart: Paying subscribers, active at month end (people), May 2021 to Jul 2023; peak 70 in Mar 2022.

The decline started in January 2023, six months before I closed the plan: 51 active subscribers that month, 45 by June, and the sign-ups kept coming the whole time. So the top of the funnel was big and the paid conversion was thin: about one in 140 of the people who signed up while the paid plan existed ever paid. That ratio, more than anything else, is the story.

The stack

Everything was TypeScript from the first commit. The stack moved once, three months after launch.

At launch, May 2021From August 2021
FrontendReact (Create React App) on NetlifyNext.js with server rendering, on AWS Lambda@Edge, CloudFront and S3 through the Serverless Framework
APIStrapi (Node.js) on AWS Elastic Beanstalksame
DataMongoDB, GraphQL through Apollo Client, uploads to S3same
LoginGitHubsame
BillingFastSpringsame
Errors, UISentry, Ant Designsame

Billing ran through FastSpring, because Stripe was not available in my country then. A webhook handled activation and deactivation, and cancellation went through the FastSpring API. There was no handling for failed payments. I only noticed that this week, reading the code again.

In spring 2023 I started a rewrite as a Turborepo with Next.js 13, tRPC, Prisma on Postgres and NextAuth. It got as far as login, the challenge list and the editor, and then stopped after four weeks. The paid plan closed three months later.

What I would do differently

Charge for the thing people came for. People came for the templates, and 888 of them posted solutions. The paid plan gated the Figma files and the premium templates, which is reasonable, but most never needed more than the 16 free ones. A smaller free tier and a yearly-only paid plan would have converted better than $8 a month against free.

A challenge page: the Figma file locked behind Pro, everything else free, and the community's solutions underneath.
A challenge page: the Figma file locked behind Pro, everything else free, and the community's solutions underneath.

Write the webhook for the unhappy path first. Activation and cancellation are the easy events. Failed renewals are where the money leaks, and I never handled them.

Do not start a rewrite when the business is slowing. The 2023 rewrite was an engineer's answer to a product problem. Four weeks of tRPC and Prisma did nothing for conversion.

Keep the data. The only reason I can write this post is a mongodump from March 2024. Most of the numbers above came out of it in an afternoon; the search figures came from a Search Console export.

Tell people yourself. Everything that brought people to Codewell was free and repeatable: organic search, 55.9K clicks in its last sixteen months alone, building in public on X, and a community that posted 1,466 solutions and kept each other coming back. None of it needs a budget. All of it needs a weekly slot on the calendar, from day one, next to the one for building.

What it gave me

Codewell was the first SaaS product I built, and it taught me the whole flow, not one step of it. Two years of running a paid product end to end: the frontend, the API, the deployment, the billing, the newsletter, the analytics, the support emails, and the decisions in between: what to charge for, when to say no to a rewrite, what to keep when it is over.

That is what I build on now. Every product since has started from it, and so has the habit of writing this down in public.

Dewi

I build small SaaS tools for founders.

One email when a tool or a post goes up.

Written 12 Oct 2026Share on X