Inspiration

In a Korean jeonse lease, the tenant hands the landlord a lump-sum deposit instead of monthly rent and gets it back at the end, if the home is still worth more than the debts on it. Between June 2023 and August 2026, 40,936 tenants were officially recognized as jeonse-fraud victims; 76% were under 40 (Ministry of Land, Infrastructure and Transport, Sep 7, 2026). 509 of the applications were rejected because the tenant had never secured opposing power (move-in registration and a fixed date). The protection existed, but the timing was missed. 547 of the victims were foreign residents, who face the same contracts in a second language. The government does offer pre-contract consulting (registry analysis and a review of the contract wording), but in person, at 8 centers nationwide (same source).

Most of that loss is decided the night before signing: by what is already registered on the home, and by a few lines of special terms. We wanted a tool a tenant could trust that night, at home, as a first pass before that consulting. A legal chatbot is not that tool: a made-up article is worse than no answer, because the tenant signs on it.

What it does

  • Four short screens: home and deposit; what the registry shows; what the landlord showed you; the special terms (paste them, Korean or English).
  • A report that starts with the number: how much of the deposit is not covered if the home is auctioned, drawn as "who gets paid first". The auction price is a slider, because it is an assumption, not a statistic.
  • Every warning wears a seal. Open it to see the official Korean text and the official English translation (Korea Legislation Research Institute), with the quoted passage highlighted in both, plus the version date and a link to law.go.kr.
  • Safer special terms, ready to paste. For example: "The lessor will not create any mortgage until the day after the tenant's move-in registration."
  • "Where Jeonse Guard stays silent." Clauses and questions it will not judge, each with the reason. When the answer depends on rules outside its corpus, even the silence cites the article that explains why.

How we built it

  • Grounded or silent. Rules never write free text about the law. They carry a citation {law, article, quote}. A grounding gate shows a finding only if every quote appears word for word in the official Korean text of that article; otherwise it becomes a silence. The numbers used in the math, such as the Seoul small-deposit limit of ₩165,000,000, are stored as statute quotes, and a test parses each amount out of the quote.
  • Official sources only. The statute corpus (Housing Lease Protection Act and its Enforcement Decree, Korean text and official English translation) comes from the National Law Information Center Open API. A serverless function in Seoul re-checks every cited article against the live text. If an article changes, the findings that cite it are withheld.
  • AI that is not allowed to cite. Special terms first go through a rule matcher that is tuned for precision. For clauses it misses, Gemini acts only as a classifier: a JSON-schema enum limits it to one of seven clause types or "none". The citations come from our verified library, never from the model, and AI-sorted findings are labelled "check the clause yourself".
  • Engineering. TypeScript with Clean Architecture (domain → application → adapters → infrastructure, enforced by a test). 85 Vitest tests, written from an acceptance-criteria spec (SPEC.md); each test name carries its AC number, and GitHub Actions runs typecheck, tests and build on Node 22 and 24 for every push. Vite front end with no framework and no external fonts. Deployed on Vercel.

Measured

  • 100% of the citations shipped in the rule library verify against the official text (tested against both the captured API payload and the shipped snapshot).
  • Clause classifier on 60 blind clauses that were never used for tuning: rules alone, precision 1.00 / recall 0.50; rules then constrained AI, precision 0.98 / recall 1.00; 0 AI labels outside the taxonomy.

Challenges we ran into

  • Making silence useful. A tool that refuses to answer is easy to build; we needed one that says why. The hardest case was small-deposit priority: the thresholds depend on when the first mortgage was registered (Decree Addendum of Feb. 21, 2023), so the tool stays silent on that case and cites the addendum.
  • Korean legal text in a global UI: we pair every Korean article with its official English translation and show which version the translation was made from.
  • Keeping the AI useful without letting it speak about the law.

Accomplishments that we're proud of

  • No warning in the product can be shown without a verified quote. This is a structural guarantee, backed by tests, not a prompt instruction.
  • The Seoul-region live check against law.go.kr, with drift turning into silence.
  • An honest evaluation that includes where the rules fail.

What we learned

Grounding is a product decision, not only a model setting. If you design the output so that every claim is a pointer into an official text, "no hallucination" becomes something you can test.

What's next

  1. Read the registry extract (등기부등본) PDF so tenants don't type the senior-debt numbers by hand.
  2. A human-labelled clause set built with a legal clinic.
  3. More of the law in the corpus (Civil Act lease articles, the Special Act on jeonse-fraud victims), each article adding findings and never unverified text.

Tech stack & credits (declared per Rules §4)

TypeScript, Vite, Vitest, esbuild, Node.js, GitHub Actions (CI), Vercel (static + Node functions, Seoul region), National Law Information Center Open API (law.go.kr), Google Gemini API (gemini-3.5-flash-lite with fallbacks, classifier only). AI tools used during development: Claude Code (Anthropic) as a coding assistant; Gemini generated the blind evaluation set. All project code was written during the hackathon.

Demo video: narrated in Korean, in my own voice (no AI voice), with English subtitles burned in.

Built With

Share this project:

Updates

Submission history