The problem nobody warns you about
When you rent out a property, you take on a stack of legal deadlines you never agreed to and mostly can't see. Return a tenant's security deposit late and you don't just owe the deposit back — in Texas, for example, a landlord who wrongly withholds an $1,800 deposit can end up owing around $5,449 once penalties are added. Forget to renew a rental registration and the fines accrue monthly. Send a required notice one day late and the whole process can restart.
None of these deadlines announce themselves. There's no bill in the mail, no calendar invite. Most small landlords learn the rules by breaking one.
Meanwhile the same paperwork hides money going the other way — a lease coming up for renewal below market rent, a fee they're entitled to charge and forget to.
Big property management companies have staff for this. Someone renting out four houses has a shoebox of PDFs and a hope that nothing's overdue.
That's who JellyPad is for.
What it does
JellyPad reads a landlord's paperwork, works out every deadline hiding in it, sorts those deadlines by how much money is on the line, and writes the required letter in advance. The landlord opens the app, sees the two or three things that actually need them today, and taps approve.
Two kinds of things show up:
- Money at risk — a deadline that costs you if you miss it.
- Money to collect — a window that's worth something if you act in it.
Jelly, the assistant inside the app, always shows its work: which document it read, which rule applies, how it got to that date. And it never sends anything. It drafts; the landlord decides.
How we built it
Gemini does the reading. Code does the math.
That split is the most important design decision in the product. Gemini, running on Vertex AI, reads uploaded documents — which are scanned, photographed, inconsistently formatted, and never the same twice — and pulls out the facts: who, which property, how much, what dates. It also writes the plain-English draft of each letter.
But Gemini never calculates a legal deadline. That happens in a separate, deterministic engine that takes the extracted facts and applies written rules to them. Same inputs, same output, every single time. We enforced that separation in the build itself — the rules code is blocked at the linter level from even importing the AI code, so nobody can accidentally blur the line under deadline pressure. If a date is wrong, someone can get sued. That's not a place for a model to improvise.
The rules are organised as swappable packs per jurisdiction, so a new state is a new pack of rules, not a rewrite of the product.
The rest of the stack: Next.js on Google Cloud Run across three services (public site, demo, and the real app), Postgres for data, Stripe for payment, and Cloud Scheduler running the whole portfolio through the engine every night — whether or not anyone logs in.
Nothing gets edited after the fact. When a deadline is recalculated, the old record isn't overwritten; a new one supersedes it. The history stays intact, which matters for something a landlord may one day need to point at in a dispute.
Challenges we ran into
Being right is the entire product. A reminder app can be approximately right. Something that tells you a legal deadline cannot. We found an incorrect statute reference sitting in an early design file and realised that if it were ever copy-pasted into a real component, it would reach a real landlord. So we added a hard check that blocks specific known-bad references from ever appearing in shipped code. Correctness had to become something the build enforces, not something we remember.
Choosing depth over breadth. It was tempting to claim national coverage. We deliberately built and verified one state's rules properly first, with the architecture already set up to scale, rather than shipping shallow coverage everywhere and being wrong in forty-nine places.
Turning down easy growth. We cut two things on principle: paying people to sign up, which recruits people who want the payment rather than the product; and letting vendors pay for placement in recommendations, which would quietly break the promise that the app is on the landlord's side.
What we're proud of
- An AI product that asks permission. Every action waits for a human tap, with the reasoning shown, not hidden behind a chat bubble.
- A correctness boundary enforced by tooling rather than good intentions.
- An agent that runs every night on its own schedule — the value accrues while the customer is asleep, not only when they think to open an app.
What we learned
Small landlords don't want more software to check. They want to be told the two or three things that matter today, with the reasoning attached, and one tap to handle it. The willingness to show the work — and to ask before acting — turned out to matter more than any individual feature.
What's next
More rule types in the first state, more customers through direct relationships, then the same engine pointed at additional states — each one a new set of rules, not a new product.
Try the Demo
https://demo.jellypad.ai \( Password: gojelly \)
Built With
- clerk
- cloud-scheduler
- drizzle-orm
- eslint
- gemini-api
- google-cloud-run
- next.js
- postgresql
- react
- stripe
- tailwind-css
- typescript
- vertex-ai

Log in or sign up for Devpost to join the conversation.