Nine pages covering home, about, pricing, blog, contact, terms, privacy and 404
lapse-astro — Astro SaaS Template
By agnilem
Lapse is a dark Astro theme for AI and SaaS products, with nine pages, scroll-driven motion sections, a Markdown blog and a contact form, output as static files without a UI framework.
Explore the design
Compare the page layouts and mobile experience. Open any screenshot for a closer look.
Actual screenshot captured by the server browser.
All pages & views 3
Screenshots show visual appearance; interactive behavior may differ.
What stands out
A quick read of the recorded project description.
Scroll-pinned sections and motion such as WebGL particles and debris fields are loaded on demand by native JavaScript modules
The blog uses Markdown files and supports callout blocks, numbered steps and diagrams, with the filename as the article URL
Content is centralized in JSON and Markdown, and colors and type scales are adjusted uniformly through CSS custom properties
Respects prefers-reduced-motion, and page content remains readable when JavaScript is disabled
Fonts are self-hosted via Fontsource, and the build output is static files
Template Details
Lapse is an Astro theme characterized by dark visuals and scroll motion, aimed at showcase sites for AI and SaaS products. It provides nine pages: home, about, pricing, blog list and article pages, contact, terms, privacy and 404. The home page consists of a hero (with product screenshots and three stat cards), "What changes", "How it works", pricing, testimonials, FAQ and latest articles; the about page includes a logo marquee, rule rows and team toggles; the pricing page has monthly/yearly toggles, a sticky comparison table and FAQ; the blog supports category tags, a recent-articles hover accordion and Markdown articles with callout blocks, numbered steps and diagrams.
Motion is implemented with native JavaScript modules, loaded on demand via data-fx attributes, with no UI framework runtime. Scroll-pinned sections, a vertical marquee over a WebGL line field, a closing CTA made of 45,000 particles that can be pushed by the cursor, and the WebGL debris field on the 404 page all fall into this category. The theme respects prefers-reduced-motion and keeps page content readable when JavaScript is disabled. The fonts Figtree, Fragment Mono and Climate Crisis are self-hosted via Fontsource.
Content and styling are separated: site navigation, the closing CTA and the footer are in src/content/site.json, per-page copy is in src/content/pages/*.json, plans and prices are in src/content/plans.json, and blog posts are src/content/blog/*.md, where the filename is the URL. Colors and type scales are custom properties in tokens.css and global.css, and components maintain their own styles. Content schemas validate fields at build time.
Limitations: the contact form relies on an external form service endpoint, and without configuration it only shows sending, sent and error states; third-party assets such as demo images, fonts and icons must be checked separately under their respective licenses; external services such as domains, hosting and analytics may incur costs.
Is it right for your project?
Use Cases
- Building a marketing site with pricing and a blog for an AI or SaaS product
- Product landing pages that need scroll motion and WebGL visual effects
- Content-driven sites that maintain articles in Markdown and page copy in JSON
- Product showcase pages deployed to any static hosting platform
Suitable For
- AI and SaaS product teams that need a dark, motion-led visual style
- Front-end developers who want static Astro output without introducing a UI framework
- Projects that manage site content in JSON and Markdown and need build-time field validation
Getting started & customization
Use these recorded setup notes alongside the repository instructions for your chosen version.
- 1
Run npm install to install dependencies, npm run dev to start locally on port 4321, and npm run build to output to dist/
- 2
Set site in astro.config.mjs to your own domain so canonical links and social images point to the correct address
- 3
The contact form requires PUBLIC_FORM_ENDPOINT to point to Formspree, Basin or a self-hosted API; without it, only form states are shown
- 4
The optional environment variables PUBLIC_VERCEL_ANALYTICS and PUBLIC_STORE_BADGE are off by default and can be enabled in .env as needed
- 5
When deploying, import the repository and keep the default configuration, or publish the dist/ directory generated by npm run build directly
License & source material
Usage conditions & limitations
Free to use · keep license noticeThis entry covers the free version under the MIT license in the public repository; the free scope is the code of that version and does not mean that external services or third-party assets are free.
Must comply with when using
- You may use, modify, commercialize and distribute the code of this version free of charge.
- When distributing copies or substantial portions of the code, retain the original author's copyright notice and the complete MIT license notice.
- The code is provided as is; warranties and limitations of liability are governed by the original license and applicable law.
Additional costs & items to verify
- The README mentions the Formspree form service; real submissions require configuring a service endpoint, and its usage quotas and fees must be checked separately.
- Demo images, fonts, icons and other third-party assets must be checked under their respective licenses and cannot be judged solely by the MIT license of the code.
- External services such as domains, hosting, databases, payments or AI may incur additional charges.
- The contact form requires an external form service endpoint (such as Formspree, Basin or a self-hosted API); when this environment variable is not set, the form only shows sending, sent and error states and does not actually submit data.
- Enabling this variable loads Vercel Web Analytics and Speed Insights, which are third-party external services and may involve accounts and fees.
- The fonts Figtree, Fragment Mono and Climate Crisis use the SIL Open Font License 1.1, which differs from the project's MIT code license and must be followed separately under their respective licenses.
View Original Text Basis
Permission is hereby granted, free of charge
Original License Text
| `PUBLIC_FORM_ENDPOINT` | URL the contact form posts to (Formspree, Basin, your own API). Unset, the form only shows its states. |
Original README
| `PUBLIC_VERCEL_ANALYTICS` | `true` loads Vercel Web Analytics and Speed Insights |
Original README
https://github.com/agnilem/lapse-astro/blob/main/LICENSEhttps://github.com/agnilem/lapse-astro/blob/main/README.mdFonts: Figtree, Fragment Mono and Climate Crisis, SIL Open Font License 1.1.
Original README
Compiled by DeepSeek based on repository license and README ·2026-10-04. Results only cover the materials read; dependencies, images, fonts, and subsequent term changes are subject to their respective original texts.
Project checks & description sources
Template Information
- Source platforms
- GitHub
- Documentation and maintenance reference score
- More documented · 80 / 100
- Technologies
- Astro
- Website type
- SaaS
How this score is calculated
Our heuristic uses license records (up to 30), a demo link (12), a preview (10), stars (15), recorded maintenance (15), description completeness (8), feature records (5) and classification data (5). It is not a code, security or performance test, or a Google score. A link does not establish tested functionality.
What to verify for this project
- Repository update recorded
- 2026-10-04
- Screenshot last checked
- 2026-10-04
A demo link is listed. Check it with your own content and viewport sizes; its presence does not confirm that forms, authentication or payments work.
The catalog identifies Astro as the primary stack. Check the actual dependency manifest and lockfile for versions and hosting requirements. These notes use recorded metadata, not a code audit or a deployment test.
Use a selection guide →How this description was prepared
AI-assisted description based on catalog records and repository material. Repository authors are not automatically the reviewers of this description.
Review declaration: [email protected] · 2026-10-05
Inspect the recorded source material
SHA-256: fe8617aa4e9b733f9d266d6149391d045de4e3267c880f9375254c4c8156b708
2026-10-04T20:28:05.068Z
Source file / repository# Lapse, an Astro theme for AI and SaaS products
A dark, motion-led, nine-page site for an AI product: scroll-pinned sections that explain what the product changes and how it works, a pricing page with a plan comparison, a Markdown blog, and a contact form. Static output, no UI framework: every interaction is a small vanilla JavaScript module.
Live demo: [lapse.startfrom.co](https://lapse.startfrom.co)
## Features
- Hero with a product screenshot and three stat cards
- "What changes": a pinned section whose four cards slide sideways as you scroll, each with a small UI panel
- "How it works": a pinned stage where four step cards fly in and out, with the step number lighting up
- Pricing with a monthly and annual toggle, a sticky comparison table (tabs on tablet and phone) and an FAQ
- Testimonials on an endless vertical ticker over an animated WebGL line field
- A closing call to action whose image is rebuilt from 45,000 particles the cursor can push and fling
- About page with a logo ticker, a pinned "rules" row and a team switcher with spring motion
- Blog with category tabs, a hover accordion of recent posts, and Markdown articles with callouts, numbered steps and figures
- Contact form with sending, sent and error states
- A WebGL shard field on the 404: the stream parts around the cursor, clicks send shockwave rings, press and hold gathers the shards into a cloud
- Honours `prefers-reduced-motion`; every page reads correctly with JavaScript off
- Figtree, Fragment Mono and Climate Crisis, self-hosted through Fontsource
## Getting started
```sh
npm install
npm run dev # http://localhost:4321
npm run build # outputs to dist/
npm run preview # serves dist/
```
## Pages
| Route | What it is |
| --- | --- |
| `/` | hero, what changes, how it works, pricing, testimonials, FAQ, latest posts |
| `/about` | story, logos, rules, team |
| `/pricing` | plans, comparison table, FAQ |
| `/blog` | featured post, category tabs, post grid |
| `/blog/[slug]` | one page per file in `src/content/blog/` |
| `/contact` | contact form and next steps |
| `/terms`, `/privacy` | legal pages |
| `/404` | not found |
The closing call to action and footer appear on every page except the 404.
## Editing content
- `src/content/site.json`: navigation, closing call to action and footer.
- `src/content/pages/*.json`: the copy for each page, one file per page.
- `src/content/plans.json`: plans, prices (monthly and annual) and features, shared by the home and pricing pages.
- `src/content/blog/*.md`: one file per post; the filename is the URL. The frontmatter holds the card fields (title, category, date, read time, excerpt, cover, author). The body is Markdown: a blockquote whose first line is bold becomes a callout, an ordered list becomes numbered steps, and `<figure class="figure">` draws a bar chart. The schema in `src/content.config.ts` fails the build on a typo.
- Images live in `public/assets/`.
- Colours and the type scale are custom properties in `src/styles/tokens.css` and `src/styles/global.css`. Each component keeps its own styles.
## Project structure
```
src/
components/ Nav, Footer (CTA + footer), StoreBadge
sections/ one component per page section
blog/ post meta and badges
ui/ Button, Icon, ContactSubmit
content/ site.json, plans.json, pages/, blog/
icons/ SVG icons
layouts/Base.astro head, nav, footer, scripts
lib/ blog helpers, links
pages/ routes
scripts/entry.js loads each effect on demand from data-fx="name"
scripts/fx/ one module per behaviour
styles/ tokens.css, global.css
```
## Environment variables
All optional and off by default. See `.env.example`.
| Variable | Effect |
| --- | --- |
| `PUBLIC_FORM_ENDPOINT` | URL the contact form posts to (Formspree, Basin, your own API). Unset, the form only shows its states. |
| `PUBLIC_VERCEL_ANALYTICS` | `true` loads Vercel Web Analytics and Speed Insights |
| `PUBLIC_STORE_BADGE` | `true` shows the fixed store badge in the corner |
## Deploy
Any static host works: build with `npm run build` and publish `dist/`. On Vercel or Netlify, import the repository and keep the defaults. Set `site` in `astro.config.mjs` to your domain so canonical URLs and social images point at it.
## Licence
MIT, see `LICENSE`. Every effect is original code with no runtime dependencies.
Fonts: Figtree, Fragment Mono and Climate Crisis, SIL Open Font License 1.1.
Explore similar templates
Compare previews and descriptions within the same stack and category.

astro-theme-stone
Stone is a free and open-source Astro theme for business, marketing, SaaS, and startup websites. Built with Tailwind CSS and Alpine.js, it offers more than 5 pages and over 15 blocks, light and dark modes, and experimental View Transitions.
Astro · SaaS

pinwheel-astro
Pinwheel Astro is a free multipurpose SaaS theme from Themefisher built with Astro, TailwindCSS, and TypeScript.
Astro · SaaS

bigspring-light-astro
Bigspring Light Astro is an open-source Astro theme by Themefisher for SaaS and marketing websites. It offers over 10 pre-designed pages (home, blog, pricing, contact, FAQ, privacy policy, terms, 404), customizable colors, fonts, menus, social links, and SEO meta tags.
Astro · Blog

Astro-idol
Astro Idol is a micro SaaS landing page template built with Astro and Skeleton CSS, released under the MIT license.
Astro · SaaS

automark-astro
Automark is a free Astro theme from Themefisher for GoHighLevel white-label SaaS resellers and agencies.
Astro · SaaS

mizu-light-astro-theme
Mizu Light is an Astro product launch template by Oxygenna for SaaS products, digital launches, and early-stage startups. It provides prebuilt pages, modular blocks, and reusable UI components, with light/dark modes, Tailwind CSS styling, content collections for blogs, and centralized configuration.
Astro · Blog
