Skip to content

Revamp UI with new design system and landing page updates#7

Open
srexrg wants to merge 25 commits into
mainfrom
revamp/foundation-landing
Open

Revamp UI with new design system and landing page updates#7
srexrg wants to merge 25 commits into
mainfrom
revamp/foundation-landing

Conversation

@srexrg

@srexrg srexrg commented Jun 28, 2026

Copy link
Copy Markdown
Owner

Summary

A full revamp of the WebSight marketing front: upgraded the stack to latest stable, established a new emerald light design system, and rewrote the landing page end-to-end (including an interactive 3D visitor globe) to match the approved Claude Design mockups. Frontend-only - the data model, auth, tracker.js, and API routes are untouched.

What's included

Phase 0 - Stack upgrade (own commits, independently verifiable)

  • Next.js 15 → 16.2.9, React → 19.2.7, Tailwind → 4.3.1, TypeScript → 6.0.3
  • Migrated ESLint to Next 16 native flat config; verified async request APIs

Phase 1 - Design system foundation

  • Emerald light tokens (#0E9C6E) in app/globals.css; shared keyframes
  • Fonts: Hanken Grotesk (UI) + JetBrains Mono (numbers); Phosphor icons
  • Restyled shadcn primitives; Logo / LiveBadge brand atoms

Phase 2 - Landing rewrite (13 sections, data-driven)

  • Announcement bar, nav, hero (with product-shot mockup), trust bar, 6-feature grid, globe highlight, live-activity highlight, one-line install (copy button), stats band, pricing with monthly/annual toggle, testimonial, final CTA, footer
  • Centralized copy/data in lib/landing/content.ts; retired 7 old components (~1,860 lines removed)
  • Interactive 3D globe (three-globe + @react-three/fiber v9) themed to an emerald dark-spotlight, mounted in the globe highlight (ssr:false client boundary)

Verification

  • npx tsc --noEmit, npm run lint, npm run build all green
  • Visually verified in-browser across every section (hero, globe, pricing, etc.)
  • Reviewed task-by-task plus a final whole-branch review; the one functional bug it found (blank hero mockup icons) is fixed and re-verified

srexrg added 25 commits June 28, 2026 18:30
Import the approved Claude Design output ('Websight UI revamp project') as a
versioned reference for the revamp: the final emerald sidebar app
(WebSight.dc.html, 8 screens + d3 globe), the landing page, and the earlier
A/B dashboard exploration, plus a distilled design-system.md and README.

Files are reference snapshots, not runnable app code.
Plan for the first revamp slice - upgrade to latest stable (Next 16, React
19.2, TS 6, Tailwind 4.3), establish emerald light design tokens + Hanken
Grotesk/JetBrains Mono + Phosphor, and rewrite the landing page to match
design/WebSight-Landing.dc.html. Frontend-only; data layer untouched.
- react + react-dom: 19.0.0 -> 19.2.7
- @types/react: 19.0.2 -> 19.2.17
- @types/react-dom: 19.0.2 -> 19.2.3
- tailwindcss: ^4 -> 4.3.1
- @tailwindcss/postcss: ^4 -> 4.3.1
- typescript: ^5 -> 6.0.3

TS6 strictness fix: added global.d.ts with `declare module '*.css'` to
resolve TS2882 on the plain CSS side-effect import in app/layout.tsx.
TypeScript 6 now requires type declarations for non-JS/TS side-effect
imports; this minimal declaration satisfies the check without changing
runtime behavior.

@supabase cookie type error (TS7006 on setAll cookiesToSet parameter)
did not surface - no changes to utils/supabase/ files needed.
- Bump next 15.2.8 -> 16.2.9 and eslint-config-next 15.2.3 -> 16.2.9
- No async-API changes needed: server.ts already awaits cookies(),
  [domain]/page.tsx already awaits params/searchParams, middleware.ts
  uses request.cookies (no async needed), route.ts uses createClient()
- tsconfig.json updated by Next 16 build: jsx preserve -> react-jsx,
  added .next/dev/types to include (mandatory Next 16 change)
- tsc: no errors; build: 12 routes generated, all green
- next lint broken (ESLint circular JSON / flat-config incompatibility);
  expected, tracked for task 0.4
- Bump Radix primitives: accordion@1.2.14, dialog@1.1.17,
  dropdown-menu@2.1.18, select@2.3.1, slot@1.3.0, tabs@1.1.15,
  tooltip@1.2.10

- Fix ESLint setup for Next 16:
  - Change lint script from `next lint` (removed in Next 16) to `eslint .`
  - Rewrite eslint.config.mjs to use native flat config by importing
    eslint-config-next 16's built-in flat config exports directly
    (no FlatCompat needed; the package now ships native flat config arrays)
  - Add ignores for lib/database.types.ts and public/** (non-UTF-8 files)

- Trivial lint fixes in pre-existing code:
  - Remove 5 unused imports in TrackingScript.tsx
  - Remove unused Monitor import in AnalyticsOverview.tsx
  - Remove unused FaInstagram import in Footer.tsx
  - Remove orphan FaGithub expression in Navbar.tsx
  - Fix unescaped apostrophes in Cta.tsx and hero.tsx
  - Replace any types with Record<string, unknown> in analytics.ts
  - Convert useEffect+setState mount patterns to lazy useState init
    in WorldMap.tsx and login-button.tsx

Remaining: 1 pre-existing lint error in AnalyticsClient.tsx
(react-hooks/set-state-in-effect: prop-sync pattern, non-trivial refactor,
file likely rewritten in a later phase).

Verification: tsc PASS, build PASS, lint 1 error (reported above).
Port the ANNOUNCEMENT and NAV blocks from WebSight-Landing.dc.html.
AnnouncementBar: dark #0E1310 strip, emerald pill via bg-brand, ArrowRight
in #5FD3A6 accent, links to /auth.
Navbar: sticky bg-white/86 backdrop-blur, max-w-[1180px] container,
Logo component, navLinks from lib/landing/content, Sign in + Start free
Button (bg-brand). No hardcoded #0E9C6E. Server components, no use client.
Port hero section from design/WebSight-Landing.dc.html: radial emerald
glow, OPEN SOURCE pill with blinking dot, 66px/800 headline with
text-brand "visitors", subhead, two CTAs (emerald solid + white
outline), trust ticks with CheckCircle fill, and product-visual card
(browser chrome, mini sidebar nav, 4 metric cards in font-mono,
visitors area-chart SVG, live panel with Globe size=120). Server
component; no "use client". All emerald via bg-brand/text-brand/
bg-accent/text-[#0B7E58] tokens.
Create TrustBar component with 12k+ eyebrow and logo row from content data.
Rewrite Features with brand eyebrow, 44px heading, and 3-col tinted card grid.
Creates GlobeHighlight (id="globe", Globe size=320, wsFloat animation, globePoints checklist)
and RealtimeHighlight (LiveBadge, liveFeed rows with iconMap icon chips, dark CTA to /auth).
All emerald color via bg-brand/text-brand/bg-accent tokens; build/tsc/lint green.
Install.tsx: client component with syntax-colored code block, clipboard
copy button with 1.5s "Copied" feedback, and 3 numbered steps from content.
StatsBand.tsx: server component dark band with 4 mono stats from content.
Replaces decorative SVG globe in GlobeHighlight with a three-globe +
@react-three/fiber WebGL globe, emerald-themed with animated arcs and
auto-rotation. Also fixes pre-existing TS errors in iconMap typing.
Dark radial spotlight backdrop for contrast on the light page, deep emerald
globe with brighter hex-dot continents and mint/white glowing arcs + markers.
…d clipboard

Replace web-font class strings in miniNav with @phosphor-icons/react/dist/ssr
components (ChartLine, Broadcast, GlobeHemisphereWest, FileText, UsersThree,
GearSix) rendered via <item.Icon size={14} weight={...} />. Also add .catch(()=>{})
to the clipboard.writeText promise in Install.tsx to silence unhandled rejections
on insecure origins.
@vercel

vercel Bot commented Jun 28, 2026

Copy link
Copy Markdown
Contributor

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

Project Deployment Actions Updated (UTC)
websight Ready Ready Preview, Comment Jun 28, 2026 3:54pm

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