GappHub — UI Specification

Source Evidence

Confirmed UI Assumptions Manifest

Area Decision Source
Single-page app, one primary route /Confirmed[from spec]
Boot screen is the primary entrance animation on /Confirmed[user decision 2026-05-18]
No traditional header/sidebar/footer — phone frame is the UIConfirmed[inferred, confirmed]
No top header; brand copy appears in the Dynamic Island during bootConfirmed[from user]
Dynamic Island (iPhone 15+) frame styleConfirmed[from interview]
3D phone with drop shadowConfirmed[from interview]
Subtle light gradient wallpaperConfirmed[from interview]
Simplified frame on mobile viewportsConfirmed[from interview]
Badge legend below phone + tooltip on hoverConfirmed[from interview]
Light/aspirational Apple-inspired visual languageConfirmed[from spec]
No dark modeConfirmed[inferred, uncontested]

Page Inventory & Route Map

Route Purpose
/Main hub — boot screen entrance into the phone frame with product icon grid

The former comparison routes (/boot, /slide, /assemble) were removed after the boot screen was selected as the primary experience.


Global Shell

There is no global shell (no persistent header, sidebar, or footer). The entire viewport is the stage for the phone frame.

Elements Outside the Phone Frame

Badge Legend

Page Background


Phone Frame — Detailed Anatomy

Frame Shell

Dynamic Island

Status Bar

Wallpaper

Home Indicator


Icon Grid

Layout

Sort Order (Default)

The grid fills in this priority order:

  1. Row 1 (positions 1–4): Hot / trending / featured products — manually curated
  2. Row 2 (positions 5–8): Newest products (most recently launched)
  3. Rows 3–5 (positions 9–20): Live products, then Beta, in alphabetical order within each group
  4. Row 6 (positions 21–24): Concept products
  5. Overflow: If products exceed one page, they flow onto additional pages
  6. Deprecated products: Placed last, after concept, on the final page

Pagination

Pull-Down Search (Spotlight)


Dock

Layout

Dock Contents

Position App Notes
1War RoomLinks to the lexcorp-war-room app
2TBDKey Lexcorp product
3TBDKey Lexcorp product
4George "G" LePersonal site or portfolio

Dock apps follow the same icon design as grid icons but may omit badges.


App Icon — Component Spec

Icon Image

Name Label

Notification Badge

Deprecated State

Interaction States

State Visual
DefaultIcon at 100% scale, no transform
HoverScale to 105%, subtle upward lift shadow. Description tooltip appears after 400ms delay
Press / ActiveScale to 92% (iOS press-in effect), held for 150ms
ReleaseSpring back to 100%, then open the App Store Drawer (see §App Store Drawer)
Focus (keyboard)2px blue outline ring around the icon, 2px offset
DisabledN/A — all icons are interactive

Description Tooltip


Loading Animation — Primary Boot Screen

The primary route / starts with the boot screen and ends at the fully rendered phone with populated icons.

Boot Screen (/)

  1. Phase 1 (~0–1.1s): Black screen fills the phone frame. Lexcorp fades and pops into view at the center of the splash screen.
  2. Phase 2 (~1.1–2.2s): made with ♥ fades in underneath while the first line remains visible.
  3. Phase 3 (~2.2–3.3s): by George "G" Le fades in underneath the existing lines.
  4. Phase 4 (~3.3–3.7s): Screen transitions to the wallpaper gradient. Status bar and icons fade in.
  5. Post-boot: Dock slides up. Dynamic Island cycles through brand copy text (Lexcorp, made with ♥, by George "G" Le) using popLayout mode with will-change: transform for flicker-free text transitions.

Reduced Motion

When prefers-reduced-motion: reduce is active, the boot sequence is skipped and the phone frame appears immediately at full opacity. Total transition: ≤200ms opacity fade.


Responsive Behavior

Desktop (≥1024px)

Tablet (768px–1023px)

Mobile (< 768px)

Wide Desktop (≥1440px)


Visual Style Direction

Typography

Color Palette

Token Value Usage
--bg-gradient-start#f5f5f7Page background top
--bg-gradient-end#ffffffPage background bottom
--frame-silver#e0e0e5Phone frame metallic tone
--frame-silver-highlight#f0f0f3Frame top edge highlight
--bezel-black#1c1c1eScreen bezel and Dynamic Island
--wallpaper-start#e8ecf4Wallpaper gradient top (soft blue-gray)
--wallpaper-end#f5f0f6Wallpaper gradient bottom (soft lavender)
--text-primary#1d1d1fIcon labels, status bar
--text-secondary#6e6e73Tagline, legend labels (WCAG AA compliant)
--dock-blur-bgrgba(255,255,255,0.72)Dock frosted glass
--badge-live#22c55eLive badge
--badge-beta#eab308Beta badge
--badge-new#3b82f6New badge
--badge-concept#ef4444Concept badge
--shadow-primaryrgba(0,0,0,0.15)Phone drop shadow

Shadows


Accessibility

Keyboard Navigation

Screen Reader

Color and Contrast

Reduced Motion


Implementation Notes

Tech Recommendation

Data Shape (Expected)

{
  "products": [
    {
      "id": "war-room",
      "name": "War Room",
      "url": "https://...",
      "icon": "/icons/war-room.png",
      "description": "Lexcorp command center",
      "badge": "L",
      "category": ["internal", "tools"],
      "featured": true,
      "dock": true,
      "order": 1
    }
  ]
}

Performance Budget


App Store Drawer (Bottom Sheet)

Added: 2026-05-18. Overrides previous non-goal "No in-app product detail pages."

Trigger

Tapping any app icon (grid or dock) opens a bottom-sheet drawer instead of navigating directly to the external URL. This replaces the current <a href target="_blank"> behavior.

Layout

Content (top to bottom)

  1. Header row (sticky):
  1. Description: Product description text (~14px, regular weight, muted color). Uses longDescription field when available; falls back to description (longDescription ?? description).
  2. Screenshots carousel (conditional): Horizontal scrollable row of screenshot images. Hidden entirely when product.screenshots is empty or absent.
  3. Testimonials (conditional): Vertically stacked quote cards. Hidden entirely when product.testimonials is empty or absent.

Data Model Changes

New optional fields on Product:

Field Type Required Notes
screenshotsstring[]NoURLs or paths to screenshot images
testimonials{ text: string; author: string }[]NoUser testimonials
longDescriptionstringNoExtended description for the drawer

When screenshots and testimonials are absent, the drawer shows only the header + description + CTA. This is the expected initial state for most products.

Accessibility

Keyboard Interaction

Key Action
Enter/Space on iconOpens drawer
EscapeCloses drawer
TabCycles through drawer content (CTA button, screenshots, etc.)
Enter on "Open" CTAOpens external URL in new tab

Responsive Behavior


Open Questions

  1. Which 3 apps fill the remaining dock slots alongside War Room?
  2. What category/tag taxonomy should products use?
  3. Exact Lexcorp logo asset (SVG preferred)
  4. Whether the chosen animation variant should be configurable or hard-coded after selection
  5. Product icon artwork source — does each product already have an iOS-style icon?

Non-Goals