Skip to content

Recipes

Recipes are the building blocks the guides are made of. Authored recipes describe a pattern; the generated ones document one MCP tool, one page-builder block or one query function each.

  • Add semantic search over your records: Rank records by meaning, not keywords: embed a text field into a vector, then search by cosine similarity. The platform ships the pieces — a vector field type,…
  • Authentication basics: Authenticate the caller before evaluating permissions. Keep identity verification separate from authorization, use narrowly scoped credentials, and fail closed…
  • Build an in-place CRUD form: Use a form block for the create operation and set source.targetmode to “create” (the documented default) with the target modelid. Add a clear onsuccesstoast so…
  • Call an external API from a rule: Post to Slack, notify a customer’s webhook, or hit any HTTP API when a record changes. This is the base outbound pattern the other integration recipes build…
  • Call an LLM and store the result on a record: Summarize a note, classify a ticket, draft a reply: send record data to an OpenAI-compatible chat endpoint and write the answer back to the record. A…
  • Charge your customers with Stripe: Create Stripe customers, checkout sessions, or payment intents from your application. Stripe’s API is form-encoded (not JSON) and authenticates with a secret…
  • Compose a contact form in a page layout: form-basics explains the form operation itself. This recipe adds the layout and composition around that operation: a contained contact section, an explanatory…
  • Compose a feature-card grid: Use a container with display.layout set to grid, then put canonical card blocks in its children. This is a static composition: the grid owns placement while…
  • Compose a nested hero section: A hero is a static composition of canonical blocks, not a special hero type. Use an outer container for the section treatment and an inner container to…
  • Compose a record-backed catalog grid: Build a catalog as a grid container with a repeated card inside it. The card’s binding.repeatover selects model records, binding.itemvar gives each iteration a…
  • Compose a shared site shell and landing page: Use the same shell on every page so navigation, identity, and the way visitors reach the footer remain stable. The shell has a header composition followed by…
  • Compose record access boundaries: Consumer reads follow one declarative model-level policy, consumerreads. It decides what a signed-in consumer of the application may read on a private model,…
  • Configure social preview cards: A preview card is the title, description, and image a social platform may show for a shared page. Crawlers read the Open Graph and Twitter Card tags the page…
  • Define an application MCP tool catalog: Create an ordinary application model named mcptool. This is a descriptive catalog: each record tells MCP clients what a tool is and how to validate its…
  • Embed a model-bound public form in a page: A form block has two completely different behaviours, and source.formid is the switch between them. Without it the block renders its own children as a direct…
  • Make CRUD interactions legible: Make each interaction state visible in the page itself: label inputs, use a submit control for the write, and provide success feedback with onsuccesstoast….
  • Model a CRUD resource: Start a CRUD app with one model for the resource users will create and manage. In MeroFoundry, application data is stored dynamically: models describe the…
  • Realtime stream-key subscriptions: Realtime frames use two consumer-visible key shapes: user:: for a single consumer identity and public: for a broadcast…
  • Secure authentication for your app: The platform builds the safeguards of application sign-in for you. Your job is to choose three identity settings, give the app a working outbound sender, and…
  • Send transactional email on an event: Send a welcome message, a receipt, or an alert. Email is its own subsystem, not a generic HTTP call: it delivers over SMTP through a per-application sender,…
  • Serve an application MCP endpoint: Serving MCP is off by default and never implicit. An application exposes an MCP endpoint only when two explicit choices are made: an inbound service to receive…
  • Serve row-scoped tools to consumers over MCP: Give a signed-in consumer’s own AI agent a tool that returns only that consumer’s rows. The row scope is the same server-bound ownership boundary the dashboard…
  • AVG: AVG(numeric field) -> NUMERIC
  • CAST: CAST(value, ‘boolean’ | ‘integer’ | ‘numeric’ | ‘timestamp’) -> target type
  • COALESCE: COALESCE(compatible, compatible, …) -> unified type
  • COUNT: COUNT(field | ) -> INTEGER
  • DATE_FROM_EPOCH_DAY: DATEFROMEPOCHDAY(integer) -> DATE
  • EPOCH_DAY: EPOCHDAY(date) -> INTEGER
  • MAX: MAX(field) -> field type
  • MIN: MIN(field) -> field type
  • MOD: MOD(numeric, numeric) -> NUMERIC
  • SUM: SUM(numeric field) -> NUMERIC