---
title: What you can build
description: A catalog of app ideas with copy-paste starter prompts — and which guides each one needs.
---

Every example below fits the Ilha + Void template and Outer's bindings.
Copy a prompt, swap in your own idea, and tell your agent which guides to read.

## Start here

**[Family dashboard](/guides/ilha)**

Links, birthdays, a dinner poll — static pages plus one form. Reads: quickstart, Ilha.

> Build a family dashboard on Outer: links to everyone's school pages, a
> birthday list, and a Friday-dinner poll with three options. One page per
> section, daisyUI cards. Read the Outer quickstart and Ilha guides first.

## Data-backed apps

D1 is on by default — loaders read it, one action per page writes it
([D1 guide](/guides/d1)). KV fits sessions, counters and flags
([KV](/guides/kv)).

**[Sign-up sheet](/guides/d1)**

Rows in D1, one form per slot. Reads: quickstart, Ilha, D1.

**[Book club votes](/guides/d1)**

Nominations plus a tally, seeded from a migration. Reads: D1.

> Build a potluck sign-up sheet: 12 slots, each takes a name and a dish.
> Store it in D1 with a migration, seed the 12 empty slots. Read the Outer
> D1 guide first.

## Scheduled and background work

Cron wakes a sleeping app and runs a `scheduled` handler ([Cron](/guides/cron)).
Queues fan out slow work like sending messages ([Queues](/guides/queues)).

**[Morning digest](/guides/cron)**

A cron job emails the day's items every morning. Reads: cron, email.

**[Welcome messages](/guides/queues)**

A form enqueues a job; the queue consumer sends it. Reads: queues.

> Every weekday at 7am, read the grocery table and email the open items to
> the family via Resend. Read the Outer cron and email guides first, and
> ask me for the Resend key before creating the app.

## Realtime

Chat rooms and live updates over WebSockets ([WebSockets](/guides/websockets)),
one-way streams over SSE ([SSE](/guides/sse)). Both ride the same app —
no extra services.

**[Family chat](/guides/websockets)**

One room per channel, names required to join. Reads: websockets, auth.

**[Live scoreboard](/guides/sse)**

Scores stream to every viewer without polling. Reads: SSE.

> Build a family chat room: one room, nicknames, message history in D1.
> Read the Outer websockets guide first. No login yet — nicknames only, and
> keep it to non-private chatter: unlisted apps open for anyone with the
> link. Add sign-in ([Auth](/guides/auth)) before any private messages.

## Files and accounts

Uploads land in R2 ([Storage](/guides/storage)); sign-in for your app's own
users runs on Better Auth + D1 ([Auth](/guides/auth)).

**[Photo wall](/guides/storage)**

Uploads in R2, thumbnails on the page. Reads: storage.

**[Members area](/guides/auth)**

Email + Google sign-in for readers, public pages stay open. Reads: auth, D1.

> Build a holiday photo wall: uploads go to R2, the front page shows the
> latest 20. Add a members page behind email sign-in. Read the Outer
> storage and auth guides first.

## Not yet

- **Code execution sandboxes** — [not available](/guides/sandboxes).
- **AI in your app** (Workers AI, Vectorize) — not available; no binding key passes deploy validation.
- **Native email sending** — use Resend over HTTP ([Email](/guides/email)).
- Native mobile apps, branches/preview environments, git push — out of scope ([Limits](/guides/limits)).
