How Zine Was Vibe-Coded with Claude Code: Stack and First Users
October 7, 2026 · 1380 words
| Fact | Zine |
|---|---|
| What it is | AI chat and search over your own tools: Gmail, Drive, Slack, Notion, GitHub, Jira and more |
| Builder | Developer (Kirk Marple, founder of the Graphlit platform) |
| AI tool | Claude Code (Opus 4.1, then Sonnet 4.5); Factory Droid added later |
| Stack | Next.js 15, TypeScript, HeroUI + Tailwind, Clerk auth, Upstash Redis, Vercel, Graphlit SDK |
| Time to launch | ~8 weeks to MVP (first code March 15, 2025); first paying customer at ~4 months |
| Revenue | Not disclosed; first paying customer ~4 months in (self-reported) |
| Source | Zine blog post |

Zine went from its first line of code to a working MVP in about eight weeks. Its first paying customer arrived about four months in. One developer built it, and he says Claude Code did the coding for the whole build through September 2025.
He has not published revenue figures. What he did publish is a very clear account of how the build worked.
The founder, Kirk Marple, also has an unfair advantage, and he says so. Zine sits on top of Graphlit, the AI data platform he had spent two years building. The one point: the fastest vibe-coded products are often thin apps on top of infrastructure that already exists.
A note on timing: this story is from October 2025, about a year old. The product may have changed since; the current homepage pitches it a little differently.
The problem it solves
Your knowledge is scattered across email, chat, docs and tickets. Search inside each tool is weak, and nothing searches across all of them.
Zine connects to those tools and lets you chat with an AI that knows your stuff. The blog post lists Slack, Gmail, Google Calendar, GitHub, Notion, Linear, Jira, Google Drive "and 20+ others." It offers search across sources, AI chat with citations, real-time sync and an MCP server. MCP is a standard that lets AI tools, like your code editor's assistant, pull data from other apps.
The current homepage pitches it as "The AI that actually knows your stuff," with access to many AI models.
How it was built

Marple wrote the first line of code on March 15, 2025. His tool was Claude Code, Anthropic's coding agent that works in your terminal and edits your project. He started on the Claude Opus 4.1 model and later moved to Sonnet 4.5. He added Factory Droid, another AI coding agent, for wiring complex systems together.
His workflow is simple enough to copy tomorrow:
- Describe the feature in product terms, not code.
- Let Claude Code write the implementation.
- Review it.
- Test it in the browser.
- Ship.
He describes the shift as going from writing code to reviewing it. He puts the speed gain at 5 to 10 times.
The stack:
- Next.js 15 with TypeScript, plus HeroUI and Tailwind for the interface
- Next.js API routes for the backend
- Clerk for sign-in
- Upstash Redis for caching
- Vercel for hosting
- Graphlit's TypeScript SDK for everything data-heavy
That last line is the key. He lists what he did not have to build: vector databases, embedding pipelines, search, OAuth flows, webhook handling, transcription and entity extraction. Graphlit already did all of it. He estimates that saved four to five months of pure infrastructure work.
The post doesn't say which payment provider Zine uses.
How it makes money
This is the thin part of the story.
The blog post describes Zine as "free to start." It does not list paid plan prices. At the time of writing, zine.ai/pricing returns a "page not found" error, and the homepage shows no plans.
What we know for sure is the milestone he reported: a first paying customer about four months after the first line of code. He doesn't say how much they pay or how many customers followed.
So treat this as a build case study, not a revenue one.
How it got its first users
Marple doesn't describe a channel-by-channel launch. Two things are visible:
- A Show HN post in October 2025, titled "I built a SaaS in 8 weeks, solo, using our own AI platform."
- The build-in-public blog post itself, which doubles as marketing for both Zine and Graphlit.
That second point matters. Zine is a product and also a demo of what Graphlit can do. Every Zine user is proof for Graphlit's developer customers.
What to copy
- Build on something that already works. You may not own a platform, but you can pick services that do the hard parts. Auth, search, file handling and payments are all available as services.
- Describe features in product terms. Let the AI pick the code; you judge whether the result does the job.
- Become a reviewer. His speed-up came from reading code, not writing it. Learn enough to spot logic bugs.
- Be honest about your head start. He opens with it. Readers trust the rest of the story more because of it.
In his own summary, product sense now matters more than engineering chops. I'd add a caveat: that's easier to say after two years of building the engine underneath.
If you vibe-code this
Zine is the example here, not an audit subject. For any app that connects to users' Gmail, Drive or Slack and lets an AI search it, I'd check:
- Ask for the smallest OAuth scopes. OAuth is the "Allow access to your Google account" flow. Read-only beats full access. Store tokens encrypted on the server. See secure authentication.
- Scope every search to the signed-in user on the server. Never take a user or workspace ID from the browser. See IDOR authorization.
- Assume ingested content is hostile. An email can contain instructions aimed at your AI. See prompt injection.
- Lock down your MCP server. Per-user tokens, no shared keys. See MCP security tools.
- Check auth in each route, not only in middleware. See middleware auth bypass.
A search route that takes identity from the session, never the request body:
// app/api/search/route.ts
import { auth } from "@clerk/nextjs/server";
import { z } from "zod";
const Body = z.object({ query: z.string().min(1).max(500) });
export async function POST(req: Request) {
const { userId } = await auth();
if (!userId) return new Response("Unauthorized", { status: 401 });
const parsed = Body.safeParse(await req.json());
if (!parsed.success) return new Response("Bad request", { status: 400 });
// searchIndex is your retrieval helper. The owner comes from the session only.
const results = await searchIndex({ query: parsed.data.query, ownerId: userId });
return Response.json(results);
}
Building something that reads people's inboxes? I review vibe-coded Next.js apps for data-isolation and OAuth issues. Email [email protected] with a link and your stack.
Key takeaway
Zine shows how fast a solo developer can ship when Claude Code writes the app and an existing platform handles the hard infrastructure. The revenue side is still undisclosed, so copy the build method, not an income expectation.
More case studies: Vibe-coded apps making money · The security checklist: Vibe coding security
Sources
- Kirk Marple, "How I built Zine in 3 months with AI coding" (October 9, 2025): https://www.zine.ai/blog/how-i-built-zine-in-3-months-with-ai-coding
- Show HN, "I built a SaaS in 8 weeks, solo, using our own AI platform" (October 10, 2025): https://news.ycombinator.com/item?id=45541869 (read via https://hn.algolia.com/api/v1/items/45541869)
- Zine homepage: https://www.zine.ai
- Zine pricing URL (404 on September 28, 2026): https://www.zine.ai/pricing