DocsPricingBlogChangelog
Examples use: Lease

Every code example, in your word.

Sign inStart building

Site

Open

Leaseclock's home page, pricing page, terms, privacy policy, llms.txt and OpenAPI file are served at leaseclock.com. They are written from the definition and set in your theme, and you can replace any page with your own.

Open leaseclock.com

In short

PageAddressWritten from
Homeleaseclock.comWho each Offer is for, and what each Verb does
Pricingleaseclock.com/pricingEach Offer's name, price and limits
Termsleaseclock.com/termsYour business details in Stripe, and each Offer's price and billing period
Privacyleaseclock.com/privacyThe personal data your Nouns keep, and who processes it
llms.txtleaseclock.com/llms.txtEvery Noun, Verb, docs page and agent address
OpenAPIleaseclock.com/openapi.jsonEvery API operation, with its input and response

Sign in and Start free on every page open the app at leaseclock.com/app. Subscribe on the pricing page opens Stripe Checkout for that Offer.

Leaseclock's site

A property manager who lands on leaseclock.com sees Leaseclock's teal logo, then Pricing, Docs and Blog in the header, and Sign in and Start free on the right. The headline reads "No lease renewal slips past its date." Beside it, the Leaseclock Pro card shows $29 a month, up to 200 units, and a Subscribe button. The footer links Terms, Privacy, llms.txt and OpenAPI.

Each line on the page comes from a line of the definition:

On leaseclock.comFrom the definition
Leaseclock Pro, $29 a monthname: Leaseclock Pro and price: { amount: 29, currency: USD, unit: month } in Offer/pro.mdx
Up to 200 unitslimits: { Unit: 200 }
For property managers and leasing coordinatorspersonas: Property manager, Leasing coordinator
"Move the end date forward" and "End the lease", in the feature listEach Verb's does in Noun/Lease.mdx
The privacy policy's line "Leaseclock stores each renter's email address"renter: { type: email, required: true }
Teal buttons and links, set in Inter"brand": "#0F766E" and "font": "Inter" in theme.json

The site follows the definition on the next request. Add a second Offer and the pricing page shows two cards. Add a phone field to Lease and the privacy policy lists phone numbers.

Serve it on your domain

Add the domain once. The CLI prints the DNS record to set, waits for it and issues the certificate.

npx saas.dev domain add leaseclock.com
Add this record at your DNS provider:

  leaseclock.com   CNAME   cname.saas.dev

Checking DNS... found.
Certificate issued for leaseclock.com.
leaseclock.com serves Leaseclock.

The whole product shares the domain. The site is at /, /pricing, /terms and /privacy, the app at /app, the API at /api, the docs at /docs, the blog at /blog and the MCP server at /mcp.

Agent files

llms.txt tells an agent what Leaseclock is and where everything lives. It needs no key.

curl https://leaseclock.com/llms.txt
leaseclock.com/llms.txt
# Leaseclock

> Leaseclock tracks lease renewals for property managers and leasing coordinators.

## Docs

- [Lease](https://leaseclock.com/docs/lease.md): unit, renter, endsOn, status. Verbs: renew (move the end date forward), end (end the lease).
- [Unit](https://leaseclock.com/docs/unit.md): label, building.
- [API](https://leaseclock.com/docs/api.md): REST at https://leaseclock.com/api

## For agents

- MCP server: https://leaseclock.com/mcp (tools: search, fetch, do)
- OpenAPI: https://leaseclock.com/openapi.json
- SDK: npm i leaseclock
- CLI: npx leaseclock

## Pricing

- [Leaseclock Pro](https://leaseclock.com/pricing): $29 a month, up to 200 units

The OpenAPI file describes every operation the API serves, so any client generator or agent framework can call Leaseclock.

curl -s https://leaseclock.com/openapi.json | jq '.paths | keys'
[
  "/api/leases",
  "/api/leases/{id}",
  "/api/leases/{id}/end",
  "/api/leases/{id}/renew",
  "/api/units",
  "/api/units/{id}"
]

Both files are written from the current version of the definition, so a new Verb appears in them the moment it is served.

Change a page

A file in pages/ replaces the page at the same address. Write it in MDX to change the words and keep the generated layout:

pages/index.mdx
---
headline: Every lease renewal, on time
lede: Leaseclock watches the end date of every lease across your units and renews it in two clicks.
---

Write it in React to replace the whole page. The header, footer, theme and Stripe Checkout stay generated, and you maintain only the page you wrote.

pages/pricing.tsx
import { PricingCards } from 'saas.dev/site'

export default function Pricing({ offers }) {
  return (
    <main>
      <h1>Pricing</h1>
      <PricingCards offers={offers} />
      <p>Managing more than 200 units? Write to sales@leaseclock.com.</p>
    </main>
  )
}

Push, and leaseclock.com serves the new page on the next request.

npx saas.dev push

Defaults and overrides covers the theme, fields, views and screens the same way.

Add a page

A file in pages/ with a new name adds a page. pages/about.mdx is served at leaseclock.com/about, set in Leaseclock's theme, listed in the sitemap and linked from the footer.

pages/about.mdx
---
title: About Leaseclock
---

Leaseclock started inside a property management office that lost two renewals in one winter.

Questions

Who writes the words on the home page?

SaaS.Dev writes them from your definition: who each Offer is for, what each Verb does and what each plan costs. They change when the definition changes, except for the lines you set in pages/.

Are the generated terms and privacy policy ready to publish?

They name your business from your Stripe account, your prices and billing periods, the personal data your Nouns keep, and Stripe as your payment processor. Have your lawyer read them before you sell in Live, and put their text in pages/terms.mdx or pages/privacy.mdx to replace either page.

Can I keep my existing marketing site?

Yes. Add the product on a subdomain with npx saas.dev domain add app.leaseclock.com, keep your own site at leaseclock.com, and point its Sign in and pricing buttons at app.leaseclock.com.

How do search engines and agents find it?

Every page has its own title, description and social image, and is listed in leaseclock.com/sitemap.xml. Agents read llms.txt, and every page has a Markdown copy at its address plus .md, such as leaseclock.com/pricing.md.

Where do the prices come from?

From your Offers. Each Offer is one pricing card, and its price is the one Stripe charges, so the page and the checkout always agree.

Contents