Charan Reddy
I build intelligent systems. Production LLM pipelines, a Springer-published model that reads chest X-rays well enough for a radiologist to take seriously, document automation that runs itself. Before AI, I wrote real-time control code for jet engines at DRDO. The throughline: systems that do actual work, not just demos.
ApplyOS is one of those systems. I built it because I was personally annoyed by re-typing the same 40 fields. I shipped it because other people were annoyed too.
This is one project.
There are 18 more — and a few jet engines — over at charanreddy.dev. Some are research, some are tools, one is a published paper. Worth a look if you're curious about the person behind the code.
What I learned building ApplyOS
Heuristic detection beats per-site scrapers
ATS forms are a graveyard of inconsistent markup — same concept, nine different HTML opinions. The breakthrough was realizing I didn't need to know the site. I needed to score every signal on every input (label text, placeholder, name attribute, aria-*, autocomplete) and let the highest scorer win. A 100-line scoring table generalizes to ATSs I've never seen. Nine site-specific scrapers would have broken the week each one deployed a redesign.
React eats your form fills for breakfast
Setting input.value = 'foo' directly is silently ignored by React-controlled forms. The fix — writing through the native prototype's value descriptor and dispatching input + change + blur events — felt like a hack until I realized it's exactly how real browser autofill works. If it's good enough for Chrome, it's good enough for me.
Crypto UX is a product problem dressed as an engineering one
PBKDF2 + AES-GCM was 50 lines. The hard part was the decisions: no recovery path (by design — if I can recover it, so can someone else), 5-minute idle auto-lock (annoying enough to matter, fast enough to be tolerable), and a canary ciphertext so 'wrong passphrase' is specific rather than just 'something went wrong.' Engineering took a day. The product thinking took a week.
Local-first is a feature, not a compromise
I built this with no backend because I didn't want to host anything. Users read it as a trust proposition. Job-hunt data is sensitive — where you're interviewing, your salary expectations, your visa status. 'Your data never leaves this browser' turned out to be the most interesting sentence in the whole product.
Scratch your own itch — but scratch it properly
I built this because I was personally exhausted by 40-field forms. The discipline was resisting every shiny idea and shipping something that does a few things well. The features that made the cut are the ones I was annoyed enough about to build on a weekend. The roadmap is full of things I might want someday. That line matters.
Have an idea? Let’s talk.
Want to build something — or break something interesting? I’m always up for a conversation.
Crafted with intent. · Available for new projects. · ORCID