<?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: SM Shahbaj</title>
    <description>The latest articles on DEV Community by SM Shahbaj (@smshahbaj).</description>
    <link>https://dev.to/smshahbaj</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%2F3894885%2F1a1590ea-8d02-41ee-8375-4a8fe2973459.png</url>
      <title>DEV Community: SM Shahbaj</title>
      <link>https://dev.to/smshahbaj</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/smshahbaj"/>
    <language>en</language>
    <item>
      <title>I Built Crucible to Make Claude Stop Agreeing Too Easily</title>
      <dc:creator>SM Shahbaj</dc:creator>
      <pubDate>Sat, 15 Aug 2026 21:56:53 +0000</pubDate>
      <link>https://dev.to/smshahbaj/i-built-crucible-to-make-claude-stop-agreeing-too-easily-1a35</link>
      <guid>https://dev.to/smshahbaj/i-built-crucible-to-make-claude-stop-agreeing-too-easily-1a35</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%2F7u5rrl6n94wmuv7o1h67.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%2F7u5rrl6n94wmuv7o1h67.png" alt=" " width="800" height="533"&gt;&lt;/a&gt;I use AI for a lot of things.&lt;/p&gt;

&lt;p&gt;Exploring ideas. Comparing architectures. Thinking through product decisions. Debugging something at 2 AM when I probably should have been sleeping.&lt;/p&gt;

&lt;p&gt;And honestly, it's extremely useful.&lt;/p&gt;

&lt;p&gt;But there is one thing about working with AI that has always bothered me.&lt;/p&gt;

&lt;p&gt;Sometimes it agrees with you a little too easily.&lt;/p&gt;

&lt;p&gt;You give it an idea.&lt;/p&gt;

&lt;p&gt;It sounds reasonable.&lt;/p&gt;

&lt;p&gt;The model explains why it's reasonable.&lt;/p&gt;

&lt;p&gt;Then you ask for a little more detail, and it gives you even more reasons why your original idea was probably a good one.&lt;/p&gt;

&lt;p&gt;And suddenly you're 20 minutes into the conversation with a beautifully written argument for a decision that might have been wrong from the beginning.&lt;/p&gt;

&lt;p&gt;That's the problem I wanted to work on.&lt;/p&gt;

&lt;p&gt;So I built Crucible.&lt;/p&gt;

&lt;p&gt;Crucible is an adaptive decision-review skill for Claude Code. You give it something that actually matters—a technical architecture, a product decision, a plan, a strategy, a recommendation—and instead of simply helping you defend the idea, it tries to pressure-test it.&lt;/p&gt;

&lt;p&gt;The interesting part is that it doesn't just throw a bunch of agents at the problem.&lt;/p&gt;

&lt;p&gt;That would be easy.&lt;/p&gt;

&lt;p&gt;The difficult question was:&lt;/p&gt;

&lt;p&gt;How much reasoning is actually necessary before a decision is stable enough to act on?&lt;/p&gt;

&lt;p&gt;That question ended up shaping almost everything in Crucible.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;The idea behind Crucible&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Imagine I ask:&lt;/p&gt;

&lt;p&gt;«Should I use architecture A or architecture B?»&lt;/p&gt;

&lt;p&gt;A normal AI answer might compare the two and recommend one.&lt;/p&gt;

&lt;p&gt;That's useful.&lt;/p&gt;

&lt;p&gt;But what if the recommendation depends on one assumption that hasn't been verified?&lt;/p&gt;

&lt;p&gt;Or what if the decision is difficult to reverse?&lt;/p&gt;

&lt;p&gt;Or what if there's a failure mode that neither option comparison considered?&lt;/p&gt;

&lt;p&gt;Or what if the answer only looks good because the model anchored itself to the first idea I mentioned?&lt;/p&gt;

&lt;p&gt;That's where I wanted Crucible to behave differently.&lt;/p&gt;

&lt;p&gt;The workflow is basically:&lt;/p&gt;

&lt;p&gt;Frame the decision → determine how much scrutiny it deserves → verify important claims → challenge the weak point → check the failure mode → decide whether more reasoning is actually useful → stop.&lt;/p&gt;

&lt;p&gt;That last part is surprisingly important.&lt;/p&gt;

&lt;p&gt;I didn't want to build a system that thinks longer just because it can.&lt;/p&gt;

&lt;p&gt;More reasoning is not automatically better.&lt;/p&gt;

&lt;p&gt;Sometimes it is.&lt;/p&gt;

&lt;p&gt;Sometimes it is just more text.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;So I didn't make "14 agents"&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Technically, Crucible contains 14 specialist agent definitions.&lt;/p&gt;

&lt;p&gt;That sounds impressive on a landing page.&lt;/p&gt;

&lt;p&gt;But that isn't really the interesting part.&lt;/p&gt;

&lt;p&gt;The interesting part is that Crucible does not use all 14 agents on every question.&lt;/p&gt;

&lt;p&gt;There are three review depths:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;QUICK, REVIEW, and DEEP.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A simple, reversible decision should stay simple.&lt;/p&gt;

&lt;p&gt;A decision with meaningful uncertainty might get a couple of independent perspectives.&lt;/p&gt;

&lt;p&gt;A high-downside or difficult-to-reverse decision can get a deeper review with several different lenses plus targeted verification and adversarial analysis.&lt;/p&gt;

&lt;p&gt;The router itself is intentionally small.&lt;/p&gt;

&lt;p&gt;It doesn't solve the decision.&lt;/p&gt;

&lt;p&gt;It first asks something closer to:&lt;/p&gt;

&lt;p&gt;ROUTE: QUICK / REVIEW / DEEP&lt;br&gt;
STAKES: low / medium / high&lt;br&gt;
UNCERTAINTY: low / medium / high&lt;br&gt;
REVERSIBILITY: low / medium / high&lt;br&gt;
EXTERNAL_VERIFICATION: yes / no&lt;br&gt;
MAIN_DECISION_VARIABLE:&lt;br&gt;
WHY_EXTRA_WORK_IS_OR_IS_NOT_JUSTIFIED:&lt;br&gt;
NEXT_MINIMUM_STEP:&lt;/p&gt;

&lt;p&gt;That separation matters.&lt;/p&gt;

&lt;p&gt;The routing layer shouldn't immediately fall in love with a solution.&lt;/p&gt;

&lt;p&gt;Its job is to decide whether the problem deserves more work.&lt;/p&gt;

&lt;h2&gt;
  
  
  The part I care about most: anti-anchoring
&lt;/h2&gt;

&lt;p&gt;One of the easiest ways for an AI system to become confidently wrong is to anchor too early.&lt;/p&gt;

&lt;p&gt;Suppose the first conclusion is:&lt;/p&gt;

&lt;p&gt;«"Architecture A is probably better."»&lt;/p&gt;

&lt;p&gt;Now imagine five different agents are asked to review that conclusion using the same assumptions and the same evidence.&lt;/p&gt;

&lt;p&gt;They might all agree.&lt;/p&gt;

&lt;p&gt;That doesn't necessarily mean we've found five independent confirmations.&lt;/p&gt;

&lt;p&gt;We might have just created a very sophisticated echo chamber.&lt;/p&gt;

&lt;p&gt;So Crucible treats independence as a process problem, not a headcount problem.&lt;/p&gt;

&lt;p&gt;Different lenses are supposed to be formed before the leading conclusion becomes an anchor.&lt;/p&gt;

&lt;p&gt;That is why one of the principles behind the project is:&lt;/p&gt;

&lt;p&gt;More agents ≠ more truth.&lt;/p&gt;

&lt;p&gt;Fourteen agents agreeing with the same unverified premise is still one bad premise.&lt;/p&gt;

&lt;h2&gt;
  
  
  Evidence gets a different treatment too
&lt;/h2&gt;

&lt;p&gt;Another thing I wanted to avoid was treating every sentence in a recommendation as equally important.&lt;/p&gt;

&lt;p&gt;They're not.&lt;/p&gt;

&lt;p&gt;Some statements are just supporting details.&lt;/p&gt;

&lt;p&gt;Others actually determine the decision.&lt;/p&gt;

&lt;p&gt;Those are the claims that deserve verification.&lt;/p&gt;

&lt;p&gt;Crucible therefore separates decision-critical evidence from everything else and can escalate specific claims for verification rather than launching a giant research process for the entire answer.&lt;/p&gt;

&lt;p&gt;That sounds like a small design choice.&lt;/p&gt;

&lt;p&gt;It isn't.&lt;/p&gt;

&lt;p&gt;It changes how much unnecessary work the system does.&lt;/p&gt;

&lt;p&gt;The goal isn't:&lt;/p&gt;

&lt;p&gt;«"Research everything."»&lt;/p&gt;

&lt;p&gt;The goal is:&lt;/p&gt;

&lt;p&gt;«"Find the thing that could change the decision, and verify that."»&lt;/p&gt;

&lt;p&gt;That idea shows up repeatedly throughout the project—in the routing rules, evidence gates, verification planning, and quality-control layer.&lt;/p&gt;

&lt;h2&gt;
  
  
  **Failure-first instead of risk-list-first
&lt;/h2&gt;

&lt;p&gt;**&lt;br&gt;
There's another detail I really liked while building it.&lt;/p&gt;

&lt;p&gt;When people review a decision, they often produce a list of risks.&lt;/p&gt;

&lt;p&gt;Ten risks.&lt;/p&gt;

&lt;p&gt;Fifteen risks.&lt;/p&gt;

&lt;p&gt;Maybe twenty, just to be safe.&lt;/p&gt;

&lt;p&gt;It looks thorough.&lt;/p&gt;

&lt;p&gt;But most of them don't actually matter.&lt;/p&gt;

&lt;p&gt;Crucible instead tries to identify the single highest-impact plausible failure mode—the thing most capable of changing the action.&lt;/p&gt;

&lt;p&gt;Then it asks what would trigger that failure, what signal we'd see, what mitigation exists, and what risk remains.&lt;/p&gt;

&lt;p&gt;This makes a review much more actionable.&lt;/p&gt;

&lt;p&gt;A decision isn't improved because you wrote down twenty scary things.&lt;/p&gt;

&lt;p&gt;It's improved when you find the one that can actually change what you should do next.&lt;/p&gt;

&lt;p&gt;**&lt;/p&gt;

&lt;h2&gt;
  
  
  And then there's the stopping rule
&lt;/h2&gt;

&lt;p&gt;**&lt;/p&gt;

&lt;p&gt;This might be my favorite part of the whole project.&lt;/p&gt;

&lt;p&gt;AI systems have a natural tendency to keep going.&lt;/p&gt;

&lt;p&gt;More analysis.&lt;/p&gt;

&lt;p&gt;Another angle.&lt;/p&gt;

&lt;p&gt;Another comparison.&lt;/p&gt;

&lt;p&gt;Another caveat.&lt;/p&gt;

&lt;p&gt;Another paragraph explaining why the previous paragraph matters.&lt;/p&gt;

&lt;p&gt;At some point, more reasoning stops being useful.&lt;/p&gt;

&lt;p&gt;So Crucible has explicit stopping rules.&lt;/p&gt;

&lt;p&gt;If the recommendation is stable...&lt;/p&gt;

&lt;p&gt;If the remaining uncertainty can't change the action...&lt;/p&gt;

&lt;p&gt;If the next verification step is redundant...&lt;/p&gt;

&lt;p&gt;Or if a staged action can resolve the uncertainty more cheaply...&lt;/p&gt;

&lt;p&gt;stop.&lt;/p&gt;

&lt;p&gt;I wanted Crucible to treat compute and attention as something worth spending deliberately.&lt;/p&gt;

&lt;p&gt;That's why the internal principle is essentially:&lt;/p&gt;

&lt;p&gt;«Do another check only when the result could plausibly change the action.»&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;The architecture is deliberately boring&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;The project isn't a huge application with a database, API layer, queue system, or separate inference backend.&lt;/p&gt;

&lt;p&gt;It's a Claude Code plugin and marketplace package.&lt;/p&gt;

&lt;p&gt;The core behavior lives in the skill definition and reference modules.&lt;/p&gt;

&lt;p&gt;The specialist agents are separated by responsibility.&lt;/p&gt;

&lt;p&gt;The repository also contains the testing, benchmark, validation, and ledger infrastructure around that core.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;The project structure looks roughly like this:&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;crucible/&lt;br&gt;
├── .claude-plugin/&lt;br&gt;
│   ├── plugin.json&lt;br&gt;
│   └── marketplace.json&lt;br&gt;
├── agents/&lt;br&gt;
├── benchmarks/&lt;br&gt;
├── scripts/&lt;br&gt;
├── skills/&lt;br&gt;
│   └── crucible/&lt;br&gt;
│       ├── SKILL.md&lt;br&gt;
│       └── references/&lt;br&gt;
├── tests/&lt;br&gt;
├── README.md&lt;br&gt;
├── LICENSE&lt;br&gt;
├── SECURITY.md&lt;br&gt;
└── CONTRIBUTING.md&lt;/p&gt;

&lt;p&gt;The nice thing about this approach is that the reasoning methodology isn't hidden inside some giant application.&lt;/p&gt;

&lt;p&gt;You can actually read it.&lt;/p&gt;

&lt;p&gt;The routing rules are documented.&lt;/p&gt;

&lt;p&gt;The evidence rules are documented.&lt;/p&gt;

&lt;p&gt;The adversarial methodology is documented.&lt;/p&gt;

&lt;p&gt;The output contract is documented.&lt;/p&gt;

&lt;p&gt;The quality gate is documented.&lt;/p&gt;

&lt;p&gt;The decision ledger is documented.&lt;/p&gt;

&lt;p&gt;That was intentional.&lt;/p&gt;

&lt;p&gt;I wanted the system itself to be inspectable.&lt;/p&gt;

&lt;p&gt;I also didn't want "benchmarks" to become marketing numbers&lt;/p&gt;

&lt;p&gt;This is another thing I was fairly strict about.&lt;/p&gt;

&lt;p&gt;It's very easy to create an offline benchmark, get a perfect score, and put "100% accuracy" on a website.&lt;/p&gt;

&lt;p&gt;That would be misleading here.&lt;/p&gt;

&lt;p&gt;Crucible has routing tests, golden evaluation materials, adversarial cases, stress tests, package validation, and benchmark plumbing.&lt;/p&gt;

&lt;p&gt;But an offline benchmark that feeds expected outputs back into a scorer doesn't prove that a live language model will make the right decision.&lt;/p&gt;

&lt;p&gt;So the project explicitly distinguishes engineering/regression validation from live model quality.&lt;/p&gt;

&lt;p&gt;The README even warns against interpreting the offline score as proof of model accuracy.&lt;/p&gt;

&lt;p&gt;I think that's important for a project whose entire purpose is making AI reasoning more trustworthy.&lt;/p&gt;

&lt;p&gt;If I'm going to build something about evidence, I should probably apply the same standard to my own claims.&lt;/p&gt;

&lt;p&gt;I tested the release locally&lt;/p&gt;

&lt;p&gt;For the version I'm releasing as v1.0.0, I didn't just look at the files and call it done.&lt;/p&gt;

&lt;p&gt;I ran the bundled standalone test suite against the release package.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;The result:&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;=== 84 passed, 0 failed ===&lt;/p&gt;

&lt;p&gt;The routing fixtures also passed completely:&lt;/p&gt;

&lt;p&gt;8/8 routing fixtures matched the reference heuristic.&lt;/p&gt;

&lt;p&gt;I ran the stress harness with 50 iterations covering normal cases, missing evidence, malformed payloads, timeouts, adapter errors, and contradictions.&lt;/p&gt;

&lt;p&gt;The result was:&lt;/p&gt;

&lt;p&gt;unexpected_failures: 0&lt;/p&gt;

&lt;p&gt;The repository also has CI configured to run the test suite, validator, routing checks, benchmark contracts, golden benchmark contract, stress harness, syntax checks, and additional release checks.&lt;/p&gt;

&lt;p&gt;Those numbers don't mean Crucible is magically correct.&lt;/p&gt;

&lt;p&gt;They mean the software around the methodology is actually being tested.&lt;/p&gt;

&lt;p&gt;And that's the distinction I want to keep.&lt;/p&gt;

&lt;h2&gt;
  
  
  There's a Decision Ledger too
&lt;/h2&gt;

&lt;p&gt;One feature I almost considered leaving out was the local decision ledger.&lt;/p&gt;

&lt;p&gt;Crucible can record a decision, its reasoning, the main risk, the condition that would change the recommendation, and eventually the outcome.&lt;/p&gt;

&lt;p&gt;That means a decision doesn't necessarily disappear once the conversation ends.&lt;/p&gt;

&lt;p&gt;Over time, you can look back at decisions and compare what you believed would happen with what actually happened.&lt;/p&gt;

&lt;p&gt;I like this because it changes decision-making from:&lt;/p&gt;

&lt;p&gt;«"I think this is the right choice."»&lt;/p&gt;

&lt;p&gt;into something closer to:&lt;/p&gt;

&lt;p&gt;«"Here's what I decided, here's why, here's what I was uncertain about, and here's what would have changed my mind."»&lt;/p&gt;

&lt;p&gt;That's much more useful six months later.&lt;/p&gt;

&lt;p&gt;The ledger is local rather than requiring a hosted database, which was also deliberate.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;- What I actually built&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;So, after all of this, what is Crucible?&lt;/p&gt;

&lt;p&gt;It's not a chatbot.&lt;/p&gt;

&lt;p&gt;It's not a "14 agents argue with each other" demo.&lt;/p&gt;

&lt;p&gt;It's not a majority-vote truth machine.&lt;/p&gt;

&lt;p&gt;And it's definitely not a guarantee that an AI will always make the correct decision.&lt;/p&gt;

&lt;p&gt;It's a decision-pressure-testing layer for Claude Code.&lt;/p&gt;

&lt;p&gt;You can install it from the Claude Code marketplace and run:&lt;/p&gt;

&lt;p&gt;/plugin marketplace add smshahbaj/crucible&lt;br&gt;
/plugin install crucible@crucible-marketplace&lt;/p&gt;

&lt;p&gt;Then:&lt;/p&gt;

&lt;p&gt;/crucible Pressure-test this decision before I commit:&lt;br&gt;
should we choose architecture A or architecture B?&lt;/p&gt;

&lt;p&gt;Normal usage doesn't require a separate database or model API key. The optional live evaluation path is separate from normal plugin operation.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Why I built it&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;I don't think AI needs to become more agreeable.&lt;/p&gt;

&lt;p&gt;It already is.&lt;/p&gt;

&lt;p&gt;I think it needs to become better at telling us:&lt;/p&gt;

&lt;p&gt;"Wait. Before you do that, here's the part of your reasoning I'd actually worry about."&lt;/p&gt;

&lt;p&gt;That's the behavior I wanted.&lt;/p&gt;

&lt;p&gt;Not endless analysis.&lt;/p&gt;

&lt;p&gt;Not fake certainty.&lt;/p&gt;

&lt;p&gt;Not a wall of agent output.&lt;/p&gt;

&lt;p&gt;Just enough intelligent resistance to catch the thing you might otherwise miss.&lt;/p&gt;

&lt;p&gt;That's Crucible.&lt;/p&gt;

&lt;p&gt;Verify. Challenge. Decide.&lt;/p&gt;

&lt;p&gt;The project is open source under the MIT license.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;GitHub&lt;/strong&gt;: &lt;a href="https://github.com/smshahbaj/crucible" rel="noopener noreferrer"&gt;Crucible Repo&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Website&lt;/strong&gt;: &lt;a href="https://crucible.smshahbaj.com" rel="noopener noreferrer"&gt;Crucible&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you try it, I'd genuinely like to know where it breaks, where it's too cautious, where it's too aggressive, and especially where it changes your mind.&lt;/p&gt;

&lt;p&gt;Because if a decision-pressure-testing tool can't survive people trying to pressure-test itself, then I probably built the wrong thing.&lt;/p&gt;

</description>
      <category>claude</category>
      <category>webdev</category>
      <category>programming</category>
      <category>productivity</category>
    </item>
    <item>
      <title>I built a free AI-powered Linktree alternative that generates your page algorithmically — Xefna</title>
      <dc:creator>SM Shahbaj</dc:creator>
      <pubDate>Thu, 14 May 2026 18:07:31 +0000</pubDate>
      <link>https://dev.to/smshahbaj/i-built-a-free-ai-powered-linktree-alternative-that-generates-your-page-algorithmically-xefna-34ml</link>
      <guid>https://dev.to/smshahbaj/i-built-a-free-ai-powered-linktree-alternative-that-generates-your-page-algorithmically-xefna-34ml</guid>
      <description>&lt;p&gt;I got tired of every link-in-bio page looking exactly the same.&lt;/p&gt;

&lt;p&gt;You know the look — white background, rounded buttons stacked in a&lt;br&gt;
column, maybe a profile picture at the top. Linktree. Beacons.&lt;br&gt;
Bio.link. They all look identical. Your page looks like everyone&lt;br&gt;
else's page.&lt;/p&gt;

&lt;p&gt;So I built &lt;a href="https://xefna.com" rel="noopener noreferrer"&gt;Xefna&lt;/a&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is Xefna?
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://xefna.com" rel="noopener noreferrer"&gt;Xefna&lt;/a&gt; is a micro-site engine that uses AI and algorithmic design to&lt;br&gt;
generate a completely unique digital identity for every user — not&lt;br&gt;
a template, not a button list. It analyzes your content and builds&lt;br&gt;
a layout, color palette, and typography specifically for you.&lt;/p&gt;

&lt;p&gt;Every Xefna page looks like a custom-coded portfolio. No two pages&lt;br&gt;
look the same.&lt;/p&gt;

&lt;h2&gt;
  
  
  How it works
&lt;/h2&gt;

&lt;ol&gt;
&lt;li&gt;You go to &lt;a href="https://xefna.com" rel="noopener noreferrer"&gt;xefna.com&lt;/a&gt; and hit &lt;strong&gt;Magic Start&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Type a short prompt or bio — something like &lt;em&gt;"I'm a music
producer and visual artist from Dhaka"&lt;/em&gt;
&lt;/li&gt;
&lt;li&gt;The AI engine extracts your brand essence and generates your
entire page — layout, colors, typography, structure&lt;/li&gt;
&lt;li&gt;You customize links and content in the visual editor&lt;/li&gt;
&lt;li&gt;Your page is live instantly at &lt;strong&gt;xefna.com/yourname&lt;/strong&gt;
&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The whole thing takes under 2 minutes.&lt;/p&gt;

&lt;h2&gt;
  
  
  What makes it different from Linktree
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Feature&lt;/th&gt;
&lt;th&gt;Linktree&lt;/th&gt;
&lt;th&gt;Xefna&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Design&lt;/td&gt;
&lt;td&gt;Static button list&lt;/td&gt;
&lt;td&gt;Algorithmically generated&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Setup&lt;/td&gt;
&lt;td&gt;Manual&lt;/td&gt;
&lt;td&gt;AI-powered from a single prompt&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Uniqueness&lt;/td&gt;
&lt;td&gt;Everyone looks the same&lt;/td&gt;
&lt;td&gt;Every page is distinct&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Feel&lt;/td&gt;
&lt;td&gt;Generic&lt;/td&gt;
&lt;td&gt;Custom-coded portfolio&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Price&lt;/td&gt;
&lt;td&gt;Free tier&lt;/td&gt;
&lt;td&gt;Free tier&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  The tech stack
&lt;/h2&gt;

&lt;p&gt;For the devs curious about what's under the hood:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;React 19&lt;/strong&gt; + TypeScript + Vite (SPA)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Express&lt;/strong&gt; server for SSR meta tag injection (so profiles are
crawlable by Google and social platforms)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Supabase&lt;/strong&gt; (PostgreSQL) for user data and profile storage&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cloudflare Pages + CDN&lt;/strong&gt; for edge deployment globally&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Google Gemini AI&lt;/strong&gt; + &lt;strong&gt;OpenAI&lt;/strong&gt; for the Magic Start generator&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;motion/react&lt;/strong&gt; for micro-animations&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Tailwind CSS&lt;/strong&gt; for styling&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The SSR part was the most interesting engineering challenge —&lt;br&gt;
since it's a React SPA, user profile pages at xefna.com/username&lt;br&gt;
needed to return real HTML to Googlebot and social crawlers&lt;br&gt;
(for OG previews). The Express server detects the User-Agent and&lt;br&gt;
injects pre-rendered HTML + meta tags before serving.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I learned building this
&lt;/h2&gt;

&lt;p&gt;This is a micro-startup I founded in April 2026. A few honest takeaways:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;SSR meta injection is underrated.&lt;/strong&gt; Most SPA tutorials skip
this entirely but it's critical for SEO and social sharing.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AI generation UX is hard.&lt;/strong&gt; Getting the prompt-to-page flow
to feel magical rather than frustrating took many iterations.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Cloudflare Pages + Supabase is an incredible free stack.&lt;/strong&gt;
Zero infrastructure cost at this stage.&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;👉 &lt;strong&gt;&lt;a href="https://xefna.com" rel="noopener noreferrer"&gt;xefna.com&lt;/a&gt;&lt;/strong&gt; — completely free, no credit card&lt;/p&gt;

&lt;p&gt;I'd genuinely love your feedback. Especially from devs — what&lt;br&gt;
would you want from a link-in-bio tool that you can't get from&lt;br&gt;
Linktree today?&lt;/p&gt;

&lt;p&gt;Drop a comment or reach out on X: &lt;strong&gt;@xefnalabs&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>showdev</category>
      <category>opensource</category>
      <category>startup</category>
    </item>
    <item>
      <title>Building a "Local-First" Expense Tracker with zero server costs</title>
      <dc:creator>SM Shahbaj</dc:creator>
      <pubDate>Thu, 23 Apr 2026 20:26:21 +0000</pubDate>
      <link>https://dev.to/smshahbaj/building-a-local-first-expense-tracker-with-zero-server-costs-6ih</link>
      <guid>https://dev.to/smshahbaj/building-a-local-first-expense-tracker-with-zero-server-costs-6ih</guid>
      <description>&lt;p&gt;As developers, we tend to follow a common practice: frontend + api + database. Yet, when I decided to develop the Sheet Manager application, I wanted to break this paradigm. I wanted to create an application which is 100% private, offline, and completely zero-cost.&lt;/p&gt;

&lt;p&gt;And Local-First architecture helped me achieve that.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Architecture
&lt;/h2&gt;

&lt;p&gt;There is no reason why your sensitive financial data should be stored on some PostgreSQL or MongoDB instance somewhere on the cloud. Instead, all of it is stored in the user's browser.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Persistence:&lt;/strong&gt; I implemented a wrapper for IndexedDB which allows us to handle very large sets of structured data (in comparison to LocalStorage). Plus, unlike LocalStorage, it does not block the main thread.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Performance:&lt;/strong&gt; Being client-side only makes our UI super responsive since there are no API calls and the latency becomes simply the execution of JavaScript code.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Privacy:&lt;/strong&gt; This is the main advantage of local-first applications. I literally have no way of accessing the data users enter since it's being stored on their own computers. For a finance application, that's an incredible feature.&lt;/p&gt;

&lt;h2&gt;
  
  
  The "Zero-Cost" Infrastructure
&lt;/h2&gt;

&lt;p&gt;Can we make a production-ready application without any bills whatsoever?&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Hosting:&lt;/strong&gt; Using Cloudflare Pages and GitHub Pages as the frontend hosting services.&lt;br&gt;
&lt;strong&gt;Database:&lt;/strong&gt; Free (It's inside the user's browser).&lt;br&gt;
&lt;strong&gt;Analytics:&lt;/strong&gt; Keeping analytics light and simple to stay away from trackers.&lt;/p&gt;

&lt;h2&gt;
  
  
  Challenges of Local-First Development
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;This was not as easy as it sounds. Developing without backend adds its challenges:&lt;/strong&gt;&lt;br&gt;
&lt;strong&gt;Data portability:&lt;/strong&gt; In case the user clears browser storage, how can we provide him/her with the option to import/export data? Implemented a JSON/CSV export/import system.&lt;br&gt;
&lt;strong&gt;Sync across multiple devices:&lt;/strong&gt; This is something I want to tackle soon by using WebRTC or Peer-to-Peer synchronization technologies._&lt;/p&gt;

&lt;h2&gt;
  
  
  Why did I develop this?
&lt;/h2&gt;

&lt;p&gt;In addition to being a software engineer, I'm also very privacy-conscious (I don't even use Facebook and Twitter). We over-engineered the idea of "the cloud" into every tiny utility. Sheet Manager became a proof that we don't necessarily need servers to develop beautiful dashboard-based applications.&lt;/p&gt;

&lt;p&gt;Take a look at the project yourself: &lt;strong&gt;&lt;a href="https://sheetmanager.com/" rel="noopener noreferrer"&gt;Sheet Manager&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;What do you think about the idea of local-first development? How are you handling data persistence nowadays?&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>showdev</category>
      <category>productivity</category>
      <category>cloud</category>
    </item>
  </channel>
</rss>
