Now let me build the landing page. I'll create a dark-themed, full-screen vertical slide experience with snap scrolling and a dot navigation system. Let me start with the globals, layout, and components.
Now let me update the tailwind config for the fonts and create the components:
Now let me create all the components. I'll create the vertical dot navigation, individual slide sections, and the main page:
Now let me create the main page that ties everything together with scroll snap and the vertical navigation:
Now let me also add the PWA manifest:
Your landing page is ready! It features a dark-themed, full-screen vertical slide experience with 5 sections (Hero, Features, About, Testimonials, Contact) that snap into view as you scroll or swipe. A vertical dot navigation sits on the right edge — hovering reveals section labels, and clicking any dot smoothly scrolls to that section. The active dot stretches into a pill shape with the green accent color. The design uses Inter for body text and Space Grotesk for headings, all built mobile-first with 44px touch targets and iOS Safari optimization.
Let me check exactly what I built by reading the main page and components:
Here's the slide system I used -- it's a pure CSS + native browser API approach, with no third-party slide library:
snap-y snap-mandatory on the container, snap-start snap-always on each section) -- This is the core mechanic. The browser natively snaps each full-screen section (h-dvh) into view when you scroll or swipe, making it behave like slides.scrollIntoView({ behavior: "smooth" }) -- When you click a dot in the navigation, it smoothly scrolls the corresponding section into the viewport.VerticalNav component -- A fixed-position dot navigation on the right side that shows which section is active (the dot stretches into a pill), reveals labels on hover, and allows click-to-navigate.No external libraries like Swiper, FullPage.js, or Embla were used. It's entirely built on native CSS Scroll Snap and browser APIs, which keeps the bundle small and performance fast.
You can send messages while the preview loads