Codebase map
Where things live in each repo. When user asks "fix X", look here first.
slabtrack
slabtrack/
├── backend/
│ ├── server.js # Express entry, ~1000 lines
│ ├── routes/ # 80+ route files, mounted in server.js
│ │ ├── curator.routes.js # Strategist + lot suggestions + ToT bridge (3000 lines)
│ │ ├── channels.routes.js # Channel engage/disengage
│ │ ├── sale-lock.routes.js # Cross-channel sale-lock coordination
│ │ ├── sync-command-center.routes.js # Reconciler + drift detection
│ │ ├── ecosystem-transfer.routes.js # Inbound webhooks from satellites
│ │ ├── psa.routes.js # PSA cert lookup
│ │ ├── consignment.routes.js # Consignor + payouts
│ │ └── ... ~75 more
│ ├── services/
│ │ ├── strategist/ # allocator.js, lot-builder.js, team-cities.js
│ │ ├── channels/ # registry.js + per-channel adapters
│ │ ├── channel-scoring/ # comp_value priority chain
│ │ ├── sync-reconciler.js # Drift detection + auto-fix
│ │ ├── sale-lock-service.js # Sale-lock atomic acquire/complete/release
│ │ ├── pricing/ # SCPro + eBay scrape
│ │ └── scan/ # AI vision card ID
│ ├── jobs/ # Cron tasks
│ │ ├── automationCron.js
│ │ └── syncReconcileCron.js
│ ├── middleware/ # auth.js, admin.js
│ └── database/ # db.js, schema.sql, migrations/
├── frontend/
│ ├── src/
│ │ ├── pages/ # 60+ React pages — Strategist (2700 lines), Curator, etc.
│ │ ├── components/ # Shared + admin/
│ │ ├── context/ # AuthContext, BundleContext
│ │ ├── api/ # API client modules
│ │ └── App.jsx # Routes + layout
│ └── public/
│ └── docs/ # ← THIS DOC TREE
└── docs/ # Source-of-truth markdown for engineers (legacy)
thisorthat
thisorthat/
├── src/
│ ├── app/
│ │ ├── (public marketplace pages)
│ │ │ ├── browse/ # /browse — main marketplace grid
│ │ │ ├── listing/[id]/ # Individual listing detail
│ │ │ ├── pull/ # Pull commit page
│ │ │ ├── flip-cart/ # Multi-card flip cart
│ │ │ ├── play/[id]/ # Play result + verification
│ │ │ └── simulation/ # Auto-play demo
│ │ ├── api/
│ │ │ ├── webhook/ingest/ # ← SlabTrack publishes here, auto-creates Listings
│ │ │ ├── stripe/webhook/ # ← Stripe events, settles plays + refunds
│ │ │ ├── play/{flip,pull}/ # Game commit + reveal
│ │ │ ├── payment/ # Payment intent (manual capture)
│ │ │ ├── shipping/ # Shippo label printing
│ │ │ ├── orders/ # Order management + refund
│ │ │ ├── listings/ # Listing CRUD
│ │ │ └── admin/ # Admin tools (normalize-lot-spreads, etc.)
│ │ ├── seller/ # Operator order dashboard
│ │ ├── collection/ # Staged cards from SlabTrack
│ │ └── admin/ # Admin home + sub-pages
│ ├── components/
│ │ ├── marketplace/ # FilterRail, SearchCombobox, CardDetailDrawer, ListingCard
│ │ ├── pull/ # PullTrayDrawer
│ │ └── (other UI)
│ ├── lib/
│ │ ├── stripe.ts # ← getStripe() singleton, API version pinned here
│ │ ├── games/ # flip.ts, pull.ts (game logic)
│ │ ├── blockchain/solana.ts # On-chain anchoring
│ │ ├── pull-store.ts # zustand pull stack store
│ │ ├── cart-store.ts # zustand flip cart store
│ │ ├── sale-lock.ts # Client of SlabTrack's sale-lock service
│ │ └── notify.ts # Buyer email
│ └── middleware.ts # Auth + CORS
└── prisma/
└── schema.prisma # Listing, FlipConfig, Pull, Order, etc.
slabtrack-storefront
slabtrack-storefront/
├── src/
│ ├── app/
│ │ ├── [slug]/ # Public storefront — multi-tenant root
│ │ │ ├── page.tsx # Storefront home + hero + grid
│ │ │ ├── cards/[id]/ # Card detail (slide-over preferred)
│ │ │ ├── cart/ # Cart + checkout
│ │ │ ├── wants/ # Want board
│ │ │ ├── sell/ # Sell-to-shop
│ │ │ └── wishlist/ # Saved cards
│ │ ├── dashboard/[slug]/ # Operator dashboard per shop
│ │ │ ├── inventory/
│ │ │ ├── orders/
│ │ │ ├── theme/ # ← Theme Studio
│ │ │ ├── settings/
│ │ │ ├── wants/
│ │ │ └── buying/
│ │ └── api/
│ │ ├── stripe/
│ │ │ ├── checkout/ # ← Creates Checkout Session, idempotency-keyed
│ │ │ ├── webhook/ # ← Order paid/failed, sale-lock complete
│ │ │ ├── refund/[orderId]/
│ │ │ └── connect/ # Express onboarding (onboard, refresh, return)
│ │ ├── shippo/buy-label/[orderId]/
│ │ └── storefronts/[slug]/
│ │ ├── theme/ # PUT — Theme Studio saves
│ │ └── cards/ # Publish cards from SlabTrack
│ ├── components/
│ │ ├── ShopBrowser.tsx # Faceted shop grid client wrapper
│ │ ├── ShopFilterRail.tsx
│ │ ├── ShopCardDrawer.tsx # Slide-over card detail
│ │ ├── HeroSpotlight.tsx # Right-rail rotating spotlight
│ │ ├── FeaturedCarousel.tsx
│ │ ├── StickyCartBar.tsx
│ │ ├── StorefrontThemeProvider.tsx
│ │ └── ShopLogo.tsx # Logo with onError fallback
│ └── lib/
│ ├── storefront-theme.ts # Resolver + presets + palettes
│ ├── stripe.ts # Singleton
│ ├── shippo.ts # Buy-label helper
│ ├── sale-lock.ts # Client of SlabTrack's service
│ ├── cart-store.ts # Per-shop cart (zustand persist)
│ ├── wishlist-store.ts # Per-shop wishlist (zustand persist)
│ └── saved-searches-store.ts
├── public/
│ └── slabtrack-logo.png # Default SlabTrack-branded logo
└── prisma/
└── schema.prisma # Storefront, StorefrontCard, Order, etc.
Key files to grep when you don't know where to look
| If user mentions... | Look in... |
|---|---|
| Strategist, allocator, commit | slabtrack/backend/routes/curator.routes.js + backend/services/strategist/ |
| Channels, command bridge, sync | slabtrack/backend/services/channels/, sync-reconciler.js, routes/sync-command-center.routes.js |
| Sale-locks, double-sale prevention | slabtrack/backend/services/sale-lock-service.js |
| Flip / Pull mechanics | thisorthat/src/lib/games/ |
| Provably-fair, Solana anchoring | thisorthat/src/lib/blockchain/solana.ts |
| Theme Studio | slabtrack-storefront/src/lib/storefront-theme.ts + app/dashboard/[slug]/theme/ |
| Stripe webhooks | {thisorthat,slabtrack-storefront}/src/app/api/stripe/webhook/route.ts |
| Shipping labels | thisorthat/src/app/api/shipping/route.ts + slabtrack-storefront/src/app/api/shippo/buy-label/[orderId]/route.ts |
| Browse filters / search | thisorthat/src/components/marketplace/FilterRail.tsx + slabtrack-storefront/src/components/ShopFilterRail.tsx |