<?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: Naija-geek</title>
    <description>The latest articles on DEV Community by Naija-geek (@naijageek).</description>
    <link>https://dev.to/naijageek</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.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F680607%2Faf04ad45-4844-4149-b799-8780e0f2c68b.png</url>
      <title>DEV Community: Naija-geek</title>
      <link>https://dev.to/naijageek</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/naijageek"/>
    <language>en</language>
    <item>
      <title>I built a catalog of 162 backend contracts so your team never argues about interfaces again</title>
      <dc:creator>Naija-geek</dc:creator>
      <pubDate>Thu, 11 Jun 2026 17:52:40 +0000</pubDate>
      <link>https://dev.to/naijageek/i-built-a-catalog-of-162-backend-contracts-so-your-team-never-argues-about-interfaces-again-2mo2</link>
      <guid>https://dev.to/naijageek/i-built-a-catalog-of-162-backend-contracts-so-your-team-never-argues-about-interfaces-again-2mo2</guid>
      <description>&lt;p&gt;Every backend system needs the same ten things. Payments. Auth. Notifications. Caching. Queues. Storage. Audit logs. Fraud detection. Rate limiting. Feature flags.&lt;/p&gt;

&lt;p&gt;Every team builds them from scratch. Every team ends up with a slightly different interface shape. Switching providers means rewriting code. Onboarding new engineers means reverse-engineering what the last engineer intended.&lt;/p&gt;

&lt;p&gt;I got tired of this. So I built Blueprint.&lt;/p&gt;

&lt;p&gt;What is a contract?&lt;/p&gt;

&lt;p&gt;A contract is a structured definition of what a backend module does. Here's a slice of the payments contract:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;// Functions
initiatePayment(order_id, amount, currency, method) → Payment
verifyPayment(payment_id) → Payment
getWallet(user_id) → Wallet
creditWallet(user_id, amount, currency, reference) → WalletTransaction
debitWallet(user_id, amount, currency, reference) → WalletTransaction

// Invariants
- creditWallet with the same reference must be idempotent
- debitWallet must not reduce balance below zero unless allow_negative: true
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Blueprint's parser enforces completeness. Every function must have a type. Every type must have fields. Every invariant must be a hard rule. Vague or incomplete contracts are rejected.&lt;/p&gt;

&lt;p&gt;This is not documentation. Documentation drifts. Contracts are parsed and enforced.&lt;/p&gt;

&lt;p&gt;What you can actually do&lt;/p&gt;

&lt;p&gt;Plan before you code&lt;/p&gt;

&lt;p&gt;&lt;code&gt;blueprint graph billing&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Output:&lt;/p&gt;

&lt;p&gt;billing *&lt;br&gt;
├── payments (hard)&lt;br&gt;
│   ├── audit_log (soft)&lt;br&gt;
│   ├── fraud_detection (soft)&lt;br&gt;
│   └── notifications (soft)&lt;br&gt;
├── users (hard)&lt;br&gt;
├── notifications (soft)&lt;br&gt;
└── usage_metering (soft)&lt;/p&gt;

&lt;p&gt;You see the full transitive dependency graph before writing a line. If that's too much for what you need, you know now — not six months in.&lt;/p&gt;

&lt;p&gt;Pick providers&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;blueprint adapters add stripe payments
blueprint adapters add redis caching
blueprint adapters add kafka queues

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;83 adapters across Stripe, Paystack, Flutterwave, Redis, Kafka, Twilio, Firebase, AWS, and more.&lt;/p&gt;

&lt;p&gt;Generate typed code&lt;/p&gt;

&lt;p&gt;One contract. Five languages.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;blueprint generate --lang typescript
blueprint generate --lang go --namespace acme
blueprint generate --lang python
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;TypeScript gets interfaces. Python gets abstract base classes. Go gets interfaces with sentinel errors. Rust gets #[async_trait] traits. Java gets CompletableFuture interfaces with JUnit test stubs.&lt;/p&gt;

&lt;p&gt;Verify your implementation&lt;/p&gt;

&lt;p&gt;&lt;code&gt;blueprint verify ./src/payments/stripe.ts --module payments&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Blueprint checks your code against the contract's invariants and returns any violations.&lt;/p&gt;

&lt;p&gt;The MCP server (AI agent integration)&lt;/p&gt;

&lt;p&gt;Blueprint has a built-in MCP server with 12 tools. Connect it to Claude Desktop, Cursor, or GitHub Copilot:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="err"&gt;json&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="nl"&gt;"mcpServers"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"blueprint"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"command"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"npx"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="nl"&gt;"args"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"engineering-blueprint"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"mcp"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Once connected, your agent can:&lt;/p&gt;

&lt;p&gt;Call suggest_modules to get a module list for a use case&lt;br&gt;
Call resolve_deps to understand the full dependency graph&lt;br&gt;
Call get_adapter to retrieve provider-specific configuration&lt;br&gt;
Call validate_implementation to check code against invariants&lt;/p&gt;

&lt;p&gt;Instead of "describe the payments interface to your AI assistant and hope," it just reads the contract.&lt;/p&gt;

&lt;p&gt;It's a CLI, not just a library&lt;/p&gt;

&lt;p&gt;One thing I want to be clear about: Blueprint is primarily a CLI tool. The npm package exists for programmatic use, but the main experience is:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;bashnpm &lt;span class="nb"&gt;install&lt;/span&gt; &lt;span class="nt"&gt;-g&lt;/span&gt; @friehub/blueprint
blueprint list
blueprint inspect payments
blueprint graph billing
blueprint mcp
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Global install, full command set, no code required.&lt;/p&gt;

&lt;p&gt;Stats&lt;/p&gt;

&lt;p&gt;Module contracts: 162&lt;br&gt;
Provider adapters: 83&lt;br&gt;
Code generators: TypeScript, Python, Go, Rust, Java&lt;br&gt;
MCP tools: 12&lt;br&gt;
Tests:201 passing &lt;br&gt;
Package size: 62KB compressed&lt;br&gt;
License: MIT&lt;/p&gt;

&lt;p&gt;C# and Kotlin generators&lt;br&gt;
design_system MCP tool — an architecture decision engine&lt;br&gt;
compare_topologies MCP tool — monolith vs microservices vs cell-based analysis&lt;br&gt;
Database schemas on all 162 modules&lt;br&gt;
Distributed patterns on all qualifying modules&lt;/p&gt;

&lt;p&gt;X/Twitter:&lt;a href="https://x.com/friehub" rel="noopener noreferrer"&gt;https://x.com/friehub&lt;/a&gt; &lt;br&gt;
GitHub: &lt;a href="https://github.com/Friehub/blueprint" rel="noopener noreferrer"&gt;https://github.com/Friehub/blueprint&lt;/a&gt;&lt;br&gt;
npm: &lt;a href="https://www.npmjs.com/package/@friehub/blueprint" rel="noopener noreferrer"&gt;https://www.npmjs.com/package/@friehub/blueprint&lt;/a&gt;&lt;br&gt;
Website: &lt;a href="//blueprint.friehub.cloud"&gt;blueprint.friehub.cloud&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you try it, open an issue with what domains are missing. The catalog grows by what people actually need.&lt;/p&gt;

</description>
      <category>opensource</category>
      <category>backend</category>
      <category>typescript</category>
      <category>devtools</category>
    </item>
  </channel>
</rss>
