A
AuPairGo
Back to Home
UI/UX Documentation

Prototype Shell

Technical documentation of the UI/UX structure, components, and naming conventions of our app prototype.

Architecture & File Structure

The prototype lives under /prototype/ in the App Router. All pages share the same layout with PhoneFrame, BottomNav, and state management via usePrototypeState.

apps/web/src/
├── app/[locale]/prototype/   # Page routes (19 pages)
│   ├── layout.tsx            # PrototypeStateProvider + PhoneFrame
│   ├── page.tsx              # Entry router (→ home or onboarding)
│   ├── onboarding/           # 5-step onboarding flow
│   ├── home/                 # Home Feed
│   ├── explore/              # Explore + detail pages
│   ├── messages/             # Conversations
│   ├── dashboard/            # Host/Au Pair dashboard
│   ├── journey/              # Gamification journey
│   └── ...
├── components/
│   ├── prototype/            # 12 prototype-specific components
│   └── ui/                   # 9 reusable UI primitives
├── hooks/
│   ├── use-prototype-state.tsx   # 4-state context (localStorage)
│   └── use-perspective.tsx       # au-pair | host-family (cookie)
└── lib/
    └── prototype-mock-data.ts    # Types + mock data collections

Prototype States

The prototype has 4 states that control navigation, content, and visible features. State is persisted in localStorage.

Au Pair — Searching

ap-searching

Au Pair — Matched

ap-matched

Host Family — Searching

hf-searching

Host Family — Matched

hf-matched

const { state, setState, isAuPair, isHostFamily, isSearching, isMatched } = usePrototypeState();
// state: "ap-searching" | "ap-matched" | "hf-searching" | "hf-matched"
// Persisted in localStorage("aupairgo-prototype-state")

Layout Shell

Responsive design: fullscreen on mobile, iPhone frame with state switcher on desktop.

Mobile (< sm)              Desktop (>= sm)
┌────────────────┐         ┌─────────────────────────────────┐
│ Full-screen    │         │  Backdrop (stone-900/60 blur)   │
│                │         │                                 │
│ ┌────────────┐ │         │  ┌──────────┐  ┌────────────┐  │
│ │ ProtoHeader│ │         │  │ PhoneFrame│  │   State    │  │
│ ├────────────┤ │         │  │ 390×844px │  │  Switcher  │  │
│ │            │ │         │  │           │  │            │  │
│ │  Content   │ │         │  │  Content  │  │ ● ap-search│  │
│ │  (scroll)  │ │         │  │  (scroll) │  │ ● ap-match │  │
│ │            │ │         │  │           │  │ ● hf-search│  │
│ ├────────────┤ │         │  ├───────────┤  │ ● hf-match │  │
│ │ BottomNav  │ │         │  │ BottomNav │  └────────────┘  │
│ └────────────┘ │         │  └──────────┘              [✕]  │
└────────────────┘         └─────────────────────────────────┘

Every page follows the same structure: Header → scrollable content → BottomNav.

// Every prototype page follows this pattern:
<div className="flex flex-1 flex-col overflow-hidden bg-stone-50">
  <ProtoHeader title="..." showBack />    {/* or <HomeHeader /> */}
  <div className="flex-1 overflow-y-auto">
    {/* Page content */}
  </div>
  <BottomNav />
</div>

Dynamic bottom tabs change based on state. Additional pages are accessible via the More menu.

Bottom Tabs (state-dependent)

ap-searching

HomeMessagesExploreJourneyProfileMore...

ap-matched

HomeMessagesPerksMore...More...

hf-searching

HomeMessagesExploreVorbereitungProfileMore...

hf-matched

HomeExploreMessagesDashboardMore...

More Menu (always available)

ProfileJourneyLearningHelp

Pages & Routes

19 pages organized in 5 categories: Entry, Main Tabs, More Menu, Actions, and Detail views.

RoutePageCategory
/prototypeEntry RouterEntry
/prototype/onboardingOnboardingEntry
/prototype/[role]/searching/homeHome (Searching)Main Tabs
/prototype/[role]/matched/homeHome (Matched)Main Tabs
/prototype/[role]/searching/exploreExploreMain Tabs
/prototype/[role]/searching/messagesMessages (Searching)Main Tabs
/prototype/[role]/matched/messagesMessages (Matched)Main Tabs
/prototype/[role]/matched/dashboardDashboardMain Tabs
/prototype/[role]/matched/perksPerksMain Tabs
/prototype/[role]/searching/journeyJourneyMore Menu
/prototype/[role]/learningLearningMore Menu
/prototype/[role]/profileProfileMore Menu
/prototype/[role]/settingsSettingsMore Menu
/prototype/[role]/helpHelpMore Menu
/prototype/[role]/createCreate PostActions
/prototype/[role]/notificationsNotificationsActions
/prototype/[role]/favoritesFavoritesActions
/prototype/[role]/explore/family/[id]Family DetailDetail
/prototype/[role]/explore/aupair/[id]Au Pair DetailDetail

Prototype Components

12 specialized components for the prototype. All live under components/prototype/.

PhoneFrame

components/prototype/phone-frame.tsx

shell.shell.components.phoneFrame

BottomNav

components/prototype/bottom-nav.tsx

shell.shell.components.bottomNav

ProtoHeader

components/prototype/proto-header.tsx

shell.shell.components.protoHeader

HomeHeader

components/prototype/proto-header.tsx

shell.shell.components.homeHeader

PostCard

components/prototype/post-card.tsx

shell.shell.components.postCard

StoriesRow

components/prototype/stories-row.tsx

shell.shell.components.storiesRow

FamilyCard

components/prototype/family-card.tsx

shell.shell.components.familyCard

AuPairCard

components/prototype/aupair-card.tsx

shell.shell.components.auPairCard

MessagePreview

components/prototype/message-preview.tsx

shell.shell.components.messagePreview

NotificationItem

components/prototype/notification-item.tsx

shell.shell.components.notificationItem

FilterChips

components/prototype/filter-chips.tsx

shell.shell.components.filterChips

DashboardWidgets

components/prototype/dashboard-widgets.tsx

shell.shell.components.dashboardWidgets

UI Primitives

9 reusable base UI components based on Shadcn/Radix. Located under components/ui/.

Button

components/ui/

Badge

components/ui/

Card

components/ui/

Input

components/ui/

Textarea

components/ui/

Label

components/ui/

Avatar

components/ui/

SegmentedControl

components/ui/

Separator

components/ui/

Color Scheme

Emerald (Primary)
Stone (Neutral)
Sky (Info)
Rose (Accent)

Data Model & Mock Data

All data comes from prototype-mock-data.ts. Defines types and static test data for the prototype.

MockUser

id, name, avatar, country, countryFlag, age, languages, bio, role, isOnline

MockFamily

id, name, location, children[], description, languages, rating, lookingFor

MockAuPairProfile

id, name, age, country, bio, languages, experience, interests, rating

MockPost

id, author, category, title, content, likes, comments, media[], timeAgo

MockConversation

id, participant, lastMessage, timeAgo, unread

MockNotification

id, type, user?, message, timeAgo, read

Post Categories

EXPERIENCETIPSQUESTIONEVENTHOUSING

Internationalization

All texts are translated via next-intl. Prototype translations use the 'prototype.*' namespace in JSON files.

// Namespaces in messages/{locale}.json:
prototype.nav.*          // Bottom nav labels
prototype.home.*         // Home page
prototype.explore.*      // Explore page
prototype.messages.*     // Messages
prototype.dashboard.*    // Dashboard
prototype.profile.*      // Profile
prototype.journey.*      // Journey (gamification)
prototype.learning.*     // Learning
prototype.perks.*        // Perks
prototype.create.*       // Create post
prototype.notifications.* // Notifications
prototype.favorites.*    // Favorites
prototype.settings.*     // Settings
prototype.help.*         // Help
prototype.onboarding.*   // Onboarding flow
prototype.common.*       // Shared labels (back, save, cancel...)

// 14 active locales:
de (default), en, es, fr, id, it, ka, nb, ne, nl, pt, th, uk, zh