bestdesignsonx-ingest POST /run — scrape OG + app icons (iosicongallery, icon.museum, recent.design) + skills + studios + enqueue POST /scrape-skills?refresh=1 — backfill UI skills from skills.sh + designmd POST /scrape-design-studios?refresh=1 — backfill from designstudio.directory, designstudios.cc, designindex, theindex POST /scrape-systems?refresh=1 — backfill design systems from designsystems.surf POST /scrape-instagram — ingest new DDR Instagram catalog rows (awaiting_hq placeholders) POST /scrape-on-design — ingest on.design popular feed (needs ON_DESIGN_SESSION_COOKIE) → R2 queue POST /backfill-instagram-hq — enrich awaiting_hq via live IG → pending → R2 queue POST /scrape-dribbble?limit=100 — sync newest DDR dribbble → Supabase → R2 queue POST /scrape-behance?limit=100 — sync newest DDR behance → Supabase → R2 queue POST /backfill-ddr-lq?limit=40&force=1&refreshAll=1 — requeue LQ + wrong Dribbble media → HQ scrape → R2 GET /extension/instagram-hq/next — claim next HQ/incomplete-carousel row (Bearer EXTENSION_HQ_SECRET) POST /extension/instagram-hq — submit Polaris media node → pending → R2 POST /extension/instagram-hq/miss — delete row when /p/{shortcode} not found POST /scrape-iconmuseum?limit=10 — incremental icon.museum scrape POST /publish-approved-instagram — drip-publish 1 HQ-ready Instagram post (every 10m cron) POST /publish-approved-on-design — drip-publish 1 R2-ready On Design post (every 10m cron) POST /backfill-on-design-dims?limit=40 — peek R2 bytes → write media[].width/height for masonry POST /enqueue-studio-images?limit=150 — resolve og:image (screenshot fallback) → R2 POST /prune-unreachable-studios?limit=100 — reject studios whose website is dead/blank/parked POST /dedupe-design-studios — keep one published studio per website domain POST /backfill-founded-years?limit=40 — resolve founding years from wikidata + studio sites + RDAP POST /classify-og-categories?limit=200&ai=1 — heuristic/domain/title AI classify POST /classify-og-categories-web?limit=20 — GPT web-search classify pending rows POST /enqueue-pending?limit=500 — enqueue pending OG + app icons + instagram + on-design + dribbble + behance for R2 POST /publish-approved — publish up to PUBLISH_LIMIT OG + app icons POST /publish-legacy-og — re-fetch og:image + R2 + publish up to OG_LEGACY_PUBLISH_LIMIT (3) legacy-import OG rows (external_id legacy:%) per run (daily 09:30 UTC cron) POST /publish-approved-icons — publish approved app icons only POST /generate-design-preview — generate preview for approved designmd {slug} POST /sync-x-followers — refresh X follower count → R2 meta/x-followers.json (daily 06:00 UTC cron) Cron: every 2h (DDR Instagram/dribbble/behance + on.design + scrape) + every 15m (Instagram HQ + DDR LQ) + every 8h (OG/icons publish) + every 10m (Instagram + On Design publish) + every 20m (OG category web classify) + daily 06:00 UTC (X followers) + daily 09:30 UTC (legacy OG publish)