Your first screen¶
You've registered a model. Now choose how it becomes a screen. Conjure offers two modes that read the same introspection schema, so you can mix them per page.
📋 planned The bundled SPA will render any registered model from the live schema. You write no frontend code.
Open http://localhost:8000/admin-panel/, log in with an is_staff account, and your
model appears in the sidebar. The runtime renderer covers list (search and filter), create,
edit, and delete (plus inline children) straight from the schema.
Best for: getting an admin up today, internal tools, models that don't need a bespoke UI.
✅ available Scaffold plain React pages from the schema, then edit them like any other code in your repo.
# scaffold the dashboard into your project, then own + build it:
python manage.py conjure_dump_schema > schema-snapshot.json
npx @terracelab/conjure-web init conjure-admin
cd conjure-admin && pnpm install && pnpm build # tsc strict + vite
Each model gets a small page set (schema, columns, index, form, detail).
They're ordinary .tsx files — change a cell, add a button, restyle a form.
Best for: customer-facing or heavily-customized screens you want to own.
How they relate¶
graph TD
R["@register(Product)"] --> S["/conjure/schema/"]
S -->|runtime| G["GenericModelPage 📋<br/>renders from schema"]
S -->|codegen| C["pages/product/*.tsx<br/>you own + edit"]
G -.eject.-> C
Both paths start at the same schema endpoint. The recommended workflow is hybrid: let runtime mode cover most models, and eject the few that need to be special into codegen pages you own. See Custom pages for the eject flow.
Authentication: session vs JWT¶
The dashboard authenticates the way you configure CONJURE["AUTH"].
Reuses your existing Django login. Nothing extra to deploy — if the user has a Django
session and is_staff, they're in.
Best when the admin lives on the same domain as your Django app.
Staff-only access tokens via SimpleJWT, for a separately-hosted SPA (S3 + CDN).
The dashboard calls POST /conjure/auth/login/, stores the token, and the API client
refreshes on 401 automatically. See the REST API reference.
Verify the screen¶
- Log in with an
is_staffaccount. - Find your model in the sidebar (runtime) or open its route (codegen).
- Search and filter a column, then create, edit, and delete a row — both codegen pages and runtime mode support full CRUD (runtime builds the form from the schema).
- If you ran
migrate conjure, the audit log now shows your writes with a diff.
From here, make it yours: theme it, organize the sidebar, or customize a page.