<?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: Nishant Paudel</title>
    <description>The latest articles on DEV Community by Nishant Paudel (@nishant_paudel_b5720c48ad).</description>
    <link>https://dev.to/nishant_paudel_b5720c48ad</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%2F3792047%2F621a48f9-b5a6-4ddc-ba55-8c11ba5eb88f.jpg</url>
      <title>DEV Community: Nishant Paudel</title>
      <link>https://dev.to/nishant_paudel_b5720c48ad</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/nishant_paudel_b5720c48ad"/>
    <language>en</language>
    <item>
      <title>IKAREM: a zero-dependency Python ASGI framework with built-in MCP tools (looking for people to break it)</title>
      <dc:creator>Nishant Paudel</dc:creator>
      <pubDate>Wed, 30 Sep 2026 16:56:52 +0000</pubDate>
      <link>https://dev.to/nishant_paudel_b5720c48ad/ikarem-a-zero-dependency-python-asgi-framework-with-built-in-mcp-tools-looking-for-people-to-4175</link>
      <guid>https://dev.to/nishant_paudel_b5720c48ad/ikarem-a-zero-dependency-python-asgi-framework-with-built-in-mcp-tools-looking-for-people-to-4175</guid>
      <description>&lt;p&gt;Hi, I'm Nishant Paudel, a developer from Nepal. I've been building IKAREM, an ASGI web framework whose core imports only the standard library, so pip install ikarem installs nothing else. Uvicorn, asyncpg, Jinja2 and the rest are optional extras.&lt;/p&gt;

&lt;p&gt;What My Project Does&lt;/p&gt;

&lt;p&gt;It's a FastAPI-style framework with the pieces you'd expect: dependency injection, typed validation, OpenAPI and Swagger docs, JWT/RBAC, signed-cookie sessions with CSRF, plugins, blueprints, a durable task queue, cron, migrations, and a cookie-jar TestClient so you can test without a server.&lt;/p&gt;

&lt;p&gt;Two things that might be new to you:&lt;/p&gt;

&lt;p&gt;ikarem mcp myapp:app serves every route as an MCP tool for LLM agents, with your validation schemas becoming the tool schemas.&lt;br&gt;
ikarem check statically audits your handlers (dependency cycles, duplicate routes, auth gaps) so you can gate deploys on it.&lt;br&gt;
python&lt;br&gt;
from ikarem import Ikarem&lt;/p&gt;

&lt;p&gt;app = Ikarem()&lt;/p&gt;

&lt;p&gt;@app.get("/users/{uid:int}")&lt;br&gt;
async def get_user(req, uid: int):&lt;br&gt;
    return {"uid": uid}  # dicts become JSON&lt;/p&gt;

&lt;p&gt;Target Audience&lt;/p&gt;

&lt;p&gt;Side projects, internal tools, and small-to-medium services, and anyone who wants to minimize dependencies or expose an API to LLM agents. It is not yet a "bet your company on it" framework (see below).&lt;/p&gt;

&lt;p&gt;Comparison&lt;/p&gt;

&lt;p&gt;Compared with FastAPI and Litestar, IKAREM trades ecosystem size and Pydantic for a stdlib-only core and MCP built in. Compared with Flask, it's async-first with explicit req parameters instead of global proxies. On trivial routes it's slower than a bare-bones framework, and my benchmarks say so openly.&lt;/p&gt;

&lt;p&gt;What's unproven (please read this first)&lt;/p&gt;

&lt;p&gt;It hasn't run under real production traffic. My benchmarks are in-process, plus a ~75k-request load test over uvicorn against my own demo app.&lt;br&gt;
The auth, session and static-file code has not had an independent security review.&lt;br&gt;
Postgres/MySQL/SQL Server are less proven than SQLite, and it's a one-person project.&lt;/p&gt;

&lt;p&gt;What I'm asking for: try it on something small and tell me what breaks. If you enjoy reading security-sensitive code, auth.py, session.py and static.py are the ones I most want a second pair of eyes on.&lt;/p&gt;

&lt;p&gt;GitHub: &lt;a href="https://github.com/nishantXnova/IKAREM" rel="noopener noreferrer"&gt;https://github.com/nishantXnova/IKAREM&lt;/a&gt;&lt;br&gt;
Guide (zero to production, every snippet runs in CI): in the repo under docs/&lt;/p&gt;

</description>
      <category>backend</category>
      <category>llm</category>
      <category>mcp</category>
      <category>python</category>
    </item>
    <item>
      <title>How We Engineered a 73% Cache Hit Rate Travel App with Vite + React</title>
      <dc:creator>Nishant Paudel</dc:creator>
      <pubDate>Wed, 25 Feb 2026 16:00:42 +0000</pubDate>
      <link>https://dev.to/nishant_paudel_b5720c48ad/how-we-engineered-a-73-cache-hit-rate-travel-app-with-vite-react-32dg</link>
      <guid>https://dev.to/nishant_paudel_b5720c48ad/how-we-engineered-a-73-cache-hit-rate-travel-app-with-vite-react-32dg</guid>
      <description>&lt;p&gt;&lt;strong&gt;GoNepal&lt;/strong&gt; - &lt;em&gt;Cache-First Travel for Nepal’s Toughest Networks&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;GoNepal&lt;/strong&gt; started out as a hackathon project, but right from the beginning, we focused on one big problem: &lt;strong&gt;Nepal’s network can be flaky&lt;/strong&gt;, especially in the &lt;strong&gt;mountains&lt;/strong&gt;, and most travel apps just aren’t built for that. So we built GoNepal to keep working even when your signal drops, your battery’s low, or you’re stuck translating between three languages.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Core Idea&lt;/strong&gt;&lt;strong&gt;:&lt;/strong&gt; &lt;em&gt;Cache Comes First&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Most apps treat caching like an &lt;strong&gt;afterthought&lt;/strong&gt;. We flipped that. For us, cache isn’t just a speed boost — it’s the backbone.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1️⃣ In-Memory Translation Cache&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;We built a translation engine that actually watches the DOM for changes (thank you, &lt;strong&gt;MutationObserver&lt;/strong&gt;). Every time you translate something, we stash that result in RAM for the session — no more wasting API calls on the same text.&lt;/p&gt;

&lt;p&gt;_const translationCache: Record = {};&lt;/p&gt;

&lt;p&gt;export function getCachedTranslation(key: string) {&lt;br&gt;
  if (translationCache[key]) return translationCache[key];&lt;br&gt;
  return null;&lt;br&gt;
}_&lt;/p&gt;

&lt;p&gt;What does that give you? Lightning-fast repeat translations, fewer hits to the translation API, and less battery drain from all those little network wake-ups.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2️⃣ Persistent Offline Layer (&lt;/strong&gt;localStorage*&lt;em&gt;)&lt;/em&gt;*&lt;/p&gt;

&lt;p&gt;Critical info gets saved locally, with a little strategy:&lt;/p&gt;

&lt;p&gt;Weather? We keep it for &lt;strong&gt;6&lt;/strong&gt; hours.&lt;/p&gt;

&lt;p&gt;Trail maps? 7 days.&lt;/p&gt;

&lt;p&gt;Emergency phrases and your digital tourist ID? Permanent.&lt;/p&gt;

&lt;p&gt;Home base GPS? Also sticks around.&lt;/p&gt;

&lt;p&gt;So even if you’re hiking off-grid, you’ll have your essentials ready.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3️⃣ Geofenced Safety Protocol&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;We use your home base GPS and your real-time location. If you stray more than 3km from your base, the app pings you with a warning. Need help? We check Overpass API for hospitals, hotels, and what’s nearby. Need to navigate? We deep link you straight into your native map app. And if you lose your connection, the safety features don’t just crash — they scale back and keep you as safe as possible.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4️⃣ Weather-Smart Itinerary Engine&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;No more canned suggestions. We pull live weather from Open-Meteo, do reverse geocoding to figure out where you actually are, then serve up recommendations based on the weather, the time, and your current spot.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Performance Target&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;We’re aiming for a &lt;strong&gt;73%&lt;/strong&gt; cache hit rate each session. That’s based on how much of the UI and data we can reuse — weather, translations, survival info. It’s a projection based on our app’s structure, not raw production stats (yet).&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tech Stack&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;_Vite&lt;/p&gt;

&lt;p&gt;React (with Context for state)&lt;/p&gt;

&lt;p&gt;Tailwind + shadcn/ui&lt;/p&gt;

&lt;p&gt;Framer Motion (for page transitions)&lt;/p&gt;

&lt;p&gt;Supabase&lt;/p&gt;

&lt;p&gt;Leaflet + OpenStreetMap&lt;/p&gt;

&lt;p&gt;Open-Meteo API&lt;/p&gt;

&lt;p&gt;Overpass API&lt;/p&gt;

&lt;p&gt;Vercel (CI/CD)_&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why Go This Route?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Most travel platforms expect you to always be &lt;strong&gt;online&lt;/strong&gt;. In Nepal’s high-altitude trekking zones, that’s just not reality. We built GoNepal for spotty signals, for travelers juggling languages, for people who need their phone battery to last all day.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;We’re still building. Would love to hear your thoughts, especially on:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;_Cache invalidation&lt;/p&gt;

&lt;p&gt;Scaling translations&lt;/p&gt;

&lt;p&gt;Better offline sync_&lt;/p&gt;

&lt;p&gt;Locking down digital ID security&lt;br&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.amazonaws.com%2Fuploads%2Farticles%2Fw6etf3148b022l8tl0pp.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.amazonaws.com%2Fuploads%2Farticles%2Fw6etf3148b022l8tl0pp.png" alt=" " width="800" height="449"&gt;&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;A short Glance at our Home Page/Hero&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>react</category>
      <category>performance</category>
      <category>javascript</category>
      <category>architecture</category>
    </item>
  </channel>
</rss>
