How Cryptosaurus Got 1,000 Users on Farcaster (Vibe-Coded)
September 29, 2026 · 1242 words
| Field | Detail |
|---|---|
| What it is | Farcaster mini app that turns your profile picture into a dinosaur image you can mint as an NFT |
| Builder | Founder with hobby-level coding (Python course, small JS apps); his first solo production app |
| AI tool | Claude Opus 4.5 and 4.6, Codex 5.3, ChatGPT 5.2 (ideas), Gemini (images) |
| Stack | Vercel frontend, AWS Lambda + S3, Solidity contract on Base owned by a Safe multisig, Gemini image API |
| Time to launch | Prototype in about 1 hour; about 100 hours total to production |
| Revenue | 1,000+ users, 180+ paid $2 per mint (about $360 gross by my estimate, before refunds). Self-reported |
| Source | Mac Budkowski's build log |

Cryptosaurus had a working prototype in about an hour. Getting it to production took about 100 hours. After launch, it passed 1,000 downloads, and 180+ people paid $2 to mint their dino. It also reached the top 3 of the Farcaster Mini App store in its first week.
Those numbers come from Mac Budkowski's build log, which hit the Hacker News front page in March 2026. The revenue is small. The launch playbook is the interesting part, because every channel is spelled out.
The one point: pick a platform where using your app is the marketing.
Quick glossary. Farcaster is a decentralized social network. A mini app is a small app that opens right inside a Farcaster post. An NFT is a token on a blockchain that records who owns a digital item. Base is the blockchain the dinos are minted on.
The timeline, channel by channel

Hour 1: prototype. Mac scoped the idea with ChatGPT 5.2, then sent the scope to Claude Opus 4.5 in plan mode. A working prototype came back in about an hour.
After hour 1: the "remaining 10 percent". Most of the roughly 100 hours went into UI, image prompts and edge cases. The final image prompt file grew to 274 lines. He ran about 200 image-generation iterations for unusual profile pictures. Infrastructure came next: Vercel for the frontend, AWS for the backend, then the Farcaster mini app integration.
Two weeks before launch: soft pre-launch. He quietly shared the app on Farcaster first. About 500 people "installed" it before the real launch. That gave him testers and a small base of users ready to share.
Launch day: one post with an embed. The launch was a Farcaster post with the app embedded. Every dino a user generates can be shared back into the feed with a link to the app. So each happy user becomes a new ad.
First week: store ranking. The sharing loop pushed Cryptosaurus into the top 3 of the Farcaster Mini App store. Store visibility then brought in people who never saw the launch post.
After launch: DMs. When the payment bug hit (more below), he contacted affected users directly. That turned a bad moment into goodwill.
Final count, per the post: 1,000+ downloads and 180+ paid mints.
What worked
- Built-in sharing. The product output (a dino of you) is something people want to post. On Farcaster, posting it also distributes the app.
- A soft launch. 500 early installs meant the launch post didn't start from zero.
- A small, clear price. $2 is an impulse buy. There was no plan to compare and no subscription to think about.
- Polish. Mac argues that AI makes the first 90 percent fast, so you can spend the saved time on craft. The 200 image iterations were his way of doing that.
What flopped
- The launch-day payment bug. On the blockchain, each transaction from a wallet carries a nonce, a counter that must be unique and in order. When two people minted at the same moment, requests clashed. Payments went through, but the dino never got generated. He writes that neither Codex 5.3 nor Claude Opus 4.6 had planned for this.
- Config drift. Some environment variables (secret settings stored outside the code) never reached Vercel or AWS. At one point Claude started creating new S3 buckets on its own.
- UI by prompt. Iterating on design through the model was slow. He switched to Figma to polish the look.
- Mobile layout. Screens that worked in a browser broke inside the mini app view.
He fixed the bug, found affected users with a script and refunded them, plus an extra $1 "thank you for your patience". His summary of the whole project: "Although vibecoding in my case didn't live up to the 'build an app in 30 minutes' hype, it was a 10-100X speed improvement."
Copy these steps
- Choose a platform with in-feed sharing. Farcaster, Telegram and similar platforms let an app travel inside posts.
- Make the output shareable. Personalized images beat dashboards.
- Soft-launch two weeks early. Aim for a few hundred users who can test and share.
- Load-test payments before launch day. Fire several payments at the same second and watch what breaks.
- Write a refund script in advance. Know how you will find and pay back failed buyers.
If you vibe-code this
Apps that take crypto payments have a few classic holes. These checks apply to the type of app, not to Cryptosaurus:
- Verify payment on the server. Never trust the app saying "paid". Read the transaction from the chain yourself.
- One payment, one delivery. Store each transaction hash (its unique ID) with a unique constraint so it can't be reused.
- Queue transactions from your backend wallet. Send them one at a time so nonces never collide.
- Keep private keys server-only. See environment variables security.
- Rate-limit paid AI calls. Image generation costs money per request. See API rate limiting.
Web3 packages are also a common supply-chain target: see supply chain security.
A server-side payment check with viem:
import { createPublicClient, http, type Hash } from "viem";
import { base } from "viem/chains";
const client = createPublicClient({ chain: base, transport: http() });
const MINT_CONTRACT = "0xYourContractAddress";
export async function confirmPayment(txHash: Hash) {
const receipt = await client.waitForTransactionReceipt({ hash: txHash });
if (receipt.status !== "success") throw new Error("Payment reverted");
if (receipt.to?.toLowerCase() !== MINT_CONTRACT.toLowerCase()) {
throw new Error("Payment went to the wrong contract");
}
// Next: insert txHash into a table with a UNIQUE constraint.
// A reused hash then fails instead of delivering twice.
}
Launching a paid app with on-chain payments? Email [email protected] and I'll review its security before your launch day.
Key takeaway
Cryptosaurus didn't win with ads. It won because every generated dino was also a shareable post, and a soft launch primed the first 500 users. Pick a channel where using your app spreads it, then test payments under load before you announce.
More case studies: Vibe-coded apps making money · Security guide: Vibe coding security
Sources
- https://kanfa.macbudkowski.com/vibecoding-cryptosaurus (Mac Budkowski, published Mar 6, 2026)
- https://news.ycombinator.com/item?id=47386636 (HN discussion, Mar 15, 2026, 262 points)
- https://cryptosaurus.app (checked Sept 28, 2026)