Context
Privacy Policy is live at /legal/privacy (#169, #172). Terms of Service was deliberately left out per #169 ("remove TOS placeholder pending LLC"). With Stripe Checkout, Portal, webhooks, promo codes, and the /pricing page all live, the only thing keeping us from charging real customers is TOS.
This is the single biggest gating item for monetization launch.
Scope
- Decide entity posture:
- Form an LLC and have TOS reflect the entity, or
- Ship a sole-proprietor TOS in your real legal name (faster path, valid in most US states)
- Draft
/legal/terms covering at minimum:
- Acceptable use (no scanning domains you don't own/control? — or explicitly allow third-party scans since DNS is public)
- Service availability disclaimer (no SLA on the free tier; best-effort on Pro)
- Subscription terms: $19/mo, monthly billing, cancel-anytime via Stripe Portal, 30-day refund window (mirrors
/pricing FAQ)
- Liability cap (subscription fees paid in last 12 months)
- Governing law / venue
- Account termination conditions
- Data handling pointer to
/legal/privacy
- Add
renderTermsPage() in src/views/legal.ts next to renderPrivacyPage()
- Wire route in
src/index.ts and add to sitemap
- Add footer link next to "Privacy" in
src/views/html.ts:176 and :661
- Surface in
/pricing FAQ ("By subscribing you agree to the Terms")
- Add a TOS-acceptance checkbox or "by clicking Subscribe you agree" notice on the Subscribe button at
/dashboard/billing/subscribe
Out of scope
- DPA / GDPR addendum (defer until first EU paying customer asks)
- AUP as a separate document (fold into TOS for v1)
Why this matters
Without a TOS we have no contract with paying customers, no liability cap, no defined venue, and no enforceable subscription terms. Stripe disputes and chargebacks become hard to defend.
Context
Privacy Policy is live at
/legal/privacy(#169, #172). Terms of Service was deliberately left out per #169 ("remove TOS placeholder pending LLC"). With Stripe Checkout, Portal, webhooks, promo codes, and the/pricingpage all live, the only thing keeping us from charging real customers is TOS.This is the single biggest gating item for monetization launch.
Scope
/legal/termscovering at minimum:/pricingFAQ)/legal/privacyrenderTermsPage()insrc/views/legal.tsnext torenderPrivacyPage()src/index.tsand add to sitemapsrc/views/html.ts:176and:661/pricingFAQ ("By subscribing you agree to the Terms")/dashboard/billing/subscribeOut of scope
Why this matters
Without a TOS we have no contract with paying customers, no liability cap, no defined venue, and no enforceable subscription terms. Stripe disputes and chargebacks become hard to defend.