AstroSaaS

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.

3 previews
Desktop homepage1 / 3
Desktop captureTop of page

Actual screenshot captured by the server browser.

All pages & views 3

Screenshots show visual appearance; interactive behavior may differ.

Recorded 2026-10-04View source

What stands out

A quick read of the recorded project description.

01

Nine pages covering home, about, pricing, blog, contact, terms, privacy and 404

02

Scroll-pinned sections and motion such as WebGL particles and debris fields are loaded on demand by native JavaScript modules

03

The blog uses Markdown files and supports callout blocks, numbered steps and diagrams, with the filename as the article URL

04

Content is centralized in JSON and Markdown, and colors and type scales are adjusted uniformly through CSS custom properties

05

Respects prefers-reduced-motion, and page content remains readable when JavaScript is disabled

06

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.

AstroSaaS

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. 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. 2

    Set site in astro.config.mjs to your own domain so canonical links and social images point to the correct address

  3. 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. 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. 5

    When deploying, import the repository and keep the default configuration, or publish the dist/ directory generated by npm run build directly

Read repository instructions

License & source material

Usage conditions & limitations

Free to use · keep license notice

This 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

Fonts: Figtree, Fragment Mono and Climate Crisis, SIL Open Font License 1.1.

Original README
https://github.com/agnilem/lapse-astro/blob/main/LICENSEhttps://github.com/agnilem/lapse-astro/blob/main/README.md

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.
Report a correction

Explore similar templates

Compare previews and descriptions within the same stack and category.