<?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: Msr Abubakr</title>
    <description>The latest articles on DEV Community by Msr Abubakr (@msrabubakr).</description>
    <link>https://dev.to/msrabubakr</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%2F4223717%2Ff47f8527-75a3-4025-8db8-34b0fc6a28c6.jpg</url>
      <title>DEV Community: Msr Abubakr</title>
      <link>https://dev.to/msrabubakr</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/msrabubakr"/>
    <language>en</language>
    <item>
      <title>Building a package manager that does not depend on npm or pip</title>
      <dc:creator>Msr Abubakr</dc:creator>
      <pubDate>Tue, 03 Nov 2026 07:53:47 +0000</pubDate>
      <link>https://dev.to/msrabubakr/building-a-package-manager-that-does-not-depend-on-npm-or-pip-11kl</link>
      <guid>https://dev.to/msrabubakr/building-a-package-manager-that-does-not-depend-on-npm-or-pip-11kl</guid>
      <description>&lt;p&gt;Every new language eventually needs a package manager. Ours is no different - but we made one unusual choice: &lt;strong&gt;total independence&lt;/strong&gt; from npm, pip, crates.io and friends.&lt;/p&gt;

&lt;p&gt;It is called &lt;strong&gt;MsrfPM&lt;/strong&gt;, and it ships packages for our programming language across backend, frontend, OS, robotics and IoT targets.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why not just use npm?
&lt;/h2&gt;

&lt;p&gt;Our language compiles to web (WASM), native executables (ELF64/PE32+) and embedded boards. A JavaScript-based registry cannot express "this package has a native ARM build and a WASM build and a checksum per target". We needed:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Per-target metadata&lt;/strong&gt; - one package, many compiled artifacts&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;SHA-256 integrity on every artifact&lt;/strong&gt; - verified at install time, not just download time&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Zero runtime dependencies&lt;/strong&gt; - MsrfPM itself is a standalone binary; no Node, no Python required to bootstrap your toolchain&lt;/li&gt;
&lt;/ul&gt;

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

&lt;ol&gt;
&lt;li&gt;Build your package (the compiler emits per-target artifacts)&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;msrfpm publish&lt;/code&gt; - hashes every artifact, uploads, updates the registry index&lt;/li&gt;
&lt;li&gt;Consumers run &lt;code&gt;msrfpm install &amp;lt;pkg&amp;gt;&lt;/code&gt; - integrity is verified before anything touches disk&lt;/li&gt;
&lt;/ol&gt;

&lt;h2&gt;
  
  
  The honest trade-off
&lt;/h2&gt;

&lt;p&gt;Independence means &lt;strong&gt;starting an ecosystem from zero&lt;/strong&gt;. npm has 2 million packages; we have a handful. The bet: for edge and IoT targets where npm cannot follow, a registry that speaks per-target artifacts natively is worth more than a million JavaScript packages.&lt;/p&gt;

&lt;p&gt;Part of a free single-sign-on developer platform - registry and tools live at &lt;a href="https://msrfteam.com/msrfpm" rel="noopener noreferrer"&gt;https://msrfteam.com/msrfpm&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you have built registry infrastructure before - what would you do differently? We are one year in and still learning in public.&lt;/p&gt;

</description>
      <category>devops</category>
      <category>security</category>
      <category>tools</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Why we built our own email service instead of renting one (and what we learned about SMTP reputation)</title>
      <dc:creator>Msr Abubakr</dc:creator>
      <pubDate>Tue, 03 Nov 2026 07:47:06 +0000</pubDate>
      <link>https://dev.to/msrabubakr/why-we-built-our-own-email-service-instead-of-renting-one-and-what-we-learned-about-smtp-1mdc</link>
      <guid>https://dev.to/msrabubakr/why-we-built-our-own-email-service-instead-of-renting-one-and-what-we-learned-about-smtp-1mdc</guid>
      <description>&lt;p&gt;Every developer project eventually hits the same wall: &lt;strong&gt;transactional email&lt;/strong&gt;. Password resets, verification codes, notifications. And every provider wants: a business entity, a verified domain, and credit card details - none of which a small international team has on day one.\n\nSo our platform (a single-account identity ecosystem) ships with its own email service, &lt;strong&gt;MMail&lt;/strong&gt;: every account gets a permanent &lt;strong&gt;&lt;a class="mentioned-user" href="https://dev.to/msrfteam"&gt;@msrfteam&lt;/a&gt;.com&lt;/strong&gt; mailbox tied to their identity across all our tools.\n\n## The architecture problem nobody warns you about\n\nSending email is easy. &lt;em&gt;Delivering&lt;/em&gt; email is the hard part:\n\n- &lt;strong&gt;Host egress is blocked everywhere&lt;/strong&gt; - most cloud platforms silently block port 25/587 to prevent spam abuse\n- &lt;strong&gt;Reputation is per-IP and per-domain&lt;/strong&gt; - one spammy burst from a datacenter IP and you are on blocklists for months\n- &lt;strong&gt;DMARC/SPF/DKIM&lt;/strong&gt; - misconfigure any of the three and Gmail silently quarantines you\n\nOur solution: app servers never talk to the internet directly. Everything routes through &lt;strong&gt;one relay with locked-down DNS records&lt;/strong&gt; (SPF, DKIM, DMARC aligned), and per-sender quotas so one bad actor cannot burn the domain reputation for everyone.\n\n## What MMail gives users\n\n- A permanent mailbox that works across the whole platform (one identity, one inbox)\n- AI-assisted features on top of the inbox\n- Verification and password-reset flows that just work inside the ecosystem\n\nIt is live at &lt;a href="https://mail.msrfteam.com" rel="noopener noreferrer"&gt;https://mail.msrfteam.com&lt;/a&gt; - part of a free single-sign-on identity (one account unlocks all our developer services).\n\nWould we recommend every startup build their own email? &lt;strong&gt;No.&lt;/strong&gt; If you have two weeks and a registered business - use a provider. But if you are building an identity platform, email &lt;em&gt;is&lt;/em&gt; part of the identity, and owning the pipeline teaches you things no provider ever will.\n\nQuestions about the SMTP architecture? Happy to go deeper in the comments.&lt;/p&gt;

</description>
      <category>email</category>
      <category>security</category>
      <category>webdev</category>
      <category>smtp</category>
    </item>
    <item>
      <title>One OpenAI-compatible key for 100+ AI models - how and why we built Mervex</title>
      <dc:creator>Msr Abubakr</dc:creator>
      <pubDate>Tue, 03 Nov 2026 07:46:56 +0000</pubDate>
      <link>https://dev.to/msrabubakr/one-openai-compatible-key-for-100-ai-models-how-and-why-we-built-mervex-3am5</link>
      <guid>https://dev.to/msrabubakr/one-openai-compatible-key-for-100-ai-models-how-and-why-we-built-mervex-3am5</guid>
      <description>&lt;p&gt;We are a tiny bootstrapped team (zero funding, working from home). We kept paying for - and juggling - separate AI API keys for every model we needed: one for Llama, one for Qwen, one for embeddings. So we built our own gateway: &lt;strong&gt;Mervex&lt;/strong&gt;.\n\n## What it does\n\n- &lt;strong&gt;One OpenAI-compatible key -&amp;gt; 100+ models&lt;/strong&gt; (Gemma, Llama, Qwen, GLM, Kimi, DeepSeek and more)\n- &lt;strong&gt;Drop-in for your tools&lt;/strong&gt;: Open WebUI, LibreChat, Chatbox, Cursor - you literally change the base URL and swap the key\n- &lt;strong&gt;Auto-Decision API&lt;/strong&gt; - a weird little extra we love: millisecond probabilistic decisions (yes/no, option picking, scoring, even image checks) with 10k free lifetime calls\n- &lt;strong&gt;Live public monitoring per model&lt;/strong&gt; - success rate, latency, 14-day history. If a source dies, requests fail over automatically\n\n## Free tier (no credit card)\n\n- 100 requests daily\n- Bonuses: connect Discord / Google / GitHub for extra daily quota\n- One-time +400 welcome bonus\n\n## Why build this instead of using a big provider?\n\nHonest answer: learning + independence. Big gateways are great until a model disappears, pricing changes overnight, or your region gets restricted. A gateway YOU control can fail over between sources and keep serving. We wrote about that philosophy more on our blog.\n\n## Links\n\n- Site: &lt;a href="https://mervex.cc.cd%5Cn-" rel="noopener noreferrer"&gt;https://mervex.cc.cd\n-&lt;/a&gt; Docs (Postman): &lt;a href="https://documenter.getpostman.com/view/59154340/2sBYHUSzJ2%5Cn-" rel="noopener noreferrer"&gt;https://documenter.getpostman.com/view/59154340/2sBYHUSzJ2\n-&lt;/a&gt; OpenAPI: &lt;a href="https://api.mervex.cc.cd/api/openapi.json%5Cn-" rel="noopener noreferrer"&gt;https://api.mervex.cc.cd/api/openapi.json\n-&lt;/a&gt; GitHub: &lt;a href="https://github.com/Msrfteam/Mervex%5Cn%5CnIf" rel="noopener noreferrer"&gt;https://github.com/Msrfteam/Mervex\n\nIf&lt;/a&gt; you try it - roast it. What model should we add next? What did we get wrong?&lt;/p&gt;

</description>
      <category>ai</category>
      <category>api</category>
      <category>openai</category>
      <category>webdev</category>
    </item>
    <item>
      <title>Verifying Humans by Replaying Their Input: a Different Take on CAPTCHA</title>
      <dc:creator>Msr Abubakr</dc:creator>
      <pubDate>Tue, 03 Nov 2026 07:39:35 +0000</pubDate>
      <link>https://dev.to/msrabubakr/verifying-humans-by-replaying-their-input-a-different-take-on-captcha-1bea</link>
      <guid>https://dev.to/msrabubakr/verifying-humans-by-replaying-their-input-a-different-take-on-captcha-1bea</guid>
      <description>&lt;p&gt;&lt;em&gt;How we built a bot-protection system that doesn't check what you clicked — it checks how you moved.&lt;/em&gt;&lt;/p&gt;




&lt;p&gt;Every CAPTCHA you've ever solved had the same weakness: &lt;strong&gt;the answer is static&lt;/strong&gt;. Pick the traffic lights. Type the distorted word. Click every image containing a bus. Whatever the answer is, a script (and lately, a cheap vision model) can compute it too.&lt;/p&gt;

&lt;p&gt;We're a small bootstrapped team, and when our own forms got hammered by bots we decided to build protection the way we wished it existed. This post is a technical breakdown of the approach we landed on: &lt;strong&gt;server-side trajectory replay&lt;/strong&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  The core idea
&lt;/h2&gt;

&lt;p&gt;The challenge is not a fixed asset — it's &lt;strong&gt;generated&lt;/strong&gt;:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;The server creates a random seed for each challenge&lt;/li&gt;
&lt;li&gt;The client deterministically builds the layout from that seed (same RNG, same layout, every time)&lt;/li&gt;
&lt;li&gt;You solve it — dragging a disc through a maze, tapping a bouncing ball, straightening a tilted photo&lt;/li&gt;
&lt;li&gt;Your input events (timestamps + coordinates) are sent back&lt;/li&gt;
&lt;li&gt;The server &lt;strong&gt;re-simulates your exact path&lt;/strong&gt; through the same layout and verifies the solve&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The answer is not "which squares contain a bus". The answer is &lt;strong&gt;how you moved&lt;/strong&gt;: your timing, your speed curve, your micro-corrections. That can't be pre-computed, because the layout didn't exist until the server generated it, and the trajectory is measured against physical plausibility.&lt;/p&gt;

&lt;h2&gt;
  
  
  What we check on replay
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Teleport detection&lt;/strong&gt; — a human finger can't jump 200px in one 40ms frame. &lt;code&gt;|Δx| &amp;gt; k·Δt + c&lt;/code&gt; → rejected&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Speed caps&lt;/strong&gt; — per-step velocity above a generous human ceiling → rejected&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Scripted cadence&lt;/strong&gt; — screen-acting AI agents move the pointer in metronomic, perfectly-timed steps. Humans produce irregular intervals (OS scheduling + muscle jitter). We flag near-perfectly regular input sequences&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Per-challenge replay&lt;/strong&gt; — puzzle solves, rotation angles, final positions — all recomputed server-side from the same seed&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  What we deliberately DON'T check
&lt;/h2&gt;

&lt;p&gt;We keep the checks &lt;strong&gt;one-directional — flag perfection, pass imperfection&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Shaky hands? Trackpad? Tremors? Your input has &lt;em&gt;high&lt;/em&gt; variance — the opposite of scripted. It passes&lt;/li&gt;
&lt;li&gt;Short traces and slow movements are fail-open. We'd rather let a borderline human through than block one&lt;/li&gt;
&lt;li&gt;No behavioral tracking across sites, no advertising profiles, no personal data&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Why this matters now
&lt;/h2&gt;

&lt;p&gt;Two things changed in the last year:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Vision models got free.&lt;/strong&gt; A local multimodal model solves image puzzles at zero marginal cost. Any challenge with a fixed, publicly-visible answer format will fall.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Computer-use agents arrived.&lt;/strong&gt; GPT-class models now take screenshots and act — moving the mouse, clicking buttons, filling forms, exactly like a person. The old defenses don't even see them as bots.&lt;/p&gt;

&lt;p&gt;The only durable lever left is &lt;strong&gt;cost per solve&lt;/strong&gt;. Puzzles cost a bot nothing. Motion-physical verification costs real engineering: an agent must generate trajectories that pass teleport, speed, and cadence analysis &lt;em&gt;while also&lt;/em&gt; solving the challenge correctly. That raises the price of abuse from ~free to real money — which is the only currency spammers understand.&lt;/p&gt;

&lt;h2&gt;
  
  
  The honest open problems
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Accessibility&lt;/strong&gt;: any motion-based check risks flagging motor-impaired users. Our checks are deliberately one-directional (flag perfection, pass imperfection), and sites can serve proof-of-work to everyone, escalating to interactive only for suspicious traffic — but a proper accessibility fallback (audio / alternative challenge) is still on our drawing board&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The arms race is real&lt;/strong&gt;: an agent that adds realistic jitter to its movements is coming. Every signal we add, someone will model it. We think replay verification raises the bar further than puzzles did, but we're not claiming immunity&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Friction&lt;/strong&gt;: interactive challenges take 3–5 seconds. That's fine for signup and password reset, too much for search bars — which is why risk-based selection (one-click for trusted IPs, interactive for suspicious ones) matters more than any single challenge type&lt;/li&gt;
&lt;/ul&gt;

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

&lt;p&gt;All 35 challenges run live in the browser, no signup: &lt;strong&gt;&lt;a href="https://msrfteam.com/captcha" rel="noopener noreferrer"&gt;msrfteam.com/captcha&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Every card on that page plays a real challenge preview, and every solve is verified the way this post describes.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;We're a tiny team (zero funding, working from home) building an ecosystem of developer tools — a captcha platform, a package manager, an AI gateway. If you've built or evaluated bot protection, we'd genuinely love to compare notes: what signals would you add to replay verification?&lt;/em&gt;&lt;/p&gt;

</description>
      <category>security</category>
      <category>webdev</category>
      <category>ai</category>
      <category>captcha</category>
    </item>
  </channel>
</rss>
