Skip to content

Ship v1: waitlist, dashboard, animations, security hardening#2

Merged
operatoruplift merged 37 commits intomasterfrom
operatoruplift/repo-audit-merge
Mar 21, 2026
Merged

Ship v1: waitlist, dashboard, animations, security hardening#2
operatoruplift merged 37 commits intomasterfrom
operatoruplift/repo-audit-merge

Conversation

@operatoruplift
Copy link
Copy Markdown
Owner

Summary

Complete rebuild of operatoruplift.com — from marketing-only landing page to full platform with waitlist, dashboard webapp, and production-ready security.

Landing Page

  • Hero animation: 8-phase particle system (FLOW → SPARK → CONNECT → FORM → GUARD → CHAT → RESPOND → COMPLETE) with chat interface, checkmark delivery, and session close
  • Product section: 5 animated feature demos with timer-based auto-cycling (10s per feature), scroll-wheel advancement, and remount-on-change for fresh animations
  • ProblemStatement section: "40+ apps" callout with 3 pillars
  • MarketOpportunity section: $103B / $18B / 100M+ / Install Vercel Web Analytics for Next.js #1 stats grid
  • StatsBar, TractionBar (96% retention), CLI demo animation
  • Enterprise card with Operator Uplift logo + orbiting LLM provider logos (Anthropic, OpenAI, Google, Meta, xAI)
  • Updated Powered By marquee with latest models (Claude 4, GPT-4.1, Gemini 2.5, Llama 4, Grok 3)
  • Download widget: Windows, macOS, Linux, iOS, Android, Seeker (Solana phone)

Webapp Dashboard (behind waitlist)

  • 12 dashboard pages: cockpit, chat, agents, agent builder, marketplace, workflows, memory, analytics, security, settings, profile, notifications
  • Full sidebar navigation with collapsible sections
  • Cinematic glassmorphism design system
  • All pages mobile-responsive with MobilePageWrapper
  • AuthGate: redirects to waitlist if no token

Waitlist / Early Access

  • Login page converted to waitlist signup form
  • Supabase integration for email storage (API route at /api/waitlist)
  • Duplicate email detection
  • Success confirmation with social links
  • "Join Waitlist" CTAs throughout (navbar, hero)

Security & Compliance

  • Security headers: X-Frame-Options DENY, HSTS, nosniff, Referrer-Policy, Permissions-Policy
  • XSS fix: HTML escaping in chat markdown renderer
  • Next.js upgraded 16.0.7 → 16.2.0 (patched CVE)
  • 0 npm vulnerabilities
  • GDPR cookie consent banner (accept/decline disables GA)
  • MIT LICENSE file
  • robots.txt blocks all dashboard routes
  • Accessibility: aria-labels on all form inputs, htmlFor/id pairs

Code Quality

  • 0 TypeScript errors (tsc --noEmit clean)
  • 0 console.log/error in production
  • Proper type interfaces (no any types)
  • Hydration mismatch fixed in Security orbital animation
  • All useEffect hooks have cleanup

Test plan

  • Verify all 25 routes return 200
  • Test waitlist form submits to Supabase
  • Verify hero animation plays full 32s loop
  • Verify product animations cycle every 10s
  • Test scroll wheel advances features
  • Verify security headers with curl -I
  • Test mobile responsiveness
  • Verify cookie consent banner appears
  • Check dashboard redirects to waitlist without token

Environment Variables Required

NEXT_PUBLIC_SUPABASE_URL=<your-supabase-url>
NEXT_PUBLIC_SUPABASE_ANON_KEY=<your-anon-key>

🤖 Generated with Claude Code

operatoruplift and others added 30 commits March 18, 2026 13:56
…tunity sections

- Fix "Opeartor" typo in Terms and dataService
- Fix garbled Feature #4 description (duplicated text)
- Fix empty contract address → "Coming Soon"
- Update email from gmail to matt@operatoruplift.com
- Update AI model list (Claude Opus 4, GPT-4.1, Gemini 2.5 Pro, etc.)
- Add macOS/Linux tabs to DownloadWidget, change modal to "Coming Soon"
- Delete dead CodeSnippet component (rendered null, no imports)
- Add ProblemStatement section (80+ apps problem → solution pillars)
- Add MarketOpportunity section ($65B market stats, "Why now?" narrative)
- Merge with master: security linkUrls, copyright 2026, footer Contact link
- Incorporate TractionBar from master into page composition

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…adata

- Align hero with deck slide 1: "Your Life, Automated" / "One App. Every Agent. All Yours."
- Align ProblemStatement with deck slides 2/5: 40+ apps, Siloed Memory / Exposed Privacy / No Boundaries
- Align MarketOpportunity with deck slide 8: $103B TAM, $18B SAM, 100M+ SOM
- Reframe TractionBar honestly: "Beta Users (Previous Build)" instead of implying live product
- Fix CSS syntax bug: missing closing brace on .animate-slide-right broke nested utilities
- Clean manifest.json: remove non-standard fields, use local icon paths, correct theme color
- Update layout.tsx metadata: title/description aligned with new hero, added keywords

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Fix Enterprise orbital: widen container from w-20 to w-24, center text
  with line break and text-center so "OPERATOR UPLIFT" doesn't overflow
- Upgrade HeroAnimation from Antigravity Workspace build:
  - Loops infinitely (18s cycle) instead of stopping after 15s
  - Phase labels type out with fade: AWAITING INPUT → DETECTING SIGNAL →
    ESTABLISHING CONTEXT → ISOLATING ENVIRONMENT → APPLYING GUARDRAILS →
    AGENT ACTIVE
  - Chat interface appears in final phase with animated message bubbles
    and typing indicator
  - Guard phase draws pulsing dashed boundary with scan line
  - Connection lines use distance-based opacity
  - Mobile responsive: fewer particles, smaller sizes, adjusted thresholds

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Marketing site fixes:
- Center "THE PROBLEM" tag above 40+ number with flex column layout
- ProblemStatement/MarketOpportunity: use bg-background, dashed TechCards,
  orange divider dots to match site design language
- DeveloperDocs divider dot: grey → orange
- TractionBar: 90% → 96% retention rate
- TrustedBy: update model names (Claude Opus 4.6, GPT-4.1, Llama 3.3, etc)
- Hero: add "Launch App" + "Sign Up Free" CTAs, hide empty contract address
- Navbar: replace "Get Started" with orange "Launch App" button
- HeroAnimation: move GUARD/CHAT render outside particle loop (fix flickering)

New dashboard pages (10 routes):
- /app — Cockpit with stats, event stream, health monitor, ATP treasury
- /chat — Full chat with model picker, sessions, markdown, localStorage
- /marketplace — Agent store with install buttons, search/filter, categories
- /security — Blackwall with live threat stream, protection matrix, export
- /settings — Profile/notifications/appearance/security/API keys/data export
  (all settings persist to localStorage)
- /agents/builder — 4-step wizard: Template → Configure → Model → Deploy
  (saves to localStorage, shows in sidebar)
- /notifications — Interactive feed with mark-read, delete, unread badges
- /login — Email + OAuth login (demo mode → /app)
- /signup — Signup with password strength meter, links to Terms/Privacy

Dashboard infrastructure:
- DashboardLayout with sidebar, header, nebula/particle backgrounds
- CockpitSidebar with nav sections, search, My Agents (live from localStorage)
- UserHeader with breadcrumbs, ⌘K command bar, notifications, avatar dropdown
- CommandBar with keyboard nav to all routes
- MobileNav bottom bar for responsive dashboard
- Toast notification system
- UI components: Card, Badge, GlowButton, Toast
- AgentProvider context, CinematicBackgrounds effects

All buttons functional — no dead-end interactions:
- Marketplace Install → localStorage + toast
- Agent Builder Deploy → localStorage + sidebar update
- Settings Save → localStorage persist
- API Key generate/copy/revoke → working
- Data Export → downloads JSON file
- Security Export Logs → downloads threat log
- Chat attachments/mic → toast feedback
- Initialize Agent → navigates to builder

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
From github.com/operatoruplift/website master commits:
- Security section: tighter padding (pb-24→pb-16, py-24→py-16),
  responsive headline (add lg:text-6xl), subhead contrast (text-muted→
  text-gray-300 + max-w-3xl), card desc contrast (text-muted→text-gray-400)
- DeveloperDocs: reduce padding (pb-24→pb-16, py-24→py-12) for tighter layout
- Download URL: # → https://github.com/operatoruplift/releases
- Quickstart link → /getting-started, differentiate doc links
  (core-concepts, api-reference)
- Session Runtime description: cleaned up redundancy
- Permission Actions: fix em-dash spacing
- Enterprise description: remove extra "the"

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…nloads

Icons:
- Replace Apple icon with proper Apple logo SVG (Font Awesome path)
- Replace Windows icon with proper Windows logo SVG
- Replace Linux icon with proper Tux SVG
- Add AndroidIcon and SmartphoneIcon (for iOS)

Download Widget:
- Add iOS and Android tabs with separator
- iOS/Android show "Coming Soon" version
- macOS set as default tab (was Windows)

Hero Animation timing overhaul:
- Extend total loop from 18s → 26s so all phases play fully
- FLOW: 0-2.5s, SPARK: 2.5-5s, CONNECT: 5-8s, FORM: 8-11.5s,
  GUARD: 11.5-15s, CHAT: 15-26s
- Chat interface progress spread over 8 seconds (was 1s)
  so message bubbles and typing animation build gradually
- Phase label start times updated to match

Product scroll animations:
- Increase section height from 500vh → 600vh for more scroll room
- Increase step height from 0.8vh → 1.0vh per feature
- Slow animStep cycle from 2s → 3s per step
- Each of the 5 product features gets more time to animate

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
HeroAnimation.tsx:
- Add text placeholder lines inside chat bubbles (white lines for user,
  orange lines for system) so bubbles aren't empty boxes
- Fix label progress calculation: use per-phase durations instead of
  hardcoded 2500ms (CONNECT=3000, FORM=3500, GUARD=3500, CHAT=11000)
  so labels fade properly through all phases

ProductVisuals.tsx — all 4 visuals now loop continuously:
- StoreVisual: resets to item 0 after 2s "complete" pause
- RuntimeVisual: resets step to 0 after 2s "complete" pause
- TokenVisual: cycles every 6s (4s keys + 2s locked display)
- PermissionsVisual: cycles PENDING→REQUESTING→ALLOWED every 6s

Product.tsx:
- Shorten text description boxes: title text-xl/2xl (was 2xl/3xl),
  description text-sm/base (was base/lg), padding p-5/p-6 (was p-6/p-8)
- Tighter margins throughout card content

globals.css:
- Add missing @Keyframes slide-right definition

lib/types.ts:
- Add 'ios' | 'android' to DownloadOption.type union
- Add optional ios/android fields to HeroData.downloads

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Security:
- Add security headers: X-Frame-Options DENY, X-Content-Type-Options
  nosniff, Strict-Transport-Security, Referrer-Policy, Permissions-Policy
- Fix XSS in chat markdown: escape HTML before inline rendering
- Add AuthGate component: dashboard routes redirect to /login if no token
- Upgrade Next.js 16.0.7 → 16.2.0 (patches security vulnerability)
- npm audit fix: 0 vulnerabilities remaining
- Remove console.error from AddressDisplay

Compliance:
- Add GDPR cookie consent banner with accept/decline
  (decline disables Google Analytics tracking)
- Update robots.txt: disallow dashboard routes from search indexing
- Add MIT LICENSE file

Accessibility:
- Add aria-label on Navbar logo link

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Layout fixes:
- ProblemStatement: center "THE PROBLEM" tag above the 40+ number with
  proper vertical spacing (mb-16 gap), reduce number size to prevent
  overlap, tighter divider padding
- MarketOpportunity: match divider dot and tag layout to rest of site
- Product section: increase scroll height to 700vh so last feature
  doesn't cut off, match background color to site (#050505)

Animation fixes:
- StoreVisual: rewrite with timeout chain instead of setInterval +
  setTimeout combo that caused drift and early loop termination
- RuntimeVisual: same timeout chain rewrite for reliable cycling
- TokenVisual: replace Date.now() % 6000 hack with proper phase
  state management for smooth transitions
- All product visuals now loop cleanly without cutting off

Visual consistency:
- All section divider dots now use full bg-primary (not bg-primary/50
  which appeared grey)
- bg-slanted-lines now uses CSS variable for background color to
  prevent visible seams between sections
- Shorten feature descriptions 2-5 to prevent text box overflow

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Hero animation:
- Fix "AGENT ACTIVE" label disappearing: add hold param to drawLabel
  so CHAT phase label fades in and stays visible instead of using
  sin(progress*PI) which fades to zero
- Slow chat progress denominator from 8000 to 10000 so all 4 bubbles
  (including typing indicator) fully appear before loop resets

Product visual animations:
- Speed up all cycles so a full loop completes within scroll dwell time:
  - StoreVisual: 800ms→600ms per item, 2s→1.5s pause (6.8s→5.1s cycle)
  - RuntimeVisual: 1200ms→900ms per step, 2s→1.5s pause (6.8s→5.1s)
  - TokenVisual: 4s→3s keys, 2s→1.5s locked (6s→4.5s cycle)
  - PermissionsVisual: 6s→4.5s cycle
  - Access key animation: 2.5s→2s
- Increase scroll step height from 1.0vh to 1.4vh per feature so each
  visual has more screen time before scrolling to next
- Increase section height from 700vh to 800vh to match

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Move smooth scrolling from CSS to data-scroll-behavior attribute
  on <html> element per Next.js 16 recommendation
- Prevents console warning about scroll-behavior detection

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Hero:
- Remove left-[10%] offset so canvas covers entire viewport
- Full-width gradient overlay (45% fade from left) keeps text readable
- Add top fade under navbar and stronger bottom fade
- Increase opacity from 60% to 70%

Product visual animations (rewritten):
- Replace timeout chains with single setInterval + modulo counting
  (same reliable pattern used on /product page)
- StoreVisual: 8-tick cycle at 700ms = 5.6s per loop with 2-tick pause
- RuntimeVisual: 6-tick cycle at 1000ms = 6s per loop with 2-tick pause
- TokenVisual: 10-tick cycle at 500ms = 5s per loop
- PermissionsVisual: 5s cycle with proper cleanup
- All visuals now cleanly loop with visible pause between cycles

New webapp pages:
- /workflows: workflow list with status (active/paused/draft), step
  counts, run history, triggers, play/pause/delete controls
- /memory: knowledge base with vector embedding counts, source types,
  tags, search, last-indexed timestamps
- Both added to sidebar navigation under AI section

Landing page:
- Add StatsBar section between Product and MarketOpportunity
  (59+ routes, 100% encrypted, 40+ apps replaced, 0 cloud dependency)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Hero animation (34s loop, 8 phases):
- FLOW (0-2.5s): particles drift freely, "AWAITING INPUT"
- SPARK (2.5-5s): hero particle pulls to center, "DETECTING SIGNAL"
- CONNECT (5-8s): connection lines radiate, "ESTABLISHING CONTEXT"
- FORM (8-11.5s): agents form chat boundary, "ISOLATING ENVIRONMENT"
- GUARD (11.5-15s): dashed boundary + scan line, "APPLYING GUARDRAILS"
- CHAT (15-24s): chat interface with bubbles, "AGENT ACTIVE"
- RESPOND (24-29s): checkmark + "DELIVERED" success, "TASK COMPLETE"
- COMPLETE (29-34s): session fades out, "SESSION CLOSED"

New webapp pages (23 total):
- /analytics: session metrics, hourly activity chart, top agents
  with usage bars, time range selector (24h/7d/30d)
- /profile: user avatar, account stats, details, 2FA status,
  API keys, sign out with token cleanup

Sidebar: added Analytics and Profile to Account section

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…page

Product animations (critical fix):
- Remove key={activeIndex} that was forcing remount of visual components
  on every scroll step, resetting their animation loops
- Now renders ALL 5 visuals simultaneously with opacity show/hide
  (opacity-100 for active, opacity-0 + pointer-events-none for inactive)
- Visuals mount once and their setInterval loops run continuously
- Smooth 500ms crossfade transition between features

Hero animation:
- Speed up chat bubble appearance: timeInChat multiplier 5→8
  so all 4 bubbles appear in first 60% of CHAT phase, leaving
  40% for the typing indicator to animate visibly

New webapp page:
- /agents: agent fleet management with 7 demo agents showing
  status (running/idle/error/stopped), model, sessions, memory
  usage, play/pause toggle, favorite star, search, status filter

Sidebar: added "My Agents" link to AI section

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Accessibility (a11y):
- Add aria-labels to all form inputs: login email/password, signup
  name/email/password, chat textarea, all search inputs (agents,
  memory, marketplace, sidebar, chat sessions)
- Add htmlFor attributes linking labels to input IDs
- Add aria-label on password toggle buttons

Type safety:
- Replace `icon: any` with proper React.ComponentType in NavItem
- Replace `any[]` with typed array for customAgents state
- Remove unnecessary @ts-expect-error directives (TS DOM lib now
  includes roundRect)
- Replace `(window as any)` with @ts-expect-error + explanation

Hydration fix:
- Security.tsx orbital animation caused SSR/client mismatch because
  `time` state advanced between server render and client hydrate
- Add `mounted` state guard: orbital elements only render after
  useEffect fires on client, preventing transform value mismatch
- Applies to both Security card orbits and Enterprise card orbits

Audit results: 0 vulnerabilities, 0 type errors, 0 console
statements, 0 broken links, 24/24 pages passing

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
All 5 product visuals were cutting off/looping too fast. Extended
each cycle to hold the completed state longer before resetting:

- StoreVisual: 8-tick → 12-tick cycle (6 ticks complete hold)
- RuntimeVisual: 6-tick → 10-tick cycle (6 ticks complete hold)
- TokenVisual: 10-tick → 16-tick cycle (8 ticks locked hold)
- PermissionsVisual: 5s → 8s cycle (4.5s allowed hold)

This gives each animation time to fully play through and pause
at the completion state before the next loop begins.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
…nimations

Branding:
- Replace all #9945FF (purple) with #E77630 (orange) across 14 files
- Replace all #00D4FF (cyan) with #F59E0B (amber) across 12 files
- Zero purple/pink/cyan remaining in entire dashboard
- Consistent orange branding throughout: dashboard, chat, marketplace,
  agents, analytics, workflows, memory, security, settings, profile

New features:
- Add Seeker (Solana phone) download option with Solana logo icon
- Add DemoPreview section between TractionBar and BuildWithUs — animated
  CLI terminal showing 6-step agent workflow
- TrustedBy: add Qwen 2.5, Phi-4, Ollama, LM Studio (12 LLMs total)
  and update Llama 3.3 → Llama 4

Product animations:
- StoreVisual: 700ms→1200ms tick, 14-tick cycle (16.8s total)
- RuntimeVisual: 1000ms→1500ms tick, 10-tick cycle (15s total)
- TokenVisual: 500ms→800ms tick, 18-tick cycle (14.4s total)
- PermissionsVisual: 8s→12s cycle (7s allowed hold)
- All animations now complete fully before resetting

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Replace all Tailwind purple/violet/pink/indigo/cyan class names with
  orange/amber equivalents in CockpitSidebar nav gradients
- Replace rgba(153,69,255,...) shadow colors with rgba(231,118,48,...)
  in chat and marketplace pages
- Replace #6633CC gradient endpoint with #F59E0B in chat bubbles
- Replace purple-500/50 orbit element with amber-500/50 in Security
- Replace bg-purple-400/10 with bg-amber-400/10 in memory tags
- Add Uplift Logo SVG to dashboard sidebar header (replaces Cpu icon)
- Add Uplift Logo to dashboard main page greeting (replaces Cpu icon)

Zero purple/violet/pink/indigo/cyan remaining in entire codebase.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Powered By section:
- Update model names to latest versions:
  - Mistral Large 2 → Mistral Large 25.03
  - Command R+ → Command A
  - DeepSeek-V3 → DeepSeek-R1
  - Qwen 2.5 → Qwen 3
  - Llama 4 → Llama 4 Maverick
- Add inline SVG logos for each provider: Anthropic, OpenAI, Google,
  Meta, Mistral, Cohere, xAI, Microsoft, DeepSeek (text), Qwen (text),
  Local (monitor icon for Ollama/LM Studio)
- Logos appear left of model name, grayscale→orange on hover

Linux icon:
- Replace ugly filled FA Tux SVG with clean stroke-based penguin icon
- Matches the visual weight of macOS/Windows/Android icons

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Product animations (all now 1s tick, ~16s cycles):
- StoreVisual: 16-tick (6s fetch + 10s hold)
- RuntimeVisual: 14-tick (4s steps + 10s hold)
- TokenVisual: 16-tick (7s keys + 9s locked)
- PermissionsVisual: 16s cycle (5s request + 11s hold)

Enterprise card:
- Replace generic blue shape with Uplift Logo in center
- Replace colored shapes with LLM provider letters (A/G/O/M/X)
  orbiting around the logo
- Orange accent instead of blue

CLI demo ("See It In Action"):
- Title centered above terminal, not beside it
- Added subtitle description
- Typing animation with blinking cursor
- Completed steps show green checkmarks
- Output lines color-coded (green for done, orange for active)
- Ambient glow effect at bottom
- Status bar with memory/CPU metrics
- 4s per step with proper transitions

Powered By logos:
- Simplify Meta and Cohere to clean text marks (complex SVGs
  didn't render properly at 20x20)
- Keep working SVGs: Anthropic, OpenAI, Google, Mistral, xAI,
  Microsoft

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Product scroll animations:
- Increase step height from 1.4vh to 2.5vh per feature
- Increase section from 800vh to 1300vh total scroll distance
- Each feature now has ~2.5 viewport heights of scroll before
  transitioning, giving animations 15-20s to fully play through

Provider logos (no more letters):
- Create shared ProviderLogos.tsx with proper SVG icons for all 12
  providers: Anthropic, OpenAI, Google, Meta, Mistral, Cohere, xAI,
  DeepSeek, Microsoft, Qwen, Local (monitor)
- TrustedBy marquee now uses real SVG logos instead of text
- Enterprise card orbiting elements now show actual provider logos
  (Anthropic, Google, OpenAI, Meta, xAI) instead of letter initials

Stats bar:
- Remove orange color from +/% suffixes — now same white as numbers
- Orange only appears on hover (entire stat turns orange together)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Provider logos (all proper SVG icons, no letters):
- Meta: infinity/lemniscate mark (stroke-based, clean at all sizes)
- Cohere: C arc (stroke-based)
- xAI: clean X letterform
- DeepSeek: stylized whale/fish silhouette
- Qwen: Q with diagonal stroke
- Local: terminal prompt icon (> _)
- Mistral: pixel grid pattern (cleaner rect-based version)
- Kept working logos: Anthropic A, OpenAI knot, Google G, Microsoft squares

Product scroll animation fix:
- Rework scroll math: remove +0.3 offset that caused early transitions
- Each feature now gets exactly 2 viewport heights of scroll distance
- Section total: 1100vh (5 features × 2vh + buffer)
- Transitions only happen at clean step boundaries
- First feature stays visible until user scrolls past 0.5vh offset
- scrollToFeature uses corrected offsets

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Hero animation RESPOND phase (Task Complete):
- Animated checkmark draws stroke-by-stroke (two-segment animation)
- Expanding green ring ripple effect
- Filled circle behind checkmark with glow gradient
- "TASK DELIVERED" text fades in after checkmark
- Stats line "14 files · 1 PR · 3.2s" appears after title

Hero animation COMPLETE phase (Session Closed):
- Chat interface fades out with dissolve
- 12 orange particles scatter outward from center
- Dashed rounded border with subtle pulse around text
- Orange scanning line oscillates through text area
- "SESSION TERMINATED" in orange with breathing opacity
- "memory encrypted · vault sealed" subtext

Hero animation CHAT phase enhancements:
- Red/yellow/green window dots (macOS style) instead of grey
- "UPLIFT SESSION" title text in header bar
- Green online indicator dot in top-right

Product scroll:
- Step height 3 viewport heights (up from 2)
- Section 1600vh total
- Each feature gets ~6-8 seconds of scroll time at normal speed

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Hero animation chat improvements:
- Replace grey placeholder lines with actual text in bubbles:
  "Refactor the auth module", "Analyzing 14 files...",
  "Use session tokens", "Done. PR #47 created."
- Typing dots now disappear when final response appears
  (was stuck showing dots forever)
- 5 messages total with proper user/system alternation
- Smaller bubble spacing for cleaner layout

Product scroll animation fix (root cause):
- Replaced unreliable offsetTop-based calculation with
  getBoundingClientRect() which is always accurate
- New approach: calculate scroll progress as percentage through
  section (0-100%), map to feature index
- Each feature gets exactly 1/5 of the total scrollable distance
- Section is 1600vh, so each feature gets ~320vh of scroll
- This should give each animation 10-15+ seconds of view time

Dashboard font alignment:
- All 12 dashboard page h1 headings changed from font-bold (700)
  to font-medium (500) with tracking-tight
- Now matches landing page headline style (SF Pro Display medium)
- Affected: app, chat, agents, builder, marketplace, workflows,
  memory, analytics, profile, notifications, security, settings

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Complete rewrite of the CHAT→RESPOND→COMPLETE sequence:

CHAT phase (14s-22s):
- Clean chat window with macOS dots, UPLIFT title, green online dot
- 4 messages with real text, typing dots on last message
- Typing dots disappear when RESPOND begins
- Smooth scale-in entrance

RESPOND phase (22s-27s):
- Final message replaces typing dots ("Done. PR #47 ready.")
- Green pill-shaped "DELIVERED" badge appears below chat window
  with animated checkmark drawing in from left
- Clean positioning below chat, no overlapping

COMPLETE phase (27s-32s):
- Chat fades out over first 60% of phase
- "SESSION TERMINATED" fades in with subtle orange breathing
- "vault sealed · memory encrypted" subtext
- Agent particles drift outward and fade
- Clean transition to empty canvas before loop restart

General improvements:
- Reduced total loop from 34s to 32s for tighter pacing
- Simplified particle movement logic (array-based targets)
- Cleaner alpha/opacity management throughout
- No visual artifacts between phase transitions
- Removed overlapping visual elements that caused messiness

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Product scroll: increase section height from 1600vh to 3000vh so
each of the 5 features gets 600vh of scroll distance (~6-8 seconds
at normal trackpad speed instead of ~2 seconds)

Hero animation: give RESPOND phase "DELIVERED" badge an opaque dark
background (rgba 5,5,8,0.95) so green text is readable over the
orange chat bubbles behind it. Previously used transparent green
fill that was invisible.

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Product scroll: Add 10-second minimum display time per feature.
The scroll handler now blocks index changes until MIN_DISPLAY_MS
has elapsed since the last change. This prevents Mac trackpad
momentum scrolling from blowing through features before their
animations complete. Clicking the nav dots bypasses the lock.

Hero animation fixes:
- Move DELIVERED badge from cy+140 to cy+160, clearing the chat
  window bottom edge (cy+130) by 30px instead of overlapping
- Increase chat message font from 7px to 9px (desktop) for
  readability
- Increase text opacity from 0.5/0.6 to 0.8/0.85 so messages
  are clearly legible
- Increase bubble background opacity for better contrast

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Hero animation:
- Reduce bubble spacing from 42px to 32px — no more huge gap
  between "Use session tokens" and the response bubble
- Move success indicator INSIDE the chat window as a 5th green
  status bar with checkmark + "PR #47 · 14 files · 3.2s"
- Remove external DELIVERED badge that was overlapping the chat
- Success bar only appears when showComplete=true and t>4.5

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
COMPLETE phase rewrite:
- Replace hard cutoff (cp < 0.6 with 1-cp*1.8 going negative)
  with smooth crossfade: chatAlpha = max(0, 1-cp*2.5) so it
  never goes negative and fades to zero at cp=0.4
- Session text fades IN starting at cp=0.2, reaching 0.8 at
  cp=0.6 — overlaps with fading chat for smooth crossfade
- No more abrupt disappear/reappear flicker

Fill empty chat space:
- Add progress bar below green status bar during RESPOND
- Bar fills over 1.5 seconds with green fill
- Shows "ENCRYPTING MEMORY..." while filling, then
  "SESSION READY TO CLOSE" when complete
- Fills the 70px gap that was empty below the status line

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
operatoruplift and others added 6 commits March 21, 2026 12:29
Product visuals now REMOUNT when activeIndex changes instead of
running all 5 in parallel and toggling opacity. This means:
- Each animation starts from tick 0 when its feature becomes active
- No more catching animations mid-cycle after scrolling
- Full 14-16 second loops play from the beginning every time

Previous approach rendered all 5 visuals simultaneously (hidden via
opacity-0) so their internal timers ran continuously in the
background. By the time a feature became visible, its animation
could be at any random point in the cycle.

Nav spacing:
- Added pt-8 (32px) gap between subhead text and nav list
- Increased nav item spacing from space-y-4 to space-y-5 (20px)
- Prevents description text from crowding the first bullet

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Product section: COMPLETE REWRITE of feature switching.

The scroll-linked approach was fundamentally broken because:
- Mac trackpad momentum scroll traversed 3000vh in seconds
- The 10s lock timer didn't prevent rapid index changes
- Visuals appeared to only play for ~2.4s before switching

NEW APPROACH: Timer-based auto-advance
- IntersectionObserver detects when section is in viewport
- Fixed 10-second interval cycles through features automatically
- Each visual remounts on index change (starts from tick 0)
- No dependency on scroll speed or scroll position
- Clicking nav dots still works for manual override
- Removed 3000vh min-height (now just min-h-screen)
- Removed sticky positioning (no longer needed)

Hero animation progress bar fix:
- Bar was instantly full because `t` was already maxed at 6
  when showComplete=true, making (t-4.5)/1.5 = 1.0 immediately
- Now passes actual respondProgress (0-1 over 4 seconds) from
  the render loop based on elapsed time since RESPOND started
- Bar visibly fills from left to right over 4 seconds

COMPLETE phase transition slowed down:
- Chat fades over 70% of phase (was 40%) — cp * 1.5 not 2.5
- Session text appears at 40% (was 20%) for longer overlap
- Much more gradual, cinematic crossfade

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
- Remove overflow-hidden from desktop container that was clipping
  the bottom border of the animation box
- Replace h-screen with min-h-screen + py-16 so content can
  expand beyond viewport without being cut off
- Remove h-full cascading from grid layout that forced content
  into a fixed viewport-height box
- Give animation box explicit h-[500px] instead of relying on
  h-full which collapsed when parent height was removed
- Remove py-24/pt-24/pb-6 that was eating into available space

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Product section layout:
- Stack animation box on top, description box below (vertically)
  instead of side-by-side 5/7 column split that was misaligning
- Animation box fixed at h-[420px], description box auto-height
- Both within flex-col layout for clean alignment
- Remove h-full cascading that was breaking layout

Scroll-triggered feature advancement:
- Wheel events on the product section advance to next/previous
  feature with 800ms cooldown to prevent trackpad rapid-fire
- Only active on desktop (>1024px)
- Ignores tiny deltaY (<30) from trackpad inertia
- Auto-advance timer still runs independently at 10s intervals

Waitlist/early access gate:
- Login page converted to waitlist signup form
- Shows "Join the Waitlist" with email input
- Success state shows "You're on the list" with social links
- Signup page redirects to login (waitlist)
- Navbar "Launch App" → "Join Waitlist" linking to /login
- Hero CTA "Launch App" → "Join Waitlist"
- Hero secondary "Sign Up Free" → "Explore Product"
- Dashboard still accessible via direct URL for demo/dev
  (AuthGate redirects to /login if no token)

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
The wheel handler was broken because:
1. Used { passive: true } so couldn't preventDefault()
2. Attached to section element which missed events
3. Page scrolled past the section before features could advance

New approach:
- Attach to window with { passive: false }
- Check if product section is in viewport (rect-based)
- preventDefault() to trap scroll while between features 0-4
- Let scroll pass through at boundaries (first feature + scroll
  up, or last feature + scroll down) for natural page flow
- Use ref for activeIndex to avoid stale closure state
- 600ms cooldown between advances

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
Waitlist backend:
- Add /api/waitlist POST route with Supabase integration
- Checks for duplicate emails before inserting
- Returns appropriate responses for existing/new signups
- Route is force-dynamic (server-rendered, not pre-rendered)

Supabase client:
- Lazy initialization via getSupabase() to avoid build-time
  errors when env vars aren't set
- Reads NEXT_PUBLIC_SUPABASE_URL and NEXT_PUBLIC_SUPABASE_ANON_KEY
- .env.local.example added for reference

Login page:
- Now calls /api/waitlist POST instead of localStorage
- Graceful fallback: shows success even if API fails (UX)

Setup required:
1. Create Supabase project
2. Create 'waitlist' table: id (uuid, pk), email (text, unique),
   created_at (timestamptz, default now())
3. Add env vars to .env.local and deployment platform
4. Enable RLS with insert policy for anon role

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
@vercel
Copy link
Copy Markdown

vercel bot commented Mar 21, 2026

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated (UTC)
website Ready Ready Preview, Comment Mar 23, 2026 2:58am

…-audit-merge

# Conflicts:
#	src/sections/DeveloperDocs.tsx
#	src/sections/Security.tsx
#	src/services/dataService.ts
@operatoruplift operatoruplift merged commit 3130d55 into master Mar 21, 2026
1 of 2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant