01 · Internal tools that share

Your agent writes the app. We make it shareable.

The login, the permissions, the database — already there. You write only the part that's yours, then share it like a document, inside your company.

The audit and the spec run before you sign up. Registration waits until you deploy.

Authentication
What you used to write ≈ 30 lines — and none of it your product
import bcrypt from "bcrypt";
import session from "express-session";
import { pool } from "./db.js";

app.use(session({ secret: process.env.SECRET }));

app.post("/register", async (req, res) => {
  const { email, password } = req.body;
  const hash = await bcrypt.hash(password, 12);
  await pool.query(
    "INSERT INTO users (email, pw_hash) VALUES ($1,$2)",
    [email, hash]
  );
  req.session.uid = email;
  res.redirect("/");
});

app.post("/login", async (req, res) => {
  const { email, password } = req.body;
  const u = await pool.query(
    "SELECT id, pw_hash FROM users WHERE email=$1",
    [email]
  );
  const ok = u.rows[0] &&
    await bcrypt.compare(password, u.rows[0].pw_hash);
  if (!ok) return res.status(401).send("Nope");
  req.session.uid = u.rows[0].id;
  res.redirect("/");
});

function requireAuth(req, res, next) {
  if (!req.session.uid) return res.redirect("/login");
  next();
}
What you write now 1 line — read the header, that's it
// the visitor is already signed in.
// this is who they are:
const user = req.header("X-App-User");
Who can open this your-app.nhost.me

Private · The first deploy is always private. Only you hold the URL — check it, then decide who's next.

Named · Only the people you name can open it. No links that work for anyone who finds them.

Organization · Everyone signed in to your organization can open it. Access stops at the org edge — never outside it.

No config — the whole manifest
runtime: node-22
start: npm start

And even this is inferred from your package.json.

02 · The real problem

Hand it to your colleagues, not a zip file.

Your tool works. Now you want the person next to you to open it — same data, same place, no "install this first." But there's no login on it, no way to say who's allowed, and nowhere it can just live for the team. So it goes out as a zip, or "run it yourself," or it stays on a laptop under a desk. Building it was the easy part. Getting everyone into the same one is the wall.

03 · How it works

Build, deploy, share.

STEP 01

Build

Tell your agent what you need — Claude Code, Cursor, Codex. The skill is already installed, so the code is written to the contract from the first line.

STEP 02

Deploy

Say "deploy this." The agent creates the app, pushes the folder, reads the logs, and fixes itself if something breaks. No git, no repository, no admin rights to arrange first.

STEP 03

Share

Pick a level in the sharing dialog. The first deploy is always private — you get the URL, you check it, and only then does anyone else. Changing access never redeploys and never edits code.

Who can open this your-app.nhost.me

Private · The first deploy is always private. Only you hold the URL — check it, then decide who's next.

Named · Only the people you name can open it. No links that work for anyone who finds them.

Organization · Everyone signed in to your organization can open it. Access stops at the org edge — never outside it.

04 · What you don't write

The value is what's already there.

Not in your code

  • Authentication — comes from the corporate account, through the proxy.
  • Setting up a databaseDATABASE_URL is there the moment the app exists.
  • StorageSTORAGE_* is there too.
  • Domain and certificate — done.
  • Resource config — there is nothing to declare.
manifest — the whole thing
runtime: node-22
start: npm start

And even this is inferred from your package.json.

The contract

  1. Listen on $PORT.
  2. Read the user from the request header.
  3. Keep state only in Postgres and S3.
  4. Treat the filesystem as read-only.
  5. Don't write your own auth.
  6. Answer a health check.
  7. Declare secrets by name.

No required SDK. No framework to learn. Plain code just works, in any language your agent writes. That is the difference from Val Town and Convex — worth saying out loud.

05 · I already built something

Bring what you've got.

You built a tool before you'd heard of any of this. Here is every honest change, and how much each one actually costs.

What changesHow much it hurts
PortUsually already process.env.PORT. Nothing to change.
Files → S3Half an hour, mechanical.
SQLite → PostgresThe biggest piece.
Delete your own authSmall, but easy to miss.

About that login. Your app won't break with its old one in place — it'll just work. The visitor simply signs in twice: your organization first, then your homemade form. That second login is dead weight, so the agent removes it rather than repair it.

If you already have data. There's one more step — matching your existing users to their accounts. It's easy to forget, and a real headache when you do. We don't hide it.

Point your agent at the public spec — it runs an audit and hands back the exact changes for your code. No signup.
06 · Security & permissions

Answers for whoever signs off.

One sign-in. The corporate account — Google Workspace or Microsoft 365. Connected once.
Isolated. Apps are walled off from one another.
Inside only. Access stays within the organization. Full stop.
Scanned. Code is checked on every deploy, with a data-flow report before an app reaches wider access.
Logged. Every change to a variable is recorded — who, and when.
Handed over. An admin can take ownership of any app.
Secrets. The agent writes the names of variables, never the values. You paste the value in the browser — not in a chat, not in a terminal.
07 · A catalog, not a pile

Ten apps build faster than one.

The catalog

One list of every app in the organization: yours, the ones shared with you, everything you're allowed to open. Without it, nobody knows a colleague already built the tool they need.

Composition

Let Billing read the customer table that CRM already owns. The tenth app is faster than the first, because the data is already there — instead of ten drifting copies of the same customer list.

08 · It won't rot

Small tools rot. We don't let them.

Dependencies drift. Code an agent wrote works today and quietly breaks in three months. We keep the ground underneath patched and current, and we notice when something stops answering — so the tool you built in spring still opens in winter.

09 · The fair questions

The objections worth answering.

"We already have Retool."

Retool needs the person building the tool to know Retool. Here the agent builds it, and the tool is plain code — the same code your people already write.

"Isn't sharing employees' code a security hole?"

A scanner runs before anything is shared, with a report on where data flows. Apps are isolated from each other, and access never leaves the organization.

"What if the author leaves?"

An admin takes ownership of the app. Nothing is stranded on a departed account.

10 · Two ways in

Start from either end.

If you already have code, have it audited. If you're about to build, install the skill so it's written to the contract from the start.

The audit and the spec work without signing up — you register only when you deploy. Viewers are free; only the people who build apps pay.