<?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 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>
