mirror of
https://github.com/hanzoai/examples.git
synced 2026-11-02 23:29:56 +00:00
WHY
hanzo.app could show that a template renders, but not that the platform is
usable: nothing demonstrated the data layer, and the "live demo" count was
padded with file-index scaffolding and 465-byte stubs. This is the honest
version — 74 applications across 70 archetypes, each one a real interaction
surface, each verified by a browser before it is allowed into the catalogue.
Three decisions did the work:
ONE DEPLOY PATH. Everything, gallery included, goes through
POST /v1/sites/deploy with a {slug,name,files[]} manifest. No second path
means no second set of failure modes.
ONE BACKEND. Every app that persists anything POSTs to
/v1/base/collections/submissions/records on its OWN origin — @hanzo/base via
host-as-project-ref (HIP-0014). An anonymous published page therefore stores a
real record with no credential in the page. That is the capability the
catalogue existed to demonstrate and previously did not.
ONE RUNTIME. a.hanzo.ai analytics + chat are injected by the shell, never
vendored, so the runtime is updated once rather than 74 times.
LABELLING IS STRUCTURAL, NOT EDITORIAL. These accounts are Hanzo's own example
studios and every surface says so: a visible badge in header and footer, meta +
JSON-LD in the head, and /.well-known/hanzo-example.json declaring official,
seeded, firstParty and syntheticData with independentThirdParty:false. It lives
in build.py's shell — the only way an app is built — so an unlabelled example
cannot be published. No invented biography, employer, photograph, testimonial,
star count or download count appears anywhere; demo people are placeholder
names on generated avatars and every address uses the reserved .invalid domain.
TWO GATES, BOTH BEFORE THE CLAIM. build.py runs `node --check` on each app's
script, because a syntax error ships a 200 that renders nothing — precisely the
failure this catalogue is a reaction to. verify.py then drives headless
Chromium against the LIVE url and requires 200, zero page/console errors, >=25
elements and >=120 chars of visible text under <main>, a visibly rendered
badge, and for canvas apps a pixel standard deviation above 3 so a flat fill
cannot pass as a render. gallery.py lists only what that run confirmed, so a
card can never advertise an app that does not work.
74/74 apps plus the gallery pass the live browser check.
Co-authored-by: Hanzo Dev <[email protected]>