A QDN app for publishing, browsing, and scaling community recipes.
- App resource:
qdn://APP/Recipes/Recipes - Developer reference:
qdn://APP/Recipes/Recipes?view=developers - Recipe resources:
qdn://JSON/<author>/qrecipes.v1.r.<id> - Recipe schema:
qortium.recipes.recipe.v1
npm install
npm run devThe browser fallback reads from http://127.0.0.1:24891 by default. Override it with
VITE_QORTIUM_NODE_API_URL when necessary. QDN publishing is intentionally available
only through Qortium Home's selected-account bridge.
npm test
npm run buildRecipes follows Qortium Home's resolved light/dark theme, accent (including
Home's clay), text size, language direction, and Classic/Modern/Fun UI family. It reads render URL and
host-injected settings before first paint, feature-detects GET_HOME_SETTINGS,
and accepts both legacy display messages and the current Home settings events
while it is open. Browser development can exercise the same contract with
query parameters such as:
?theme=dark&accent=purple&textSize=huge&uiStyle=fun&lang=he
Each recipe is a separate versioned JSON resource under its author's registered Qortal
name. Ingredient entries preserve the original text and may additionally carry a numeric
amount, optional maximum, unit, item text, and scalable flag. The viewer changes only
confirmed numeric amounts; free-text entries such as salt to taste remain unchanged.
Known English units switch between singular and plural in scaled views; unknown and
abbreviated unit labels remain as entered.
Recipes may include up to 24 placement-aware media objects. Each object carries an id,
URI, alt text, caption, and one placement: the recipe cover, general gallery, before or
after the ingredients or notes section, or before or after a zero-based instruction index.
Invalid or out-of-range placements normalize to the general gallery so an image does not
silently disappear.
The legacy image and images fields remain in the v1 payload for older readers. New
payloads synchronize them from all unique media URIs with the cover first. Legacy payloads
without media normalize their first image to the cover and remaining images to the
gallery. Images should be published as their own QDN resources and properly attributed
through the recipe's source fields.
The app exports Schema.org Recipe JSON-LD for interchange. General media becomes
Recipe.image; instruction media becomes HowToStep.image. RecipeMD and website imports
are possible future adapters, but arbitrary text parsing is deliberately best-effort and
reviewed by the author.
The always-English in-app Developers workspace is the authoritative public
contract for the schema, resource tuple, limits, ownership, QDN bridge actions,
publication lifecycle, scaling rules, and Schema.org mapping. Recipe payloads
are currently limited by the app to 512,000 UTF-8 bytes. The documented field
limits and the search page size are read from the exported constants in
src/recipe.ts and src/qdnRecipes.ts, and the reference's sample
recipe.json is validated by the real reader in the test suite, so the prose
cannot drift from the implementation. The reference renders lang="en" dir="ltr" even when Home runs a right-to-left language; its section links are
full document links (not bare fragments) that keep Home's query parameters and
scroll only inside the app, and every copy control reports its result in a
visible role="status" region.