containers/marketplace — nginx:alpine app (standard drop-in contract: config + tagged compose + icon + install hook) whose docroot serves BOTH halves of the marketplace: the signed catalog channel tree (index.json / payloads, published into data/<channel>/ by the release tools) and a self-contained client-rendered browse site over the same file (search, category chips, trust badges, copyable 'libreportal app add <slug>' — no third-party assets, no backend, no build step). The official marketplace is an instance of this app; self-hosting one = installing it and pointing CFG_RELEASE_BASE_URL at it. Boxes only ever trust the minisign signature on the catalog, never the website. New generic gating convention: CFG_<APP>_DEV_ONLY=true keeps an app out of the App Center grid unless Developer Mode is on (CFG_DEV_MODE, the same flag the **DEV** config-field filter uses); an installed dev-only app always stays visible. The marketplace app is the first user. Cache policy: catalog/channel manifests no-cache; payloads short revalidating cache (same-id re-publish); version-pinned release artifacts immutable. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Signed-off-by: librelad <librelad@digitalangels.vip>
23 lines
1.1 KiB
XML
23 lines
1.1 KiB
XML
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 64 64">
|
|
<defs>
|
|
<linearGradient id="mkbg" x1="0" y1="0" x2="1" y2="1">
|
|
<stop offset="0" stop-color="#6366f1"/>
|
|
<stop offset="1" stop-color="#22d3ee"/>
|
|
</linearGradient>
|
|
</defs>
|
|
<rect x="4" y="4" width="56" height="56" rx="14" fill="url(#mkbg)"/>
|
|
<!-- storefront awning -->
|
|
<path d="M14 22 L18 13 h28 l4 9 z" fill="#ffffff" opacity="0.95"/>
|
|
<path d="M14 22 h9 v4a4.5 4.5 0 0 1 -9 0 z" fill="#e0e7ff"/>
|
|
<path d="M23 22 h9 v4a4.5 4.5 0 0 1 -9 0 z" fill="#ffffff"/>
|
|
<path d="M32 22 h9 v4a4.5 4.5 0 0 1 -9 0 z" fill="#e0e7ff"/>
|
|
<path d="M41 22 h9 v4a4.5 4.5 0 0 1 -9 0 z" fill="#ffffff"/>
|
|
<!-- shop body -->
|
|
<rect x="17" y="30" width="30" height="21" rx="2" fill="#ffffff" opacity="0.95"/>
|
|
<!-- door -->
|
|
<rect x="22" y="36" width="8" height="15" rx="1" fill="#4f46e5"/>
|
|
<!-- window with check (signed) -->
|
|
<rect x="34" y="36" width="9" height="8" rx="1" fill="#a5f3fc"/>
|
|
<path d="M35.8 40 l1.7 1.7 l3 -3.4" stroke="#0e7490" stroke-width="1.6" fill="none" stroke-linecap="round" stroke-linejoin="round"/>
|
|
</svg>
|