Skip to content
STACK IT FIRST
Install the skills
03 · Backend · MVP · Internal

Hono + SQLite + server-rendered HTML

An internal tool is a few tables and a few forms; render them on the server and skip the frontend build entirely.
Agent fit5/5 MVP · Ship it Reviewed

The stack

Framework
Hono with JSX (server-rendered) or Supabase Edge Functions
Runtime
Bun
Data
SQLite via Drizzle, or the product's Postgres in read-only
Auth
Google Workspace or GitHub OAuth allow-list
Hosting
Fly or a VPS behind a company VPN
Also
  • htmx or plain forms for interactivity
  • Tailwind via CDN for styling
  • A cron for the automation parts
AGENTS.md + real projects on STACK IT FAST (opens in a new tab)

Why agents do well here

5/5
  • Server-rendered HTML is the simplest thing an agent can write and verify; there is no client state to reason about.
  • One codebase for both the screens and the automation keeps the whole tool in the agent's context.
  • An OAuth allow-list is a ten-line middleware the agent will get right, unlike a home-grown login.

Avoid at this tier

  • A React frontend for a CRUD screen.
  • Writing to the product database from an internal tool; read from a replica, write through the product API.
  • A separate automation service; put the cron in the same process.

How it fits together

Internal tools are where over-engineering hides. Render HTML from the handler, submit forms, and put the automation in the same process on a schedule. The agent can add a screen and a table in one change.

Folder layout

src/
  index.ts        Hono app + OAuth allow-list middleware
  pages/          <screen>.tsx rendered on the server
  db/             schema.ts, migrations/
  jobs/           nightly-report.ts, run by a cron route

First five decisions

Lock these in before the agent writes the second feature. Each one removes a choice it would otherwise make differently every time.

  1. 01 Server-rendered HTML
  2. 02 OAuth allow-list
  3. 03 SQLite or a read replica
  4. 04 Cron inside the app
  5. 05 Forms over fetch calls

When to move on

Stay here until the product forces the next tier. You are ready for Growth when:

  • A breaking response change would break a client
  • Background work, emails or webhooks exist
  • Someone asks for an API reference
  • You have been paged at least once
Growth · Internal Django + Postgres + Redis Batteries included: the admin, the ORM, auth and background tasks are one framework the agent has read more of than any other. Next tier

Same tier, other profiles