Site
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.
In short
For small property managers
No lease renewal slips past its date
Leaseclock tracks the end date of every lease across your units, and renews it in two clicks.
$29 a month
- Up to 200 units
- Every lease, renewal and end date
- For property managers and leasing coordinators
| Page | Address | Written from |
|---|---|---|
| Home | leaseclock.com | Who each Offer is for, and what each Verb does |
| Pricing | leaseclock.com/pricing | Each Offer's name, price and limits |
| Terms | leaseclock.com/terms | Your business details in Stripe, and each Offer's price and billing period |
| Privacy | leaseclock.com/privacy | The personal data your Nouns keep, and who processes it |
llms.txt | leaseclock.com/llms.txt | Every Noun, Verb, docs page and agent address |
| OpenAPI | leaseclock.com/openapi.json | Every 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.com | From the definition |
|---|---|
| Leaseclock Pro, $29 a month | name: Leaseclock Pro and price: { amount: 29, currency: USD, unit: month } in Offer/pro.mdx |
| Up to 200 units | limits: { Unit: 200 } |
| For property managers and leasing coordinators | personas: Property manager, Leasing coordinator |
| "Move the end date forward" and "End the lease", in the feature list | Each 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.comAdd 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
> 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 unitsThe 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:
---
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.
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 pushDefaults 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.
---
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.