Appearance
Main concepts in the current dev architecture
Source main ad33ecb44f208d91e69aae215471e70941111483; architectural authority dev 7c3f0079f7a4847ff698c508470757ca81e64b36. New paths below are proposed additions; existing dev paths are verified in the architecture evidence. The exhaustive 185-file mapping is file-classification.md, also embedded in the manifest.
Ownership and boundaries
Binding refinements: 11 defines separate marketing/product visual primitives, two-way CSS containment, explicit portal/cookie behavior, route ownership and the shared-component reuse matrix. Do not extend product UI with marketing variants.
| Main artifact | Purpose | Current dev equivalent / destination | Adaptation |
|---|---|---|---|
app/(site)/layout.tsx | Public fonts, CSS, transition provider | Existing app/(marketing)/layout.tsx | Extend this layout. Keep MarketingQueryProvider; scope new style wrapper .cc-root; install transition/motion inside it. Keep a single shell-owned Footer. |
app/(site)/page.tsx, _components/Home.tsx | Server metadata plus audience-switched home | Existing app/(marketing)/page.tsx; new surfaces/marketing/components/Home.tsx | Convert route to server metadata wrapper and place interactive composition in client Home; don't mark entire content/SEO module client. |
app/(site)/_components/Nav.tsx | Public nav | surfaces/marketing/components/Navbar.tsx | Replace presentation in current surface; preserve route-aware menu cleanup and improve hidden-CTA focus. |
_components/{Hero,Footer,Faq,Stats,Process,...} | Public sections | Existing matching marketing components or new surfaces/marketing/components/{Hero,Footer,Faq,Stats,Process,...}.tsx | Select final composition, not all exported historical sections. Old FAQAccordion/BrandStats/HowItWorks may become unused, but don't delete until import graph proves it. |
_components/{ui,util,Counter,CcVideo,ClipWindow,CampaignArt}.tsx/ts | Toybox-specific primitives | New files under surfaces/marketing/components/ | Keep visual primitives local to marketing; do not replace dev shared product components. Pure helpers stay server-callable; hooks and playback remain client. |
app/components/{Reveal,SmoothScroll}.tsx | Global effects on old site | New marketing components mounted by (marketing)/layout | Route-group ownership replaces fragile old exclusions. Cleanup Lenis/html state and observers at unmount. |
app/components/AudienceTheme.tsx | Audience state | surfaces/marketing/providers/AudienceTheme.tsx | Keep one root-mounted instance; add home-only persistence/query behavior and update consumers atomically. Dev CookieConsent currently does not consume it. Never alter authenticated roles or clippingExperience. |
app/components/CookieConsent.tsx | Shared consent UI | shared/components/common/CookieConsent.tsx; marketing MarketingCookiePresentation.tsx/styles/cookie.module.css | One shared v2 state owner; isolated marketing presentation. Keep dev compact visible /contact behavior and current font; product unchanged. |
app/components/PlatformIcons.tsx | Brand/platform icons | shared/components/ui/PlatformIcons.tsx | Add missing X icon export if needed, preserve all current consumers. |
app/lib/content.ts | Marketing copy/stats/links | New surfaces/marketing/content.ts | Separate curated marketing claims from backend/business data. Remove stale comments describing concepts, not useful content. |
app/lib/campaignData.ts, _components/cases.ts | Case records plus display overrides | Existing surfaces/marketing/case-studies/campaignData.ts; new sibling cases.ts | Preserve dev ownership, merge Kill Streak/ForgeGUI evidence and exact listing order. Audit duplicate summary fields against full records. |
app/lib/guideData.ts | Guide prose | Existing features/creator-guides/guideData.ts | The main move is already represented differently in dev; use existing records. |
app/(site)/campaigns/**, services/contact/guides/privacy/terms | Existing public URLs | Existing corresponding app/(marketing)/** files | Replace page presentation; avoid duplicate layout head/footer. Case studies remain static marketing, not product campaign data. |
| New clipping/careers routes | Public informational pages | New app/(marketing)/clipping/page.tsx, careers/page.tsx; CareersRoles in marketing components | New URLs inside existing surface; role dialog gets focus handling. |
| Creator page/apply/start route wrappers | Acquisition landing/education | New app/(marketing)/creators/{page,apply/page,start/page}.tsx | Separate public funnel from authenticated /onboarding and account verification. Metadata remains in server wrappers. |
Creator UI _components/{Proof,Apply,Start,SectionHeadServer} | Presentation | New surfaces/marketing/creators/*.tsx | Client components only where state is required; preserve server section-head helper. |
Creator _content, _progress, _actions | Content, browser progress, optional delivery | New features/creator-acquisition/{content,progress,actions}.ts | Validate state/input; server-only action stays isolated; no API/role/membership architecture invented. |
| Creator StartTransition + curtains | Public navigation effect | New surfaces/marketing/providers/StartTransition.tsx, surfaces/marketing/curtains.ts | Provider survives public page transition; no product-root installation. |
site.css, creators.css | Visual system | New surfaces/marketing/styles/{site,creators}.css | Scope all selectors and rename marketing cr-* classes/keyframes to cc-cr-*; prefix alone cannot beat unlayered dev cr-card. Preserve final layer ordering. |
_seo, JsonLd, root metadata | Page discovery | New surfaces/marketing/seo.ts, marketing JsonLd; targeted edits in existing app/layout.tsx | Keep force-dynamic, Telemetry, ToastViewport, existing provider wiring and token-page metadata. |
| Site catch-all/not-found | Branded fallback | New (marketing)/not-found.tsx only | Omit catch-all; no new /r route or rewrite changes. Bad case/guide slugs get group404; globally unknown URLs retain dev404. |
Old /book-call removed | Booking moved to contact | Existing app/(marketing)/book-call/page.tsx and nested layout | Server307 to fixed /contact retaining query pairs; remove obsolete nested metadata. No backend booking deletion. |
app/onboarding/page.tsx, app/dashboard/profile/page.tsx label hunks | Creator-oriented experience vocabulary | Existing features/auth/data/onboardingOptions.ts and features/profile/data/profileOptions.ts | Change the professional label in both option arrays and beginner description only in onboarding. Profile components/AccountPanel.tsx:3,70–71 consumes the feature array; do not edit/rebuild ProfileScreen for this copy. Preserve stored values and clippingExperience. |
Product work that has no main file-level equivalent
Dev's app/(content-rewards) routes delegate to surfaces/content-rewards/screens, while features/* owns API clients, hooks, data and tests. Main's app-local dashboard files are not reusable. The detailed dev map locates auth, admin access, campaigns, funding/invoices, payouts, submissions, analytics, support, groups and token reports with symbols/line references.
Preserve these boundaries:
useDashboardSessionandfeatures/auth/api/login.ts: backend cookie session, credentialed requests, Whop/Google/gated Discord, restricted-account handling and returnTo.adminFetch,AdminAccessContext,AdminAccessBoundary,adminRouteAccess: stale-capability mutation prevention, UI route permissions, backend authorization.features/admin/campaign-management/api/campaignFunding.tsand public invoice reader: canonical invoice/receipt/allocation contract, public token no-store/no-referrer reads, explicit fee handling.features/payouts/*and current screens: Whop-only state/eligibility, never main's legacy multi-rail payout pages.features/submissions/*,features/admin/submissions/*: approved/private eligibility, manual submission, review command/query behavior.features/support/api/supportChat.tsandSupportScreen.tsx: authenticated Whop chat embedding and support permissions.features/admin/clipper-groups/*: group membership, campaign scope, versioned rates and analytics; public funnel track names never grant membership.shared/components/common/Telemetry.tsx: drop events for/share/report/token-bearing URLs; keep private report metadata and invoice protections.next.config.ts: standalone/container output, permission-simulator settings,/r/:codesame-origin affiliate rewrite;package.jsoncurrent dependencies and nested test discovery.
No scraper source was inspected: frontend marketing reads Roblox through Next routes, not submission-metric scheduling. BloxClips scheduling and Crawlee execution remain out of scope.