Demo academies
ulams ships with six demo academies. Each one is a separate tenant with its own database,
theme, landing page and one seeded course, designed to look and feel deliberately different. The
content of the first three is written in
front/docs/design/experiences.md
and created by DemoCoursesSeeder.
There is no public hosted demo yet: the demos run on your machine once you follow the quick start.
The six academies
Section titled “The six academies”| Academy | Slug | Style | Learner site | Admin | API |
|---|---|---|---|---|---|
| The Coffee Atlas | coffee |
Editorial, self-paced, long-form | http://coffee.app.localhost | http://coffee.admin.localhost | http://coffee.localhost |
| On-Call | oncall |
Professional cohort, dark, dense, keyboard-first | http://oncall.app.localhost | http://oncall.admin.localhost | http://oncall.localhost |
| Night Sky Explorers | nightsky |
Playful, gamified, mobile-first, for kids 10-14 | http://nightsky.app.localhost | http://nightsky.admin.localhost | http://nightsky.localhost |
| Gravity Lab | gravity |
Dark space, a live 3D solar system, free | http://gravity.app.localhost | http://gravity.admin.localhost | http://gravity.localhost |
| Poland, Measured | poland |
Cartographic paper, maps and charts, free | http://poland.app.localhost | http://poland.admin.localhost | http://poland.localhost |
| The Scottish Book | ulam |
Archival squared-paper notebook, mathematics and history, free | http://ulam.app.localhost | http://ulam.admin.localhost | http://ulam.localhost |
The platform host (localhost:4321 or app.localhost:4321 with the reference frontend’s dev
server) shows the ulams product landing with a card per demo, six in all. Each card has a short
description and the “Open as learner” and “Open as admin” buttons, which sign you in with one click
as the demo student and the demo admin (demo mode, see below). To start every demo from scratch,
run make -C api demo-reset-all.
The Coffee Atlas
Section titled “The Coffee Atlas”“The Coffee Atlas - From Seed to Cup”: follow one coffee cherry from the farm to the cup. A magazine-style course with films, a podcast, interactive H5P diagrams, a roasting simulator (SCORM), brew-ratio maths, a tasting quiz and a final project. The landing has a chapter index, a letter from the tutors, a live cupping webinar and package pricing.
On-Call
Section titled “On-Call”“On-Call - Incident Command for Platform Engineers”: a cohort-style course for engineers on an on-call rotation. Severity matrices, SLO maths, a branching H5P scenario, an outage simulator (SCORM), a comms quiz and a postmortem assignment. It is the only demo with a 1:1 consultation (“On-call review 1:1”). Its landing has a curriculum, a game-day section, instructors, team pricing and a postmortem teardown webinar.
Night Sky Explorers
Section titled “Night Sky Explorers”“Night Sky Explorers”: seven short missions for children, with a robot guide, badges and big type. Two topics are free previews. The landing has a mission map, “For parents” and “For teachers” sections and a star party event.
Gravity Lab
Section titled “Gravity Lab”“How gravity shapes the solar system”: a free course built around a live 3D simulation of the solar system. The theme is dark space with a calm starfield and thin orbit rules, and the landing hero plays the course’s first interactive: the real simulation, not a drawing (see Interactive topics); a tenant with no interactive topic shows a drawn scene instead.
The course has a welcome lesson, nine modules that follow the walkthrough of the simulation (what
gravity is, orbits, Kepler’s laws, cosmic velocities, the Earth and the Moon, orbits in 3D, the solar
system as a machine, travelling by gravity, Einstein’s gravity), a 15-question final test with a
certificate and a “Sources and licence” lesson. Each module has Interactive topics pinned to a step
range of the simulation, played as the page background; a short explanation; a
Layout topic (flip cards, a timeline, a table, steps or a practice activity)
and a GIFT quiz. Every number is cited to NASA, JPL or another named reference, and the claims of the
simulation were checked in demo-content/gravity/FACTCHECK.md. The course text is CC BY 4.0.
Poland, Measured
Section titled “Poland, Measured”“Poland, measured”: a free course of maps and charts of public data. The theme is cartographic paper with graticule hairlines and legend-style badges, and the landing table of contents reads like an atlas. The landing hero plays the map of the course’s first interactive. The tenant has two courses that share one package: “Poland, measured” in English and “Polska w liczbach” in Polish, linked from the header.
Each course has a welcome lesson, nine chapters (energy, prosperity, security, made in Poland,
daily life, mobility, health, people and the unfinished work), a 12-question final test with a
certificate and a “Sources and licence” lesson. A chapter has Interactive topics pinned to
steps of the map (played as the page background), an explanation of how to read the numbers, a Layout
topic (a table, flip cards, a timeline, steps, callouts or a practice activity) and a GIFT quiz.
Every figure keeps the primary source of the package, names its period and is
labelled when it is an estimate or our own calculation; the framing is neutral and the last chapter
sets what is still hard next to what is moving. There is no education chapter: the data has none. The course text is CC BY 4.0, and the
figures were checked at their publishers (demo-content/poland/FACTCHECK.md).
The Scottish Book
Section titled “The Scottish Book”“Stanisław Ulam and the Lwów School of Mathematics”: a free course on the mathematics and history behind the Scottish Book. The theme is an archival squared-paper notebook with a ruled margin. The product is named in honour of Stanisław Ulam; the demo suggests no endorsement by his estate or any institution. There is no account in his name and no invented quote: the landing has no testimonials section. The landing hero plays the course’s first interactive, the Ulam spiral.
The course has a welcome lesson, eight modules (Lwów; the Lwów School and the Scottish Café; America and the war; Monte Carlo; the Teller-Ulam design, briefly; the prime spiral and cellular automata; Fermi-Pasta-Ulam-Tsingou; legacy and the name) that hold sixteen numbered lessons, a 14-question final test with a certificate and a “Sources and licence” lesson. Five small interactives are played inline: the Ulam spiral, a Monte Carlo estimate of π, cellular automata (including the Schrandt-Ulam growth rule), nine Scottish Book problem cards and a journey map from Lwów to Santa Fe. Every module has a Layout topic (a timeline, flip cards, a callout, a practice activity or steps) and a GIFT quiz of 3 to 7 questions.
Every statement is checked against a published source and cited in the lesson. Where careful
sources disagree (who bought the notebook, how the book came through the war, the ship of 1939), the lesson
says so and the quizzes never ask about it. The course text is CC BY 4.0; the four photographs
keep their own licences, listed with their credit lines in the last lesson and in
demo-content/ulam/CREDITS.md. The facts and sources are kept in demo-content/ulam/facts.json and
sources.json, and a test traces every quiz question to the facts it rests on.
These three demos are free: they have no products, prices or events, and the landing shows no pricing. Their course is public, so the landing and the catalogue work without an enrolment. Each has a themed certificate and the usual demo users.
What every demo contains
Section titled “What every demo contains”The three paid demos’ seeded courses cover the topic types the reference frontend renders: rich text (with tables and maths), video, audio, image, PDF, embed, H5P, SCORM, cmi5, LiaScript, a GIFT quiz with all eight question types, and a project. Each paid tenant also has a webinar, an in-person event, shop products, tutors and five demo students; the free tenants have a tutor and five demo students. Exact counts depend on the seed; open the course page to see them.
See what learners see for a walk through the pages.
Demo mode
Section titled “Demo mode”Demo mode comes from the demo package (api/packages/demo). It turns a tenant into a public
demo that anyone can use without an account.
When DEMO_MODE=true is set in a tenant’s env file (.env.<host>):
POST /api/demo/loginwith{"role": "student"}or{"role": "admin"}logs in as the tenant’s seeded student or admin, without a password. It returns a normal Passport token, the same body asPOST /api/auth/login. Before a student login, the student is given access to every published course.GET /api/demoreturns whether demo mode is on, the demo accounts’ roles and e-mails (never passwords), the front and admin URLs and the reset schedule.GET /api/configgainsulams_demowithenabled,front_urlandadmin_url. The admin and the legacy React front read it and log in by themselves.- The tenant is wiped and seeded again every hour (
DEMO_RESET_CRON, default0 * * * *).
With demo mode off (the default), the demo routes return 404, nothing is added to
/api/config and no reset is scheduled.
Demo accounts
Section titled “Demo accounts”| Role | Account | Override |
|---|---|---|
| Admin | admin@<slug>.ulams.app |
DEMO_ADMIN_EMAIL |
| Student | student1@<slug>.ulams.app |
DEMO_STUDENT_EMAIL |
The tenant also has tutor@<slug>.ulams.app and student1 to student5. Their password is
TENANT_DEMO_PASSWORD from api/.env (secret in api/.env.example; development only).
How the reference frontend logs you in
Section titled “How the reference frontend logs you in”The reference frontend (front/web) logs every visitor of a demo tenant in as the same demo
student, so a visitor never sees a sign-in form:
- Opening
/learn/...or/accountwithout a session makes the server callPOST /api/demo/loginand store the token in an httpOnly cookie. - If the tenant has no demo mode, the server falls back to a password login with
DEMO_STUDENT_EMAILandDEMO_STUDENT_PASSWORDfrom its own environment. With neither available, the visitor is sent to the sign-in page. - The sign-in page also has a “Continue as the demo student” button.
- One token per tenant is cached on the server and shared by all visitors. When the hourly reset invalidates it, the next lesson request logs in again once.
Every page of a tenant shows a “Demo - resets hourly” badge with a link to the tenant’s admin and to the other demos. See signing in and out.
The hourly reset
Section titled “The hourly reset”ulams:demo:reset --force --domain=<host> runs hourly on every domain with demo mode on. It
refuses to run on a domain without demo mode and always refuses on the platform. It:
- Deletes the tenant’s H5P content in the H5P service (it lives outside the tenant database).
- Runs
migrate:freshon the tenant database, which also wipes every issued token. - Creates a new personal access client, seeds permissions and the admin account.
- Seeds the demo users and the tenant’s name, theme and accent from a saved baseline.
- Seeds the demo course again and gives the demo student access to every published course.
The baseline (name, theme, accent, front URL, number of students) is captured into the tenant’s
storage directory on the first reset. A theme change made in the demo admin therefore does not
survive the next reset. Uploaded files stay unless --wipe-files (or
DEMO_RESET_WIPE_FILES=true) is set.
Reset one tenant by hand:
make -C api demo-reset DOMAIN=coffee.localhostThe full description, including the options, is in the demo package README. For the admin side of demo mode see demo mode in the admin.
Setting up the demos
Section titled “Setting up the demos”Creating the six tenants, seeding them and turning demo mode on is part of the quick start.