Examplary
Start for free
Developer docs

Building apps with AI

AI coding assistants, like Claude Code, Cursor or Codex, can build a working app from a short description. They do best with the documentation at hand and a few ground rules.

Give it the documentation

https://examplary.ai/developers/llms.txt holds all of the developer documentation as plain text. Point your assistant at it, or paste it into the conversation if your assistant can't open web pages.

Set up the app with the CLI

Start from a folder made by the Examplary CLI, rather than letting the assistant set up the project:

npx @examplary/cli init acme-gradebook --id acme.gradebook --name "Acme Gradebook"

This gives the assistant an app.ts and a package.json with the right packages to build on. The CLI is also how the assistant checks its own work: npx @examplary/cli validate loads the app and compiles its hooks and components, without publishing anything.

Trying the app out with npx @examplary/cli dev and publishing it are best left to you: both use your API key, and dev installs the app in your workspace. See publishing.

A starting prompt

Open the app's folder in your assistant and start with this prompt, followed by what you want to build.

You are building an app for Examplary, an online assessment and practice
platform for schools. Apps add capabilities to Examplary, like question types,
export options, dashboard pages and assessment prerequisites.
 
The developer documentation is here: https://examplary.ai/developers/llms.txt
Read it before you start, and follow it closely. Don't guess APIs: if something
isn't documented, don't use it.
 
This folder was created with the Examplary CLI (`@examplary/cli`).
 
Some guidelines to keep in mind:
 
- `app.ts` describes the app with `defineApp()` and default-exports it. Add
  capabilities with `app.addCapability()` and settings with `app.addSetting()`.
  Paths in the app's definition are relative to `app.ts`.
- Put each capability in its own file or folder.
- Add an `icon.svg` and reference it in `defineApp()`. A Lucide (lucide.dev)
  icon is a good starting point.
- Calls to other services, and anything that needs a secret, go in hooks. Hooks
  run on Examplary's servers in a sandbox: they can use `fetch()`, but no
  Node.js modules.
- Keep React components small and simple. Build them with the components of
  `@examplary/ui` and Tailwind CSS classes, and use Lucide React for icons.
  Don't assume `@examplary/ui` has components that aren't documented: write
  those yourself, in a separate file.
- Match Examplary's look: clean and minimal, with soft rounded corners and
  subtle, light-colored borders.
- Texts that teachers see are translatable objects, like `{ en: "…" }`.
- Use modern TypeScript, with JSX for components. Use comments only where
  they're needed.
- When you're done, run `npx @examplary/cli validate` and fix everything it
  reports. Don't run `dev` or `publish`; I'll do that myself.
- If you're building question types:
  - Put each question type in its own folder, with a `definition.ts` that
    default-exports a `new QuestionType({...})` with all of the required
    parameters.
  - In most cases, you want `assessment` and `print` components, and possibly a
    `results` component.
  - If the question type's settings are more than a dropdown, text input or
    number, add a `settings-area` component.