Product
/[locale]
Product home page: localized hero, featured events and live event entry point.
Module 10.1
This checkpoint maps EventMap after i18n, server-rendered search, metadata, modal routes, streaming, localStorage favorites and Supabase cloud favorites.
Product EventMap vs Demo Lab
Product EventMap keeps real user scenarios clean. Demo Lab explains course patterns and architecture decisions on separate pages.
Product
Product home page: localized hero, featured events and live event entry point.
Product
Server-rendered search page with URL filters, metadata and live source fallback.
Product
Clean SEO search landing page produced from optional catch-all search segments.
Product
Event detail page shared by full page and modal flows through EventDetails.
Product
Favorites product page: localStorage for guests and Supabase cloud rows for users.
Product
Auth entry page with Magic Link, Google OAuth and sign out for the course project.
Demo
Demo Lab index: navigation hub for course patterns and architecture checkpoints.
Demo
Isolated demo pages that explain patterns without adding debug content to product routes.
Layer
Routing, layouts, server pages, route handlers and App Router composition live here.
Layer
Domain concepts, typed data, route maps, search helpers, SEO helpers and pure architecture data.
Layer
Server-only boundaries for external APIs, cache policy and data normalization before UI rendering.
Layer
Browser-safe API clients such as the Supabase browser client boundary.
Layer
Product behavior such as auth forms, event sections, search controls and favorites logic.
Layer
Reusable UI primitives, route helpers, locale helpers and utilities that do not own product behavior.
Rule
App routes compose features, entities and shared UI. They should stay thin and route-focused.
Rule
Features can use entities, shared utilities and client API boundaries when browser behavior is required.
Rule
Server API code and external keys must not be imported into Client Components or browser hooks.
Rule
Browser API clients stay in the client layer and are imported only where that boundary is safe.
Rule
Shared UI and utilities should not depend on product features or page-specific behavior.
Boundary
Home, search, detail and demo pages can render data on the server and pass ready data into UI.
Boundary
FavoriteButton and AuthFormClient isolate browser interaction without turning whole pages into client code.
Boundary
The hook chooses guest localStorage or Supabase cloud favorites after hydration and current user lookup.
Boundary
EventCard displays server-rendered event data and can host a small client island for favorite toggling.
Contract
Locale is explicit in route params, links, metadata, alternate URLs and server calls.
Contract
Metadata, canonical URLs, hreflang, sitemap and robots are produced through dedicated helpers and routes.
Contract
Ticketmaster data is validated before EventMap normalizes it into internal EventCardData.
Contract
Path segments and searchParams are parsed before filters, pagination or metadata are derived from them.
Contract
The publishable key is safe only because Row Level Security protects each user row in public.favorites.
Auth
EventMap has Magic Link, Google OAuth, /auth/callback, localized login pages and sign out on the login page.
Auth
The project does not add a profile page, account dropdown, username in the header, avatar or settings page.
Auth
A fuller product could add account menu, profile and settings while keeping the existing Supabase auth boundary.
Backend
Supabase stays the managed backend option for Auth, RLS, cloud state and the public.favorites table.
Backend
Django can replace the backend contour when the project needs editorial CMS, custom admin, business logic and controlled data ownership.
Backend
Locale routing, server-rendered search, metadata, client islands and data normalization remain useful with either backend line.