# imast.ai Post-Mortem: 427 Commits in 34 Days, Zero Clients

> Source: <https://maloyan.xyz/blog/imast-ai-post-mortem>
> Published: 2026-10-10 00:00:00+00:00

# imast.ai Post-Mortem: 427 Commits in 34 Days, Zero Clients

**What this post is.** The numbers come from the imast git history, the notes in that repo, and my [launch post](https://maloyan.xyz/blog/imast-ai-launch) from 16 May 2026. I do not guess at causes here. Where I add my own reading, I say so.

## Short version

- imast was an AI HR agent: one chat that searched for candidates, ranked them, and drafted outreach.
- I made **427 commits in 34 days** , from 1 May to 3 June 2026. There were commits on 33 of those 34 days.
- It shipped real infrastructure: three sign-in methods, paid plans, a Cloud Run deploy with migrations, durable agent runs, and **152 test files** .
- **imast never got a paying customer.** My project notes list it as failed, with no clients. The last commit is from 3 June 2026.
- **329 of the 427 commits** landed on or before the day of the launch post. Most distribution work started after that day.

## What imast did

A recruiter typed a role in plain English. The agent turned it into a people search, returned a table of candidates, scored each one against the recruiter's criteria, and wrote a first email per candidate. The recruiter could add custom columns, export to CSV or Excel, or push to Greenhouse.

Pricing was simple. Start was $50 per month for 25 searches. Pro was $200 per month for 100 searches. Enterprise was a sales call.

The repo notes describe the product as a Juicebox-style tool for sourcing, screening and outreach. Candidate search ran on Exa's people search and, from 12 May, on Exa Websets.

The launch post named three target groups: solo recruiters, in-house recruiting teams, and agencies.

## Timeline

| Week | Commits | Main work | 
|---|---|---|
| 1 to 3 May | 34 | Landing page, contact form, first app scaffold | 
| 4 to 10 May | 155 | Chat agent, candidate table, own API keys, move to Cloud Run, billing | 
| 11 to 17 May | 146 | Websets search, outreach, public demo, launch post (16 May) | 
| 18 to 24 May | 44 | Greenhouse skill, durable agent runs, blog starts | 
| 25 to 31 May | 23 | Redesign behind a flag, more blog posts, Reddit plan | 
| 1 to 3 June | 25 | Redesign in production, last blog posts | 

The busiest single day was 12 May, with 73 commits. Commits on the main branch stop on 3 June 2026. A release bot updated one branch on 5 June. There are no commits after that.

On 10 October 2026, imast.ai still returns HTTP 200 with the page title "imast | The AI HR agent". The sign-in page also returns 200.

## What I built

The product had two parts. The landing site ran on Cloudflare Workers. The app was Next.js 16 on Google Cloud Run, with Postgres 16 on Cloud SQL. A small Worker sent app routes from the main domain to Cloud Run.

- **Agent.** Built on AI SDK 5. Tools for search, web search, URL fetch, filters, enrichment of custom columns, and outreach drafts. Agent state went to Postgres, so the UI could resume a run. From 22 May, runs used DBOS for durable execution.
- **Models.** Users could bring their own OpenAI, Anthropic, OpenRouter or Fireworks key. The app stored these keys with AES-GCM encryption. The default model ran on Gemini through Vertex AI.
- **Auth.** Better Auth with Google, LinkedIn, and email plus password. Email sign-up needed verification. One email across three providers mapped to one user.
- **Billing.** Polar as merchant of record, with webhooks that are safe to replay.
- **Outreach.** Users could send drafts from their own Gmail account, with a signed unsubscribe link.
- **Release.** A dev environment on every push, production on a tagged release, 14 release PRs merged. The deploy ran tests, built a Docker image, ran migrations as a Cloud Run job, then deployed.

Size at the end: about **38,000 lines** of TypeScript outside tests, 152 test files, app version 0.7.2, landing version 1.3.1.

## Where the commits went

A lot of the 427 commits did not add product. From the commit messages:

- **69 commits** start with a fix label.
- **42 commits** are CI work. Several of them fight flaky Docker registry pulls.
- **9 commits** are reverts.
- **14 commits** are release bumps from a bot.

The stack also moved a lot in the first 10 days:

- 2 May: the app starts as Next.js for Cloud Run.
- 3 May: it moves to Cloudflare Workers with D1.
- 8 May: it moves back to Cloud Run with Cloud SQL Postgres.
- 9 May: billing moves from Stripe to Polar.
- 3 to 10 May: the default model changes at least four times.

None of these moves came from a customer request, because there were no customers.

## What went wrong

I only list what the record supports. The rest is a question for me, and it is marked as such in the draft.

**1. I built first and distributed second.** 189 commits landed in the first 10 days. 329 landed by the launch post on day 16. After that:

- The blog pipeline and the first SEO post on the imast site went out on 19 May, day 19. There were 13 posts by 3 June.
- I wrote 7 LinkedIn post drafts with share cards.
- The Reddit launch plan is dated 27 May, day 27. It lists 11 subreddits over 4 weeks.

That plan also says that r/recruiting and r/humanresources do not allow self-promotion. Those are the places where my buyers talk. The open channels were mostly founder and developer communities.

**2. The pitch ran ahead of the evidence.** On 2 May I removed the testimonials and the customer logo band from the landing page. The commit messages say "no real customers yet". Two weeks later, my launch post said that 400+ recruiting teams were already using imast. The repo does not support that number. My own SEO audit on 10 May also flagged the landing page stats as unattributed. The launch post also said I had built imast over several months. The first commit is from 1 May, 15 days before the post. The launch post overstated adoption. It is now corrected.

**3. I closed the one door that needed no sign-up.** On 15 May I shipped a public demo: paste a job description, get a shortlist, no account needed. It took 4 merged PRs. On 17 May I removed it. The plan for the removal names the risk of LLM cost abuse and anonymous scraping of the agent.

After that, a visitor needed an account to try imast. The app had a free plan.

**4. I polished the product before anyone asked.** A durable execution engine, a Greenhouse skill and a full redesign all shipped in the second half of May. I found no user request behind them in the repo.

## What I keep

My project notes mark imast as dead, with one exception: reuse the code for auth, billing and the Cloud Run setup. Those parts are generic and tested:

- Better Auth with three providers, verified email, account linking, and password reset.
- Polar subscriptions with idempotent webhooks, a customer portal, and tier limits read from product metadata.
- A GitHub Actions deploy to Cloud Run with keyless auth, secrets from Secret Manager, and migrations as a job.
- Release automation with separate dev and production environments.

As of October 2026, no other project in my side-projects folder uses this code yet.

## Lessons

- **Distribution decides the outcome, not the build.** My side-project notes now contain this line. The same notes list imast as failed, with no clients.
- **Count distribution in the same unit as code.** The imast repo has a record of every commit. It has no record of sales conversations or sign-ups. Next time both numbers go in the same log.
- **Pick the stack once.** Two hosting moves and one billing move in the first 9 days is churn, not progress, when there are no users.
- **Never print a number I cannot source.** The 400+ teams claim in my launch post had no source, and I had to correct it.
- **Decide the abuse budget before I build a free demo.** A demo with a hard daily spend cap is cheaper than a demo that gets removed after 2 days.
- **Speed is not the bottleneck.** 427 commits in 34 days shows I can build fast. It did not get one client.
