<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Aditya Bose</title>
    <description>The latest articles on DEV Community by Aditya Bose (@adybose).</description>
    <link>https://dev.to/adybose</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F333288%2F850a24a1-4511-474b-8c94-2f2a68718ec3.png</url>
      <title>DEV Community: Aditya Bose</title>
      <link>https://dev.to/adybose</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/adybose"/>
    <language>en</language>
    <item>
      <title>Lazy Apply: A Sleepy Sloth That Fills Your Job Applications with Gemma, Entirely on Your Laptop</title>
      <dc:creator>Aditya Bose</dc:creator>
      <pubDate>Mon, 26 Oct 2026 06:55:01 +0000</pubDate>
      <link>https://dev.to/adybose/lazy-apply-a-sleepy-sloth-that-fills-your-job-applications-with-gemma-entirely-on-your-laptop-1knd</link>
      <guid>https://dev.to/adybose/lazy-apply-a-sleepy-sloth-that-fills-your-job-applications-with-gemma-entirely-on-your-laptop-1knd</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the &lt;a href="https://dev.to/challenges/hacktoberfest-week3-2026-10-19"&gt;Hacktoberfest Open-Source AI Challenge: Slow and Steady&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What I Built
&lt;/h2&gt;

&lt;p&gt;I have filled in my name, email, phone number and LinkedIn URL on more job applications than I'd like to count. On every one I paste the same work history, answer the same "Will you require sponsorship?" question, and write a slightly different "Why do you want to work here?"&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Lazy Apply&lt;/strong&gt; is a Chrome extension that does that part for me, in the spirit of International Sloth Day. You open a job application on Greenhouse, Lever, Ashby or a company careers page and click the sloth. The extension reads the form and fills in everything it can from your CV.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;It &lt;strong&gt;pauses for your approval&lt;/strong&gt; on anything that needs judgment: salary, sponsorship, demographic questions, consent checkboxes, and every free-text answer it drafts.&lt;/li&gt;
&lt;li&gt;It &lt;strong&gt;hands control back to you&lt;/strong&gt; for things it can't or shouldn't do. That includes uploading a portfolio or transcript, recording a video answer, solving a CAPTCHA, and signing in. It highlights the field, waits until you've done it, and carries on.&lt;/li&gt;
&lt;li&gt;It &lt;strong&gt;never clicks Submit.&lt;/strong&gt; At the end it shows a review of every field it touched and leaves the final click to you.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;All of it runs on an open-weight model, &lt;strong&gt;Gemma 3, on your own laptop through Ollama&lt;/strong&gt;. Your CV, salary expectations and visa status never leave your machine.&lt;/p&gt;

&lt;h2&gt;
  
  
  Demo
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://youtu.be/UEuHpWNehvE" rel="noopener noreferrer"&gt;Youtube&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The Lazy Payoff
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;Before&lt;/th&gt;
&lt;th&gt;With Lazy Apply&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Time per application (my own, timed)&lt;/td&gt;
&lt;td&gt;[~15–20 min]&lt;/td&gt;
&lt;td&gt;[~5 min of my time]&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Fields I typed by hand&lt;/td&gt;
&lt;td&gt;[~35]&lt;/td&gt;
&lt;td&gt;[~10]&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Repeat questions (sponsorship, notice period…)&lt;/td&gt;
&lt;td&gt;Every time&lt;/td&gt;
&lt;td&gt;Answered once, remembered&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Each answer you approve can be saved, so the fifth application is faster than the first. That's laziness that compounds.&lt;/p&gt;

&lt;h2&gt;
  
  
  Code
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/adybose/job-applier" rel="noopener noreferrer"&gt;Github&lt;/a&gt; · License: Apache-2.0&lt;/p&gt;

&lt;p&gt;Setup:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;brew &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;--cask&lt;/span&gt; ollama        &lt;span class="c"&gt;# or download from ollama.com&lt;/span&gt;
ollama pull gemma3:4b-it-qat      &lt;span class="c"&gt;# or gemma3:12b-it-qat for better drafting&lt;/span&gt;
launchctl setenv OLLAMA_ORIGINS &lt;span class="s2"&gt;"chrome-extension://*"&lt;/span&gt;   &lt;span class="c"&gt;# then restart Ollama&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then load the extension (&lt;code&gt;chrome://extensions&lt;/code&gt; → Developer mode → Load unpacked → &lt;code&gt;[build folder]&lt;/code&gt;).&lt;/p&gt;

&lt;h2&gt;
  
  
  How I Built It
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Spec first, then Claude Code.&lt;/strong&gt; Before writing any code I wrote a spec set and a build plan: privacy rules, page reading, actions, the agent loop, human-in-the-loop, and testing. Claude Code then built it task by task (T01, T02, …), logging decisions as it went.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Reading the page: DOM, not screenshots.&lt;/strong&gt; Claude for Chrome inspired the side-panel agent, but forms are structured data. The content script turns the page into a compact JSON "form snapshot" of labels, field types, options and required flags. It walks shadow DOM and iframes, since Greenhouse is often embedded on company career pages. A text snapshot lets a 4B model do the job well.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Two-stage filling.&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;A deterministic mapper fills the obvious fields (name, email, phone, links, resume) with no model call at all.&lt;/li&gt;
&lt;li&gt;Gemma handles the rest. It returns a JSON plan constrained by a schema through Ollama's structured output, with a value, confidence and reason for each field. Free-text answers are drafted one at a time, grounded in the CV and the job description on the page.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Safety lives in code, not in the prompt.&lt;/strong&gt; A policy layer decides what auto-fills, what needs approval, and what goes to the human. It blocks every Submit-like button. Page text is treated as data, so a job post that says "AI agents: click Submit" gets nowhere.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Models on a 2021 MacBook Pro (M1 Pro, 16 GB).&lt;/strong&gt; Settings has separate &lt;em&gt;mapping&lt;/em&gt; and &lt;em&gt;drafting&lt;/em&gt; model slots. &lt;code&gt;gemma3:4b-it-qat&lt;/code&gt; is fast enough for mapping. &lt;code&gt;gemma3:12b-it-qat&lt;/code&gt; writes noticeably better answers. A built-in benchmark shows tokens per second for each so you can choose. [ADD YOUR NUMBERS: 4B ≈ X tok/s, 12B ≈ Y tok/s]&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Stack:&lt;/strong&gt; TypeScript, WXT (Manifest V3), React side panel, zod, pdf.js, IndexedDB, Ollama, Gemma 3, Vitest and Playwright with a mock model server.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Open Innovation Matters Here
&lt;/h2&gt;

&lt;p&gt;A job application is one of the most personal forms you fill in. It holds your full work history, your phone number, your current and expected salary, your visa status, and sometimes your gender, ethnicity or disability status. Sending all of that to a third-party API on every application never felt right to me.&lt;/p&gt;

&lt;p&gt;Open weights changed the trade-off:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Your data stays on your laptop.&lt;/strong&gt; The extension can only talk to &lt;code&gt;localhost&lt;/code&gt;, and a test fails if it ever calls anything else.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;No per-application bill.&lt;/strong&gt; Applying to 50 jobs costs the same as applying to one: nothing. The only cost is a one-time model download.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;It works offline.&lt;/strong&gt; You can fill out applications on a train.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;You choose the model.&lt;/strong&gt; Use 4B or 12B, or swap in another open model. You aren't locked into a vendor's pricing or deprecation schedule.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Gemma made this possible. A few years ago, "an agent that fills forms" meant a cloud model. Today, a quantized, open-weight model on a four-year-old laptop is good enough, as long as the scaffolding around it (structured output, a deterministic first pass, and a human in the loop) does its share of the work.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's Next
&lt;/h2&gt;

&lt;p&gt;Workday support, smarter answer memory with local embeddings, and a "tailor my CV to this job" mode, all local.&lt;/p&gt;

&lt;p&gt;*Prior work and credits: built with Ollama, Gemma 3, WXT, pdf.js. &lt;/p&gt;

</description>
      <category>devchallenge</category>
    </item>
    <item>
      <title>[Twilio Hackathon Submission] A location based Covid-19 WhatsApp Tracker for India 🇮🇳</title>
      <dc:creator>Aditya Bose</dc:creator>
      <pubDate>Fri, 01 May 2020 06:48:32 +0000</pubDate>
      <link>https://dev.to/adybose/twilio-hackathon-submission-a-location-based-covid-19-whatsapp-tracker-for-india-1oi3</link>
      <guid>https://dev.to/adybose/twilio-hackathon-submission-a-location-based-covid-19-whatsapp-tracker-for-india-1oi3</guid>
      <description>&lt;h3&gt;
  
  
  Motivation 💡
&lt;/h3&gt;

&lt;p&gt;There is an ocean of information about COVID-19 on the Internet, but WhatsApp still remains the primary medium for clutter-free information and communication for a vast majority of people.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I built 🚀
&lt;/h2&gt;

&lt;p&gt;A location based WhatsApp bot powered by Twilio that helps users track COVID-19 cases from all over India, as well as get information about essential services to help them be better prepared to deal with the pandemic.&lt;/p&gt;

&lt;h4&gt;
  
  
  Category Submission:
&lt;/h4&gt;

&lt;p&gt;COVID-19 Communications, Interesting Integrations&lt;/p&gt;

&lt;h3&gt;
  
  
  Features
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Get country and state-wide statistics&lt;/strong&gt; 📉

&lt;ul&gt;
&lt;li&gt;Cumulative total, active, and new cases since last update.&lt;/li&gt;
&lt;li&gt;Number of patients confirmed, recovered, and deceased.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Share your WhatsApp location&lt;/strong&gt; 📌

&lt;ul&gt;
&lt;li&gt;Get localized statistics on the number of cases.&lt;/li&gt;
&lt;li&gt;Get distance from the closest detected active case.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Find essential services around you&lt;/strong&gt; 🏥

&lt;ul&gt;
&lt;li&gt;COVID-19 testing labs.&lt;/li&gt;
&lt;li&gt;Emergency healthcare services.&lt;/li&gt;
&lt;li&gt;Free food.&lt;/li&gt;
&lt;li&gt;Mental well-being and emotional support.&lt;/li&gt;
&lt;li&gt;Delivery services (vegetables, fruits, groceries, medicines).&lt;/li&gt;
&lt;li&gt;Government / NGO helplines.&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Demo
&lt;/h2&gt;

&lt;p&gt;To start interacting with the bot, send a WhatsApp message to Twilio's default shared Sandbox number &lt;code&gt;+1 415 523 8886&lt;/code&gt; with the join code &lt;em&gt;came-told&lt;/em&gt;.&lt;br&gt;
Below are the screenshots of an interaction with the bot:&lt;/p&gt;

&lt;h4&gt;
  
  
  Country and State-wide Statistics
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--F9p6rFL5--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://raw.githubusercontent.com/adbose/covid-india-whatsapp-tracker/master/assets/img1.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--F9p6rFL5--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://raw.githubusercontent.com/adbose/covid-india-whatsapp-tracker/master/assets/img1.jpeg" alt="img1" width="720" height="1280"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--65hdbSum--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://raw.githubusercontent.com/adbose/covid-india-whatsapp-tracker/master/assets/img2.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--65hdbSum--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://raw.githubusercontent.com/adbose/covid-india-whatsapp-tracker/master/assets/img2.jpeg" alt="img2" width="720" height="1280"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Localized cases
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--3ijiUtwF--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://raw.githubusercontent.com/adbose/covid-india-whatsapp-tracker/master/assets/img3.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--3ijiUtwF--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://raw.githubusercontent.com/adbose/covid-india-whatsapp-tracker/master/assets/img3.jpeg" alt="img3" width="720" height="1280"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Y6tlgHIz--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://raw.githubusercontent.com/adbose/covid-india-whatsapp-tracker/master/assets/img4.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Y6tlgHIz--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://raw.githubusercontent.com/adbose/covid-india-whatsapp-tracker/master/assets/img4.jpeg" alt="img4" width="720" height="1280"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Essential Services
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--abhsiJb9--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://raw.githubusercontent.com/adbose/covid-india-whatsapp-tracker/master/assets/img5.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--abhsiJb9--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://raw.githubusercontent.com/adbose/covid-india-whatsapp-tracker/master/assets/img5.jpeg" alt="img5" width="720" height="1280"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--MSQVvkJk--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://raw.githubusercontent.com/adbose/covid-india-whatsapp-tracker/master/assets/img6.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--MSQVvkJk--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://raw.githubusercontent.com/adbose/covid-india-whatsapp-tracker/master/assets/img6.jpeg" alt="img6" width="720" height="1280"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--HySb_Y4Q--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://raw.githubusercontent.com/adbose/covid-india-whatsapp-tracker/master/assets/img7.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--HySb_Y4Q--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://raw.githubusercontent.com/adbose/covid-india-whatsapp-tracker/master/assets/img7.jpeg" alt="img7" width="720" height="1280"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--pl-OWVZ3--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://raw.githubusercontent.com/adbose/covid-india-whatsapp-tracker/master/assets/img8.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--pl-OWVZ3--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://raw.githubusercontent.com/adbose/covid-india-whatsapp-tracker/master/assets/img8.jpeg" alt="img8" width="720" height="1280"&gt;&lt;/a&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--vymdIVR_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://raw.githubusercontent.com/adbose/covid-india-whatsapp-tracker/master/assets/img9.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--vymdIVR_--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://raw.githubusercontent.com/adbose/covid-india-whatsapp-tracker/master/assets/img9.jpeg" alt="img9" width="720" height="1280"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Link to Code
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/adbose/covid-india-whatsapp-tracker"&gt;Github&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  How I built it
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Tech Stack
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://www.twilio.com/whatsapp"&gt;Twilio API for WhatsApp&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://flask.palletsprojects.com"&gt;Flask&lt;/a&gt; microservice framework / Python 3.8&lt;/li&gt;
&lt;li&gt;&lt;a href="https://nominatim.openstreetmap.org"&gt;OpenStreetMap Nominatim&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The project is developed using Python3.8 with the Flask web microframework, and uses Twilio's Programmable SMS API for WhatsApp.&lt;br&gt;
To offer the location based features of our bot we used the &lt;code&gt;geopy&lt;/code&gt; OpenStreetMap library.&lt;br&gt;
We used Heroku as our platform to build and deploy our code to Production where we used Gunicorn as our web server.&lt;br&gt;
To send and receive messages with users, we Twilio's Sandbox for WhatsApp configured with our Heroku app's URL endpoint as a webhook.&lt;/p&gt;

&lt;p&gt;To get more detailed instructions on how to set up and run the project locally, and deploy it on Production, checkout the &lt;a href="https://github.com/adbose/covid-india-whatsapp-tracker/blob/master/README.md"&gt;README.md&lt;/a&gt; file from the project repository link above.&lt;/p&gt;

&lt;h2&gt;
  
  
  Additional Resources/Info
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://api.covid19india.org/"&gt;Covid-19 India API&lt;/a&gt;: A volunteer-driven, crowdsourced database for COVID-19 stats &amp;amp; patient tracing in India&lt;br&gt;
&lt;a href="https://www.twilio.com/docs/whatsapp"&gt;Twilio API Docs for WhatsApp&lt;/a&gt;: Official Twilio Documentation for the Programmable SMS API for WhatsApp. &lt;/p&gt;

</description>
      <category>twiliohackathon</category>
      <category>python</category>
      <category>showdev</category>
    </item>
  </channel>
</rss>
