Inspiration
Every year, tens of thousands of people are judged for the US extraordinary-ability visas, O-1A and EB-1A. The rules that decide their future are public. But they're written for the officer, not for the person being judged, so you can look them up and still have no real idea where you stand.
So the night before you pay a lawyer, you do what everyone does. You ask ChatGPT. It hands you a confident number, "about 75% likely," and not one rule you can actually check it against. That borrowed confidence is how a do-it-yourself case walks straight into a rejection.
I kept coming back to one thing. The ruler you're measured by shouldn't live only in someone else's head. Not the lawyer's, not the agency's, not a chatbot's. If the standard is public, the person it judges should be able to read it against their own case.
What it does
holding is a personal immigration strategist for O-1A and EB-1A. You enter your evidence as structured facts, and it reads your case against USCIS's own instrument, one criterion at a time.
For each criterion it gives you the officer's cited verdict, and it names the single link your whole case turns on instead of a pile of near-matches. Every verdict opens to the exact rule it rests on, live, on the government's own page, down to the paragraph, with a hash of the source text. So it is never my opinion or a chatbot's guess. You can click through and check it yourself.
It catches the "credentials" someone sold you, like a pay-to-enter award, and quarantines them. When a supporting case can't clear its citation check, it drops it and says so, instead of padding the page. It is bilingual, Chinese-first for its first market.
And there is one thing it refuses to do. It will not dilute those judgments into a single made-up confidence score. Every funnel tool hands you a flashy number to get you to sign, and that unverifiable number is the trap. holding can afford the honesty because it never sells you a petition. It prepares you for the lawyer. It is not the lawyer.
How I built it
I built it with Codex, running on GPT-5.6.
GPT-5.6 did the hard reasoning: breaking each USCIS criterion into the necessary links that actually decide it, mapping vague legal standards onto exact evidence structure, and generating the published-deficiency taxonomy. Codex ran the loop, reading the immutable 5,701-decision official corpus, planning each vertical slice, and pushing it through deterministic gates for source integrity, citation, leakage, bilingual output, build, and security.
The core invariant is that outcomes are kept out of the ranking by construction. Disposition never touches retrieval or candidate generation; it is joined only after the ranked set is already immutable, and a test permutes the outcomes to confirm that rank and membership do not move. Retrieval compares BM25, dense, structure-only, and combined methods against a rubric frozen before any tuning. Every user-facing legal claim carries a verified official URL, a document checksum, a PDF page, an exact English span, and a paragraph locator, and if a citation fails verification the claim is suppressed rather than replaced by an uncited summary. It runs locally on transformers.js with no API key, and seventy tests keep it honest.
Challenges I ran into
The hardest problem was not retrieval. It was restraint.
Every rival gives you a Strong / Moderate / Building strength score, because that number is exactly what turns a scared applicant into a paying one. Refusing to give one meant answering the quiet question, is this verifiable, and declining the loud one, will I roughly pass. For a while that felt like leaving the strongest feature on the floor. Then it clicked. The fake number is the scam, and structural neutrality, the fact that holding can never sell you a petition, is the one moat a funnel cannot copy without killing its own revenue.
The rest were technical. Making the citations un-fakeable meant a fail-closed gate: no verified rule, no claim. Keeping outcomes out of the ranking meant building a firewall and then proving it with the permutation test instead of trusting myself. And getting it to run from a clean clone, with no API key and no gigabyte of corpus, meant precomputing the deterministic demo reads and shipping them as small static fixtures, so a judge can clone the repo and click Generate with nothing else installed.
Accomplishments that I'm proud of
It refuses to fake a number, and it can afford to because it has no petition to sell you.
Every verdict opens to the government's own live page, hash-verified. Outcomes are firewalled out of the ranking by construction, and there is a test that proves it. The whole thing runs locally, no key, no upload, and any claim whose citation does not verify gets dropped rather than dressed up. Whenever the sources supported less than the ideal claim, I narrowed the claim to exactly what they prove and left the firewall intact.
What I learned
That the differentiator is usually the thing you refuse to do.
I went in thinking the value was better retrieval. It turned out to be discipline: deciding what not to claim, saying only what the sources actually prove, and holding the no-score line even when a number would have converted better. The instinct to hand people a confident answer is strong, and most of the work was learning where to resist it.
What's next for holding
The judgment that decides your future shouldn't live only in someone else's head. I am building the independent decision layer for high-skilled immigration: the neutral reference that applicants, lawyers, and institutions can all point to for what the official standard actually is.
The immediate next steps are the human ones the engine can't shortcut: applicant-value testing with real users, calibration against two independent attorneys, and a review with counsel on the unauthorized-practice line. Then NIW, and outward from there. Immigration is only chapter one.
Log in or sign up for Devpost to join the conversation.