Skip to content

User portal overview

The public site at tcgkl.com — everything outside /admin. Pages live under apps/web/src/app/(main)/; the data behind them comes from tRPC routers in packages/core/src/server/trpc/routers/.

Area Routes Backing routers
Marketing & info /, /about, /contact, /legal/[slug], /store-locator, /feedback site-settings, legal-pages, testimonials
Events /events, /events/[slug], /events/archive, /events/[slug]/gallery publicEvents, eventArchive, artworkPieces
Artists /artists, /artists/[slug] publicArtists, artists
Booking & checkout /events/.../book, /checkout, /checkout/booth/[applicationId] bookings, reservations, bundles, vouchers
Tickets & profile /profile, /profile/qr/[bookingId]/[itemId], /p/[token], /vp/[token] profile, bookings
Auctions /auctions, /auctions/[slug], /auctions/[slug]/lots/[lotSlug], /auctions/[slug]/stream auctions, auctionChat
Stamp rally /stamp-rally, /stamp-rally/[id], /stamp-rally/scan stampRallyPublic, stampRally
Vendors & partners /collaborate, /collaborate/vendor, /collaborate/vendor/book, /collaborate/sponsor, /collaborate/media collaborate, vendorApplications, booths, partnershipLeads
Vendor self-service /profile/vendor/applications, /profile/vendor/announcements/[id] vendorApplications, vendorAnnouncements, vendorApplicationMessages
Community & content /news, /news/[slug], /membership, /merch, /comic-covers, /sponsors, /volunteer news, newsletter, merch, comicCoverPresales, sponsors
Messaging /inbox, /inbox/[id] inbox, notifications
Tools /tools/grading-calculator gradingAddon

Things worth knowing before you change a page

Section titled “Things worth knowing before you change a page”
  • The cart is in the database. carts and cart_items plus the slot reservations hold the state; the Zustand store keeps only cartId and eventId. Clearing browser state does not clear a cart.
  • Pass pages are private. /p/[token] (entry pass) and /vp/[token] (signing pass) render from a signed QR token and are marked noindex. The token is the credential; do not leak it into analytics or logs.
  • URL state uses nuqs. Filters, tabs and pagination belong in the URL via useQueryState, never in local state plus router.push.
  • Dark mode only. There is no light theme to test against.