This is a submission for the MLH x DEV Writing Challenge
Hacktoberfest this year asked me to ship, not just to open pull requests. I ended up with two live products that sit on opposite ends of the same idea: software that respects the person in front of it.
- 1988.in is a television. It does not ask what to watch next.
- Job Ready is a CV tool. It does not invent experience you never had.
One is for my kids on the sofa. The other is for someone staring at a job post at midnight. Both came out of MLH / DEV challenge windows in October, with Cursor as the coding partner and real partner platforms underneath.
What I Built
1988.in — Feel era of 1988. No skip.
Streaming apps train a thumb to leave. A clip has a few seconds before you decide it owes you a different clip. I missed the other feeling: a set that is already on, mid-programme, with nothing under the glass except the picture.
1988.in is that set. You accept a short station notice, press the glass, and land in the middle of whatever is on air. Bollywood is on 001. Cricket is on 002. Jungle Book, Shaktimaan, Ramayan, and the other Doordarshan-era shows live under DD Era, next to nature, food, sport, and quieter channels you can leave running. Nobody picks “what to watch next.” The channel is simply on.
The piece that makes it feel like a broadcast is a clock. The same channel, the same catalog, and the same UTC second always resolve to the same video and the same start time. Two people who turn the set on in different rooms are watching the same programme, already underway. A phone can be the remote over a WebSocket: the picture stays on the computer; the phone only sends the button press.
I built it for my kids. When I handed it over, they said: “Interesting.” That was enough.
Job Ready — show why you fit, one role at a time
Most AI résumé tools have the same failure mode: they rewrite until the CV sounds ready, including experience you never did. That problem shows up again and again on DEV — from grounded resume editing to pipelines that validate and scrub LLM output. I wanted the opposite product.
Job Ready checks one existing CV against one job. Upload a text PDF or DOCX, paste a role, and get exactly one of two results:
- Ready to send: a fact-checked rewrite, a fit report, and a downloadable PDF.
- Gaps to close: a practice plan for required skills the work history does not show yet. No rewritten CV. No PDF. No advice to list a skill you have not done.
Gemma (via Ollama) extracts structure, quotes evidence, and rewrites wording. Python decides suitability. A skill only counts when a work bullet quote matches the saved text, or when the skills list contains the phrase. Employers, titles, dates, degrees, tools, and numbers cannot change. Failed fact checks are not saved.
A missing skill on a CV is not always missing experience. Sometimes the work was real and the bullet was thin. From a flagged gap you can open a private “Update my CV” chat, explain what you actually did, review Gemma’s proposal, confirm accuracy, and reassess. The model proposes; the person confirms; code re-scores.
Demo
Television
- Open https://www.1988.in/, choose Watch TV, and turn the set on. You should arrive mid-programme, with YouTube’s controls gone.
- Press CH +. Snow, then a different station, also already in progress.
- Open Channels, search “Ramayan” or filter by DD Era, and tune in.
- Choose Connect remote, scan the QR from a phone, and change the channel. The desktop moves. The phone never shows the video.
Source: github.com/tusharv/positive-player
Earlier write-ups: Feel 1988. No skip. · A television with no skip button
Job Ready
- Open https://jobready.tech/, create an account, and upload a text-based PDF or DOCX.
- Paste a role title and job description.
- Read the result: Ready to send or Gaps to close.
- If a preferred skill is missing (for example pytest), try Have this experience? Update your CV. Write what you actually did, review the proposal, confirm, then Apply & reassess.
Source: github.com/tusharv/green-grass
Challenge write-up: Job Ready: Tailor Your CV Without Inventing Your Experience
Partner Technologies
For 1988.in — YouTube Data API and Vercel
Playback is the YouTube IFrame Player. Video bytes never touch my server. The expensive problem was the guide.
YouTube’s daily search quota is tiny. A hundred-channel lineup driven by search.list would die in one flip-through. I moved every station to a curated JSON catalog of video ids. A generator script refreshes metadata when I ask it to — never as part of npm run build. Playback works with no API key; when a key is present, it only re-checks that bundled ids are still embeddable.
The television itself is a static Vue 3 / Vite / Pinia app on Vercel. The phone remote needs a public WebSocket, so vercel.json rewrites /remote-ws to a Function that holds an in-memory pairing hub. The desktop is authoritative. The phone sends channelStep, volumeStep, mute, and power. Sessions live in that process; video never passes through it. Locally the same hub runs in Node with a Vite proxy.
That split taught me something I keep repeating: the product is the clock and the remote protocol, not a programme database.
For Job Ready — Gemma, Render, and a .tech domain
Gemma (gemma4:31b through Ollama) runs the language work: CV extraction, job-skill extraction, evidence quotes, rewrites, gap plans, and clarification edits. Suitability stays in fit.py. Fact checks stay in facts.py. Chat proposals stay grounded in the person’s exact messages in cv_chat.py.
Render hosts the FastAPI + Svelte 5 app and PostgreSQL. A Blueprint in render.yaml wires the web service, database, health check, and env so a redeploy is a checkout plus an Ollama key — not a day of clicking console forms.
jobready.tech is the public address. The name matches the promise: one role, an honest next step, not a match-percentage theatre.
Open weights matter here because CV extraction, evidence screening, and conversational edits fail in different ways. I can swap or tune the model while keeping scoring and confirmation as application rules — the same instinct as production LLM validation posts on DEV, applied to someone’s career story.
Hackathon Experience
October was a stack of MLH surfaces, not one weekend in a gymnasium.
I checked in at Hacktoberfest Hack Day Mumbai x FAIR, stayed registered for Hacktoberfest 2026 and Global Hack Week: Hacktoberfest, and shipped into the DEV challenge windows: the Weekend Challenge for 1988.in, then Week 2: Side Hustle for Job Ready.
What I will remember most is the contrast in the room and on the screen. At the Hack Day the energy was familiar MLH: people pairing, demos half-working, someone hunting a cable. Online, the challenges forced a sharper question each Monday — build for a friend, then build something someone might pay for. 1988.in answered the first with a set for my kids. Job Ready answered the second with a product I would actually trust with my own CV.
The technical moments that stuck:
- Two browsers on 1988.in, same channel, same second of the same video, with no server choosing the schedule. That was the first time it felt like television.
- A Job Ready assessment that refused a “ready” PDF because a quote did not match the source bullet. Annoying in the moment. Correct for the product.
If you are in an MLH week right now: ship the weird small thing and the serious useful thing. Write both up. The weekend ends; the story is how other builders learn what you learned the hard way.
Top comments (0)