Randy Olson

Store operating guide

Repository-only instructions. Do not copy this guide, manifests, credentials, production files, or review evidence into public/, posts, or generated feeds. This GitHub repository is public: confidential information stays outside Git.

Live setup

Ownership and integration

File or repository Owns
src/data/store-catalog.json Website designs, offers, prices, preview paths, post mapping, purchase URLs
scripts/store/fourthwall-manifest.json Shop identity, remote IDs/URLs, master hashes, costs, verification, checkout evidence
src/lib/store.ts Grouping, allowed referrals, detail and purchase links
src/components/store-{catalog,product,offers,link,callout}.tsx Catalog, selectors, checkout links, referral persistence, post callouts
src/app/store/page.tsx, src/app/store/[slug]/page.tsx Routes and artwork-specific Open Graph/Twitter metadata
scripts/store/ Rendering, source data, provider adaptations, draft creation, synchronization, tests
name-age-calculator repository Result-page handoff in apps/frontend/src/components/NamePrintLink.tsx; matching in apps/frontend/src/lib/name-prints.ts

Catalog and files

Offering Sizes (inches) USD prices
3 artworks: hurricane tracks, Kyoto, Roman reigns 18 x 24; 24 x 36 Matte $39/$55; black-framed $99/$149; download $9
10 name-age portraits 12 x 16; 18 x 24 Matte $29/$39; download $9
Hurricane desk mat 31.5 x 15.5 $39

Artwork and data constraints

API access

From this repository or its linked worktree:

python3 scripts/store/fourthwall_api.py --check
python3 scripts/store/fourthwall_api.py --request GET /shops/current

Production and release

From the repository root, with dependencies installed:

python3 -m venv .venv
.venv/bin/python -m pip install -r scripts/store/requirements.txt
.venv/bin/python scripts/store/build_name_age.py
.venv/bin/python scripts/store/prepare.py --only WORK_ID
.venv/bin/python scripts/store/prepare.py --check
.venv/bin/python scripts/store/prepare_provider_assets.py
.venv/bin/python -m unittest discover -s scripts/store -p 'test_*.py'
node --test scripts/store/tests/*.test.mjs src/lib/store.test.mjs
node scripts/store/sync-products.mjs --check
npm run typecheck
npm run lint
npm run build
  1. Use --only WORK_ID for targeted rendering; omit it only to regenerate the whole collection. Regeneration retains remote IDs but clears verification on changed artwork/listing details. Run sync --write to close affected links until re-verified.
  2. Review exact PDF dimensions, color profiles, margins, readable type, overlap, ZIP contents, and source rights. Provider adaptations are separate: hurricane masters are losslessly quarter-turned into portrait templates; the mat uses its bleed canvas. Do not rotate a designer layer to compensate.
  3. With hosted-creation authorization, create_physical_products.py uploads checked assets and creates missing hidden drafts (publishOnCreate: false); it uses build/store/uploaded-media.json. Inspect unknown outcomes before rerunning to avoid duplicates. Digital uploads and missing controls use the dashboard. Keep new products Private for review.
  4. Verify price/cost, actual size/variant, black frame, print placement/cropping, and public gallery independently. Hurricane galleries must look horizontal even though production masters are rotated.
  5. Before release, check physical-only, digital-only, and mixed carts, plus shipping in US, Canada, UK, Germany, and Australia. Do not submit an order without explicit purchase authorization.
  6. When adding a name, update the calculator’s explicit pilot list in name-prints.ts after the product is verified. Keep its exact SSA category and work ID consistent with this catalog.
  7. After authorized publication, verify public URL, price, gallery, stock, and cart identity; mark verification.status: public-verified, then sync --write, build, and review the website links. Verify mobile selectors, name matching/history, cross-links, and downloads before shipping.
  8. Deployment serves only dist/. Confirm docs, scripts, manifests, full-resolution masters, and ZIPs are absent there and absent from generated llms*.txt/feeds. Restore timestamp-only generated-file churn when unrelated to the change.

Analytics and remaining limits