- Published
- Next read
- Live
Browser rendering
The SDK runs in the visitor's browser and reads content on the fly.
- Edits appear
- On the next read
- Good for
- Client-side apps and widgets
Define what's editable in a TypeScript schema, migrate it with one command, and read it from any framework. Your client gets the editor, forms, and analytics.
No theme to fight and no admin panel to configure. You set the rules in code; AtMyApp handles the editing.
atmyapp.schema.ts
headline: s.string({ max: 80 }),
cover: s.image(),
Describe what's editable in one TypeScript file.
The CLI validates the schema and uploads it to your project.
Fresh pasta, made every morning
Read typed content and render it with your own components.
Add cacio e pepe to the lunch menu
Your client edits and publishes. You get back to building.
You write the rules once. Your client asks for changes in plain words, and the assistant can only change what your schema allows.
You ownSchema, components, rendering, and deploys
import { defineSchema, defineDocument, defineCollection, s } from "@atmyapp/structure"; export default defineSchema({ definitions: { home: defineDocument({ path: "home.json", fields: { headline: s.string({ max: 80 }), introduction: s.longText({ optional: true }), }, }), dishes: defineCollection({ fields: { name: s.string(), price: s.number({ min: 0 }), vegetarian: s.boolean(), }, }), },});Your client managesCopy, images, entries, and publishing
Client asks
Checked against your schema
home › headline
s.string({ max: 80 })
Change ready to publish
Handmade pasta since 1998
Fresh pasta, made every morning
Pick a builder, add limits and a description. AtMyApp renders the right control for your client and validates every value before it's published.
s.string()Texts.longText()Long texts.markdown()Markdowns.image()Images.gallery()Gallerys.reference()References.slug()URL slugs.enum()Choices.boolean()Toggles.date()Dates.order()Orderings.array()ListAlso: number, email, url, datetime, object, union, file, and mdx. Mark any text field with localize: true for translations.Field reference
One schema, one client, and your own components. Pick a framework to see the files you'd add.
bistro-roma
src/pages
bistro-roma › src/pages › index.astro
---import { getAtMyApp } from "@atmyapp/astro/server";import schema from "../../atmyapp.schema"; const ama = getAtMyApp(Astro, { schema });const home = await ama.storage.getValue("home");--- <h1>{home.headline}</h1><p>{home.introduction}</p>Read content in the browser, on the server, or at build time. The schema and the client's workflow stay the same.
The SDK runs in the visitor's browser and reads content on the fly.
The SDK runs in your request handler, with a preview-aware client per request.
The SDK runs during your build. A failed read can fail the build instead of shipping empty pages.
Forms, previews, translations, and analytics come from the same schema and SDK. No extra services to connect for each client.
Define a submission type and messages land in your client's inbox. Static HTML forms work without JavaScript.
contact: defineSubmission({ … })Clients check drafts on your real templates before anything is published.
searchParams.get("amaPreviewKey")Mark text fields as localized. Your site keeps control of locale routing.
title: s.string({ localize: true })Track custom events alongside the visitor stats your client already sees.
signup: defineEvent({ … })Start building
Install the packages, connect the CLI to your project, and migrate your first schema.
Source and SDKs on GitHubAnswers to what developers usually ask before their first integration. Can't find yours? We're just an email away.
Still have questions?
contact@atmyapp.com
Yes. The public website API key is designed for SDK reads and permitted website operations, so it can live on the server, in the build, or in the browser.
Keep your CLI token private. It's for schema uploads and belongs in your local session or protected CI.
No. @atmyapp/core works in any JavaScript or TypeScript project, and your framework owns the HTML.
Astro gets a dedicated integration, @atmyapp/astro, with metadata, previews, and forms built in.
Yes. Read content during the build and keep errorPolicy: "throw" so a failed read fails the build instead of shipping empty pages.
Published edits appear after the next rebuild and deploy, so set up a rebuild workflow for your client.
Clients edit content, not code. They work inside the fields you defined, with the types, length limits, and optional fields you chose.
Raw HTML, technical IDs, and configuration stay in your code.
Run atmyapp migrate --dry-run --verbose to inspect the compiled result, then atmyapp migrate to upload it.
No. The SDK doesn't add a chat widget to your site. Your client uses the assistant inside AtMyApp, and your website renders the published content.
Let's talk
Walk through the integration, explore the developer tools, and see how your clients can manage their own content.
Leave your email and we'll find a time that works for you.