H1Human Layer Doc — Active Sprint
H2Done — Trips / Itinerary
- ✅ Concept groups render as cards (CardGrid + QR hover) in "Concept groups" section
- ✅ Session stack children concept groups render as cards in "From sessions" section
- ✅ Old inline contentStack.sessionConceptGroups rendering removed from TripItineraryCanvas
- ✅ page.tsx fetches session stacks with
sessionConceptGroups, computescontentStackChildrenper city - ✅ Modal opens on card click (pointer-events-none on QR overlay)
- ✅ Concept card content moved to TOP of city block as lead description (base text for the city)
- ✅ City info from City model shown as fallback only when no conceptCard assigned
- ✅ No new TS/build errors
H2Done — Documents Sidebar & Assistant Mobile-First
- ✅ Documents sidebar: removed
-114pxnegative margin, simplified layout to flex column with proper full-height fill - ✅ Sidebar bottom slot now properly anchored at bottom, scrollable content area fills remaining space
- ✅ Assistant page: removed bizarre
86pxvertical button padding, replaced with finger-sized44pxmin-height - ✅ Assistant page: responsive padding (
p-4 md:p-6 lg:p-10), responsive font sizes - ✅ AssistantWorkspace: finger-sized input (
min-h-[44px] md:min-h-[48px]) and send button - ✅ AssistantWorkspace: responsive message area height (
max-h-[50vh] md:max-h-[60vh]) - ✅ AssistantWorkspace: "Run" label hidden on mobile (
hidden sm:inline) to save space - ✅ AssistantPanel: increased padding, font sizes, gaps for mobile readability
- ✅ AssistantPanel floating toggle: increased from
34pxto44pxmin-height - ✅ Global
.micro-btn/.micro-fp: increased padding from3px 8pxto6px 10px, addedmin-height: 32px - ✅ Mobile media query for
.micro-btn/.micro-fp:min-height: 40px, larger padding on screens ≤640px
H2Done — Trips Landing Page Streamlined
- ✅
TripsSectionRegistry.ts: updated hero defaults — "Discover Andalusia Your Way", "Plan. Connect. Explore." - ✅
TripsSectionRegistry.ts: updated how-it-works defaults to 3-step user-friendly copy (Plan / Join / Connect) - ✅
TripsLandingSections.tsx: reordered sections — Hero → How It Works → Featured Trips → Featured Experiences → Final CTA → Footer - ✅ Added inline "Córdoba & Granada: The Heart of Al-Andalus" section with bullet points
- ✅ Added inline "Flexible, Modular, and Always Yours" 3-card grid
- ✅ Commented out (not deleted) 12 sections: starting_points, shared_public_trips, itinerary, featured_cities, featured_plans, pathways, story_video, editorial_features, updates, keep_in_touch, marketing_cta, faq
- ✅ Re-enabled
trip_plansection — CTA href updated from/trips/plannerto/trips/new - ✅ Each commented section has a pointer comment showing where the component still lives
- ✅ No components deleted — all still importable and editable
H2Notes for Later
- Dual poster/grid view concept should be applied per card as a passive scrolling effect, and integrated as a standard for listing trips except for
trips/public/dashboard's first trip grid. - When the same image is used multiple times per page load, load once and use cached instance for all other occurrences (browser HTTP cache + shared
<img>ref or Next.js<Image>with samesrcalready dedupes, but verify no duplicate network requests).
H2Done — Experiences Page Streamlined
- ✅ Removed negative margin (
-179px) that was pulling content off-screen - ✅ Hero updated: subtitle focused on direct booking, CTA scrolls to
#experiences_featured - ✅ Featured Experiences moved to top position (order 0) — city highlight tours with FareHarbor booking widgets
- ✅ How It Works simplified to 3 steps: Choose city → Book online → Show up
- ✅ Featured Cities kept for visual destination reference
- ✅ Hidden (not deleted): Pathways, Featured Trips, Keep In Touch sections
- ✅ Final CTA tightened: "Ready to Explore?" with 3 action buttons
- ✅ No components deleted — all still importable
H2Done — Global Command Dock
- ✅ Built
GlobalCommandDock.tsxwith 3 groups of 7 buttons, route-aware nav/actions/tools - ✅ Added dock to
app/trips/layout.tsx,app/experiences/layout.tsx,app/(trips)/layout.tsx - ✅ Removed
ExperienceEditDockfrom experiences pages (file preserved) - ✅ Created
GlobalCommandDock.actions.tswith thread persistence (AssistantThread/AssistantMessage) and AI coaching mode - ✅ Built floating "script page" response notes above dock with print-in animation
- ✅ Manual notes create
ProjectDocument(type: "note") in user's default project — mirrors docs sidebar ChatPanel flow - ✅ Saved notes show "Open" link to
/documents/{publicId} - ✅ Cycle button closes after full group cycle; auto-opens note panel on last cycle
- ✅ Items only render when
openis true to prevent centering drift - ✅ Outside click closes both dock and note panel
- ✅ Dismiss button (×) on each floating AI message
- ✅ Copy button on each AI response message
- ✅ Share cancellation handled silently (no AbortError spam)
- ✅ Floating messages pushed up to avoid overlap with note panel
- ✅ Persona chooser overlay (Maestro, General, Developer, Writer)
- ✅ Note panel mode toggle: Note | AI
- ✅ AI responses use selected persona system prompt
- ✅ Spring physics animations throughout
- ✅ Panel indicator dots below dock
H2Done — Layout Fixes
- ✅ Fixed
/tripshero cropping: removed-147pxnegative margin - ✅ Moved
trips/public/page.tsxcontent toapp/trips/page.tsx; old route redirects - ✅ Added
EditorialHeadertoapp/spaces/(spaces)/layout.tsx - ✅ Widened spaces containers:
max-w-7xl→max-w-[1600px]
H2Done — Profile Error Fix
- ✅ Fixed
User not foundruntime error on/profilewhen session user doesn't exist in DB - ✅
getProfileData()now returnsnullinstead of throwing; page gracefully redirects to sign-in - ✅
profile-client.tsxhandlesnullprofile with fallback UI
H2Done — Auth Fix (Google OAuth User Linking)
- ✅ Fixed
Foreign key constraint violatederrors caused by Google OAuth users missing local DB records - ✅
signIncallback now links Google accounts by email to existing localUserrecords - ✅ If no local user exists for Google email, auto-creates one with role "USER"
- ✅ No Prisma schema changes — uses existing
Usertable
H2Done — AI Context Awareness & Agent Tools
- ✅ Privacy-first page context: AI only sees screen content when user toggles 🔒 → 🌐
- ✅ DOM scraper extracts only visible public content (no inputs, no hidden data)
- ✅ On-demand entity tools: AI can list user's trips/experiences/docs by title only
- ✅ Agent routing tools:
navigate_to,scroll_to_section,open_note_panel,share_page,create_trip_draft - ✅ AI executes tools and confirms actions in chat
- ✅ Default locked: AI receives zero context until user explicitly shares screen
H2Next Action
Test dock on staging: verify AI agent routing, context awareness toggle, tool execution, and privacy lock behavior.
H2Beta — New Surfaces (Installed May 2026)
H3Status: 🟡 Pending production revision
These pages are built and routed. Content, tone, and layout are at beta quality and will need a human polish pass before production.
H3New pages created
| Page | Route | File | Pattern |
|---|---|---|---|
| Profile | /profile | app/profile/page.tsx + profile-client.tsx + actions.ts | Server component → client component → server actions |
| Admin overview | /admin | app/admin/page.tsx | Server component with card grid |
| Admin layout | /admin/* | app/admin/layout.tsx | Server component with auth guard + sidebar nav |
| User management | /admin/users | app/admin/users/page.tsx | Client component using existing user actions |
| Professionals | /trips/professionals | app/trips/professionals/page.tsx | Server component (static marketing page) |
| Marketing | /marketing | app/marketing/page.tsx | Server component (static page) |
| Story | /story | app/story/page.tsx | Server component (editorial narrative page) |
H3Architecture notes
- All pages follow the established pattern: server component orchestrator, client component for interactivity, server actions for mutations
- Profile uses co-located actions (
app/profile/actions.ts) for password management and profile updates - Admin/users page reuses existing user actions from
@/app/users/actions/user - Trips/professionals inherits the trips layout (TravelSymbolHeader + EditModeProvider)
- Marketing and story pages use the root layout
- Design system: Tailwind v4 tokens (
--neutral-*), shadcn/ui conventions, editorial tone matching existing trips pages - Berlin communication style: direct, simple, honest. No hype, no emoji in content.
H3Pages intentionally NOT modified
Existing pages were left untouched (non-destructive):
/trips/featured— already exists, functional/trips/new— already exists, functional/trips/[tripId]— already exists, functional/trips/[tripId]/schedule— already exists, functional/dashboard— already exists, functional (in(dashboard)route group)/about— already exists, functional (in(home)route group)
H3Role model alignment
New pages use the extended role set (ADMIN, ORGANISER, COLLABORATOR, PROVIDER, USER, GUEST) and display the appropriate role-aware UI:
- Profile page shows role badge and role-specific dashboard link
- Admin layout protects all
/admin/*routes - Admin/users page allows role assignment from the full set
Pending: deeper workspace routing per role at /dashboard.