Use when building an app on a no-code/low-code platform (Bubble, Softr, Glide over Airtable or Xano) — picking the platform, modeling the data, keeping usage-metered cost predictable, and planning the exit before lock-in. NOT a hand-written coded app (that is `nextjs`), NOT wiring SaaS tools together with no app UI (that is `automation-flows`).
npx skills add https://github.com/ericrisco/rsc-harness --skill no-code-app
You are deciding whether to build an app on a visual platform, which platform, how to model it, and where the wall is. No-code is not "the easy way" — it is a trade: you buy speed-to-first-user and pay it back in logic ceilings and metered cost. Your job is to make that trade with eyes open.
Decide the exit before you build the entrance. If you cannot describe how you would leave, you are not building an MVP — you are building a hostage.
No-code wins on speed-to-first-user — a working app in days, no deploy pipeline. That is the only thing it reliably wins. It dies on deep conditional logic and on scale economics: many-branch workflows get unmaintainable, and metering turns a $29 bill into a $400 one without warning.
Run this gate before touching any builder. If any line is a clear yes, route out — do not rationalize staying.
| If the user really wants... | Stop and go to |
| --- | --- |
| A hand-written app, full control over code | ../nextjs/SKILL.md (or ../react/SKILL.md) |
| A commerce storefront, products + checkout | ../shopify/SKILL.md |
| A content site / blog / CMS | ../wordpress/SKILL.md |
| To wire SaaS tools together, no app UI | ../automation-flows/SKILL.md |
| A spreadsheet as the deliverable itself | ../spreadsheet-ops/SKILL.md |
| A Notion workspace, not a published app | ../notion-connector/SKILL.md |
No-code is the right tool when ALL hold: there is a real app UI (screens + data + logic), the logic is mostly CRUD + a handful of rules, time-to-launch matters more than scale today, and you accept the platform owns your runtime. If logic is the heart of the product (pricing engine, matching algorithm, real-time anything), no-code is wrong even if the UI is simple — write code.
Match the platform to the app shape, then to the billing model you will have to defend in six months. Why this order: the billing model, not the feature list, is what kills no-code projects.
| App shape | Platform | Bills on | Why |
| --- | --- | --- | --- |
| Internal tool / client portal over existing data | Softr | Flat rate per workspace | No per-write metering, no charge for internal editors → predictable as you grow |
| Customer-facing, simple, mobile-feel | Glide | "Updates" (data writes) | Fast to ship; cost scales with write volume, and rows are capped per plan (a standard source tops out far below Glide's own tables) — watch both |
| Complex custom SaaS, heavy logic, custom workflows | Bubble | Workload Units (WU) | Most powerful builder; every query/workflow/API call burns WU, and tier allotments are small (Starter ~175K WU, Growth ~250K — only ~1.4x, not the 4x some stale write-ups claim) → cost is a function of usage, not seats |
Rules:
Exact tiers and numbers change — see references/platform-limits.md. Do not hardcode prices into your design; design against the *metering model*.
Tables and relations come before a single screen. Why: screens are cheap to rebuild, a wrong data model poisons every workflow and every cost estimate on top of it.
Pick the backend by logic complexity, not by familiarity:
| Backend | What it is | Use when | Watch out |
| --- | --- | --- | --- |
| Platform-native DB | Built into Bubble/Glide/Softr | Simple apps, one source of truth | Locked to the platform |
| Airtable | Relational DB with a spreadsheet UI | Simple read/create, admin data entry | ~50K records/base cap, slow API |
| Xano | Full backend (PostgreSQL + visual API builder) | Complex logic, performance, security | More setup; it is a real backend |
The hybrid pattern that scales: Airtable for human data entry/admin, Xano for API logic + performance + security.
Field-type and relation discipline:
bookings row links to customers and classes by relation, it does not copy the customer's name and email into every booking.Bad → Good:
Bad — one giant "Records" table, 40 columns, status in a text field,
customer name + email + class title all duplicated per row.
=> filtering is slow, a rename means editing every row, WU/updates balloon.
Good — customers | classes | bookings(customer→, class→, date, status:single-select)
=> rename once, filter by relation, aggregate cleanly, predictable cost.
Sketch the model in plain text before you build it:
customers: { id, name, email, phone }
classes: { id, title, starts_at, capacity, instructor }
bookings: { id, customer: ->customers, class: ->classes, status: [pending|paid|cancelled], created_at }
payments: { id, booking: ->bookings, amount, provider_ref } # via stripe
Payments in any of these flows: see ../stripe/SKILL.md.
The metering model punishes the obvious-but-wrong way of doing things. Build defensively.
Bad → Good:
Bad — On booking confirmed: loop over all 2,000 customers, call email API per row.
=> 2,000 metered ops every run; WU/update bill spikes; rate limits hit.
Good — On booking confirmed: write one row; a scheduled batch job sends queued emails.
=> one metered write per booking; sending is amortized and rate-safe.
The full 2026 tier/metering/record-cap table and worked cost examples live in references/platform-limits.md. Operating rules:
This is the section everyone skips and everyone regrets. Do it on day 1.
When two of those triggers fire, stop adding features and start the migration plan — do not keep pouring work into a runtime you are about to leave.
| Bad | Good | Why |
| --- | --- | --- |
| Reaching for Bubble because "no-code is faster" | Run Step 0 gate first | Coded apps/stores/blogs route to nextjs/shopify/wordpress |
| Building screens, then bolting on data | Model tables + relations first | Wrong model poisons every workflow and cost estimate |
| One giant table, 40 columns, text-typed everything | Normalized tables linked by relation | Cheap renames, fast filters, predictable metering |
| Airtable for complex logic + scale | Xano (or hybrid: Airtable entry + Xano logic) | Airtable ~50K cap + slow API; Xano is a real backend |
| Per-row API call in a workflow loop | Batch writes / scheduled jobs | #1 cause of WU/update bill explosions |
| Client-side-only validation | Enforce rules server-side + permission gates | UI validation is trivially bypassed |
| Pricing off the monthly sticker | Estimate from the metering model | WU/updates scale with usage, not the headline price |
| Testing only at demo scale (100 rows) | Load-test at 10x expected rows early | Snappy at 100 can crawl at 10,000 |
| No export plan, hope you never leave | Export day 1, keep model portable | 68% offer no code export; rewrite is $50K-$250K |
| Picking Bubble for a simple internal portal | Softr (flat-rate) for portals over data | Predictable cost, no per-write surprise |
Take ericrisco/no-code-app from the repository into ~/.claude/skills for personal
use, or into .claude/skills inside a project.
The agent identifies a skill by the name field in its header. Two skills with the
same name cannot sit side by side — one of them will be ignored.