Inspiration

I've spent a lot of nights on cold-case podcasts. The cases that stay with me are the ones where everyone was sure, and everyone was wrong.

At NJIT's IXR Lab, I rebuilt a real crime scene in VR so students could learn how investigators read a scene. Building it showed me how much of an investigation is interpretation.

In 2014, a filmmaker was linked to a murder because his father's DNA came close to the suspect's on a genealogy site. His own DNA cleared him. (PBS)

That same technique, building family trees out from distant DNA cousins, has helped solve over 1,000 cases. About 16,000 people in the U.S. are still waiting for their names. (NamUs) Now AI is starting to build those trees. We wanted a tool that makes the tree prove itself before anyone knocks on a door.

What it does

KinFold works a synthetic cold case (every person and record is fake).

An unknown person shares 220 cM of DNA with Ruth Mercer. The records point to three of her nieces, but nieces usually share 1,201–2,282 cM. KinFold rules out all three and shows the gap on screen.

Then Gemini reads two new records and proposes 13 facts. KinFold keeps a fact only if its quote appears word for word and names every person and year. It keeps 11, rejects 2 and shows why.

Those verified facts open a new branch, and KinFold finds Lena Hale. As Ruth's first cousin once removed, 220 cM fits. An AI agent then tests seven possible relationships against the DNA. It can suggest, but it can't change a lead.

Finally, one click stamps the case onto Solana. If anything changes later, KinFold shows the case no longer matches its stamp.

How we built it

  • React + TypeScript: family tree, DNA range bars, evidence folders, activity log
  • FastAPI + Python: a rule-based engine that decides every lead; no AI decides
  • Gemini: reads records; our verifier checks every quote
  • LangChain deepagents: an investigator agent limited to seven tools
  • Solana devnet: tamper-evident case stamps
  • MongoDB Atlas: case storage
  • Ped-sim + Shared cM Project: DNA ranges (a fit check, never a probability)

Challenges we ran into

  • Gemini rejected our schemas twice. We simplified what we sent and kept our own checks strict.
  • A Windows line-ending bug made the AI step vanish. Saved Gemini responses stopped matching, and Lena Hale never appeared. We caught it at 2 AM during a live Solana stamp.
  • Honesty over flash. "Anchored" shows only for a real, matching transaction, and we never show fake confidence scores.

Accomplishments that we're proud of

  • The "obvious" answer collapses on screen, and a better lead comes out of records the AI couldn't fake.
  • Every AI claim either quotes its source or is visibly rejected.
  • Gemini, LangChain, MongoDB and Solana all working in one weekend, and the demo still runs offline.

What we learned

A perfect quote can still be misread, and one DNA number can fit several relationships. The best thing software can do here is show its work clearly enough that a person can catch it being wrong.

What's next for KinFold

  • Paper to proof: photograph an old record and link every claim to its exact spot on the image (in progress)
  • Real sign-in and signed activity logs
  • Smarter name matching without guessing
  • Testing on large simulated families before any real use

Built With

Share this project:

Updates

Submission history