Back

Building OperationBegin: The App

By Vannrith V.Discontinued2025-2026

The brand and website introduced OperationBegin as a minimalist CRM for freelancers and small teams. This is the rest of the story: the app itself, why it exists, the decisions behind it, how it was built, and why I eventually replaced it with something smaller.

One rule shaped the whole project: every feature had to earn its place. I wasn’t trying to compete with the enterprise tools. I was trying to run my own studio with a tool I fully understood.

Why I Built It

I needed one small thing: a place to track clients, projects, estimates, and invoices. I did not need another dashboard that also wanted to process payments, run my marketing, and take a commission for the privilege.

The tools I tried were either too expensive, too complicated, or simply unavailable where I live and work. So I wrote myself a deliberately narrow brief:

That’s it. No payments, no accounting suite, no assistant bolted onto the sidebar. If a feature didn’t make one of those four jobs faster, it didn’t ship.

What I Chose Not to Build

The most important product decision was subtraction. OperationBegin does not receive payments. It creates the document, tells the client how to pay, and then gets out of the way: bank transfer, QR code, or whatever the client already uses.

That single boundary kept the product tiny. No card processing, no payouts, no PCI scope, no reconciliation. I could spend my time on the part that actually needed designing: turning a conversation into an estimate, and an estimate into an invoice, in a couple of minutes.

Choosing the Stack

I picked three tools, and then removed one.

Polar didn’t last, but not because it was hard to use. I decided against the SaaS route, so I never paid for Polar and scrapped it before it cost anything. If I ever do go the subscription route, it’s the first tool I’d reach for. It’s extremely easy to use and the best fit for what I do. Building a business around recurring billing was just a different project from building a tool for my own studio, and I only wanted one of them.

Building It Mostly With AI

The app was written heavily with AI, but the process was not “generate and hope.” It looked more like this:

  1. Plan before code. I wrote the spec first: data model, routes, edge cases, and what “done” meant for each feature. No implementation started until the plan was clear.
  2. Small increments. One feature at a time, in diffs small enough to actually review. Big AI jumps are where quality goes to die.
  3. Manual testing before every push. I clicked through the real flows: sign up, create a client, assign a project, draft an estimate, convert it to an invoice, change settings. If I wouldn’t trust it with a real client’s invoice, it didn’t go to production.
  4. Deploy to Vercel last. Only after the manual pass.

AI made the writing fast; it did not make the decisions. The planning and the testing stayed human. That division is what let a solo designer build and run a real multi-tenant app.

The App

Below is the product in its final shipped state: the flows I used to run real client work.

OperationBegin dashboard shown on two tablets in light and dark mode

One dashboard for the whole studio: unpaid and overdue invoices, revenue, upcoming work, and the estimates pipeline, with quick actions for adding clients and projects.

OperationBegin invoices list on a tablet

Invoices are first-class, not an afterthought: searchable, filterable by status, and one click from the document itself.

The Dashboard

OperationBegin dashboard in light mode

Light mode: the same information, no decoration. Color is used only where it carries meaning: unpaid, overdue, paid.

OperationBegin dashboard in dark mode

Dark mode is a real theme, not an inverted afterthought.

Projects

Projects became the container for everything else: a client, a color, a description, and a board of tasks. Color was the primary way to tell work apart at a glance, a small decision that made the list feel personal.

OperationBegin project list with colored folder cards

The project list. Each project gets an identity through color, so the right one is obvious before you read a word.

OperationBegin kanban board with Todo, Doing, and Done columns

A simple three-column board. Deliberately not a full project-management suite, just enough to see what’s moving.

OperationBegin edit project dialog with color picker

Editing a project: name, description, and a fixed palette. A constrained set of colors keeps identities consistent instead of letting everything drift.

OperationBegin dialog for assigning a client to a project

Attaching a client to a project is a two-second search, not a form.

OperationBegin task editor side panel

Task editing: due date, status, and markdown notes, all in a side panel so you never lose your place on the board.

Clients

The client record is the front door to everything: contact links, status, lifetime revenue, and the projects, invoices, and estimates attached to them. Notes keep the context that most CRMs bury.

OperationBegin client directory table

The client directory: company, primary contact link, status, and last activity at a glance.

OperationBegin client detail page

Client detail: contact actions, lifetime revenue, attached work, and a running set of notes.

OperationBegin client edit form

Editing a client. Every field is optional except the ones that matter, and deletion is a deliberate, separate action.

Estimates

Estimates are where design work becomes a document. Line items, tax, terms, and payment instructions are configured once in settings and reused on every document. When a client says yes, one action converts the estimate into an invoice.

OperationBegin estimates table

The estimate pipeline: status, due date, and client, all scannable in one table.

OperationBegin estimate document view

The estimate itself: letterhead, bill-to, line items, totals, terms, and payment details. One Convert action turns it into an invoice.

Invoices

Invoices share the structure of estimates, plus the parts that matter once money is due: a due date, a status, notes, and a QR code pointing at however the client prefers to pay. The app issues the document; it never touches the money.

OperationBegin invoices table

All invoices, filterable by status and searchable by number, client, or project.

OperationBegin invoice document view with QR payment code

The invoice: the same clean document language, with a payment QR, terms, and bank details baked in.

Settings & Admin

Company settings are the source of truth for every document: logo, address, currency, tax rate, payment details, and the terms that travel with each estimate and invoice. Writing that once is what turns every new document into a two-minute job.

OperationBegin personal settings tab

Personal settings: name, company, and avatar, kept intentionally minimal.

OperationBegin company settings tab

Company settings: logo, payment QR, currency, tax rate, and markdown terms. Set it once; every document inherits it.

OperationBegin security settings tab

Security: email and password changes, protected by Cloudflare Turnstile.

OperationBegin danger zone settings tab

The danger zone asks you to type the confirmation and re-enter your password. Destructive actions should feel destructive.

OperationBegin admin platform overview

The admin overview: platform-wide counts across all tenants, so the health of the whole system is visible in one screen.

Running It

OperationBegin ran my actual client work. That’s the only test that counts: if a tool is annoying when you’re busy, you feel it immediately. Using it daily turned vague ideas into a short, honest backlog and kept the surface area small. I shipped incrementally, tested against real invoices, and never let the app grow faster than my ability to maintain it.

Where It Ends

I’m sunsetting OperationBegin, not because it failed, but because I found a better shape for the same job.

The successor is OB3: a local-first app where your clients, projects, estimates, and invoices are files in a git repository on your own machine. It does what OperationBegin does, but offline, portable, and entirely under your control. No server to keep alive, no subscription, no lock-in. The data is just files you already know how to back up.

Knowing when to stop patching something and replace it with a smaller, more honest version is part of the job. OperationBegin proved the workflow; OB3 keeps it. I’ll write about the architecture, the file format, and what local-first changes about the workflow in a future post.