<?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: Saad Salman</title>
    <description>The latest articles on DEV Community by Saad Salman (@saadsalman1).</description>
    <link>https://dev.to/saadsalman1</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%2F4062130%2F623a49d6-fac3-4db6-9560-4664b9e1b4f7.png</url>
      <title>DEV Community: Saad Salman</title>
      <link>https://dev.to/saadsalman1</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/saadsalman1"/>
    <language>en</language>
    <item>
      <title>The power of one thing</title>
      <dc:creator>Saad Salman</dc:creator>
      <pubDate>Fri, 23 Oct 2026 13:04:52 +0000</pubDate>
      <link>https://dev.to/saadsalman1/the-power-of-one-thing-2dgg</link>
      <guid>https://dev.to/saadsalman1/the-power-of-one-thing-2dgg</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fv90vtg4sw3d0s0sabjoh.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fv90vtg4sw3d0s0sabjoh.jpg" alt="The Power of One Thing" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A few months ago I picked up a copy of &lt;em&gt;The One Thing&lt;/em&gt; by Gary Keller and Jay Papasan, mostly because a friend wouldn't stop talking about it. I didn't expect one question from that book to rearrange how I think about my workdays. But here we are.&lt;/p&gt;

&lt;p&gt;The question is simple:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;What's the ONE thing I can do such that by doing it, everything else will be easier or unnecessary?&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fe441s292qh4gb3cmzvsd.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fe441s292qh4gb3cmzvsd.png" alt="An illustration of the book The One Thing by Gary Keller and Jay Papasan, with a tipping domino" width="800" height="547"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Read it again. It's not asking what's on your to-do list. It's not asking how you'll stay busy today. It's asking you to find the domino, the one action that knocks the rest down for you.&lt;/p&gt;

&lt;h2&gt;
  
  
  What my days actually looked like
&lt;/h2&gt;

&lt;p&gt;I work as a product manager who happens to work during US hours from Pakistan. My calendar is a mess of Slack pings, status meetings, customer escalations, bug triage and a constant stream of “quick questions” that are never quick. By 2 a.m. most days, I'd have crossed off fifteen or twenty items from my list, and I'd feel like I'd earned my exhaustion.&lt;/p&gt;

&lt;p&gt;Then I started asking myself one uncomfortable question at the end of the day: &lt;em&gt;what actually moved the product forward today?&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Some days the honest answer was nothing. I'd spent eight hours reacting to other people's priorities instead of pushing my own. I was busy. I wasn't productive. Those turned out to be very different things.&lt;/p&gt;

&lt;h2&gt;
  
  
  Activity isn't the same as progress
&lt;/h2&gt;

&lt;p&gt;Once I noticed that gap, I couldn't unsee it. Motion feels like progress because it's exhausting and it fills a calendar, but motion and progress aren't the same currency.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fonea1qt2cjldvtfj1snb.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fonea1qt2cjldvtfj1snb.png" alt="A cascade of dominoes growing larger: one small push topples progressively bigger pieces" width="799" height="405"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Look at anyone who's genuinely excellent at something. Elite athletes don't train every skill with equal intensity. They build around one strength and let everything else support it. The businesses people actually remember didn't try to serve everybody; they went narrow first and earned the right to expand later. Even the process of getting good at something works this way: you get exceptional at one thing before you're allowed to be good at many things.&lt;/p&gt;

&lt;p&gt;That's the uncomfortable part. Focus isn't really about deciding what to say yes to. It's about saying no to almost everything else, including things that look important, feel urgent or come from people you don't want to disappoint.&lt;/p&gt;

&lt;p&gt;Every “yes” is a hidden “no” to something. Your attention doesn't stretch to accommodate more; it just gets thinner.&lt;/p&gt;

&lt;h2&gt;
  
  
  The one question I actually use now
&lt;/h2&gt;

&lt;p&gt;I stopped writing long to-do lists as the first move of my day. Instead I ask myself the same question every morning:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;What's the one thing I can do today such that everything else becomes easier or unnecessary?&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Then I protect it. I put it on the calendar before Slack opens. I do it before the emails start pulling me sideways. Some days that one thing takes twenty minutes. Some days it takes four hours. Either way, once it's done, I've noticed something strange: half the other items on my old-style list either get easier or just stop mattering.&lt;/p&gt;

&lt;p&gt;Gary Keller has a line I keep coming back to: success is a short race, a sprint powered by discipline that lasts just long enough for a habit to take over. That's a more honest description of how change actually happens than anything I'd tell myself about “building better habits” in the abstract.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where I sharpen ideas like this
&lt;/h2&gt;

&lt;p&gt;A lot of what I write starts as something I said out loud first. I'm part of a &lt;a href="https://www.toastmasters.org" rel="noopener noreferrer"&gt;Toastmasters&lt;/a&gt; club. If you haven't come across it, Toastmasters is a global nonprofit built around a simple loop: you show up to a local club, give short prepared or impromptu speeches and other members give you honest, structured feedback. Thousands of clubs across more than a hundred countries, most meeting every week, all volunteer-run.&lt;/p&gt;

&lt;p&gt;It turns out “what's the one thing?” is a brutal filter for a speech, too. You can't cram fifteen ideas into five minutes and have any of them land. You pick the one that matters and build everything around it. Same discipline, smaller stage.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fvcmudfaooa746un0x33i.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fvcmudfaooa746un0x33i.png" alt="A lectern with a microphone and a speech bubble, labelled Toastmasters" width="800" height="547"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The challenge, if you want it
&lt;/h2&gt;

&lt;p&gt;Tomorrow morning, before you write your usual list, try this instead. Ask yourself the one question. Sit with it until an honest answer shows up: not the easiest task, not the loudest one, the one that matters. Then do that first.&lt;/p&gt;

&lt;p&gt;You probably won't remember this post next week. That's fine. Just remember the question.&lt;/p&gt;

&lt;p&gt;Extraordinary outcomes aren't built by doing everything. They're built by consistently doing the right thing, one decision at a time.&lt;/p&gt;

</description>
      <category>productivity</category>
      <category>books</category>
      <category>career</category>
      <category>focus</category>
    </item>
    <item>
      <title>The domino effect: a short FAQ</title>
      <dc:creator>Saad Salman</dc:creator>
      <pubDate>Thu, 01 Oct 2026 16:05:10 +0000</pubDate>
      <link>https://dev.to/saadsalman1/the-domino-effect-a-short-faq-3585</link>
      <guid>https://dev.to/saadsalman1/the-domino-effect-a-short-faq-3585</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F5w90i9z28va3tbh4aa2x.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F5w90i9z28va3tbh4aa2x.jpg" alt="The domino effect" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Every time I write about focus, it comes back to one image: a domino. Here's the whole idea as a set of questions, because that's how people actually ask about it.&lt;/p&gt;

&lt;h2&gt;
  
  
  What's the domino effect?
&lt;/h2&gt;

&lt;p&gt;You knock over one domino and it knocks over the next, which knocks over the one after that. The push you spend is tiny. The distance the chain travels is not. Small cause, large result.&lt;/p&gt;

&lt;h2&gt;
  
  
  A domino can only knock over one its own size, though.
&lt;/h2&gt;

&lt;p&gt;No, and this is the part that surprised me. In 1983 a physicist named Lorne Whitehead showed that a domino can topple another about one and a half times its size. So if you line up a row where each piece is 50% bigger than the last, every small domino still hands off to a bigger one.&lt;/p&gt;

&lt;h2&gt;
  
  
  So how big does it get?
&lt;/h2&gt;

&lt;p&gt;Big, fast. Start at two inches and grow each domino by half. By Keller's telling in the book, the 18th domino is as tall as the Leaning Tower of Pisa. The 31st is taller than Everest. The 57th nearly reaches the moon. All of it set off by a push you could manage with one finger.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fuoblw5yabrt7zn5zeys0.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fuoblw5yabrt7zn5zeys0.png" alt="Dominoes growing 50% each step, from 2 inches to the height of the moon at the 57th" width="799" height="434"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What does a physics demo have to do with my to-do list?
&lt;/h2&gt;

&lt;p&gt;I used to treat progress like it needed a proportional shove: big result, big effort, so spread yourself across fifteen tasks and give each one a tap. Dominoes don't fall that way. They fall because someone lined them up and knocked over the first. The work is in the lining up and the first hit, not the shoving.&lt;/p&gt;

&lt;h2&gt;
  
  
  I have twenty priorities, not one.
&lt;/h2&gt;

&lt;p&gt;You have twenty things you'd like done. One of them, done first, makes several of the others easier or pointless. That's your first domino. The other nineteen aren't equal; they just look equal sitting on a list.&lt;/p&gt;

&lt;h2&gt;
  
  
  Fine. I did my one thing today. Now what?
&lt;/h2&gt;

&lt;p&gt;This is the part I missed for years. The domino effect doesn't only run inside a single chain, it runs across days. Today's one thing is domino #1. Because you did it, tomorrow's one thing is a little bigger and a little easier to reach. Do that, and the day after has a bigger domino still. One right thing, then the next, then the next: the same geometric math as the row above, played out on a calendar instead of a tabletop.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ffcjsud5vy4jd1is5rcw5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Ffcjsud5vy4jd1is5rcw5.png" alt="A row of dominoes falling in sequence, each larger than the last, standing in for one focused day setting up the next" width="799" height="373"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;A single good day looks small. Thirty of them, each one setting up the next, is the 18th domino. You never feel the Tower of Pisa on a given morning. You feel one task that's slightly bigger than yesterday's. The size compounds while your attention stays on the next push.&lt;/p&gt;

&lt;h2&gt;
  
  
  Is this real, or just a tidy metaphor?
&lt;/h2&gt;

&lt;p&gt;It's useful because it changes what you measure. Instead of "how much did I get through today," the question becomes "did I knock over the one that sets up tomorrow." Some days that takes twenty minutes. The compounding does the rest of the work.&lt;/p&gt;

&lt;h2&gt;
  
  
  Where do I start?
&lt;/h2&gt;

&lt;p&gt;Tomorrow morning, before the list, ask one question: what's the one thing I can do today such that everything else becomes easier or unnecessary? Do that first, then do it again the next day. I wrote more about that question &lt;a href="https://saadsalman.org/blog/the-power-of-one-thing" rel="noopener noreferrer"&gt;here&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Pick tomorrow's first domino tonight. Then keep knocking them over in order.&lt;/p&gt;

</description>
      <category>productivity</category>
      <category>habits</category>
      <category>books</category>
      <category>career</category>
    </item>
    <item>
      <title>Winning your own name is an entity problem</title>
      <dc:creator>Saad Salman</dc:creator>
      <pubDate>Tue, 01 Sep 2026 19:32:38 +0000</pubDate>
      <link>https://dev.to/saadsalman1/winning-your-own-name-is-an-entity-problem-39l1</link>
      <guid>https://dev.to/saadsalman1/winning-your-own-name-is-an-entity-problem-39l1</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fk4et2lg22n5zh5h309w7.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fk4et2lg22n5zh5h309w7.jpg" alt="Winning your own name" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;When I rebuilt this site, Google could already find me. The hard part was standing out from every other Saad Salman: a fabrics business, a film director, hundreds of namesakes. Winning your own name is an entity problem — ambiguity and authority, not discovery.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fowpj3d34lvset2jmak3a.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fowpj3d34lvset2jmak3a.png" alt="Search result cards for four different " width="799" height="405"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;So I wrote down everything that worked: the on-site setup (titles, a JSON-LD entity graph, canonicals, sitemap), the off-site profile links that matter, and a free Google Search Console script that tracks your rank daily. Then I open-sourced it.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fmfea30z8xtxdsnis4eeu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fmfea30z8xtxdsnis4eeu.png" alt="An entity graph with a central " width="799" height="501"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It's a Claude skill, MIT-licensed, works for people and companies, and drops straight into Claude Code: &lt;a href="https://github.com/saadsalmankhan/entity-seo-skill" rel="noopener noreferrer"&gt;github.com/saadsalmankhan/entity-seo-skill&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F8xk7rktvbq0usjrkhtgi.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F8xk7rktvbq0usjrkhtgi.png" alt="The entity-seo-skill repository on GitHub" width="800" height="563"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Install it in one line
&lt;/h2&gt;

&lt;p&gt;It's a Claude skill, so there's nothing to clone or configure. Open Claude Code and paste this into the chat:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Install this skill globally https://github.com/saadsalmankhan/entity-seo-skill
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;It'll pull down the playbook and the Search Console rank script, and walk you through the on-site and off-site steps for your own name or brand.&lt;/p&gt;

&lt;p&gt;No black-hat tricks and no promises of position one. Just the legitimate playbook, and honest expectations about how long it takes.&lt;/p&gt;

&lt;p&gt;Take it, fork it, open an issue: &lt;a href="https://github.com/saadsalmankhan/entity-seo-skill" rel="noopener noreferrer"&gt;github.com/saadsalmankhan/entity-seo-skill&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>seo</category>
      <category>opensource</category>
      <category>claude</category>
      <category>branding</category>
    </item>
    <item>
      <title>I built a free API for Pakistani mutual fund NAVs (because MUFAP's own one doesn't work)</title>
      <dc:creator>Saad Salman</dc:creator>
      <pubDate>Sun, 30 Aug 2026 11:02:52 +0000</pubDate>
      <link>https://dev.to/saadsalman1/i-built-a-free-api-for-pakistani-mutual-fund-navs-because-mufaps-own-one-doesnt-work-20k3</link>
      <guid>https://dev.to/saadsalman1/i-built-a-free-api-for-pakistani-mutual-fund-navs-because-mufaps-own-one-doesnt-work-20k3</guid>
      <description>&lt;p&gt;&lt;em&gt;Originally published on &lt;a href="https://saadsalman.org/blog/free-api-pakistani-mutual-fund-navs" rel="noopener noreferrer"&gt;saadsalman.org&lt;/a&gt; in July 2026. Updated August 2026 with NAV history, fund metadata and a free public dataset.&lt;/em&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Why MUFAP's own API doesn't work
&lt;/h2&gt;

&lt;p&gt;I needed daily NAV data for Pakistani mutual funds for Gramafin, a personal finance app I'm building. MUFAP, the Mutual Funds Association of Pakistan, does have a JSON API. It just doesn't work for anyone who isn't a browser. I replicated Chrome's exact headers and parameters and still got 500 errors on every server-side request. My best guess is the frontend JavaScript establishes some session or anti-forgery state that isn't practical to replicate outside a real browser.&lt;/p&gt;

&lt;p&gt;Their public Fund Directory page is a different story. It's a plain server-rendered HTML table with over 500 funds, current NAVs and prices sitting right in the markup. No auth, no pagination, no JavaScript required. So instead of fighting the broken API, I scrape the page that works.&lt;/p&gt;

&lt;h2&gt;
  
  
  To be fair, there is a paid option
&lt;/h2&gt;

&lt;p&gt;CapitalStake sells a serious Pakistani mutual funds data product with AUMs, sector allocations, holdings history and uptime guarantees, delivered over REST, WebSocket, CSV and Excel. It's a commercial product with a "request a consultation" button, and if you're an organization that needs deep historical data and strict SLAs, that's probably where you should go.&lt;/p&gt;

&lt;p&gt;But most developers just need today's NAVs as JSON without a sales call or a subscription. That's the gap this fills.&lt;/p&gt;

&lt;h2&gt;
  
  
  Turning it into its own thing
&lt;/h2&gt;

&lt;p&gt;The scraper started as a piece of Gramafin's backend and grew into a standalone MIT-licensed project: &lt;a href="https://github.com/saadsalmankhan/pakistan-mutual-funds-api" rel="noopener noreferrer"&gt;pakistan-mutual-funds-api&lt;/a&gt;. If you're building anything fintech-adjacent in Pakistan, you've probably hit this exact wall, so I pulled it out into something you can clone and run in two minutes. No database to set up, no cloud account to configure, no framework to learn.&lt;/p&gt;

&lt;h2&gt;
  
  
  What it actually does
&lt;/h2&gt;

&lt;p&gt;Three things:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Scrapes&lt;/strong&gt; MUFAP's Fund Directory with cheerio, pulling each fund's name, AMC, NAV, offer price and category&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Stores&lt;/strong&gt; the result as plain JSON on disk, no Postgres or Redis required&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Serves&lt;/strong&gt; it from a small Express API at &lt;code&gt;GET /api/funds&lt;/code&gt;, CORS wide open so you can call it straight from frontend code&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;By default it re-scrapes once a day and skips weekends, since MUFAP only publishes new NAVs on business days. Both are configurable through environment variables.&lt;/p&gt;

&lt;h2&gt;
  
  
  Try it
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/saadsalmankhan/pakistan-mutual-funds-api.git
&lt;span class="nb"&gt;cd &lt;/span&gt;pakistan-mutual-funds-api
npm &lt;span class="nb"&gt;install
cp&lt;/span&gt; .env.example .env
npm run dev
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The API is up at &lt;code&gt;localhost:4000/api/funds&lt;/code&gt;, and the README covers every configuration option.&lt;/p&gt;

&lt;h2&gt;
  
  
  Update (August 2026): it's a dataset now, not just an API
&lt;/h2&gt;

&lt;p&gt;Since publishing this, the project grew the pieces people kept asking for.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;NAV history.&lt;/strong&gt; Every scrape now appends each fund's NAV to a per-fund NDJSON file, so any instance builds its own time series from the day it starts running. New endpoint: &lt;code&gt;GET /api/funds/:id/history?from=&amp;amp;to=&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Lookups and filters.&lt;/strong&gt; &lt;code&gt;GET /api/funds/:id&lt;/code&gt; for a single fund, plus &lt;code&gt;?category=&lt;/code&gt;, &lt;code&gt;?amc=&lt;/code&gt;, &lt;code&gt;?q=&lt;/code&gt; and &lt;code&gt;?shariah=true&lt;/code&gt; on the list endpoint, and &lt;code&gt;/api/categories&lt;/code&gt; and &lt;code&gt;/api/amcs&lt;/code&gt; for building dropdowns.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Shariah flags, benchmarks and expense ratios.&lt;/strong&gt; Every fund now carries a &lt;code&gt;shariah&lt;/code&gt; boolean (295 of 549 funds are Shariah-compliant, derived from MUFAP's own category names) and a benchmark mapping: KSE-100 for conventional equity categories, KMI-30 for Shariah equity, null where no single index honestly applies. A separate &lt;code&gt;npm run enrich&lt;/code&gt; pulls each fund's total expense ratio, management fee and inception date from MUFAP's expense ratios table and merges them into the snapshot.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A public dataset that updates itself.&lt;/strong&gt; If you don't want to run anything at all: &lt;a href="https://github.com/saadsalmankhan/pakistan-mutual-funds-data" rel="noopener noreferrer"&gt;pakistan-mutual-funds-data&lt;/a&gt; is a repo where a GitHub Action scrapes MUFAP every business day and commits the snapshot, the growing NAV history and the fund metadata. You can &lt;code&gt;curl&lt;/code&gt; the raw files and be done, and the commit log doubles as an audit trail of every data change.&lt;/p&gt;

&lt;p&gt;Why this matters: a team building an AI mutual funds advisor &lt;a href="https://builder.aws.com/content/3At6r43MnBxCrVr6tBE1qL9DdA3/aideas-gullak-autonomous-agents-for-mutual-funds" rel="noopener noreferrer"&gt;wrote about their AWS hackathon project&lt;/a&gt; that no clean, structured, public dataset existed for Pakistani mutual funds, and they had to assemble 301,749 NAV rows by hand before they could build anything. That dataset now exists, it updates itself daily and it's free.&lt;/p&gt;

&lt;p&gt;If you build something with it, I'd genuinely like to hear about it. I'm at &lt;a href="https://saadsalman.org" rel="noopener noreferrer"&gt;saadsalman.org&lt;/a&gt;.&lt;/p&gt;

</description>
      <category>opensource</category>
      <category>fintech</category>
      <category>pakistan</category>
      <category>api</category>
    </item>
    <item>
      <title>How I Built This Website With Claude Code</title>
      <dc:creator>Saad Salman</dc:creator>
      <pubDate>Tue, 04 Aug 2026 09:14:04 +0000</pubDate>
      <link>https://dev.to/saadsalman1/how-i-built-this-website-with-claude-code-dd9</link>
      <guid>https://dev.to/saadsalman1/how-i-built-this-website-with-claude-code-dd9</guid>
      <description>&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fu199iyshe7wben3juuaj.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fu199iyshe7wben3juuaj.jpg" alt="Homepage of saadsalman.org, built with Claude Code" width="800" height="450"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This entire website — the pages you're clicking through, the illustrations, the CMS this post was published from, even the favicon in your browser tab — was built through a conversation with Claude Code, Anthropic's AI coding agent. I didn't write the code. I described what I wanted, reviewed what came back, and steered. Here's how it went.&lt;/p&gt;

&lt;h2&gt;
  
  
  Start with a vibe, not a spec
&lt;/h2&gt;

&lt;p&gt;My first message was one line: "keep a clean white look, take inspiration from Apple and how Claude designs." No wireframes, no tickets. Claude scaffolded a Next.js and Tailwind project, pulled my details from my resume PDF, and had a working site — hero, experience, resume download, analytics hooks — running in a live browser preview within minutes.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F8rd6v9kibi1ix12layno.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F8rd6v9kibi1ix12layno.jpg" alt="The finished homepage: gradient wordmark, hand-drawn payment illustrations, and explore tiles" width="799" height="477"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Borrow taste, then make it yours
&lt;/h2&gt;

&lt;p&gt;I shared a portfolio site I liked and said "go creative." Claude drew an entire illustration language from scratch — hand-written SVGs of payment cards, tap-to-pay phones, currency coins, and funnels, each with flat color blocks offset behind ink outlines. That language now runs through everything: the hero, the section tiles, the case-study artwork, the S-coin favicon in the browser tab, and even my LinkedIn banner.&lt;/p&gt;

&lt;h2&gt;
  
  
  Restructure without fear
&lt;/h2&gt;

&lt;p&gt;The first draft was one long page, and honestly, it was boring. So we split it: a minimal home, then About, Experience, Blog, and Case Studies as their own pages. Copy got trimmed, gradients came in, my photo got a cleaner background and an animated frame. Big refactors are cheap when your pair programmer holds the whole codebase in its head — and checks every change in a real browser, on desktop and mobile widths, before calling it done.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fncdb97sj9ip3nk0lfv4i.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2Fncdb97sj9ip3nk0lfv4i.jpg" alt="The About page: photo with an offset-color frame and floating sparkles from the site's illustration language" width="799" height="477"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Give the site a brain
&lt;/h2&gt;

&lt;p&gt;For publishing, Claude created a Sanity project on my account through its management API, defined schemas for blog posts and case studies, and embedded the editing studio directly into the site. Content goes live within a minute of hitting Publish — no redeploys, no code changes.&lt;/p&gt;

&lt;h2&gt;
  
  
  Ship it like you mean it
&lt;/h2&gt;

&lt;p&gt;Every change was committed to GitHub and auto-deployed by Vercel. When I pointed my domain at the project, Claude attached it, told me exactly which DNS records to add, watched the records propagate, and set up the www redirect and SSL. Analytics counts visits, project clicks, and resume downloads; speed monitoring watches how fast the site feels for real visitors.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F7gttun24s3r4kbcluvaz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Farticles%2F7gttun24s3r4kbcluvaz.png" alt="The ecosystem: Claude Code at the center, orchestrating Next.js, Sanity CMS, GitHub, Vercel, Namecheap DNS, and Google Analytics 4" width="800" height="500"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  What I'd tell you if you're trying this
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Talk in outcomes, not implementations. "How do we track clicks and downloads," plus a reference link, beats any detailed spec I could have written.&lt;/li&gt;
&lt;li&gt;Ask for proof. Every change was verified in a live browser preview — screenshots at desktop and mobile widths — before I ever looked at it.&lt;/li&gt;
&lt;li&gt;Iterate out loud. "The intro is too long and boring" and "we need to support rapid publishing of articles and case studies" are both perfectly good code reviews.&lt;/li&gt;
&lt;li&gt;Keep one design language. When the site, favicon, banner, and blog art share a visual system, everything reads as intentional.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Total build: a few conversations spread across two days. Lines of code I wrote myself: zero. If you've been putting off building your personal site, the excuse pool just got a lot shallower.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>nextjs</category>
      <category>buildinpublic</category>
      <category>webdev</category>
    </item>
  </channel>
</rss>
