Tech Stacks, and How They Actually Work
There is no best stack. There is a stack that fits the size of the business, the money it can spend a month, and how strange its work is. Here are the four we build on, what runs where, and where each one stops being the right answer.
Prices are what the services cost to run per month, not what a build costs. They are list prices at the time of writing and they move.
The Full Build
What our own shop runs on
Right for: A business with real volume, work that no product on the market models correctly, and a reason to own the thing outright.
What Is Actually Running
| Language | TypeScript, end to end | One language for the server, the browser and the rules in between. The pricing rule that decides a quote is the same file the server and the screen both read. |
|---|---|---|
| Server | Node 22 and Hono | A small, fast web framework. It serves the app, the API and the scheduled work from one process, so there is one thing to deploy and one place to read a log. |
| Database | Postgres | The whole system. Not a place to dump rows, the place the rules live. |
| Security | Row level security | Who may see a row is decided in the database, not by an if statement in the app. A forgotten if fails open. A policy fails closed. |
| Browser | esbuild, no framework | One bundled file. No React, no build ceremony, and a screen that paints in one pass because there is nothing between the data and the DOM. |
| Phone | Capacitor | The same web build wrapped as a real iOS and Android app, with the camera and the keyboard behaving properly. |
| Hosting | Railway | Push to main, it builds and deploys. A custom domain per client with its own certificate. |
| Texting | A messaging provider | Every text and every reply, routed by which number it came from. |
| Calls | Call tracking | Numbers that tell you which page or ad earned the call, and which calls nobody answered. |
| Cards | A payment gateway | Money against an invoice, and the payment is what closes the job. |
How a request moves
- 01
Phone or laptop
One JavaScript bundle, same code in the browser and in the app
- 02
Hono route
Checks who is asking and which shop they belong to
- 03
The query layer
The only place in the codebase that talks to the database
- 04
Postgres
Row level security decides what comes back, before the app sees it
Four hops, and the security is the third to last one rather than the first. That is deliberate. The database is the last line and it is also the only one that cannot be forgotten.
Running cost: $20 to $80 a month to run, plus texting and card fees on what you use.
What it buys you
- You own the source and the database outright.
- A new feature is cheap once the shape is right, because there is one place to add it.
- Nothing is metered per person. Hire a tenth technician on a Tuesday.
- Background work, scheduled work and the web app are one program, so they cannot disagree about a rule.
What it costs you
- It is the most expensive to build, by a wide margin.
- Somebody has to run it. That is a relationship, not a purchase.
- It is overkill for a business doing under roughly thirty jobs a month.
Static Front, Managed Back
The one most small shops should start on
Right for: A business that needs a real database and real logins, and does not yet need a server of its own.
What Is Actually Running
| Front end | Static HTML and JavaScript | Built once, served from a CDN. Nothing to keep alive, nothing to patch, and it is fast everywhere because it is just files. |
|---|---|---|
| Hosting | Cloudflare Pages or similar | Free at this size. Git push and it is live in under a minute. |
| Database and logins | Supabase | Postgres with authentication, file storage and live updates on top. Same row level security as Stack A, because it is the same Postgres. |
| Server bits | Edge functions | The handful of things that must not run in a browser. Sending a text. Taking a payment. Anything holding a secret. |
| Scheduled work | Database cron | Postgres runs its own jobs. Nightly reminders and sweeps, without a server to host them. |
How a request moves
- 01
Browser
A static page, already on the visitor's device from a CDN
- 02
Supabase
Straight to the database over HTTPS, carrying the user's own token
- 03
Row level security
The policy is the whole security model here, so it has to be right
- 04
Edge function
Only for the jobs that hold a secret, like sending a text
There is no server of yours in the middle. That is the saving and it is also the risk: with the app talking to the database directly, a policy written wrong is a data leak rather than a bug.
Running cost: $0 to $25 a month until you are past the free tiers.
What it buys you
- Cheapest real system there is. Genuinely free at low volume.
- Fast to build, and fast to change while you are still learning the shape.
- Still a real Postgres, so it can grow into Stack A later without a rewrite.
- No servers to keep alive at two in the morning.
What it costs you
- Row level security is the only thing standing between users. It has to be audited by impersonating a real user, not by reading the migration.
- Long jobs, big imports and anything taking more than a few seconds do not fit in an edge function.
- You are on somebody's free tier. It will not always be free.
Assembled From Tools
Live this week, and it has a ceiling
Right for: A business that needs something working on Friday, or one testing whether a process is even right before paying to build it.
What Is Actually Running
| The book | Airtable or a CRM platform | Customers, jobs and a board, out of the box. Somebody in the office can change a field without calling anybody. |
|---|---|---|
| The glue | Zapier, Make or a platform workflow | When a form is filled in, do these five things. Drawn on a screen, no code. |
| The front | A static site with a form | The part the public sees, which should be good regardless of what is behind it. |
| Texting and email | Whatever the platform includes | Usually enough, usually metered. |
How a request moves
- 01
Form on your site
The one piece you actually control
- 02
Automation platform
A drawing of what should happen next
- 03
The tool that holds the book
Your customers live inside somebody else's product
- 04
Their texting
Sent under their limits and their rules
Notice that three of the four boxes belong to somebody else. That is the trade. You buy speed now and you rent the shape of your business from four companies.
Running cost: $50 to $400 a month, and it climbs with every person you hire.
What it buys you
- Working in days, not months.
- No developer needed for small changes.
- The right way to find out whether a workflow is correct before paying to have it built properly.
What it costs you
- You cannot change the data model, so the strange thing your business does still has nowhere to go.
- Per seat pricing punishes you for growing.
- When an automation fails it fails silently. Nothing errors. The work just stops happening and nobody finds out for a week.
- Getting out is a real project. Plan the exit before you need it.
The Framework Build
When the public site and the app are one thing
Right for: A business whose marketing site, customer portal and internal tool should be a single product, or one that expects to hire developers.
What Is Actually Running
| Framework | Next.js or similar | Pages that search engines can read and an application behind the login, from one codebase. |
|---|---|---|
| Database | Managed Postgres | Neon, Supabase or the host's own. Someone else handles backups and failover. |
| Database access | Drizzle or Prisma | Types generated from the schema, so a renamed column breaks the build instead of production. |
| Hosting | Vercel or similar | Preview deploys on every branch, which is worth more than it sounds when several people are working. |
How a request moves
- 01
Browser
Asks for a page
- 02
The edge
Serves the public pages from cache, near the visitor
- 03
Server component
Renders the logged in parts, reading the database directly
- 04
Managed Postgres
Through a connection pool, because serverless opens a lot of connections
The strength is that a marketing page and a screen behind the login are the same codebase. The trap is that the same code runs in three places and it is not always obvious which.
Running cost: $20 to $150 a month at small scale, more once traffic is real.
What it buys you
- One codebase for the public site and the application.
- Easy to hire for. There are a lot of developers who know this.
- Preview deploys make review honest.
What it costs you
- The framework moves fast and upgrades are real work.
- Serverless and Postgres need a connection pool or they exhaust it.
- Costs are cheap until they are suddenly not, and the bill is usage shaped.
What Happens Between a Missed Call and a Text Back
This runs in every stack above. Only the boxes change. It is worth reading once because the money is in the timing, not the technology.
A call comes in and nobody picks up
The tracking number records it. The number itself is the attribution, so you know whether the caller came from your site, a map listing or an ad.
A poller notices, or a webhook fires
Either the provider tells us, or we ask every minute. Asking is less elegant and it is the one that still works when their webhook is down.
The system checks who this is
Matched on a phone number stored one way, in one place. Doing that five different ways is how one person becomes four customers.
It decides whether to answer at all
Is it inside your hours. Have we already texted them today. Is a real person already replying in that thread. Has this customer asked us to stop.
The text goes out
Under your number, in your words, saying something a human would say. Forty four seconds is the target, because the caller is still deciding.
The reply lands on a board
Not in somebody's personal phone. In the shop's book, where the next person on shift can see it.
Every one of those six steps is a place we have seen a shop lose a job. The fourth is the one that gets built last and matters most, because software that texts a customer at eleven at night costs you the customer it was trying to catch.
Two Things We Will Not Pretend
Repair data is a subscription you hold, not something we can include
The big labor time and wiring diagram libraries have no door we are allowed to walk through on your behalf. We can put a button in your screen that opens your account. We cannot sell you their data inside ours, and anybody who says they can is either wrong or reselling you a login.
Taking cards on day one is a conversation with a bank, not a checkbox
A payment gateway account is underwritten, in your business name, and it takes as long as it takes. We build the money side so it is ready. The account is yours to open and we will help you open it.
Not Sure Which One You Need?
That is the normal answer, and it is what the first week is for. Tell us what your shop does that the software will not.