// dforge in the age of ai

AI can write
the app in a day.
Then it has to run.

Show as presentation

This is not a page about AI being overrated. AI genuinely removed the hardest part of internal software — getting from an idea to working code. What it did not remove is everything after: permissions, migrations, audit, handover, the second person. dForge carries those, so what AI builds you is still running in two years.

what the prompt gave you

A working app

screenscrudthe happy path
nothing underneath
what it didn't
access control
lifecycle states
audit trail
schema migrations
handover
the afternoon app

The demo works.
Then it has users.

A composite of what teams actually report after generating an internal tool. Every step is real work the prompt didn't cover.

what the prompt gave you

A working app

screenscrudthe happy path
nothing underneath
what it didn't
access control

one role, hard-coded — every user sees the same thing

lifecycle states

a status field anyone can overwrite, in any order

audit trail

no record that a change ever happened

schema migrations

a new field means a new database, by hand

handover

the context lived in one person's chat log

lifecycle of a generated internal tool
d1
Generated, deployed, genuinely useful. The ops lead is thrilled.
w3
A second team needs it, but must not see margins. Permissions were never a layer — they're if-statements.
m2
A field has to change. There's no migration path, so someone edits production by hand.
m5
Finance asks who changed that price on the 14th. Nothing recorded it.
m7
The person who prompted it changes roles. Twelve thousand lines nobody else has read.
m9
It gets regenerated from scratch. The clock starts again.

None of this is an AI problem. It's the shadow-IT lifecycle internal tools always had — only now it starts in an afternoon instead of a quarter, in more corners of the business at once.

what changed, what didn't

AI collapsed one cost.
The other one
never moved.

Software has always had two costs: writing it, and being answerable for it. Only the first one got cheap.

cost of writing it
collapsed
  • the blank page
  • boilerplate CRUD, forms, tables
  • syntax, frameworks, glue code
  • waiting behind the IT backlog
cost of owning it
unchanged
  • who may see and do what, on every request
  • the states a record is allowed to move through
  • what changed, when, and by whom
  • changing a schema without losing data
  • the handover to whoever maintains it next

A platform is simply those five, already solved, underneath whatever the AI writes.

code vs metadata

Same AI.
Two very different
things to hand it.

The real question is not whether AI writes your app — it's what it writes. Ask for code and you get an artifact only its generator understands. Ask for metadata and you get a business definition your team can read, review and diff.

ai writes code
  • thousands of lines to review before you can trust it
  • invariants live in whatever it happened to write
  • every change is a regeneration or a full re-read
  • reviewers approve diffs nobody really checked
  • security is a habit the model had, not a guarantee
ai writes metadata
  • a few hundred lines of typed definition
  • invariants live in the runtime, not the output
  • a change is a diff you can read in a minute
  • the platform refuses metadata that isn't valid
  • security is enforced on every request, by construction
review the diff, not the codebase
$ git diff crm.module/entities/deal.json
+   { "name": "margin", "type": "money",
+     "readableBy": ["finance", "admin"] }

$ dforge validate
  ✓ 6 entities · 14 views · 4 roles
  ✓ deal.margin · read blocked for [sales]
  ✓ migration planned · no data loss
2 lines to review · not 12,000 
The whole change is legible to the person who asked for it.
the substrate

dForge is what you
point the AI at.

Connect the dForge MCP server, describe what you need in Claude Code or the VS Code extension, and the model writes metadata into a real module. You review a business definition, not a codebase. The runtime does the rest.

01
Describe

Say what the business does. The things you track, the states they move through, who is allowed to touch them.

02
Generate

The model writes module metadata through the dForge MCP server — structured, typed, bounded by a documented tool surface.

03
Review

Read the diff. It describes your business, not a framework, so the person who knows the process can check it.

04
Validate

The platform rejects invalid metadata before it reaches an environment. Broken definitions never become broken apps.

05
Ship

Install to test, then production. Real PostgreSQL schema, API, UI, roles, audit trail — generated by the runtime, not written by the model.

change without breakage

Version two shouldn't cost you
version one's data.

Every tool that survives gets changed. On a generated codebase that means a rewrite and a hand-migration against a live database. On dForge a change is a versioned artifact: validated before it lands, absorbed by a throwaway test tenant first, and reversible if production disagrees.

See the full lifecycle
installed
crm@1.4.2
4,812
records
the change
+ 2 fields+ 1 view~ 1 renamed
gates it has to pass
  • metadata validates
  • applied to a test tenant
  • migration is reversible
promoted
crm@1.5.0
4,812
records

Same records. New model.

rollbackone command
01
A new version arrives

Modules are versioned artifacts, not a folder someone edits in place. Upgrading applies a planned migration — and anything you built on top keeps working, because the platform re-joins your own columns for you.

02
The AI proposes something wrong

Invalid metadata fails at validate, before it can reach any environment. What the model writes arrives as a diff you read first, then as a change a test tenant absorbs before production ever sees it.

03
Production disagrees anyway

Every promotion is a tagged, attributable version. Roll back to the previous one with your data intact and the audit trail kept, instead of debugging a live rewrite at midnight.

more than one of everything

One app is easy.
A business is
never one app.

Real operations run several modules on one model, built by different people, changed only by the people you allow, and used by people who need views nobody thought to design. No amount of prompting turns a pile of separately generated apps into that.

How extensions work
who may do what
crm.managerfin.viewerhr.manager

Roles are namespaced, additive, and scoped to folders.

modules, from anyone
crm
shipped
fin
shipped
crm-fin
your bridge
fin-ch
a partner
one model · one database

Shared entities, not integrations.

01
Modules that share a model

CRM, HR and warehouse aren't systems you integrate — they're modules on one schema. Where two of them need to meet, a small bridge module owns that seam, without either side being modified.

02
Reuse beats regenerate

Start from a module someone already built and extend it without forking: your additions live in your own table, and the base module can still be upgraded underneath you.

03
Not everyone gets to change it

Changing the model is an authored, reviewed, packaged act — not something any logged-in user can do on a whim. Inside the app, namespaced roles scoped to folders decide the rest.

04
A view nobody designed

People build the reports and dashboards they turn out to need, and a report can never expose more than that person could already query for themselves.

no new lock-in

AI shouldn't cost you
ownership either.

Generated code at least leaves you holding files. A platform has to clear the same bar to be worth choosing.

Read: the lock-in test
PostgreSQL
your data

A standard relational database with readable tables — queryable, backup-able, and legible without dForge in the picture.

single-tenant
your database

Every deployment gets its own database. Your operational records never sit in a pool shared with other customers.

self-hosted
your infrastructure

Run the whole platform inside your own environment, including air-gapped, on your own upgrade schedule.

plain files
your documents

Attachments live in an ordinary file store you can browse, back up and move — not an opaque blob service.

straight answers

The questions
people actually ask.

Why do I need dForge if AI can just write my app?

Because writing it was never the expensive part. An internal app that routes approvals or holds customer records has to enforce permissions on every single request, record what changed and by whom, migrate its schema without losing data, and survive being picked up by someone who didn't write it. AI is excellent at producing code and is not, by itself, responsible for any of that. dForge provides those as platform guarantees, so what AI generates for you is a business definition rather than an unowned codebase.

Isn't a platform just one more thing the AI has to learn?

It's less to learn, not more. Generating a full stack means the model has to invent authentication, access control, migrations and audit correctly every time, in whatever framework it picked. Generating a dForge module means emitting a typed metadata document against a documented tool surface, which the platform then validates before anything runs. A smaller output checked by a machine beats a larger one checked by nobody.

What happens when the person who prompted it leaves?

That is the case dForge is built for. A module is a declarative description of your business — entities, fields, states, roles, views — so it can be read by the next person, diffed in version control, and validated by the platform. Nothing important lives only in the original author's prompt history.

Do I still need developers?

For a lot of internal software, no: someone who knows the process can describe a module and ship it. Developers stay valuable at the edges — complex actions, integrations, and reviewing the modules that run something critical. What changes is that they review a business model instead of maintaining a pile of one-off applications.

Does building this way lock me into dForge?

Your data sits in a standard PostgreSQL database you can query, back up and take with you, and your documents sit in an ordinary file store. The platform can run entirely in your own infrastructure. The metadata describing your modules belongs to you and is a format a person can read.

Can I use my own AI assistant?

Yes. The dForge MCP server is a standard Model Context Protocol server, so it works with Claude Code and other MCP-capable clients. There is also a VS Code extension for authoring modules directly, whether or not a model is involved.

start building

Let AI build it.
Own what it builds.

Start from a ready-made module or describe your own. Either way it lands on a platform that still makes sense in two years.