I run a small business. Not a tech company. I sell a service, I manage people, I deal with invoices and contracts and all the operational stuff that nobody thinks about until it breaks. I'm not a developer. Before 2025 I had never opened a terminal on purpose. But over the past year I somehow ended up building a full production CRM. 90+ routes. Firebase backend. Five different API integrations. The whole thing runs on Claude Code and whatever I can figure out at midnight. Every CRM assumed I was someone else Every CRM assumed I was someone else I tried Salesforce. I tried HubSpot. I tried a few others I've already forgotten the names of. They all assumed I was either selling SaaS subscriptions or running an online store. My workflow doesn't look like either of those things. I needed to track candidates through a pipeline, manage relationships with partner companies, handle government-backed invoicing with specific fund codes, sync with a legacy student database. Nothing off the shelf came close. I got quotes from dev agencies. 50 to 100K, six months minimum, and I'd still need to explain my own operations to people who'd never seen them. So I opened a terminal. Not because I had a plan. Because I was frustrated. What the stack looks like What the stack looks like React on the frontend. Firebase for everything on the backend: Firestore, Auth, Hosting, Cloud Functions. Five external APIs bolted on for things like telephony, email campaigns, and syncing with the legacy system. No VS Code. No Copilot. I type things into Claude Code in a terminal window and it reads my files, writes code, runs the build. That's it. That's the entire engineering department. What a session actually looks like What a session actually looks like I open the terminal. I tell Claude what I want. "I need a page where the team can see all unpaid invoices grouped by funding agency, with a button to generate a PDF reminder." Claude reads the existing code. Checks how I've done similar pages before. Writes the component, adds the route, creates the Cloud Function for the PDF, updates the permissions config. Runs the build. If something breaks, it reads the error, fixes it, runs the build again. Sometimes it opens a browser with Playwright and takes a screenshot to show me the result. I'm not reading stack traces. I'm not googling "react useEffect cleanup." I describe what I need in plain words and I get working code. Most of the time. The thing that actually makes this work The thing that actually makes this work There's a markdown file. 200+ lines. It's basically a constitution for Claude. It specifies which files Claude has to read before touching anything, which actions need my explicit approval (deployments, database changes, anything that hits an external API), what it's absolutely not allowed to do (revert commits, send real emails, delete production data). Naming conventions. Architecture rules. Permission patterns. Without this file, Claude is a mess. It'll refactor things that work fine, add abstraction layers nobody asked for, "improve" code by making it three times more complex. The markdown file keeps it on a leash. Two other rules that saved me a hundred times: Commit every 2-3 files. If something goes wrong, you're never more than a few minutes from a clean state. Read before write. Always. Claude has to open a file before it can change it. That one rule probably prevents 80% of the bugs I'd otherwise deal with. Where it falls apart Where it falls apart Big files. Once a component hits 50KB, Claude starts forgetting what's at the top by the time it gets to the bottom. I learned to split things aggressively and run /compact a lot to clear the context window. Fake APIs. Claude will sometimes confidently call a function that doesn't exist, or use a library method that was deprecated two years ago. I added a rule: check the actual imports before using anything unfamiliar. It helps. Doesn't eliminate the problem. Chain reactions. You ask for one small fix and Claude touches 10 files. The markdown file now says: max 3 files changed before you commit. Keeps things reviewable. The scary one is external services. Claude can hit APIs. It can send emails. It can deploy to production. I have hard blocks on all of that. Nothing goes out without me typing "yes." One bad API call to production at 2am and you're dealing with real consequences. What it turned into What it turned into 90+ routes. 14 pages just for the marketing module. Role-based permissions. Dashboards with drag-and-drop widgets. Bank reconciliation. Automated scraping of job listings from four different platforms. Google Indexing API integration. Phone calls, SMS, WhatsApp through Twilio. Meeting transcription with AI. One person maintains all of it. That person is me, and I still don't really know JavaScript. What I actually learned What I actually learned I know my business better than any contractor could. That turns out to matter more than knowing React. Claude is the translation layer between "I know exactly what this should do" and "here's working code that does it." But you have to constrain it. Unconstrained, Claude is that intern who's very smart and very eager and will reorganize your entire filing system while you're at lunch. With constraints, it's genuinely productive. Run the build after every change. Not every five changes. Every single one. If it's broken, fix it now. Don't stack new code on top of broken code. I learned this the hard way more than once. And make Claude prove its work. It can take screenshots. It can run tests. "It should work" is not acceptable. Show me. So what So what I don't think this replaces developers. Real developers do things I can't touch. But if you're someone who understands a problem deeply and can't afford to hire a team to build the solution, this works. It really does. It's messy and frustrating and Claude will absolutely hallucinate a database schema at 1am, but the thing gets built. Open a terminal. See what happens.