Building Crayo in 3 Days: From Claude Design to First Paying Stranger
Two euros from a stranger
A few days after I quietly launched crayo.ro, my phone buzzed with a Stripe notification. A complete stranger, someone I had never met or sold to directly, had paid me about 2 euros for a personalized coloring book made from their own photos.
It is a tiny number, but it made me genuinely happy. Someone looked at my product, decided it was worth their money, and paid for it. That is the part I cared about.
What Crayo is
Crayo is a small Romanian-language SaaS that turns any photo into a personalized, AI-generated coloring book PDF. You upload pictures of your kid, your dog, a family moment, anything you want. You pay through Stripe. You get a printable PDF of clean, kid-friendly coloring pages generated from your images. The whole product is in Romanian, priced in lei, targeted at Romanian parents.
Pricing today is intentionally simple: up to 20 photos for 9.90 lei. I am not optimizing for margin at this stage. I am optimizing for the smallest possible price that still requires a real Stripe transaction, so that the first customer is a genuine commercial signal and not a favor from someone who knows me.
Why I built it at all
Honestly, I started Crayo to see what Claude Design could do. Anthropic Labs released it in April 2026 and I wanted a real, end-to-end project to put it through. The plan was to spend an afternoon prototyping the idea, look at the result, and move on.
Once I saw what came out of that afternoon, I decided to ship it instead. I also gave myself a personal challenge: build a SaaS that actually gets at least one paying customer from outside my network. Not friends, not family, not generous coworkers. A real stranger paying real money for a real product. That challenge is what made me push past the prototype and actually ship it.
Three days, end to end
The entire technical build took three days. Domain, frontend, backend, image generation pipeline, payments, deployment, analytics. The timeline is not me being fast. The timeline is the workflow.
Phase 1: Prototyping in Claude Design
I started inside Claude Design, the visual prototyping tool Anthropic Labs released in April 2026. The premise is simple. You describe a product in natural language and Claude builds a first version of the interface. You then refine through conversation, inline comments, direct edits, and custom sliders. It is powered by Claude Opus 4.7, and crucially, the outputs are designed to be handed off to Claude Code for real implementation.
I spent the first chunk of day one in there. I told Claude Design who the customer was, a Romanian parent who wants a personalized coloring book made from photos of their kid, and watched it produce a real, clickable landing page in Romanian: hero, before/after, pricing tiers, FAQ, footer. I refined the layout, tightened the copy, picked the palette, and adjusted the spacing. I ended up with a landing page I would have been embarrassed to build by hand in the same amount of time.
By the end of that session I did not have a one-page spec. I had a working, polished, opinionated front-end prototype, including the visual identity for the brand, sitting in Claude Design and ready to be handed over.
Phase 2: Handoff to Claude Code
Then I handed it to Claude Code and let it build out the rest: pulling the Claude Design prototype into a real Vite + React project, wiring the photo upload, building the Hono backend, integrating Vertex AI Gemini for image generation, hooking up Stripe Checkout, configuring Cloud Run, Firestore, GCS lifecycle rules, the Telegram notification bot, the GitHub Actions deploy to Cloudflare Pages, and the analytics consent flow.
From there it was a loop. I described the next slice of behavior, Claude Code implemented it, I tested it, we iterated. The build proceeded as a sequence of well-scoped tickets, each one small enough to verify before moving on. By the end of day three I had a deployed, payment-accepting product on a custom domain.
The handoff itself was the part I did not expect to enjoy as much as I did. Claude Design produced the surface the customer sees, Claude Code produced everything behind it, and the two tools fit together as one continuous workflow rather than two separate products glued at the seams.
The stack
Nothing here is novel. I picked managed services everywhere I could.
- Frontend: Vite + React 18, deployed on Cloudflare Pages with auto-deploy from GitHub on every push to
main. Zero infrastructure to manage, pushes go live in under a minute. - Backend: Hono on Node 20, TypeScript with strict mode on, deployed to Google Cloud Run in the
europe-west3region (Frankfurt). Close to Romanian users, scales to zero, costs almost nothing while traffic is small. - Database: Firestore. One collection per logical type. No migrations, no schema files, no DB cluster to operate.
- Storage: Google Cloud Storage. Two buckets, one for incoming user uploads with a strict 72-hour TTL, one for finished orders.
- Image generation: Vertex AI Gemini (the latest image-preview model) as the primary pipeline, with an OpenAI image model wired in as a fallback for resilience.
- Payments: Stripe Checkout. Card data never touches my servers. Stripe handles the whole payment surface and I just receive a webhook telling me the order is paid.
- Notifications: a Telegram bot pings my phone whenever something interesting happens, like an order being placed, a generation finishing, or a webhook firing. It works as a dead-simple ops dashboard.
- Analytics: Cloudflare Web Analytics (cookieless, GDPR-friendly), with Meta Pixel, CAPI, and GA4 prepared behind a Consent Mode v2 cookie banner for when traffic justifies it.
None of these choices are clever. They are deliberately boring, because boring infrastructure is the kind that leaves me alone.
Security, because the product processes children's photos
This part I want to be explicit about. The core use case for Crayo is parents uploading photos of their kids. Some of those photos are family memories that nobody else should ever see. I treated that as a hard requirement from the very first design conversation, not a feature I would add later.
What that looks like concretely:
- Payments are completely off-platform. All checkout happens on Stripe. Card numbers, billing details, CVV. None of it ever touches a Crayo server, log, or database. I cannot leak data I never had.
- Uploaded photos auto-delete. User uploads land in a Cloud Storage bucket with a 72-hour lifecycle rule. After that window, Google itself purges them. There is no admin action required and no way for me to forget.
- Photos are not used to train anything. The Vertex AI image endpoints I use are not training pipelines. A child's photo goes in, a coloring page comes out, and the source image is dropped on the 72-hour timer.
- Secrets live in Google Secret Manager. Stripe keys, API credentials, webhook signing secrets. None of them are in the repo, none of them are in environment files committed anywhere, and the Cloud Run service binds them at runtime via
--set-secrets. - HTTPS-only, everywhere. Cloudflare in front of the static site, Google-managed certs in front of Cloud Run.
- GDPR consent before any tracking. The consent banner blocks Meta Pixel, GA4, and any non-essential tags until the user opts in. Cloudflare Web Analytics is the only thing that runs without consent, because it is cookieless and aggregate.
None of this is exotic. It is the version of "default to safe" that I can live with given what people are uploading.
Why three days is the headline, not the tech
The interesting thing about Crayo is not the stack. The stack is whatever the stack is. The interesting thing is that the cost of going from "I have an idea over morning coffee" to "a stranger paid me for it" has collapsed.
A few years ago, this build would have been a multi-week project. I would have spent days on auth, days on image generation pipelines, days fighting with a payment integration. Today the bottleneck has moved entirely off of typing code and onto the things AI cannot do for me: deciding what to build, talking to real users, understanding the market, and taking the legal risk of putting a business in the world.
What is next
Crayo is at the start of its life. Right now I am in the acquisition phase: running a small Meta Ads campaign, watching the analytics, A/B testing the landing page, and reading every piece of feedback I get from real customers. The next milestone is not a fancier feature. It is the tenth paying stranger, and then the hundredth.
To speed that loop up, I set up a Claude routine that runs every day. It pulls the previous day's ad performance from Meta, drafts new creative, and either tweaks the campaign or makes changes to the crayo.ro site based on what it sees. I am genuinely curious to see how this goes.
That first 2-euro Stripe notification from a stranger is still the part I keep thinking about. It made the whole thing feel real.
If you have kids, a dog, or a memory you want turned into a coloring book, crayo.ro is live. And if you are sitting on an idea wondering whether you can ship it, with the right tools, three days is probably enough.
Keep Reading
Continue with the blog index, read how we turned a 3D printer into a caricature artist, or how I built an F1 leaderboard with AI.
