This is a submission for the Hacktoberfest Open-Source AI Challenge Week 2: Side Hustle
My contract ended on Wednesday. By then I had tailored 83 CVs by hand this autumn: one per job, each one rewritten to the job ad's own words, each one checked so it didn't claim anything I couldn't defend in an interview. Most early-career people I know are doing the same thing, alone, at night.
There are AI tools for this. The best known charge per application: reviews put AI Apply's auto-apply credits at about 32 cents to a dollar each, on top of a monthly plan. When you're applying to 500 jobs, that's a few hundred euro you don't have, spent on applications that a model wrote and you never read.
So I built Deis. It's Irish for opportunity, and it's said "desh".
TL;DR. Deis is a swipe-to-apply job app for early-career people in Ireland. It shows you jobs filtered for your level, your languages and your right to work. Swipe right and open-weight Gemma 4 writes a CV, a cover letter and form answers tailored to the job. Every line on that CV points to a fact you confirmed, and code removes anything Gemma can't back up. It runs on your own model: on your laptop through Ollama (with the Wi-Fi off, if you like), on your free Google AI Studio key, or on a server you rent. An application costs about €0. The app is €9.99 once, and the code is open source.
What I Built
- A 90-second check-in. Where in Ireland you'd work, how far along you are, whether you can work here now (EU, Stamp 4, Stamp 1G or needing a permit), the kinds of work you want, and any languages besides English.
- A profile of small, true facts. Upload your CV and Gemma splits it into facts you tick off one by one. LinkedIn won't let apps read your profile, but it will give you your own data: Deis turns LinkedIn's data export into facts without any AI at all.
- A deck of real Irish jobs. About 300 live early-career jobs at a time, 70 to 100 in a typical deck once your filters run. Deis reads 55 employers' public job boards and shared Google Jobs searches. Then code, not the model, hides what you can't or won't take: roles asking for 3+ years, roles that need German or Turkish, postings that rule out your visa. Every card quotes the posting's own words: "asks for 2+ years of B2B sales experience", "unable to offer visa sponsorship".
- Swipe right, two ways. Quick builds the kit (fit check, CV, letter, draft answers) in the background while you keep swiping. Careful shows you the fit first and asks about your gaps: "The role asks for SQL. Where have you used it?" Your answer becomes a proposed fact, you approve it, and every application after that is stronger.
- Paste a job you found elsewhere. It goes through the same code as the boards and lands on top of the deck, offline too.
- You apply. Download the CV as Word or PDF, copy the answers, open the posting. Deis never applies for you. Auto-apply tools hit account walls and CAPTCHAs, break LinkedIn's terms, and send the same weak application to 500 places. In a hiring market as small as Ireland's, that follows you around.
Why not just paste it into ChatGPT? You can, and for one application it's fine. For forty it isn't. You paste your CV again every time, the chat forgets which facts you confirmed, and nothing stops it writing "3 years of experience" or "no sponsorship needed" in a confident voice you'll sign. It doesn't know which Irish jobs you can't get, so you find out after the letter is written. Deis keeps your facts in one place, hides those jobs before you see them, checks every line against what you said, and shows you what it removed. And it runs on a model you can keep on your own laptop, so your CV isn't training anybody's next model.
Who pays? Graduates and early-career people in Ireland who are applying to dozens of jobs, and especially international master's graduates on Stamp 1G. Many postings quietly rule them out, and finding that out after writing a cover letter hurts. €9.99 once is less than one month of the subscription tools, and about the price of a takeaway. The first person to really use it paid for it on the call, and the second sale came from someone I've never met. Both stories are below.
Demo
Try it: deiscareers.tech. Choose Try as Aoife or Try as Rahul: two fictional graduates, applying for real Irish jobs. The web demo takes no real CV. Your own CV is read in the desktop app, on your computer, so the hosted demo never receives it.
Desktop app: macOS, Windows and Linux installers, with a 14-day free trial, then €9.99 once. Buy a key here. Until the end of October, the code hacktoberfest2026 takes 80% off and is applied for you at checkout, so it's €2. The app isn't signed by Apple yet, so macOS asks you to open it once from Privacy & Security. The download page shows the steps. On a phone, the free Android app and iPhone home screen app run the same demo as the website. Questions, or a key that won't work? Email hello@deiscareers.tech.
Code
MuhammadMurtuzaHussain
/
deis
Swipe-to-apply job app for early-career people in Ireland. Open-weight Gemma tailors your CV and cover letter to each job, and every line traces back to something you told it.
Jobs you can actually get. A swipe-to-apply job app for early-career people in Ireland, where open-weight Gemma 4 tailors your CV and code removes anything it can't back up
Try the web demo · Watch the film (1 min) · DEV post · Download · hello@deiscareers.tech · Built for the DEV Hacktoberfest Open-Source AI Challenge, Week 2: Side Hustle
Deis (said "desh") is Irish for opportunity.
Why
I tailored 83 CVs by hand this autumn: one per job, each rewritten to the job ad's own words and checked so it didn't claim anything I couldn't defend in an interview. Most early-career people I know do the same thing, alone, at night. The AI tools that do it for you charge per application and write things you'd never sign: "3 years of experience", "no sponsorship needed".
Deis keeps your facts in one place, hides the Irish jobs you can't get before…
How I Built It
Gemma judges, code guarantees
A tailored CV that invents a certificate, or a total years of experience, can cost someone the job. So Gemma decides what to say, and code decides what stays.
- Every CV line has to cite the facts it came from. Code drops lines with no real facts behind them, and checks each sentence: any number, tool or certificate it mentions has to be in the cited facts.
- Code never lets a model state a total years of experience, write "currently studying" about a finished degree, or say anything about visas, stamps or sponsorship. That last rule came from testing: Gemma 4 26B wrote that my Stamp 1G persona was "eligible to work in Ireland without sponsorship".
- Employers, job titles, dates and education are copied from your facts, never rewritten.
- Job postings are data, not instructions. Hidden text and sentences addressed to AI tools are stripped before Gemma reads a posting and shown to you on the card. Real postings already contain them.
- Everything the guard removed is on the kit's Checks tab, and one switch shows the source facts under every CV line.
I measured it. On eight kits written by Gemma 4 E4B on my MacBook (fit check, CV, letter and answers):
| Run | Sentences kept | Removed by the guard | Untraceable claims left |
|---|---|---|---|
| First run (13 Oct) | 210 | 56 | 0 |
| After fixing what the first run showed (13 Oct) | 261 | 11 (4%) | 0 |
| Current guard, CV, letter and answers all checked (16 Oct) | 196 | 11 (5.3%) | 0 |
I read every removal of the last run by hand. About half were real: a test persona's finished MSc written as "current", a company's own pitch copied into a letter, an empty heading. The other half were true lines the guard was too strict about. I'd rather it erred that way. A full kit takes about 46 seconds on the laptop (median of 8).
The first run taught me something about small models: Gemma never invented a fact id. Instead it cited facts by quoting them or by their label, and my guard threw those good lines away. Now quotes and labels are matched back to the facts they name. What's left for the guard to remove are real over-claims: tools I never used, "currently" studying a degree I'd finished, a number from nowhere.
The deck is code, not AI
I hand-labelled 81 real Irish postings as show, stretch or hide and tuned the filter on them (86% before, 100% after). Then I labelled 52 postings it had never seen, without looking at what it decided: 51 of 52 right on the first run. The one miss hid a Trainee Accountant job because "complete the ACA qualification over a period of 3 to 4 years" looked like an experience requirement. A graduate or trainee title now needs a line that really says "experience" before Deis hides it. The details are in eval/RESULTS.md.
Gemma never reads a job you won't see, which is what keeps it cheap.
Your model
Every AI call goes through a per-request chain of models built with Mastra: one agent per job (card, fit, CV, letter, answers, coach), and the kit is a Mastra workflow that writes the CV, letter and answers in parallel. The chain is whatever the user chose (Ollama, an AI Studio key, any OpenAI-compatible server), with fallbacks.
That turned out to matter on day two. Google AI Studio's Gemma 4 returned errors for hours, and some requests hung for over 90 seconds. The hosted demo now gives cloud calls a deadline and probes AI Studio, and while it's failing it asks a second Gemma host first: Gemma 4 26B on OpenRouter.
It also matters when there's no network. With Gemma on your laptop, File > Work offline turns on an egress guard that refuses every connection that isn't to your own computer. The deck shows the jobs it saved, you can paste a job, and the kit still builds. I tried it with the Wi-Fi off: a pasted job still built a full kit on Gemma on the laptop. The guard has its own tests in tests/offline.test.ts.
The bug I shipped and fixed
The hosted demo counted all of a person's AI calls against one limit. Browsing cards used it up, so after about 20 calls in an hour your next kit was told to come back later. Worse, the counter trusted the first address in a header the client controls, so changing that header reset it. Now each step has its own allowance per person, a person has a total across all steps, and the whole demo has an hourly budget. The address comes from Cloudflare's own header and is validated before it's counted.
The rest
-
Jobs: SerpApi Google Jobs, one shared search per role family for all of Ireland, refreshed about once a week, so one search serves every user. (The Google Jobs engine rejects
gl=ie; the location alone works.) Plus 55 employers' public boards on Greenhouse, Ashby, Lever and SmartRecruiters, refreshed every six hours. -
Desktop: Electron around the same Next.js server, running on
127.0.0.1behind a host check, at a stabledeis://apporigin so your profile survives restarts. Installers for all three systems come from GitHub Actions. - Tracing: Sentry agent tracing: a span per workflow step and per Gemma call with tokens, and an issue for every guard rule that fires, tagged with the model. Never a CV, a prompt or a key.
- Hosting: Render web service and Key Value in Frankfurt for the demo, the shared job feed and the demo key's rate limits.
- Design: Bricolage Grotesque for the big type, Geist for everything else, light and dark. Swipe, buttons or arrow keys. One accent, a lime highlighter, which only ever means go or proven: select a fact and it draws behind every CV line that cites it, and when a kit finishes the CV writes itself line by line while the sentences the guard removed flash past struck through. All of it stops under reduced motion.
Why Does Open Innovation Matter?
Because the business only works if the model is free to run. Here is one application, measured:
| Per application | 500 applications | |
|---|---|---|
| Pay-per-application auto-apply (AI Apply credit packs, 2026 reviews) | about $0.32 to $1.00, plus a monthly plan | about $160 to $500 |
| Deis with Gemma 4 E4B on your laptop | €0 (about 46 seconds) | €0 |
| Deis with your free Google AI Studio key | €0 | €0 |
| Deis on a paid Gemma 4 host (reseller price) | about $0.0013 | about $0.65 |
With a closed API, I'd either have to charge a subscription to cover tokens or ration your applications. With open weights I can sell the app once and get out of the way.
And the €9.99 has to pay for something. The hosted demo and the shared job feed run on Render: a Starter web service ($7 a month) and Key Value ($10 a month). That's about two sales a month to break even. The tokens cost nothing extra because each person brings their own model.
Because a CV is private. On the desktop app your profile, your applications and, with Ollama, the model all stay on your computer. There's no Deis account and no server copy of your CV.
Because nobody can take it away. When AI Studio went down, Deis switched host. If I disappear, the code is AGPL: build it yourself, free, forever. The €9.99 pays for the signed app, updates and the daily Irish job feed, not for permission.
Where a closed model would be better: the writing. A frontier model would write livelier CVs and need fewer rewrites. It would still need the same guard, because the guard is what stops a confident model from inventing a sponsorship claim. Open weights cost you a 6.6 GB download and a laptop that can run it. I think that's a fair trade for something that handles your CV, but you should weigh it yourself.
My First User
I shared Deis while it was still a prototype: on LinkedIn, on Instagram, in my class's WhatsApp groups and in a group of builders who ship things. Eight people were on a waitlist by the time it was polished, and when deiscareers.tech went live this week I sent it to all of them, with a few reels and posts.
Plenty of people replied. Almost nobody downloaded it. I had pictured them running Gemma on their own laptops; instead everyone tried the web demo on the shared AI Studio key, it hit its rate limit, and Sentry showed me exactly where. So I changed the shape of the product: the web is now a demo with two sample graduates, and your own CV only goes into the desktop app, which has a 14-day free trial.
My Agent Session & How I Built It With Claude Code
I built Deis in a week, from 13 to 18 October, across 18 sessions with Claude Code. I made the decisions: the idea, what to cut, what my first user needed, when the UI wasn't good enough. Claude Code wrote most of the code, ran the tests and evals, and checked its own work against the live demo.
The session below is the short version: 24 messages, one per turning point, in my words and its answers. A few moments worth looking for:
- The first message is my unedited brain dump: "something like AI Apply, in a Tinder format where you swipe". The core rule, Gemma judges, code guarantees, came out of the first day.
- AI Studio going down on day two, and how the demo got deadlines, a health probe and a second Gemma host.
- "I hate the UI and UX", and the Highlighter design that came out of it.
- My first user's feedback turning into code the same day: career stages up to 7+ years, tax and accounting roles, and job postings that keep their bullet points.
- A re-review that caught three bugs before users did, including a checkout link that sent buyers to the server's internal address.
By the end of the week: 89 commits, 364 tests, installers for three systems, and two sales.
My first real user wasn't who I built it for. I expected a recent tech graduate. A friend forwarded Deis to her MBA class, and the person who got on a call with me was one of her classmates: an international student with ten years of experience, looking for tax and accountancy roles. Deis only really knew early-career tech jobs. So that week it grew career stages from 3 to 5 years up to 7 or more, and kinds of work beyond tech, from tax and accounting to management, with a search so anyone can find their own field.
What they told me:
- They read the job description before they swipe. I'd assumed people glance at a card and swipe. They opened every posting, and the posting's own bullet points had turned into a wall of paragraphs. The full posting now keeps its lists and headings.
- They said the price was too low, and then they bought it. An MBA student telling me to charge more was not what I expected. What sold them was swiping and getting a CV, a cover letter and form answers where every line is backed by something they said. They bought it on the call with the October code: Deis's first sale.
- Ollama needed a human the first time. Their first question was "why am I installing Ollama?" Once I explained that it runs the AI on their own laptop, they switched to it and kept going.
- They liked that Deis never applies for them. They're graduating this month, and every time they open the app there are about 250 jobs that fit, instead of a blank scroll through LinkedIn or Indeed.
The posting they were reading, before and after their feedback:
And the sales. The first came on that call. The second came in on the day I wrote this post, from someone I've never met: nobody I know, nobody I sent it to. Deis is starting to travel by word of mouth.
People outside Ireland wrote back too. A friend in Germany asked for a German version, a friend in Australia sent a voice note about the swipe, and a friend in India wants it for remote roles in Ireland, which the check-in's remote and right-to-work questions already cover. Still, I'm keeping Deis to Ireland for now, on purpose. It's the job market I know from the inside, and every country does this differently: CV styles, languages, what employers expect to see. Other countries can come later. For now I'd rather build something that really helps people in Ireland than something for everyone that helps no one.
I also showed it to people at a networking event recently. The question I heard most was why I'd open-source it and charge so little. My answer: €9.99 pays for the server and the job feed, and the code stays open because a tool for people looking for work shouldn't be something anyone can take away from them.
Prize Categories
- Best Use of Gemma: Gemma 4 E4B on the laptop and Gemma 4 26B/31B in the cloud do every AI job in the app, measured and guarded.
- Best Use of Render: the hosted demo and the shared Irish job feed, with Key Value for the cache and rate limits.
- Best Use of SerpApi: Google Jobs as a shared, cached feed for early-career roles across Ireland.
- Best Use of Sentry Agent Tracing: traces of every workflow step and Gemma call, and one issue per guard rule, tagged by model.
- Best Use of Mastra: per-request model chains with fallbacks, one agent per task, and a parallel kit workflow.
- Best Use of a .tech Domain: deiscareers.tech is Deis's home: the web demo, the download page, checkout, and the shared job feed the desktop app reads.
I drafted this post with Claude Code and edited it myself. The code, the tests and the evals in the repo are the same ones I ran for the numbers above.




























