-
-
Point the phone at the lease. The scan runs on the phone, and the lease text stays there.
-
The report: a risk score of 91, and 11 of 16 clauses that could cost you money.
-
Where a local law caps a clause, Redline cites the statute.
-
A reply to the landlord: a formal email or a short WhatsApp message, friendly or firm.
-
Renter Pro from the RevenueCat offering: $4.99 lifetime or $1.99 monthly, restored with no account.
-
The report screen on the release build, 1179x2556 with no device frame.
-
App icon, 1024x1024.
A lease arrives with twenty minutes to sign it. The clauses that take your money are the quiet ones: a deposit of ten months' rent, a refund that waits ninety days, repairs deducted "in the landlord's sole discretion".
Redline reads the lease on your phone and marks each of those clauses in red, with what it costs you and, where a local law caps it, the statute that says so.
The lease text never leaves the phone. No account, no login, no upload.
Entering the Next Gen Award. Student entry: a working open-source Android app (MIT), a demo video and a public repository. There is no store listing, as the Next Gen rules allow.
Try it in one minute
- Install
app-release.apkfrom the latest release, or scan the QR code in the README. Android asks twice because the app is not on Google Play: allow installs from the browser, then on the Play Protect warning tap More details, then Install anyway. - Tap No lease to hand? Open a sample lease, or photograph your own lease.
- Turn on airplane mode first if you like. The scan runs entirely on the phone.
What you see
The scan
Photograph a paper lease inside the app. CameraX feeds ML Kit text recognition about five times a second, boxes appear over the text it has found, and the screen tells you when the page is steady enough to shoot. The shutter answers with a haptic tap, the torch is one button away, and a long lease goes in page by page in one scan.
The lease card
The start screen holds a lease drawn in 3D. Drag it and the page tilts under your finger; let go and it springs back.
The report
A 0 to 100 gauge drawn with a sweep gradient leads the report: Low risk under 30, Caution from 30 to 59, Toxic clauses from 60. Under it, a four-part bento grid splits the risk into Financial exposure, Privacy & entry, Termination traps and Maintenance shifting. A money card works out the sums the lease itself states, so the tenant reads a figure, not a warning. Where a clause has no effect under local law, a separate card names the law.
The document
The whole lease, set in Source Serif, with every flagged clause marked by an irregular highlighter stroke drawn under the text, the way a pen would. Tap a mark to open the finding. A rail down the right edge shows where every mark sits in the lease.
The reply
Finding the problem is half the job; the tenant still has to answer the landlord. Redline drafts the reply as a formal email or a short WhatsApp message, in a friendly or a firm tone.
Two flats, side by side
Scans are saved on the phone. Open two and a butterfly chart sets their risk against each other across all four categories.
Why the result can be trusted
On-device OCR. ML Kit text recognition 16.0.1 is bundled in the APK (about 11 MB per ABI), so a scan works in airplane mode. The recognised text stays on the phone. Google's ML Kit library does send its own usage diagnostics (device, app and performance data, not the text), as its data disclosure states.
38 deterministic rules, not a model. The same lease gives the same findings on every run, and every flag points at the exact sentence that triggered it. When no rule fires, the report says "Nothing matched" rather than calling the lease clean.
Six places, cited. You choose the place, and the rules shift their thresholds to it and cite the law behind each one. Cells marked * are cited in the report but not yet checked automatically.
| Place | Deposit cap | Deposit back within | Late fees | Law cited |
|---|---|---|---|---|
| California | 1 month (2 for small landlords) | 21 days | Fair estimate of the landlord's cost | Civil Code 1950.5, 1671 |
| New York | 1 month | 14 days | Only after 5 days late; lesser of $50 or 5% * | General Obligations Law 7-108, Real Property Law 238-a |
| Massachusetts | 1 month | 30 days | None until rent is 30 days overdue * | M.G.L. ch. 186 § 15B |
| Texas | No cap | 30 days after a forwarding address | 12% (four homes or fewer) or 10%, after 2 full days | Property Code 92.103, 92.019 |
| England | 5 weeks' rent (6 at £50,000 a year or more) * | 10 days from agreement | No fee; interest at most 3% over base rate, once 14 days late | Tenant Fees Act 2019 |
| India | None in most states; the Model Tenancy Act proposes 2 months, Tamil Nadu sets 3 | No figure used | No figure used | Model Tenancy Act 2021 |
Why not paste the lease into a chatbot? A chatbot can read a lease well and name the law, but the lease then sits on an AI company's servers. A lease carries names, home addresses, signatures, phone numbers and often the bank account the rent is paid into, and anything stored on someone else's server can be kept, reviewed or exposed in a breach. The chatbot's answer can also change from one run to the next, and nobody publishes how often it is right. Redline keeps the lease on the phone, gives the same flags every time, and its measured accuracy is below. That also makes it usable by someone checking a lease for another person, such as a tenant-union volunteer, who often cannot upload it.
Why rules instead of sentence embeddings. Thirty real lease clauses (twenty costly, ten benign) were labelled first, with two pass marks set in advance: the right category for at least 14 of 20, and true-positive margins at least three times the benign margin.
| Approach | Costly clauses caught | Margin ratio (pass needs 3x) |
|---|---|---|
| Embeddings (Universal Sentence Encoder, two runs) | 8 / 20 | 1.14x and 0.89x |
| Deterministic rules | 20 / 20, benign 10 / 10 | not applicable |
The embeddings did worse than miss: a clause saying the tenant pays their own electricity scored higher than sixteen of the twenty costly clauses. The rules were written with those thirty clauses open, so that result only proves they fire where intended. The fairer numbers come from clauses they had never seen: 4 of 5 costly and 5 of 5 benign on a held-out set written afterwards in different wording, 18 of 26 costly on United States leases and 13 of 19 on English ones. The misses and their reasons are written up in eval/README.md.
How RevenueCat is used
The paywall comes after the scan, never before it. Charging before the scan would mean charging for something the reader has had no reason to want yet.
- Free: the scan, the gauge and its band, the bento grid, the clause counts, the first flagged clause in full (with its citation once a place is set), the money card's figures, and the topic of every locked finding ("Your deposit", "Leaving early"). A lease with one flagged clause, or text that is not a lease, is shown in full for free, so the paywall never asks money for nothing.
- Paid: every other clause in full, the email and WhatsApp drafts, sharing and PDF export, and the side-by-side comparison.
- Renter Pro, from the RevenueCat offering. One plan, sold as lifetime or monthly, opens every lease plus the comparison. Prices come from the store through the offering, never from the code. The price line says "From" only when more than one plan is on offer, and "paid once" only when no plan recurs.
- Entitlement
full_report, read fromCustomerInfo. The report is drawn locked until that answer arrives, and the buy button stays disabled while ownership is being checked, so nothing flashes open and nobody pays twice. - Restore without an account. The RevenueCat app user ID is a salted SHA-256 hash of
ANDROID_ID, which Android fixes per signing key, user and device. On an Android 16 emulator (API 36), Renter Pro survived an uninstall and reinstall: the report opened in full on first launch, before Restore was tapped. - Offline first. Without a network the scan still runs and the paywall waits. An
UpdatedCustomerInfoListenerapplies entitlement changes the moment they arrive, with no restart. - No keys in the repo.
BuildConfig.REVENUECAT_API_KEYcomes fromlocal.properties. Built without one, the app compiles and scans, and the paywall stays locked.
Accessibility
- Motion follows Android's animator duration scale, so with animations off, transitions are skipped.
- Screens are render-tested at 200% font scale.
- Rows and buttons hold a 48dp minimum touch target.
Built from a clean clone
git clone https://github.com/Kesav2k04/redline
cd redline
./gradlew :app:assembleDebug
./gradlew :app:testDebugUnitTest
230 unit tests, 0 failures, and the repo builds from a clean clone with no keys.
Built With
- android
- jetpack-compose
- kotlin
- material-3
- revenuecat