<?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: Md Salman Kawcher, MSc</title>
    <description>The latest articles on DEV Community by Md Salman Kawcher, MSc (@salmankawcher).</description>
    <link>https://dev.to/salmankawcher</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%2F2619399%2F16a4fd06-14e2-4a62-9acd-3d2657b3bdda.png</url>
      <title>DEV Community: Md Salman Kawcher, MSc</title>
      <link>https://dev.to/salmankawcher</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/salmankawcher"/>
    <language>en</language>
    <item>
      <title>Building a Zero-Cost Portfolio Site for a Friend, With AI, GitHub &amp; Netlify (No Domain, No Hosting Bill)</title>
      <dc:creator>Md Salman Kawcher, MSc</dc:creator>
      <pubDate>Wed, 08 Jul 2026 15:12:47 +0000</pubDate>
      <link>https://dev.to/salmankawcher/building-a-zero-cost-portfolio-site-for-a-friend-with-ai-github-netlify-no-domain-no-hosting-3odp</link>
      <guid>https://dev.to/salmankawcher/building-a-zero-cost-portfolio-site-for-a-friend-with-ai-github-netlify-no-domain-no-hosting-3odp</guid>
      <description>&lt;p&gt;TL;DR: A friend needed a portfolio site with zero recurring cost. I built it with Claude Fable 5, pushed it to GitHub, deployed it on Netlify's free tier, and used Netlify.App subdomain instead of buying a domain. Total cost: $0/month, $0/year. Live: &lt;a href="https://ifteha.netlify.app/" rel="noopener noreferrer"&gt;https://ifteha.netlify.app/&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  The problem
&lt;/h2&gt;

&lt;p&gt;The requirements were strict, but honestly, it was a nice challenge:&lt;/p&gt;

&lt;p&gt;"A personal/portfolio website. Must be free. No domain cost. No hosting cost. Permanently."&lt;/p&gt;

&lt;p&gt;This meant most managed site builders were out, since their free plans either expire or add watermarks. Paid VPS or custom domains were also off the table. So, I had to focus on the basics: a personal site just needs static files, served reliably at a web address. That’s all.&lt;/p&gt;

&lt;p&gt;The architecture&lt;/p&gt;

&lt;p&gt;Claude Fable 5  →  build the static site&lt;br&gt;
      │&lt;br&gt;
      ▼&lt;br&gt;
   GitHub  →  version control + free repo hosting (my friend's own account)&lt;br&gt;
      │&lt;br&gt;
      ▼ (auto-deploy on push)&lt;br&gt;
   Netlify  →  free static hosting + CDN + HTTPS&lt;br&gt;
      │&lt;br&gt;
      ▼&lt;br&gt;
ifteha.netlify.app  →  free subdomain, no registrar&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Build: Claude Fable 5&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Instead of struggling with a template, I used AI as a pair programmer and made the prompt itself the main design decision. My friend works with graph neural networks and her thesis is about spammer detection using variational graph autoencoders, so my first real prompt wasn’t just “build a portfolio.” It was more like:&lt;/p&gt;

&lt;p&gt;"Build the site as if it's a graph itself: sections as vertices, scrolling as traversal, skills as a constellation. Use real notation from her field where it fits — coordinates instead of a location line, vertex numbering instead of section numbers."&lt;/p&gt;

&lt;p&gt;That's a reconstruction of the intent, not a verbatim log, but it's the shape of what actually got a specific, non-templated result instead of a generic one. Output is plain HTML/CSS/JS. No framework, no build step to break, which keeps the rest of the pipeline simple.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Host the code: GitHub&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The static output goes into a public repo under my friend's own GitHub account. Free, and the repo itself becomes a visible artifact for a CS grad; a clean public repo is part of the portfolio.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Deploy — Netlify free tier&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Connect the GitHub repo once. After that:&lt;/p&gt;

&lt;p&gt;git push origin main   # → Netlify rebuilds &amp;amp; redeploys automatically&lt;/p&gt;

&lt;p&gt;The free tier includes HTTPS, a global CDN, and continuous deployment.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;The domain — skip the registrar&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Instead of $12/yr for a custom domain, the site runs on the free *.netlify.app subdomain. HTTPS by default. A custom domain can be attached later with zero rebuild; the pipeline doesn't change.&lt;/p&gt;

&lt;p&gt;What actually took iteration&lt;/p&gt;

&lt;p&gt;Not everything worked first try, and it's worth naming what didn't:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Links: early passes had anchor links that didn't scroll to the right section, or worked on desktop and broke after a resize. Took a few rounds of pointing at the specific broken anchor before all internal links tracked correctly.&lt;/li&gt;
&lt;li&gt;Responsiveness: the first layout looked fine on a laptop and broke down on mobile (overlapping elements, overflow). Fixed by testing at phone width specifically and iterating against that, not just asking for "responsive" in the abstract.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;One focused, field-specific prompt set the creative direction. Getting the details right took several clear and specific prompts.&lt;/p&gt;

&lt;p&gt;Why static is the unlock&lt;/p&gt;

&lt;p&gt;There’s no server to manage, no database, and no container using up credits all day. Static files on a CDN are so affordable that most major hosts offer them for free. If your portfolio doesn’t need a backend and most don’t. You can take advantage of this free infrastructure.&lt;/p&gt;

&lt;h2&gt;
  
  
  Result
&lt;/h2&gt;

&lt;p&gt;A live, responsive, personality filled site my friend fully owns: &lt;a href="https://ifteha.netlify.app/" rel="noopener noreferrer"&gt;https://ifteha.netlify.app/&lt;/a&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Recurring cost: $0&lt;/li&gt;
&lt;li&gt;Domain cost: $0&lt;/li&gt;
&lt;li&gt;Ownership: code lives in her own GitHub account&lt;/li&gt;
&lt;li&gt;Upgrade path: custom domain anytime, no re-architecture&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you’re building sites for friends, students, or anyone with a tight budget, you can use this same approach.&lt;/p&gt;

&lt;h1&gt;
  
  
  webdev #beginners #netlify #ai
&lt;/h1&gt;

</description>
      <category>webdev</category>
      <category>ai</category>
      <category>productivity</category>
      <category>beginners</category>
    </item>
    <item>
      <title>Make your content answer-first so AI models actually cite it</title>
      <dc:creator>Md Salman Kawcher, MSc</dc:creator>
      <pubDate>Wed, 08 Jul 2026 09:53:56 +0000</pubDate>
      <link>https://dev.to/salmankawcher/make-your-content-answer-first-so-ai-models-actually-cite-it-2kph</link>
      <guid>https://dev.to/salmankawcher/make-your-content-answer-first-so-ai-models-actually-cite-it-2kph</guid>
      <description>&lt;p&gt;If you want ChatGPT or Google's AI Overviews to quote your pages, structure matters more than volume. Retrieval systems favor passages where the answer is stated plainly and can stand alone. Here's a practical way to test and fix your content.&lt;/p&gt;

&lt;p&gt;Step 1 — Define the question the page answers&lt;/p&gt;

&lt;p&gt;Write it as a literal user query.&lt;/p&gt;

&lt;h2&gt;
  
  
  How much does a website cost for a small business in the UK?
&lt;/h2&gt;

&lt;p&gt;Step 2 — Extract your current answer passage&lt;/p&gt;

&lt;p&gt;Copy the first two or three sentences from your page. Paste them somewhere without any extra context. Ask yourself: Does this work as a direct answer? If it only makes sense after reading earlier paragraphs, it doesn’t pass the extraction test.&lt;/p&gt;

&lt;p&gt;Step 3 — Rewrite answer-first&lt;/p&gt;

&lt;p&gt;Lead with the conclusion, stated as a fact, then support it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Before:
&lt;/h2&gt;

&lt;p&gt;"We get asked about pricing a lot, and honestly it's&lt;br&gt;
one of the trickiest questions to answer..."&lt;/p&gt;

&lt;p&gt;After:&lt;br&gt;
"A small-business website in the UK typically costs&lt;br&gt;
£1,500–£6,000 for a brochure site and £6,000–£20,000+&lt;br&gt;
for e-commerce. The price depends on three things:&lt;br&gt;
page count, payment functionality, and custom vs&lt;br&gt;
template design."&lt;/p&gt;

&lt;p&gt;Step 4 — Test extractability with a model&lt;/p&gt;

&lt;p&gt;Send the passage to an LLM and check whether it returns a clean, single answer. Use a system prompt that mimics retrieval behavior.&lt;/p&gt;

&lt;h2&gt;
  
  
  System: You are a retrieval system. From the passage
&lt;/h2&gt;

&lt;p&gt;below, extract the single most direct answer to the&lt;br&gt;
user's question. If no self-contained answer exists,&lt;br&gt;
reply "NO_EXTRACTABLE_ANSWER".&lt;/p&gt;

&lt;p&gt;User question: How much does a website cost for a&lt;br&gt;
small business in the UK?&lt;/p&gt;

&lt;p&gt;Passage: &lt;/p&gt;

&lt;p&gt;If you get NO_EXTRACTABLE_ANSWER or a vague summary, your structure needs work.&lt;/p&gt;

&lt;p&gt;Step 5 — Reinforce with structured data&lt;/p&gt;

&lt;p&gt;Markup question and answer pages with FAQPage schema so the question/answer pairing is machine-readable as well as human-readable.&lt;/p&gt;

&lt;h2&gt;
  
  
  json
&lt;/h2&gt;

&lt;p&gt;{&lt;br&gt;
  "&lt;a class="mentioned-user" href="https://dev.to/context"&gt;@context&lt;/a&gt;": "&lt;a href="https://schema.org" rel="noopener noreferrer"&gt;https://schema.org&lt;/a&gt;",&lt;br&gt;
  "@type": "FAQPage",&lt;br&gt;
  "mainEntity": [{&lt;br&gt;
    "@type": "Question",&lt;br&gt;
    "name": "How much does a website cost for a small business in the UK?",&lt;br&gt;
    "acceptedAnswer": {&lt;br&gt;
      "@type": "Answer",&lt;br&gt;
      "text": "A small-business website in the UK typically costs £1,500–£6,000 for a brochure site and £6,000–£20,000+ for e-commerce, depending on page count, payment functionality, and custom vs template design."&lt;br&gt;
    }&lt;br&gt;
  }]&lt;br&gt;
}&lt;/p&gt;

&lt;p&gt;Step 6 — Repeat per key question&lt;/p&gt;

&lt;p&gt;One page, one primary question, one extractable answer up front. Work through your priority pages the same way.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>seo</category>
      <category>webdev</category>
      <category>tutorial</category>
    </item>
  </channel>
</rss>
