Inspiration
Most renters sign leases nobody has checked. Leases are long, dense and full of legal wording, and a lawyer is out of reach for most students and first-time renters. So unfair clauses go unchallenged, mostly because nobody knows which ones to question. We wanted to build the second pair of eyes a renter doesn’t have: something that points at the clauses worth a closer look, shows the evidence, and helps you do something about it.
What it does
LeaseGuard is a California lease review app. You sign in, paste your lease, and get clarity, evidence and action.
Clarity: every clause is color-coded green, amber or red, with a plain-language reason. Evidence: risky clauses link to a named California tenant-rights rule and its source. You can open “See why” on any flagged clause to see the reason, the rule, and the source. Action: LeaseGuard drafts a polite letter to your landlord that cites the linked rule. You can edit it, and you have to approve it before it can be copied.
Your saved reviews are tied to your account and stay separate from other renters. LeaseGuard provides general information, not legal advice.
How we built it
LeaseGuard is built in Jac end-to-end, using JacHammer to prompt and build it one layer at a time.
Graph: User, Lease, Clause, and Rule nodes are linked as a Jac graph. Our live graph has 35 nodes and 50 edges, including 15 sourced California rules. A clause connects to the rules it triggers, so “which rule applies here” is an edge. Walkers: analyze_lease goes through the lease and tags each clause. draft_letter writes the landlord letter from the selected clause and its linked rule. byLLM: byLLM () gives us typed risk levels, rule matching, and letter drafting through OpenRouter. Typed outputs keep the model’s answers inside our schema. Jaseci: built-in authentication and persistence handle sign-in and saved leases, so there’s no separate database. Challenges we ran into Keeping the AI from inventing law. A model asked about tenant law will happily sound confident. We constrained rule matching to a sourced list and let the model answer “none” when nothing fits. Keeping a human in control. A generated letter shouldn’t go out unchecked. We made Copy unlock only after approval, and editing a letter resets that approval. Making the output readable. A wall of legal analysis wouldn’t help a first-time renter, so we boiled each clause down to one color and one plain-language reason. Building on a free API tier. We designed the app to run on OpenRouter’s free tier so it can run for submission. Accomplishments that we’re proud of A working end-to-end flow: sign in, paste a lease, see color-coded clauses, open the evidence, draft and approve a letter. Every flagged clause traces back to a named rule and its source. A human approval step that can’t be skipped. A full app built in Jac, with the graph, walkers, byLLM and Jaseci each doing real work. What we learned Jac’s graph model fits this problem well. Linking clauses to rules as edges made the evidence trail natural to build and to explain. Typed LLM outputs make AI features far easier to build safely than free-form text. Letting the model say “none” is as important as getting it to say something. Building one layer at a time with JacHammer kept the project simple enough to finish. What’s next for LeaseGuard More cities by swapping in new rule sets. PDF upload and local languages. Partnerships with tenant unions and campus housing offices.


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