yingjieli-public-site v1.0.0
subsystem yingjieli.site
capsule://quake0day/yingjieli-public-site@1.0.0
The public, read-only frontend of yingjieliartist.com. Renders the
hero, biography, masonry gallery of works, exhibitions, and contact
sections, plus a keyboard / touch-friendly lightbox. Pulls all
content at runtime from /api/data and all images from /api/img/<key>
(with /images/* as the legacy static fallback).
Owns
- site/index.html (markup, SEO meta, OpenGraph)
- site/assets/styles.css (design system: Fraunces + Inter Tight, paper palette)
- site/assets/app.js (masonry layout + lightbox + nav scroll)
- the visual contract of the site (typography, palette, motion)
Does not own
- content data (consumes GET /api/data; never mutates it)
- image bytes (consumes /api/img/<key>; never uploads)
- authentication (never reads or sets the yl_admin cookie)
- admin UI (separate capsule)
AI orientation
This is the public site. It is read-only at runtime — there is no
"save" flow here. All content is fetched from /api/data on load; the
page is built from that JSON, not from data embedded in HTML. If
you add a new section, you also need a new field in the content-store
capsule's DEFAULT_DATA and a new card in the admin UI.
Avoid
- Hard-coding content (artwork lists, bios) in HTML.
- Importing jQuery or any heavy framework — the site is 0-dep JS by design.
- Adding network requests behind any user gesture (everything is one fetch on load).
Extension points
render-galleryatsite/assets/app.js- Builds the masonry gallery from works[]. Respects works[].gallery
flag for which items appear in the home grid vs detail-only.
Provides
http_api:site-root— The site at https://yingjieliartist.com/.
Requires
http_api:data-readfromyingjieli-content-store— GET /api/data — site content blob.http_api:image-servefromyingjieli-image-store— GET /api/img/<key> — artwork images.
Dependencies
Capsules
yingjieli-content-store>=1.0.0 <2.0.0yingjieli-image-store>=1.0.0 <2.0.0
Runtime
cloudflare-pages*
Invariants (must always hold)
- The public site never mutates content (no PUT/POST/DELETE in app.js).
- The public site never reads the yl_admin cookie.
- The site degrades to "no content" gracefully if /api/data fails.
Glossary
masonry- variable-height grid layout that preserves each work's aspect ratio
lightbox- full-screen image viewer with keyboard / swipe nav
hero- the large featured-work block at the top of the home page