# Recipes Ways an app is built on Pilely. Each recipe is one shape of app: who reads, who writes, and which services carry it, with the architecture, the setup and the code that follow from that. Find the recipe that fits the app, or the few it borrows from. Files (images, attachments, documents) are a `simple_db` column type in every recipe: a file belongs to the row that holds it, and the row's table decides who uploads, reads, replaces and deletes it; deleting the row, or clearing or replacing the field, deletes the file (`https://simple-db.pilely.app/README.md` → `### File columns`). Choosing each table's sorts is part of designing it, in every recipe: the orders `records/list` can read the table in, declared in the `tables/create` call (`sorts`, up to 3; creation order, newest first, when left out). Pick one per order the pages actually list in, and no more: each sort adds write units to every write and a copy of every record to storage. Never sort or filter a list in the page instead: a page holds at most 100 rows, so it is right only until the table outgrows one page. Narrow with `where` and count with `count: true` (`https://simple-db.pilely.app/README.md` → `### Sorts`, `### Filter`). ## Frontend only | Recipe | What it is | What it fits | | --- | --- | --- | | [Members-only shared space](https://pam.pilely.app/recipes/frontend_only/members_only_shared_space) | A known group of people reads and adds, each member edits their own items, and editors and the owner curate. A frontend-only app: a `protected` bundle, a `simple_group` members group on every `simple_db` table, files included in their rows' `file` columns, members editing and deleting their own rows in place, and an `editors` group that may change any row. | Family chore chart, shared grocery or packing list, family recipe book, wedding planner, roommate expense splitter, team task board or kanban, small-team CRM and sales pipeline, inventory and orders tracker, maintenance log, content calendar, internal issue tracker, team wiki, hiring-team applicant tracker, club roster and member directory, sports team management, shift schedule, nonprofit donation tracker, and a small polled group chat. | | [Only me](https://pam.pilely.app/recipes/frontend_only/only_me) | The owner is the only person who ever reads or writes the app. A frontend-only app: a private bundle, plus `simple_db` tables, photos and files included in their rows' `file` columns, that one empty group locks to the owner. | Habit tracker, journal or diary, mood, sleep or medication log, budget and expense tracker, cash book, reading list, workout log, meal log, personal CRM or birthday list, job-application tracker, subscription tracker, collection or home inventory, to-do list and notes, bookmarks and read-later, personal recipe box, trip itinerary, plant, pet or baby care log, solo-seller inventory, freelance invoice register, and moodboard. | | [Open board](https://pam.pilely.app/recipes/frontend_only/open_board) | Any signed-in user posts, everyone reads, authors edit and delete their own posts, and the owner moderates. A frontend-only app: a public bundle, `simple_db` tables every signed-in user can add rows to and change their own rows in, owner-only tables for settings, a `banned` group, and images people post kept in their posts' `file` columns. `simple_db` enforces who may change a row and keeps banned users from writing; the pages apply the few remaining rules when they read. | Forum or community board, comments and likes under posts, guestbook, reviews wall, Q&A board, link-sharing hub, user photo wall, recipe-sharing community, public poll with visible votes, "when can you meet" poll, potluck, volunteer or office-hours sign-up sheet, feature-request voting board, classifieds where people contact each other off-platform, and a member directory where members keep their own profile. | | [Owner publishes, world reads](https://pam.pilely.app/recipes/frontend_only/owner_publishes_world_reads) | The owner writes the content, and anyone reads it, signed-out visitors included. A frontend-only app: a public bundle, and `simple_db` tables only the owner writes, images included in their rows' `file` columns. | Portfolio or personal site, link-in-bio page, blog or newsletter archive, restaurant or café menu, service and price list, resume, changelog or release notes, docs, FAQ or knowledge base, recipe site, photo gallery, event or exhibition page, team schedule and results, status page, and a curated directory the owner maintains. | | [Private line per person](https://pam.pilely.app/recipes/frontend_only/private_line_per_person) | The owner and each person who writes in share a private thread and files that nobody else sees. A frontend-only app: a public bundle, one `simple_db` `messages` table where each person reads only their own line, a `blocked` `simple_group` group for bans, and files kept in the messages' `file` column. | Client portal for a handful of clients, coach–client plans and check-ins, tutor or teacher feedback per student, therapist or vet updates to a client, landlord–tenant maintenance requests, accountant document exchange, investor update portal, photographer's per-client proofing gallery, and small DM-style threads with the owner. | | [Public face, private inbox](https://pam.pilely.app/recipes/frontend_only/public_face_private_inbox) | Anyone signed in submits and reads back only their own submissions, and only the owner (or a staff group) reads every submission. A frontend-only app: a public bundle, `simple_db` inbox tables that every signed-in user may write, where each submitter sees only their own rows and the owner and staff see and handle every row, and often public tables the owner publishes beside them. | Contact form, quote request, signed-in waitlist, event RSVP, booking or appointment request the owner confirms, pre-order with pay on pickup, job application, feedback and bug reports, survey or NPS, suggestion box, volunteer sign-up, contest entries, homework handed in to a teacher, support ticket intake. | | [Submit, owner reviews, world reads](https://pam.pilely.app/recipes/frontend_only/submit_owner_reviews_world_reads) | Signed-in users submit entries into a private queue and follow their own submissions, the owner approves them by copying them into a public table, and anyone reads that table, signed-out visitors included. A frontend-only app: a public bundle, a `simple_db` queue table anyone signed in can write where each submitter sees and edits only their own rows, a public table only the owner writes, and images in both tables' `file` columns. | Job board, startup, tool or resource directory, partner or local business directory, community event calendar, testimonials wall, moderated photo contest gallery, creator or personal-website directory, and curated listings with off-platform contact. | ## Frontend and backend A backend app is an API server: it answers API calls (JSON, files, redirects, webhooks) for pages and agents, and browser pages live in a frontend app that calls it (`https://pam.pilely.app/specs/backend_apps` → `### What a backend app is for`). Every recipe here is built that way. A page calls the backend's host with `window.pilely.fetch`; its token is the frontend app's, which the backend admits only through an `app` public route whose `simple_group` group holds the frontend app, and the backend's server checks the caller's user id and app id itself. Signed-out writes go through a `public` public route and need no token. The backend's `simple_db` tables, and the files they hold, answer only calls made through the backend app (its server, and agents holding a token for it), so whatever a page reads directly lives in the frontend app. | Recipe | What it is | What it fits | | --- | --- | --- | | [Every user's own space](https://pam.pilely.app/recipes/frontend_and_backend/every_users_own_space) | Many users, and each sees and edits only their own rows, or rows shared with them. Two shapes: a frontend-only app when each user needs only their own rows plus rows the owner addresses to them ("my data"), and for everything else a frontend app with the pages and a backend app whose `simple_server` server answers the API and is the only reader and writer of its `simple_db` tables, filtering by the caller. | Multi-user notes, journal, habit, todo or budget app, saved items and wishlists, saved searches, course progress and private quiz scores, AI chat history, direct messages between users or between a user and the owner, buyer-seller threads, customer portal or support desk where each customer sees only their tickets, and team software where each organization sees only its own records. | | [Paid access](https://pam.pilely.app/recipes/frontend_and_backend/paid_access) | Signed-in users pay the owner through Stripe, and paying unlocks content. The frontend app holds the pages; the backend app's server creates Stripe Checkout sessions, receives Stripe's webhook on a public route, and serves the paid tables and files itself to buyers whose `simple_db` row is active, with the Stripe keys in a `simple_env` set. | SaaS subscription, paid membership or community, online course, paid newsletter archive, digital downloads (templates, presets, e-books), event tickets, a small online store, and a supporter tier with perks. | | [Rules-enforced shared state](https://pam.pilely.app/recipes/frontend_and_backend/rules_enforced_shared_state) | Users act through the app's own server, the only writer, so hard rules hold: capacity limits, one per user, authors editing their own entries only within rules (some fields, before a deadline), hidden answers, turn order. A frontend app with the pages, and a backend app whose `simple_server` server, on one box or several, answers the read and action routes and decides each rule with a conditional write on `simple_db` tables only the server writes (through a group holding the app). | Appointment booking with live slots, table or room reservations, class sign-up with real capacity, inventory and limited stock, coupon or ticket caps, auctions and sealed bids, an auto-graded quiz with a hidden answer key, a secret santa or random draw, a turn-based game, a leaderboard with validated scores, eligibility-checked votes, referral points, and listings their authors edit only within rules. | | [Secret-key proxy](https://pam.pilely.app/recipes/frontend_and_backend/secret_key_proxy) | The server holds a third-party API key and calls that API for the user. A frontend app with the pages, and a backend app whose `simple_server` box answers a few fixed routes, with the key in a `simple_env` set the box reads at boot, `simple_limiter` policies on those routes, and `simple_db` for history. | AI post or caption generator, resume or cover-letter optimizer, AI trip planner, chat-with-a-model app, AI tutor or study buddy, image generation, translation, SEO or website analyzer, weather, maps or geocoding app, price dashboard on a paid data feed, and an SMS sender. | | [Signed-out intake and counters](https://pam.pilely.app/recipes/frontend_and_backend/signed_out_intake_and_counters) | Visitors who are not signed in send something in or add to a count, and only the owner reads what arrives. A frontend app with the pages and forms, and a backend app whose server takes each signed-out write on a public route, checks it, and stores it in `simple_db` tables that only the owner and the server can read or write. | Waitlist or launch page with no login, newsletter signup with email confirmation, public contact or lead form, feedback form, URL shortener with click counts, page-view or like counter, and unsubscribe links. | | [Timers and inbound hooks](https://pam.pilely.app/recipes/frontend_and_backend/timers_and_inbound_hooks) | Work that runs with nobody present: on a schedule, or when a third-party service calls in. A backend app does the work: its server's own background loop runs the schedule, a `public` public route lets senders reach `/hooks`, server-only `simple_db` tables record what ran, `simple_env` holds the secrets, and `simple_email` sends the mail; the pages are a frontend app that calls it. | Habit, bill and birthday reminder emails, daily or weekly digest, price or uptime monitor, scheduled social posting, RSS or news aggregator, recurring invoices, data sync from a spreadsheet or another API, Slack, Discord or GitHub bot, and receivers for form-tool, calendar or repository webhooks feeding a dashboard. | | [Two frontends, one backend](https://pam.pilely.app/recipes/frontend_and_backend/two_frontends_one_backend) | One product, three registered apps: a public frontend app for customers, a private frontend app for the owner's dashboard, and a backend app whose server is the only reader and writer of the data. The frontends call the backend across hosts through `app` public routes; the backend holds every `simple_db` table, product images included in a `file` column, the Stripe keys in a `simple_env` set, the Stripe webhook on a public route, and the `simple_email` account. | Online shop with guest checkout, bakery or farm pre-orders, print-on-demand store, restaurant takeaway ordering, event tickets with a box-office dashboard, course or e-book sales with an instructor dashboard, donation page with a treasurer dashboard, booking site with a back office, and any product whose public face and management console must be separate apps with one API behind them. | ## AI capability The owner's own AI agent (Claude, ChatGPT, or another harness) does work for the app: it finds or writes the app's content, or analyzes the app's data. It runs in the owner's harness on the owner's computer and calls the platform with an app token for the app, either on a scheduled task in the harness or whenever the owner comes back and asks. The platform does not run AI agents for apps today: no recipe here puts a model API key on a server. | Recipe | What it is | What it fits | | --- | --- | --- | | [Agent analyzes the app's data](https://pam.pilely.app/recipes/ai_capability/agent_analyzes_app_data) | The app collects data in `simple_db` tables, files included in their `file` columns, and the owner's AI agent reads it with an app token for the app and finds what it means: it tells the owner in the conversation, writes results to an owner-only `insights` table the app shows, or fills result columns on the data rows. Run on a scheduled task in the harness (the computer must stay on) or whenever the owner comes back and asks. No server-side agent and no LLM API key. On top of any recipe. | Weekly summary of a habit, mood or spending log, sales and best sellers in a small shop, sign-up trends, themes in feedback, surveys or support tickets, tagging or sorting an inbox of requests, spotting spam or duplicates, reading uploaded receipts or documents into rows, and a monthly report for a club or team. | | [Agent-refreshed content](https://pam.pilely.app/recipes/ai_capability/agent_refreshed_content) | Content the app shows is found or written by the owner's AI agent (searched, summarized, generated) and refreshed again and again, not typed in or hard-coded. The owner's agent, in the owner's own harness, writes each refresh into owner-written `simple_db` tables as one batch and switches a one-row `current` table to it, either on a scheduled task in the harness (the computer must stay on) or whenever the owner comes back and asks. No server-side agent and no LLM API key. Public, protected or private, on top of the recipe that fits who reads. | Daily or weekly news digest, curated reading list or link roundup, industry or competitor watch, job, grant or event listings gathered from the web, deal roundups, a daily quote, word or puzzle, generated study cards, a weekly meal plan, and a local-events guide kept current. | --- **Skill version:** 2026.10.29.042001 This page is live documentation and it changes often — do **not** cache it or keep working from a copy you fetched earlier. - If you are holding an earlier copy of this page, compare its **Skill version** against the one above. If they differ, throw away what you remember and re-read. - **Re-read a page right before you act on it.** A page you read earlier — even earlier in the same session — may already be stale. - Re-fetch Pam's guide — [https://pam.pilely.app/pam.md](https://pam.pilely.app/pam.md) — at the start of every session or task. The platform's own entry is its README — [https://pilely.app/README.md](https://pilely.app/README.md) — and every service on pilely.app has one manual, `https:///README.md`; re-fetch it whenever an endpoint behaves differently from what a page described. - **This host is markdown only.** Every GET answers the document as markdown, with or without the `.md` suffix — there is no human HTML view here. Append `.md` to every page on this host you construct yourself (the host root is `/index.md`); links on this host already carry it. The `.md` habit is for pam.pilely.app pages only: on every other host on pilely.app the manual is the literal `/README.md` and every route is a `POST`, so never append `.md` to a service route. - **Read and write files with your harness's own file tools**, never with a shell command — `cat >`, a heredoc or a redirect stops to ask the user for permission, and the file tools do not. - **Make the request with an HTTP client (`curl` or equivalent), never a browser** — on the other hosts a browser renders the human view; reading a manual is never a job for one. Fetch a page with `curl -sL ` and nothing else on the line: follow redirects (`-L`), and never chain a second command onto it with `;`, `&&` or a pipe — a chained command is checked as one whole and will stop to ask the user for permission.