FLUX DOCUMENTATION SYSTEM Layer 11 — STARTER KIT | starter-kit-modifications flux.dantesisofo.com/wiki/starter-kit-modifications/
Each recipe: WHAT → WHERE → VERIFY. After any change that affects public
surfaces, re-run deploy_surfaces + invalidate, or re-publish an affected project.
Respect the invariants in DEPLOYMENT §5.
WHAT: set the brand + hub tag. WHERE: .env — COLLECTION, FLUX_AUTHOR,
FLUX_BASE_URL; titles already derive from canonical(). VERIFY: new projects
get collections=[COLLECTION] and appear on the hub.
WHAT: change the "N / TARGET corridors" goal. WHERE: .env CORRIDOR_TARGET.
VERIFY: hub + embed coverage % = round(100*n/TARGET); rebuild surfaces.
WHAT: change the route accent. WHERE: .env ROUTE_COLOR (used by project
page + hub + embed map line). Keep hover a darker shade. VERIFY: map polylines
use the new hex; coverage bar/accent still consistent.
WHAT: different basemap. WHERE: .env TILE_URL (Leaflet template). VERIFY:
tiles load on project page, hub, embed; attribution updated.
WHAT: public distance unit. WHERE: the single distance formatter used by all
builders. INVARIANT: storage stays distance_km; convert only at render.
VERIFY: hub == embed == project page show the same converted value.
WHAT: new aggregate (e.g. "cameras used"). WHERE: ensure the field exists per
WalkRecord (add in publisher §5 from submission.stats), then add a .stat cell in
build_hub (and embed if desired). VERIFY: value equals the catalog aggregate.
WHAT: show e.g. camera/lens in the map popup. WHERE: add the field to the
map_walks objects in build_hub/build_embed, then into the popup HTML. VERIFY:
clicking a route shows the new field; OPEN PROJECT still target="_top", monochrome.
WHAT: keep a project live by URL but off a browse listing. WHERE: filter by
collections in the relevant builder (e.g. build_catalog_index excludes
COLLECTION; to hide one project from the hub, remove its tag or add an allowlist).
INVARIANT: never delete data; this is a listing filter only. VERIFY: project
URL still 200; it's absent from the chosen listing.
WHAT: enforce STREET_NAME_IN_FLUX everywhere. WHERE: canonical() is the
authority; for already-published projects, patch catalog.title + the project page
title slots + regenerate surfaces. INVARIANT: changing a title is safe;
changing a slug changes the URL → needs a redirect (see #12). VERIFY: hub,
project page, and embed all show the canonical title.
WHAT: larger web images or denser contact sheet. WHERE: Worker stage 4
(derivative long-edge/quality) and stage 9 (grid columns). VERIFY: re-generate a
draft; large/ images at new size; contact sheet renders.
WHAT: different reverse-geocoding provider. WHERE: Worker stage 5 — keep the
contract: (lat,lon) -> address|None, rate-limited, grid-cached, never fatal.
VERIFY: addresses resolve; failures degrade to raw coords, not crashes.
WHAT: change a live project's URL. WHERE: server-side copy s3 <old>/* →
<new>/*; update catalog (slug,public_url,cover_image); tombstone old slug;
write a redirect stub at the old index.html (CloudFront+OAC does not honor S3
website redirects). VERIFY: old URL redirects, new URL 200, hub points to new.
WHAT: rich link previews. WHERE: build_project_page head — add
og:image = FLUX_BASE_URL/<cover_image>. VERIFY: meta tag present; image 200.
WHAT: a new top-nav link. WHERE: the nav source/template used by every
builder. GOTCHA: if any pages are static and deployed via s3 sync, patch the
local source, not just live S3 — a later sync overwrites live with stale local.
VERIFY: the item appears on every page type after rebuild + deploy.
WHAT: record ALL_PHOTOS (every imported frame), PUBLISHED_PHOTOS (kept),
ZINE_PHOTOS (final selection) per project to learn editing behavior later.
WHERE: write a lineage block into submission.json + a private (non-public)
copy; populate from the edit actions; never expose publicly. VERIFY: lineage
captured automatically on edit/publish; not in any public surface.
FLUX_WIKI_v2.0 — flux.dantesisofo.com/wiki/starter-kit-modifications/