DEV Community

Johan Eklund
Johan Eklund

Posted on

How I Built an 80,000-Line Open Source Wine Cellar App in 6 Weeks with Claude

I'm a wine collector. I'm also a developer. And like most developers, when I couldn't find an app that did what I wanted, I built my own.

The result is Cellarion — a full-featured, self-hosted wine cellar management app. Free, open source, and built almost entirely with Claude as my coding partner.

In about 6 weeks, we went from zero to a production app with 80,000+ lines of code, 40 database models, 47 API routes, 290+ commits, and real users. Here's how.

The Problem

I tried a few wine cellar apps. They all had the same issues:

  • Your data was locked in. Exporting was either impossible or deliberately painful.
  • Features were paywalled — sometimes basic ones.
  • They didn't let me visualize my actual cellar layout.
  • No community-driven wine database. Every user entering the same wines manually.

So I opened a terminal and started building.

The Stack

I went with a classic MERN stack, containerized with Docker Compose:

  • MongoDB + Mongoose for data
  • Express.js for the API
  • React 19 for the frontend
  • Meilisearch for fuzzy wine search
  • Docker Compose to tie it all together
  • rembg (Python/Flask) for automatic wine label background removal

Nothing exotic. Proven tools that work well together and are easy to self-host.

Enter Claude

Here's where it gets interesting. I didn't build this alone. Claude was my development partner from day one — not as a code generator I copy-paste from, but as a genuine collaborator.

What that actually looks like

A typical session: I describe what I want at a high level. Claude reads the existing codebase, understands the patterns, and implements it — backend route, frontend page, database model, tests. Then I review, test, and we iterate.

Some examples from the last few weeks:

"I want users to be able to share their cellar with friends and family"
Claude implemented the full sharing system — invite by email, role-based permissions (viewer/editor/admin), pending share resolution when someone registers, notifications, and the UI for managing it. Across maybe 15 files. In one session.

"The wine detail pages need structured data for Google"
Claude added JSON-LD schema markup, Open Graph meta tags, a server-side pre-rendering route for crawlers, and a sitemap generator. When Google Search Console flagged an issue with Product schema on wines without reviews, Claude diagnosed it and fixed it the same day.

"I want a 3D view of the cellar"
This one was fun. Claude built an interactive 3D cellar visualization where you can explore your racks, see bottles placed in their slots, and navigate around. Using Three.js and React Three Fiber, integrated with the existing rack and bottle data.

What Claude is actually good at

  • Understanding context. It reads your codebase and follows your patterns. My API routes all follow the same structure, and Claude picks that up immediately.
  • Full-stack thinking. It doesn't just write a backend endpoint — it writes the model, the route, the API client function, the React page, and the tests. All consistent with the existing code.
  • The boring stuff. GDPR compliance, data export endpoints, audit logging, rate limiting, input validation. The stuff you know you need but really don't want to write. Claude does it thoroughly.
  • Iteration speed. I can describe a feature, get a working implementation, test it, and ship it in a single session. That feedback loop is incredible for a solo/small team.

What it's not

Claude isn't magic. I still need to:

  • Know what I want. Claude is a great builder, but you need to be the architect.
  • Review everything. It makes mistakes. It sometimes over-engineers. It occasionally misses edge cases that only a domain expert would catch.
  • Make product decisions. Which features matter? What's the right UX? What should be free vs. paid? That's all human judgment.
  • Test in production. Docker, real data, real users — no AI replaces that.

Going Open Source

This was a deliberate choice. If your biggest complaint about existing apps is data lock-in, you'd better put your money where your mouth is.

Cellarion is AGPL-3.0. You can:

  • Self-host it on your own server
  • Fork it and modify it
  • Contribute features back
  • Export all your data whenever you want

The hosted version at cellarion.app is there for people who don't want to run Docker on a VPS, but the code is the same.

What's in the App

After 6 weeks of building, here's what Cellarion can do:

  • Cellars & Racks — Create cellars with customizable rack layouts that match your real setup. Place bottles in specific slots.
  • 3D Cellar View — Explore your cellar in an interactive 3D environment.
  • Shared Wine Database — Search a community-maintained database instead of entering wine details manually every time.
  • Drink Windows — Maturity tracking so you know when a wine is ready to drink, at its peak, or past it.
  • Statistics — See your collection broken down by region, grape, country, value, and more. Including a world map.
  • Cellar Sharing — Invite family or friends to view or manage your cellar together.
  • Label Scanning — Take a photo of a wine label and let AI identify the wine.
  • Full Data Export — One click and you have all your data. No lock-in, ever.
  • GDPR Compliant — Proper consent management, data portability, and right to deletion.

The Numbers

Metric Value
Time to build ~6 weeks
Lines of code 80,000+
Commits 290+
Database models 40
API routes 47
Frontend tests 266
Backend tests 335
License AGPL-3.0
Price Free

Try It

If you're into wine, give it a try. If you're a developer, check out the code. And if you find something missing, open an issue — or better yet, a PR.

I'd love to hear what you think.

Top comments (0)