<?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: Bug Fixer</title>
    <description>The latest articles on DEV Community by Bug Fixer (@bug_fixer).</description>
    <link>https://dev.to/bug_fixer</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%2F4197615%2F22ab3dde-3ab7-4636-ad73-79db2f5f213b.png</url>
      <title>DEV Community: Bug Fixer</title>
      <link>https://dev.to/bug_fixer</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/bug_fixer"/>
    <language>en</language>
    <item>
      <title>I Was Reading 150 Messages Every Morning, So I Built a Sloth to Do It For Me</title>
      <dc:creator>Bug Fixer</dc:creator>
      <pubDate>Thu, 22 Oct 2026 07:46:32 +0000</pubDate>
      <link>https://dev.to/bug_fixer/i-was-reading-150-messages-every-morning-so-i-built-a-sloth-to-do-it-for-me-5a0p</link>
      <guid>https://dev.to/bug_fixer/i-was-reading-150-messages-every-morning-so-i-built-a-sloth-to-do-it-for-me-5a0p</guid>
      <description>&lt;p&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 Week 3: Slow and Steady&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;I wake up, I unlock my phone, and before I've had tea I'm already behind.&lt;/p&gt;

&lt;p&gt;Last night my family group, my project channel and my inbox produced about 150 messages between them. Most of it was harmless noise — goodnights, a menu debate, cricket highlights on loop. Exactly a couple of those messages actually needed me. One of them was buried somewhere in the middle of the scroll, and if I skimmed too fast, I would miss it entirely.&lt;/p&gt;

&lt;p&gt;That is the problem Lazy Morning Brief exists to delete.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Lazy Morning Brief: Wake up. Read two lines. Know everything.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;You paste an overnight chat, drop in a WhatsApp export, or paste an inbox dump. It hands you back:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;
&lt;strong&gt;A brief of exactly two lines&lt;/strong&gt; — the most important thing that happened, and where it landed. Not two paragraphs. Two lines. That limit is enforced in code, not just politely requested from the model.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Needs your reply&lt;/strong&gt; — only the items where someone directly asked you a question, asked for a decision, or set you a deadline, with who asked.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Safe to ignore&lt;/strong&gt; — a count and a one-line gist of everything else, so you can skip it without the guilt-scroll.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Honest stats&lt;/strong&gt; — messages scanned, participants, and time saved, calculated transparently so you can check the maths yourself.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;It works three ways in: paste any chat text, drag-and-drop a WhatsApp &lt;code&gt;.txt&lt;/code&gt; export, or load one of the built-in fictional samples. There is a web UI and a CLI over the same pipeline, for whichever kind of morning you are having.&lt;/p&gt;

&lt;p&gt;Who gets lazier? Me, first. But also anyone who is the reliable one in a family group, the approver in a work channel, or the person whose inbox fills up overnight while other time zones are awake. The effort saved is not just minutes — it is not starting the day with dread, and not missing the one ask that mattered because it arrived at 10:31 pm under a pile of biryani opinions.&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;Live demo:&lt;/strong&gt; &lt;a href="https://huggingface.co/spaces/waqarse16/lazy-morning-brief" rel="noopener noreferrer"&gt;https://huggingface.co/spaces/waqarse16/lazy-morning-brief&lt;/a&gt; — a free static showcase of the real UI. Load a sample there and you'll see the exact brief Gemma produced for it in a genuine local run (details below).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Source code:&lt;/strong&gt; &lt;a href="https://github.com/waqarse16/lazy-morning-brief" rel="noopener noreferrer"&gt;https://github.com/waqarse16/lazy-morning-brief&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Here is the walkthrough I use myself, with the bundled fictional family sample:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. The overnight spiral.&lt;/strong&gt; The sample is a real-shaped WhatsApp export: 40 messages from 5 senders, plus 2 system lines (the end-to-end encryption notice and the group-creation line) that the parser strips out before anything reaches the model. The family spends most of those 40 messages settling one Sunday lunch — 1 pm vs 2 pm, a compromise of arrive 1:30 with food by 2, biryani winning over pulao and karahi, who is bringing raita, dessert, and soft drinks, and where to park.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. The buried ask.&lt;/strong&gt; At 10:31 pm, in the middle of all that, Ayesha asks Ali — that's the reader in this sample — one important thing: Ammi's wheelchair ramp at her gate is broken, she cannot manage the steps, and Ali is the only one free to pick her up at 1 pm on Sunday. Please confirm tonight. Then the chat immediately moves on to cricket and goodnights, and by morning that ask is buried under all of it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. The brief.&lt;/strong&gt; You drop the export in, press &lt;strong&gt;☕ Give me my brief&lt;/strong&gt;, and instead of re-reading the whole spiral you get the two lines, the one needs-reply item, and permission to ignore the rest.&lt;/p&gt;

&lt;p&gt;This is what the brief looks like on that family sample:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Captured output — a real run of the CLI on the family sample, 2026-10-21, Gemma 3 1B running locally via Ollama on a 2-CPU sandbox with no GPU (36 seconds, unedited — full record in &lt;code&gt;docs/sample-run-output.md&lt;/code&gt; in the repo):&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Your brief&lt;/strong&gt;&lt;br&gt;
Ayesha is setting a specific time and location for lunch with friends, and needs confirmation from Ali regarding his car and transportation for her.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Needs your reply&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Ali: Car, Sunday 1 pm, confirm.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Safe to ignore&lt;/strong&gt;&lt;br&gt;
39 messages — the model gist-ed them as the ramp/transport discussion (with one honest 1B-model slip: it is Ammi's ramp, not Ayesha's — I kept the output exactly as generated rather than tidying it up).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Stats:&lt;/strong&gt; 40 messages scanned · 5 people · ~3m 10s of reading saved · model: gemma3:1b&lt;/p&gt;

&lt;p&gt;A second captured run (project group, 24 messages) is in the same file: it nailed both load-bearing facts — deployment live, client deadline moved to Monday 9 am — and the one action item, approving the staging cleanup script.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;The project ships with two other fictional samples so you can feel the shape on different noise: a project group at 24 messages, and an inbox dump at 9 messages. Same promise every time — two lines, what needs you, what does not.&lt;/p&gt;

&lt;p&gt;A note on the hosted demo, honestly: the showcase above is a static page, so it cannot summarise new text — and I did not fake one that pretends to. Summarising is the one step that must happen on a machine you control, with your own Ollama instance (see &lt;em&gt;How I Built It&lt;/em&gt; below), because that is the entire privacy design. What the showcase does show is real: the exact UI, and for each sample, the genuine output captured from an actual local run. The full, private experience is the local one — that is the point of the project.&lt;/p&gt;

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


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/waqarse16" rel="noopener noreferrer"&gt;
        waqarse16
      &lt;/a&gt; / &lt;a href="https://github.com/waqarse16/lazy-morning-brief" rel="noopener noreferrer"&gt;
        lazy-morning-brief
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Wake up. Read two lines. Know everything. A local, private morning brief for overnight chats — powered by open-weight Gemma via Ollama.
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;🦥 Lazy Morning Brief&lt;/h1&gt;
&lt;/div&gt;
&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;Wake up. Read two lines. Know everything.&lt;/h3&gt;
&lt;/div&gt;
&lt;blockquote&gt;
&lt;p&gt;Last night your family group, your project channel and your inbox produced
&lt;strong&gt;150 messages&lt;/strong&gt;. Exactly &lt;strong&gt;two&lt;/strong&gt; of them needed you. Lazy Morning Brief
finds those two — and lets you skip the other 148 with a clear conscience.&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/fdf2982b9f5d7489dcf44570e714e3a15fce6253e0cc6b5aa61a075aac2ff71b/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4c6963656e73652d4d49542d79656c6c6f772e737667"&gt;&lt;img src="https://camo.githubusercontent.com/fdf2982b9f5d7489dcf44570e714e3a15fce6253e0cc6b5aa61a075aac2ff71b/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4c6963656e73652d4d49542d79656c6c6f772e737667" alt="License: MIT"&gt;&lt;/a&gt;
&lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/b566d396d2e22b5a6a8b05f1168f96e80fb8e42d45d17cd178a039e81a2b047a/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f707974686f6e2d332e31322d626c75652e737667"&gt;&lt;img src="https://camo.githubusercontent.com/b566d396d2e22b5a6a8b05f1168f96e80fb8e42d45d17cd178a039e81a2b047a/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f707974686f6e2d332e31322d626c75652e737667" alt="Python 3.12"&gt;&lt;/a&gt;
&lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/c8282ccc39b003db90e8d36b594309b95adecbe7aeb2aca1e721a86066aca3ac/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6d6f64656c2d47656d6d61253230332532302543322542372532306f70656e2d2d7765696768742d737563636573732e737667"&gt;&lt;img src="https://camo.githubusercontent.com/c8282ccc39b003db90e8d36b594309b95adecbe7aeb2aca1e721a86066aca3ac/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6d6f64656c2d47656d6d61253230332532302543322542372532306f70656e2d2d7765696768742d737563636573732e737667" alt="Model: Gemma 3 (open-weight)"&gt;&lt;/a&gt;
&lt;a rel="noopener noreferrer nofollow" href="https://camo.githubusercontent.com/0939da8d8dd8e643fa547123f02ee1c7d51525f9971c2154e95222ae4a1a5feb/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f707269766163792d3130302532352532306c6f63616c2d627269676874677265656e2e737667"&gt;&lt;img src="https://camo.githubusercontent.com/0939da8d8dd8e643fa547123f02ee1c7d51525f9971c2154e95222ae4a1a5feb/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f707269766163792d3130302532352532306c6f63616c2d627269676874677265656e2e737667" alt="Privacy: 100% local"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;The problem&lt;/h2&gt;
&lt;/div&gt;
&lt;p&gt;Group chats do not sleep when you do. A family group planning one Sunday
lunch can generate 40+ messages about the time, the menu, and who got how
many potatoes in their biryani — while the &lt;em&gt;one&lt;/em&gt; message that actually needs
you ("can you pick Ammi up at 1 pm? Please confirm tonight") scrolls away
under cricket highlights and goodnights. Work chats and inboxes are the
same: a deadline quietly moved at 11:25 pm, an approval only you can give,
buried under newsletters.&lt;/p&gt;
&lt;p&gt;Reading it all costs real time and a little dread. Skipping it costs missed
asks…&lt;/p&gt;&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/waqarse16/lazy-morning-brief" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;p&gt;The repo includes the FastAPI app and CLI, the deterministic parser, the versioned prompt and output-contract code, the fictional samples, the test suite, plus a &lt;code&gt;Dockerfile&lt;/code&gt; and &lt;code&gt;render.yaml&lt;/code&gt; for deployment. Everything is MIT licensed.&lt;/p&gt;

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

&lt;p&gt;&lt;strong&gt;Stack:&lt;/strong&gt; Python 3.12 + FastAPI (with a stdlib fallback server if FastAPI is unavailable), vanilla HTML/CSS/JS on the front end, and Ollama for local inference. No build step, no heavy dependencies — the Ollama client itself is stdlib-only.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Model:&lt;/strong&gt; Gemma 3, &lt;code&gt;gemma3:1b&lt;/code&gt;, open-weight, running via Ollama on &lt;code&gt;localhost&lt;/code&gt;. I chose it small on purpose. A 1B model runs on an ordinary laptop with no GPU, which is what makes "private, offline, free forever" real rather than a slogan. It is configurable via &lt;code&gt;OLLAMA_MODEL&lt;/code&gt; — &lt;code&gt;qwen2.5:1.5b&lt;/code&gt; and &lt;code&gt;llama3.2:1b&lt;/code&gt; are documented alternatives in the repo if you want to trade speed for strength.&lt;/p&gt;

&lt;p&gt;Three design choices did most of the work:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Parser before AI.&lt;/strong&gt; WhatsApp Android format (&lt;code&gt;12/10/2026, 9:41 pm - Name: msg&lt;/code&gt;), WhatsApp iOS format (&lt;code&gt;[12/10/26, 9:41:05 pm] Name: msg&lt;/code&gt;), plain &lt;code&gt;Name: message&lt;/code&gt; threads, and email dumps starting with &lt;code&gt;From:&lt;/code&gt; are all parsed deterministically in plain Python — no AI involved. System lines (encryption notices, "X added Y", media placeholders, group housekeeping) are stripped and counted in code, never sent to the model. Counts and participants are also computed here. A small model needs clean input, and statistics should never be a model's guess.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Output contract enforced in code.&lt;/strong&gt; The prompt in &lt;code&gt;app/prompts.py&lt;/code&gt; demands a strict format, and &lt;code&gt;summarizer.parse_model_output&lt;/code&gt; defensively parses whatever comes back and trims the brief to exactly two lines. If the model rambles, the product promise still holds — because code holds it, not hope.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Honest failure by design.&lt;/strong&gt; If Ollama is not running, the UI, the API, and the CLI all return the same clear, structured error with the exact fix commands (&lt;code&gt;ollama pull gemma3:1b&lt;/code&gt;, &lt;code&gt;ollama serve&lt;/code&gt;). There is no extractive or keyword fallback quietly dressed up as AI. I would rather the tool say "I can't do this right now, here's how to fix it" than fake a summary.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tests:&lt;/strong&gt; the pytest suite — 19 tests, all passing with no model downloaded — covers both WhatsApp formats, system-line stripping, the stats, the prompt contract, model-output parsing with a mocked Ollama, and the API's health and offline error paths. That last part mattered to me: the failure path is a feature, so it gets tested like one.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why Does Open Innovation Matter?
&lt;/h2&gt;

&lt;p&gt;Because the input to this tool is the most private text in a person's life.&lt;/p&gt;

&lt;p&gt;Family arguments and jokes. Work threads. An inbox. If I use a closed cloud summariser, I have to upload all of that to someone else's server, keep a subscription running, and trust a retention policy I cannot inspect. The service might be well-behaved. I just have no way to know — I only have their promise.&lt;/p&gt;

&lt;p&gt;Lazy Morning Brief is architected the other way. The summariser is an open-weight model running on your own machine via Ollama. The only network call the app ever makes is to Ollama on &lt;code&gt;localhost&lt;/code&gt;. No message leaves the machine. No API key. No subscription. It works on a plane and in a village with no signal.&lt;/p&gt;

&lt;p&gt;That is the difference I keep coming back to: a closed API cannot honestly promise your chats never leave your machine, because by design they have to. Open weights plus local inference make "your chats never leave your machine" a fact about the system, not a line in a privacy policy. The weights are yours, the model costs nothing, and anyone can inspect it, swap it, and improve it.&lt;/p&gt;

&lt;p&gt;A tool about doing less should be built on that kind of openness.&lt;/p&gt;

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

&lt;p&gt;I did not want inflated numbers, so the maths is deliberately boring and shown on every result:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;time saved = (messages × 5s) − 10s
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Reading one chat message properly takes about 5 seconds. The brief takes about 10 seconds to read.&lt;/p&gt;

&lt;p&gt;On the family sample: 40 messages × 5 seconds is 3m 20s of reading, minus the 10-second brief — &lt;strong&gt;3m 10s saved in one morning&lt;/strong&gt;. Do that every morning and it is &lt;strong&gt;about 19 hours a year&lt;/strong&gt; handed back to you. That is the measured sample, not a projection about all your chats combined — your real groups will vary, and the app shows you its working either way.&lt;/p&gt;

&lt;p&gt;But honestly, the minutes are not the main payoff. The missed ask is.&lt;/p&gt;

&lt;p&gt;In that sample, Ali missing the Ammi pickup does not cost 5 seconds. It costs a scramble on Sunday, an elderly parent waiting at a broken ramp, and a family thread full of "did anyone tell Ali?" The brief costs 10 seconds and puts that ask on line two, with a name next to it in &lt;em&gt;Needs your reply&lt;/em&gt;. Sloth, in this case, is just not doing the 40-message scroll — while still catching the one thing a good family member, colleague, or friend would not want to miss.&lt;/p&gt;

&lt;p&gt;Slow and steady. Read two lines. Start the day like a person, not an inbox.&lt;/p&gt;

&lt;h2&gt;
  
  
  Prize Categories
&lt;/h2&gt;

&lt;p&gt;I am submitting Lazy Morning Brief for:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Overall&lt;/strong&gt; — this project is a direct build of an official Week 3 example idea: a local agent that reads your group chats overnight and hands you a two-line summary in the morning. I tried to build that idea properly — parser, contract, honest errors, tests — rather than as a demo-day shortcut.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Best Use of Gemma&lt;/strong&gt; — Gemma 3 (&lt;code&gt;gemma3:1b&lt;/code&gt;) is the primary summariser, run locally via Ollama, and the whole prompt and output-contract layer is tuned for it. The small size is a deliberate choice so it runs on an ordinary laptop with no GPU.&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;&lt;em&gt;Built with Gemma 3, Ollama, Python and a genuine desire to never scroll a family group before breakfast again. Be a sloth. Read two lines. 🦥&lt;/em&gt;&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>hf26challenge</category>
    </item>
    <item>
      <title>I built an Apna Ghar calculator that starts from your salary — not the loan amount</title>
      <dc:creator>Bug Fixer</dc:creator>
      <pubDate>Wed, 21 Oct 2026 07:00:01 +0000</pubDate>
      <link>https://dev.to/bug_fixer/i-built-an-apna-ghar-calculator-that-starts-from-your-salary-not-the-loan-amount-4135</link>
      <guid>https://dev.to/bug_fixer/i-built-an-apna-ghar-calculator-that-starts-from-your-salary-not-the-loan-amount-4135</guid>
      <description>&lt;p&gt;Most Apna Ghar Scheme calculators I found start with the wrong question:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"How much loan do you want?"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;In real life, banks don't start there. They start with your income.&lt;/p&gt;

&lt;p&gt;A friend of mine earns around PKR 70,000–80,000 a month. He got &lt;strong&gt;PKR 4.5 million approved&lt;/strong&gt; under the scheme. That only makes sense when you work backwards from salary — what installment can you actually carry, and what loan does that installment support over 10 years?&lt;/p&gt;

&lt;p&gt;So I built a calculator that works that way.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Try it here:&lt;/strong&gt; &lt;a href="https://millionaire-mode.com/apna-ghar-loan-calculator/" rel="noopener noreferrer"&gt;Apna Ghar Scheme Calculator — Calculate Loan on Your Salary&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  What it does
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Salary mode&lt;/strong&gt; for salaried people, and a separate &lt;strong&gt;Monthly Income mode&lt;/strong&gt; for business / self-employed income&lt;/li&gt;
&lt;li&gt;Optional other income if you have a second source&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Big, clear tenure buttons — 5 / 10 / 15 / 20 years&lt;/strong&gt; — so the change is actually visible when you tap them&lt;/li&gt;
&lt;li&gt;An installment-share slider (default 60% of income) — change it and the max loan updates instantly&lt;/li&gt;
&lt;li&gt;A property-price check: enter the house/flat price and it tells you if it fits within the scheme limit or is above it&lt;/li&gt;
&lt;li&gt;For longer tenures, it also estimates the installment after year 10, when the fixed 5% period ends&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Example
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Salary: PKR 80,000&lt;/li&gt;
&lt;li&gt;Installment share: 60% = PKR 48,000/month installment&lt;/li&gt;
&lt;li&gt;Tenure: 10 years at the scheme's 5% fixed rate for the first 10 years&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Result: PKR 4,525,505 max loan — around PKR 4.5 million&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That matched my friend's real approval, which is why I kept the salary-first approach instead of copying the loan-amount-first calculators.&lt;/p&gt;

&lt;h3&gt;
  
  
  Honest caveats
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;This is an estimate tool, not a bank approval. Your bank will verify salary slips / income documents, credit history, age, and the property documents.&lt;/li&gt;
&lt;li&gt;Rates and scheme rules can change — the calculator uses adjustable October 2026 indicative defaults (5% fixed for the first 10 years, then KIBOR-based). Always confirm the current terms with your bank / the official portal before applying.&lt;/li&gt;
&lt;li&gt;A lower installment share is safer if you have other loans or high monthly expenses.&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Why I built it this way
&lt;/h3&gt;

&lt;p&gt;The existing top results are mostly loan-amount-first tools or slab tables. Useful, but they don't answer the first question most people actually have:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"On my salary, how much can I get?"&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;If you're in Pakistan and checking Apna Ghar, try entering your salary first and tell me in the comments — does the result match what your bank quoted you? That feedback will help me improve the calibration.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Built as part of Millionaire Mode's free financial tools: Car Finance Calculator, Loan vs Invest Calculator, and the Apna Ghar Calculator — all at millionaire-mode.com/financial-calculators/&lt;/em&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>pakistan</category>
      <category>finance</category>
      <category>showdev</category>
    </item>
  </channel>
</rss>
