02App and website · 2026 Interactive
KeptLet
Landlord compliance that keeps itself.
A phone app that keeps a self-managing landlord in England legally compliant: every certificate in date, every deadline remembered, every home ready for the national landlord database. Below is the app's own rule engine. Drag time forward and watch it work.
- Role
- Product strategy, UX and UI, mobile and back-end engineering, billing
- Platforms
- iOS, Android, web
- Stack
- Expo · React Native · Supabase · RevenueCat · Stripe
- Status
- Launching at keptlet.app
Drag the timeline or press play.Switch gas or a licence on and off to see which rules apply.Renew anything that turns amber or red.
- 9Certificates and checks tracked per home
- 60·30·7Day reminder cadence before every expiry
- 3Billing rails: App Store, Google Play, Stripe
- 1Codebase for iOS, Android and the web
The problemNine deadlines, nine penalties
Self-managing landlords juggle gas safety, EICR, EPC, deposit protection, alarms, licensing, right to rent and legionella, each with its own expiry and penalty. New law, the Renters' Rights Act and the landlord database, adds deadlines most people will hear about too late.
The designOne light per home
Every property gets a traffic light: red for missing or expired, amber within 60 days, green when done. Typing an issue date fills in the usual expiry, and a photo or PDF attaches the evidence. The app works out which rules apply from the home's region, gas supply, letting status and licence type, so the landlord only sees what matters to them.
Beyond certificates, it plans rent reviews to the once-a-year and two-month rules, tracks rent day by day with arrears nudges, walks the end of a tenancy through to the 10-day deposit deadline, and maps each home's route to EPC C with costs and grants.
EngineeringRules as plain, tested functions
Every rule lives in a pure domain layer with its own tests, so the interface never decides what is legal. This is the function behind every light in the app, and the clock above runs a port of it.
export const DUE_SOON_DAYS = 30;
export const UPCOMING_DAYS = 60;
export function itemState(requirement, certificate, todayDate) {
if (!certificate) return { state: requirement === 'required' ? 'missing' : 'suggested' };
if (!certificate.expiresOn) return { state: 'recorded' };
const daysLeft = daysBetween(todayDate, certificate.expiresOn);
if (daysLeft < 0) return { state: 'expired', daysLeft };
if (daysLeft <= DUE_SOON_DAYS) return { state: 'dueSoon', daysLeft };
if (daysLeft <= UPCOMING_DAYS) return { state: 'upcoming', daysLeft };
return { state: 'ok', daysLeft };
}
One Expo codebase ships to iOS, Android and the web. Supabase handles sign-in by emailed code and syncs records and documents between devices. Billing runs through RevenueCat on the stores and Stripe on the web, with a cheaper reminders-only plan. A compliance pack exports every certificate, deadline and log as a PDF to share with an agent or council.
ProductFair by design
Cancelling is designed to be fair: the cancel screen shows what is coming up, offers reminders only, and leaves the account read-only with a free full export.



What this means for your project
- Regulated domainsTurning legislation into clear rules, states and reminders people can trust.
- Product designCalm interfaces that hide complexity until it matters.
- Full-stack mobileExpo, React Native and Supabase with sync, auth and documents.
- SubscriptionsRevenueCat and Stripe across three billing rails, with a fair cancel flow.