# @leumas/coloringbooks-web — Leumas Coloringbooks at coloringbooks.leumas.tech

Leumas Coloringbooks at coloringbooks.leumas.tech — coloring pages, puzzles and activity books: generate them, play them in the browser, print them, bind them into a book and sell it.


Make a page. Make a book. Print it, colour it, sell it. Six kinds of activity page — coloring,
connect the dots, sudoku, crossword, word search, maze — generated on request, playable in the
browser, printable with an answer key, bound into a book with a cover, exported to one PDF, and
sellable on the Leumas app store.

**Status: built.** Blueprint: [`products/TODOS/coloringbooks.leumas.tech.md`](../TODOS/coloringbooks.leumas.tech.md)
(§6a records the decisions made while building).

## What is where

| Piece | Lives in |
|---|---|
| The kinds — schema, generator, print, answer key | `@leumas/activity-pages` (`shared/packages/activity-pages/src/kinds/*`) via `definePageKind` |
| The playable boards | `@leumas/activity-pages/react` (`PageView`, `SudokuBoard`, `WordSearchBoard`, `MazeBoard`, `CrosswordBoard`, `ImagePageView`) |
| The manifest a browser needs alone | `@leumas/activity-pages/manifest` |
| The book renderer | `renderBookHtml` — cover, pages, answer-key section, one document |
| Puzzles | the `puzzles` adapter (`shared/engines/adapters/domain/puzzles`) through an injected `ctx.run` — seeded, unique sudoku |
| Line art and crosswords | the generation lane (`createLlm`, the media generation registry) through the same injected ctx |
| The API | `products/leumas-api/src/{controllers,routes}/activity.js` → `/api/activity/*`; dynamic `activity_pages`, `activity_books`, `activity_gen` |
| The PDF job | `products/leumas-api/src/jobs/activityExport.js` — `@leumas/jobs` `activity-export`, through the generation engine's Puppeteer path |
| Selling | a `digital-product` listing in the app store's review queue (`marketplaceStore.upsert`, `status: submitted`) |
| The money | `policy.js` `activity.*` — floor: generate, play, 3 image pages a day; tiers: save, book (5/50/∞), clean print, publish, sell, 60/300/∞ image pages a month. No plan row. |
| This site | `src/content/pages.js` (the prose as data) · `src/content/samples.generated.js` (seeded samples for the tiles) · `src/screens/*` |
| Guards | `pnpm check:coloringbooks-public` · `pnpm check:activity-pages` · `pnpm smoke:coloringbooks-site` |

## What is free and what is not

A puzzle is arithmetic and is free for a stranger, played and printed (watermarked) with its key.
A line-art page costs an image generation: an account gets three a day, a membership a monthly
allowance. A book — and a clean print, publishing and selling — is what a membership buys. Nothing a
member publishes or sells appears before a person reviews it, because the audience is children.

## Why this can read a visitor's session with no configuration

`coloringbooks.leumas.tech` is a platform-owned Imperium site row
(`shared/services/index/src/coloringbooksSite.js`), served by the Imperium worker behind the IIS
`*.leumas.tech` wildcard, which forwards `/api` and the auth prefixes to leumas-api preserving the
visitor's Host header and cookies. [warning] **Never set `VITE_API_BASE`.**

## Running it

```bash
pnpm dev:api                                     # :3000
pnpm dev:coloringbooks                           # :5082
pnpm --filter @leumas/coloringbooks-web build
pnpm check:coloringbooks-public && pnpm check:activity-pages && pnpm smoke:coloringbooks-site
```

[warning] `pnpm deploy:coloringbooks` copies files but carries **no release stamp**. Only `pnpm ship` applies.


---
Source: products/leumas-coloringbooks/README.md
Canonical: https://docs.leumas.tech/p/products/coloringbooks-web
