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.