This is a submission for the Hacktoberfest Open-Source AI Challenge Week 2: Side Hustle.
What I Built
The old brief: “Winner gets $500 USD cash.”
The revised brief: “Winner gets $500 platform credits, not cash.”
Same competition. Same $500 figure. Very different reward.
Now imagine the deadline also moved a week and a sentence allowing AI-written work became a prohibition. If you're entering a few competitions or accepting small freelance jobs alongside your main work, you may not have a contracts team checking each revision. A basic text diff highlights lines. The harder part is knowing which changed sentences deserve a second look—without pretending a model can judge your rights.
I built RuleDelta, a small local-first side-hustle tool for comparing two versions of a freelance scope, contest brief or grant rules.
You paste an older version and a newer version into two boxes. RuleDelta pairs related clauses using an actual open-weight language model, shows their verbatim before and after text, and marks potential changes in payment, dates, eligibility and rights. It also catches important clauses that were added or removed rather than neatly rewritten.
The key interaction isn't the warning. It's the review gate. Every candidate change must be individually inspected and acknowledged before the user can download a local JSON report. Editing either source after the comparison immediately locks Export again. A checked item means I inspected this, not the clause is legally valid.
Who would pay?
My intended user is an independent developer, designer or bounty applicant who repeatedly compares revised scopes, reward terms and submission deadlines. Their cost is time spent rereading documents—or overlooking a condition that changes a small payout.
I'd test a $9 one-time locally packaged version and $19 setup help as hypotheses, not as achieved sales. I have zero verified paying users and no willingness-to-pay study. A free MIT source checkout remains available for anyone who prefers to run it directly. A commercial offering would have to earn its fee through easier setup, updates and support—not through an invented AI “legal guarantee.”
Demo
Watch the RuleDelta real-app demo (48 seconds)
The 48-second unlisted video is genuine browser footage of the working local RuleDelta app, captured from isolated signed Chrome and narrated with an offline Windows speech voice. It demonstrates:
- A fictional brief in which the deadline moves, cash becomes credits, and AI-writing permission changes.
- Three HIGH review candidates, showing the old and new exact clauses.
- An Export button locked until all three changes have been acknowledged.
- Export locking immediately when the source is edited again.
- A newly introduced $50 registration fee being flagged as a critical unmatched clause.
The video is not a simulated model result, a customer testimonial or evidence that anyone lost $500. The media passed local technical H.264/AAC verification without black frames. I also downloaded and read back a reviewed JSON report from the actual Chrome app.
The application deliberately runs on localhost; this is a video demo, not a claim that a public SaaS instance exists.
Code
Browse the RuleDelta source code on GitHub — audited release commit ac1280c.
The standalone Node.js project is publicly available with a pinned dependency lockfile. On a machine with Node.js 20+, the basic workflow is:
npm ci --ignore-scripts
npm start
# Open http://127.0.0.1:4318/
The public repository contains the standalone application, README, MIT project license, test scripts and audited dependency lockfile. The first model inference may download public model weights. Subsequent inference runs locally. No uploaded private client documents or model caches should be included in the repository.
How I Built It
1. Use local AI to match clauses, not invent their meaning. I run Xenova/all-MiniLM-L6-v2 through Transformers.js/ONNX on CPU. Normalized identical clauses are anchored first. MiniLM embeddings help connect related sentences even if a document is reordered or reworded. Cosine similarity is useful for finding a possible pair, but it is not a probability that two promises are equivalent.
2. Put deterministic warnings around the model. The comparison checks concrete tokens and conservative cues: amounts, dates, deadlines, permissions, negation, eligibility and rights. Newly added fees and removed restrictions are not demoted just because there is no older/newer sentence to pair with. RuleDelta displays the source, the warning category and why the rule fired. It never automatically decides eligibility, payment entitlement or legal effect.
3. Run a genuine Mastra workflow. Mastra orchestrates four production-path stages: validate inputs → align clauses using real CPU MiniLM → optionally check low-risk paraphrases with a local schift-io/schift-nli model → require human review. The optional NLI hint can suggest a possible rewording but cannot remove a review candidate or downgrade a HIGH alert. If it is unavailable, review remains mandatory.
4. Make the human gate enforceable. The browser requires one acknowledgement per changed item; a pure export module rechecks all acknowledgements and rejects changed source text. Reports preserve the original wording and contain verifiedLegalConclusion: false. The Node server binds to 127.0.0.1, checks Host and Origin, and serves only explicit assets.
What went wrong while building it
An early cue detector interpreted the modal word “may” as the month May. Reordered unchanged clauses could be incorrectly paired when embeddings tied. Changing “Winner receives $500.” to “Winner receives $500?” was once treated as mere punctuation. And an entirely new $50 fee initially received only the same generic review priority as a harmless added sentence.
I added regression cases and changed the rules rather than hiding those outcomes. The final source includes repeatable unit, model, workflow and HTTP checks, including refusal of a foreign web Origin.
On one author-created post-fix set of 28 examples, RuleDelta surfaced 14/14 expected material changes, but also raised alarms for 5/14 benign examples. Those five are a real usability weakness. This small hand-written set is not a statistically representative benchmark and does not establish legal accuracy.
Two public versioned hackathon-rule histories were also used to check specific known edits. Their target differences were paired, but I did not create a complete independently labeled truth set for either entire document.
A security preflight removed the reported HIGH advisories from the local dependency tree by pinning a sharp patch version; nine MODERATE npm advisories still remain in the currently audited release candidate. This is a local prototype, not a penetration-tested production service.
Why Does Open Innovation Matter?
Small side hustles have small margins. I wanted the core comparison to work without sending private scopes or payout terms to a metered closed AI API.
Open-weight MiniLM makes local semantic matching possible on an ordinary CPU. Open-source Mastra makes the steps inspectable: someone can see which decisions belong to the model, which are conservative text checks, and exactly where human consent becomes necessary. Open licensing means users can inspect, modify or self-host the source—while respecting the upstream model and package licenses.
The most important choice was not asking AI to decide what a clause legally means. Open inference helps find candidates. Transparent source quotations and a fail-closed acknowledgement gate leave consequential decisions with the person using the tool.
My next experiment would be to let real freelancers try their own non-sensitive revised briefs, record false alerts and ask whether this actually saves them time. I do not yet have that user feedback or proof of revenue.
Prize Categories
- Best Use of Mastra: The real, tested, four-step Mastra workflow is invoked by the app's comparison route.
No other partner category is claimed without an implemented, verified integration.
Top comments (0)