LumoraSaaS Landing
A one-page SaaS landing with a living aurora and a product window that ships its own experiment
Not on sale yet
This one is almost ready to buy. Leave your email and we will tell you the moment it is.
- Pay once, lifetime license
- Free updates for life
- Full source: HTML / CSS / JS + React
Live preview
About
A landing page for a software product that wants to look as considered as the product itself. Aurora opens on a sky that is actually moving — soft lights drifting, curtains of rays, a faint grid — and under the headline sits a glass app window that does its job on a loop: the activation chart draws in, live experiments arrive, a cursor clicks "Ship winner" and a toast confirms it.
- Big, tight display type with an aurora gradient on the words that matter, all from the visitor's own system fonts
- A bento grid where every tile has a small scene of its own: signals flowing into a hub, an A/B race, a brief that writes itself, a roadmap card hopping columns
- A "how it works" line that draws itself as you scroll, numbers that count up, and a pricing switch where the figures roll to their yearly price
- Frosted glass everywhere — navbar, cards, tiers — tuned for both light and dark
- Believable copy for a fictional product analytics company, Lumora, with its own mark and eight invented customer wordmarks, ready to replace with yours
Two builds are included. The HTML version is one page you can open and edit in any text editor
and host anywhere. The React version is a complete Vite + TypeScript project: every word lives in
one content.ts file, and npm install && npm run dev starts it.
Features · 15
- One complete page: floating glass navbar, aurora hero with an animated product window, "trusted by" logo band, bento features, three steps, count-up metrics, testimonial carousel, pricing with a comparison table, FAQ, closing call to action, footer with newsletter sign-up
- Two builds: static HTML/CSS/JS you edit in place, and a ready-to-run Vite + React + TypeScript project
- The hero's product window draws its chart, fills its table, and a cursor clicks "Ship winner" — pure CSS on a loop
- Seven feature tiles, each with its own micro-animation, and a progress line that draws itself as you scroll through the steps
- Monthly / yearly switch: prices roll to the new figure, with a "Save 20%" pill, a featured tier and a plan comparison table
- Testimonial carousel with buttons, dots, arrow keys and swipe — and no autoplay
- Navbar frosts as you scroll and lights up the section being read
- Light and dark themes: follows the system, remembers the visitor's choice
- Newsletter field with clear, specific error messages; point it at your mailing-list service with one attribute
- Every word, price and answer of the React build lives in one typed content.ts
- No images, no web fonts, no external requests: the brand, logos and artwork are CSS and inline SVG
- Every colour, font, radius and timing is a CSS custom property
- Responsive from 320 px phones to wide desktops
- Script and stylesheet together weigh under 18 KB gzipped
- No runtime dependencies besides React in the React build
How to use it
Open index.html in a text editor: every word on the page is written there, so it is what search
engines read. It links two files that sit next to it:
<link rel="stylesheet" href="saas-landing.css" />
<script src="saas-landing.js" defer></script>- Prices: each
<span data-price data-monthly="29" data-yearly="23">29</span>is a price per seat per month; keep the monthly one as the text. The status lines the switch announces aredata-status-monthly/data-status-yearlyon the[data-pricing]element. - Features: copy one
<li class="sl-tile">.sl-tile--large,--wideor--smallsets its size; the scene inside issl-visual--signals,experiments,copilot,realtime,roadmap,privacyorintegrations. - Logos: one
<li class="sl-wordmark sl-wordmark--a">per company;atohare eight different marks. Swap in<img>tags for real logos. - Numbers:
<span data-countup="99.99" data-decimals="2" data-suffix="%">99.99%</span>counts up todata-countup(alsodata-prefix). Keep the final value as the text. - FAQ: one
<details name="faq">per question. The sharednamekeeps one open at a time. - Testimonials: one
[data-carousel-slide]per quote; the dots are drawn for you.
The script wires everything by data attribute once the page has loaded. For markup you add later,
call SaasLanding.init(container); it returns a function that undoes it. The readable source is in
src/ (src/core/ holds one small module per behaviour) if you want to rebuild it.
The download is a complete Vite + React 19 + TypeScript project:
npm install
npm run dev # http://localhost:5173
npm run build # static files in dist/src/app/content.ts— every word, price, quote and answer, typed. Edit here and the page follows.src/app/sections/— one component per section;src/app/ui/— the atoms and molecules they share.src/core/— the behaviour (theme, menu, scroll-spy, pricing, carousel, count-up…), the same code the HTML build runs, attached with theuseBehaviourhook.src/saas-landing.css— the one stylesheet both builds use.
It works with React 18 and 19.
App.tsx starts with "use client", so the App Router can render it as is. Copy src/app,
src/core and src/saas-landing.css into your project (for example under components/lumora/,
keeping the three side by side), then:
// app/page.tsx
import { App } from "@/components/lumora/app/App";
export default function Page() {
return <App />;
}Give <body> the id top in app/layout.tsx (the logo and "Back to top" link to it). To apply a
saved theme before the first paint, copy the small inline script from index.html into the
layout's <head> and add suppressHydrationWarning to <html>.
With no action, the form only checks the address and shows the thank-you message, so the demo
works offline. To collect sign-ups, give it the address of your mailing-list or form service —
Buttondown, ConvertKit, Formspree, or your own endpoint that accepts a form POST and answers with a
2xx status:
<form class="sl-newsletter__form" action="https://formspree.io/f/your-form-id" method="post" novalidate …>In React, set action in NEWSLETTER in content.ts. The fields are sent as form data with
Accept: application/json; if the service answers with an error, visitors are asked to try again.
The hidden _gotcha field catches simple spam bots. Error messages live on the field:
data-error-required and data-error-email.
Everything is a custom property on :root, at the top of saas-landing.css. Colours are written
as light-dark(light, dark), so one line covers both themes.
| Property | What it changes |
|---|---|
--sl-bg, --sl-bg-raised, --sl-bg-sunken, --sl-text, --sl-muted |
Page, card and text colours |
--sl-line, --sl-line-strong, --sl-glass, --sl-glass-strong, --sl-glass-edge, --sl-shadow |
Hairlines, frosted glass and shadows |
--sl-violet, --sl-pink, --sl-cyan, --sl-green |
The aurora colours, used in the sky, gradients and highlights |
--sl-gradient, --sl-gradient-text |
The brand gradient, and its higher-contrast version for text |
--sl-aurora-strength |
How strongly the aurora shows (set per theme) |
--sl-cta, --sl-on-cta, --sl-cta-glow |
Main button, its text and its glow |
--sl-focus, --sl-danger, --sl-success |
Focus ring, form errors, success states |
--sl-font-display, --sl-font-body, --sl-font-mono, --sl-display-weight |
Type |
--sl-radius-xl, --sl-radius-lg, --sl-radius, --sl-radius-sm, --sl-max, --sl-gutter, --sl-section-space |
Shape and layout |
--sl-ease, --sl-reveal-duration, --sl-aurora-duration, --sl-mock-loop, --sl-feature-loop, --sl-marquee-duration |
Motion |
Fonts: the page uses system fonts only, so it loads nothing. To use your own, add an
@font-face (or a font service's stylesheet) and set, for example,
--sl-font-display: "Your Display", sans-serif;.
Theme: data-theme="light" or "dark" on <html> fixes the starting theme; without it the
visitor's system decides. The toggle remembers a visitor's choice in localStorage
(saas-landing-theme).
Both builds are static files: upload the HTML folder, or the React project's dist/ after
npm run build, to Netlify, Vercel, Cloudflare Pages, GitHub Pages or any web host.
Ask about this product
Not sure it fits your project? Ask — the answer comes from this page.
Changelog
1.0.0First releaseLatest
One-page SaaS landing in two builds: static HTML/CSS/JS and a Vite + React + TypeScript project. Living aurora hero with an animated product window, bento features, scroll-drawn steps, count-up metrics, testimonial carousel, monthly/yearly pricing with a comparison table, FAQ, newsletter sign-up, light and dark themes.
- Fixes and new features land behind the same download, which always serves the latest version.
You might also like
- TemplateLanding page
Tidelock — Launch Waitlist
A coming-soon page with orbiting planets, a split-flap countdown and a waitlist that hands every signup a referral link
9.000đ
- TemplateLanding page
Tidelock — Launch Waitlist
A coming-soon page with orbiting planets, a split-flap countdown and a waitlist that hands every signup a referral link
$4.90


