<?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: Sudhanshu Mani Tripathi</title>
    <description>The latest articles on DEV Community by Sudhanshu Mani Tripathi (@sudhanshu_manitripathi_f).</description>
    <link>https://dev.to/sudhanshu_manitripathi_f</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%2F3864893%2F5a18e020-b67a-4317-a8e7-9d3d25340915.jpg</url>
      <title>DEV Community: Sudhanshu Mani Tripathi</title>
      <link>https://dev.to/sudhanshu_manitripathi_f</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/sudhanshu_manitripathi_f"/>
    <language>en</language>
    <item>
      <title>World Dungeon — Your Neighborhood Is the Map, Open-Source AI Is the Dungeon Master</title>
      <dc:creator>Sudhanshu Mani Tripathi</dc:creator>
      <pubDate>Sun, 11 Oct 2026 17:30:08 +0000</pubDate>
      <link>https://dev.to/sudhanshu_manitripathi_f/world-dungeon-your-neighborhood-is-the-map-open-source-ai-is-the-dungeon-master-101p</link>
      <guid>https://dev.to/sudhanshu_manitripathi_f/world-dungeon-your-neighborhood-is-the-map-open-source-ai-is-the-dungeon-master-101p</guid>
      <description>&lt;p&gt;&lt;em&gt;This is a submission for the Hacktoberfest &lt;br&gt;
Open-Source AI Challenge Week 1: Touch Grass&lt;/em&gt;&lt;/p&gt;


&lt;h2&gt;
  
  
  What I Built
&lt;/h2&gt;

&lt;p&gt;World Dungeon turns your real neighborhood into &lt;br&gt;
a walking quest. Before you leave home, the app &lt;br&gt;
reads your actual surroundings from OpenStreetMap &lt;br&gt;
— the named streets, the parks, the old temples, &lt;br&gt;
the unnamed alleys, the bench nobody sits on, &lt;br&gt;
the wall that predates the colony — and Gemma2 &lt;br&gt;
generates a quest seeded entirely from what is &lt;br&gt;
physically there.&lt;/p&gt;

&lt;p&gt;Then you put your phone in your pocket and walk.&lt;/p&gt;

&lt;p&gt;Your earbuds narrate the story in an ancient, &lt;br&gt;
whispering voice. You arrive at real places. &lt;br&gt;
The lore unlocks. A burnt manuscript reveals &lt;br&gt;
its hidden history as you walk — each waypoint &lt;br&gt;
you reach restores another section of text that &lt;br&gt;
was hidden under scorched parchment. When you &lt;br&gt;
finish, you get a dungeon map made from your &lt;br&gt;
actual GPS trace and a quest scroll that is &lt;br&gt;
yours alone.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;No two quests are the same. No quest exists &lt;br&gt;
without walking it.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This is not a "get outside" app with a leaderboard &lt;br&gt;
bolted on. The outdoor world IS the game board. &lt;br&gt;
The screen is the shortest part of the experience:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;2 minutes to generate the quest before you leave&lt;/li&gt;
&lt;li&gt;0 screen time while walking — voice narrates, 
GPS unlocks, you keep your eyes up&lt;/li&gt;
&lt;li&gt;2 minutes to collect your artifact when done&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Who is it for:&lt;/strong&gt; Anyone in a city who walks &lt;br&gt;
the same streets every day and has stopped &lt;br&gt;
seeing them. World Dungeon makes the ordinary &lt;br&gt;
feel mythic — a bench becomes a threshold, &lt;br&gt;
an unnamed alley becomes a passage, an empty &lt;br&gt;
plot becomes an erasure.&lt;/p&gt;


&lt;h2&gt;
  
  
  Demo
&lt;/h2&gt;

&lt;p&gt;🌐 &lt;strong&gt;Live app:&lt;/strong&gt; &lt;a href="https://world-dungeon-smoky.vercel.app" rel="noopener noreferrer"&gt;https://world-dungeon-smoky.vercel.app&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The deployed version uses Gemma2-9b-it hosted &lt;br&gt;
on Groq for live quest generation. Open it on &lt;br&gt;
your phone, allow location access, and tap &lt;br&gt;
Generate Quest. A real quest for your actual &lt;br&gt;
location will be generated in 8-15 seconds.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;To run locally with offline Gemma:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/HeythisisSud/World-dungeon.git
&lt;span class="nb"&gt;cd &lt;/span&gt;World-dungeon
&lt;span class="nb"&gt;cp&lt;/span&gt; .env.example .env.local
&lt;span class="c"&gt;# Add your keys — Mapillary (free), &lt;/span&gt;
&lt;span class="c"&gt;# ElevenLabs (free), Groq (free)&lt;/span&gt;
ollama pull gemma2:2b
npm &lt;span class="nb"&gt;install
&lt;/span&gt;npm run dev
&lt;span class="c"&gt;# Open http://localhost:3000&lt;/span&gt;
&lt;span class="c"&gt;# Allow location, tap Generate Quest&lt;/span&gt;
&lt;span class="c"&gt;# Put your phone in your pocket and walk&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Code
&lt;/h2&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/HeythisisSud" rel="noopener noreferrer"&gt;
        HeythisisSud
      &lt;/a&gt; / &lt;a href="https://github.com/HeythisisSud/World-dungeon" rel="noopener noreferrer"&gt;
        World-dungeon
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      
    &lt;/h3&gt;
  &lt;/div&gt;
&lt;/div&gt;






&lt;h2&gt;
  
  
  How I Built It
&lt;/h2&gt;

&lt;h3&gt;
  
  
  The Core Idea
&lt;/h3&gt;

&lt;p&gt;Every "get outside" app has the same problem: &lt;br&gt;
the reward is on the screen, so the screen wins. &lt;br&gt;
Pokémon Go solved this by making the outdoor &lt;br&gt;
world the game board — you only catch the &lt;br&gt;
Pokémon if you physically go there. World Dungeon &lt;br&gt;
applies the same principle to storytelling: &lt;br&gt;
the lore only exists at the location, the quest &lt;br&gt;
only completes if you walk it, the artifact &lt;br&gt;
only unlocks if you were there.&lt;/p&gt;

&lt;p&gt;The open-source AI stack makes this possible &lt;br&gt;
without a corporate backend owning your walks.&lt;/p&gt;


&lt;h3&gt;
  
  
  The Stack
&lt;/h3&gt;

&lt;p&gt;&lt;strong&gt;Inference: Gemma2 (Google open-weight model)&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Gemma2-9b-it running on Groq generates all &lt;br&gt;
quest narrative. The model receives real &lt;br&gt;
OpenStreetMap data for the player's 1km radius &lt;br&gt;
— actual place names, coordinates, landmark &lt;br&gt;
types, historical tags — and produces a &lt;br&gt;
structured quest JSON: title, premise, four &lt;br&gt;
waypoints tied to real OSM coordinates, a &lt;br&gt;
100-150 word lore fragment per waypoint, and &lt;br&gt;
a final artifact description.&lt;/p&gt;

&lt;p&gt;The prompt explicitly instructs Gemma to:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Use ONLY real places from the OSM data&lt;/li&gt;
&lt;li&gt;Draw from Indian history — Mughal era, 
colonial period, partition, urban legend&lt;/li&gt;
&lt;li&gt;Make ordinary places mythic — a bench, 
a wall, an unnamed crossing&lt;/li&gt;
&lt;li&gt;Never use European fantasy tropes&lt;/li&gt;
&lt;li&gt;Return valid JSON only, no markdown&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;For local/offline use, the same code runs &lt;br&gt;
against Gemma2:2b via Ollama. One environment &lt;br&gt;
variable switches between them:&lt;br&gt;
&lt;code&gt;USE_LOCAL_OLLAMA=true # offline, private&lt;br&gt;
USE_LOCAL_OLLAMA=false # Groq hosted Gemma2&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;I benchmarked both:&lt;/strong&gt;&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Model&lt;/th&gt;
&lt;th&gt;Provider&lt;/th&gt;
&lt;th&gt;Response time&lt;/th&gt;
&lt;th&gt;JSON validity&lt;/th&gt;
&lt;th&gt;Lore quality&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;gemma2:2b&lt;/td&gt;
&lt;td&gt;Local Ollama&lt;/td&gt;
&lt;td&gt;18-35s&lt;/td&gt;
&lt;td&gt;8/10&lt;/td&gt;
&lt;td&gt;3.8/5&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;gemma2-9b-it&lt;/td&gt;
&lt;td&gt;Groq&lt;/td&gt;
&lt;td&gt;4-8s&lt;/td&gt;
&lt;td&gt;10/10&lt;/td&gt;
&lt;td&gt;4.4/5&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;phi3:mini&lt;/td&gt;
&lt;td&gt;Local Ollama&lt;/td&gt;
&lt;td&gt;12-20s&lt;/td&gt;
&lt;td&gt;7/10&lt;/td&gt;
&lt;td&gt;3.2/5&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Gemma2-9b-it on Groq wins on every metric. &lt;br&gt;
The larger model produces more historically &lt;br&gt;
specific lore and more reliable JSON structure. &lt;br&gt;
The local 2b model is slower but proves the &lt;br&gt;
offline argument — the quest generates on your &lt;br&gt;
device with no internet after the initial &lt;br&gt;
OSM data fetch.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Map Data: OpenStreetMap via Overpass API&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The Overpass query fetches everything OSM has &lt;br&gt;
tagged within 1km — not just famous monuments. &lt;br&gt;
Benches. Trees. Unnamed walls. Bus stops. &lt;br&gt;
Empty plots. Chai stalls. The query deliberately &lt;br&gt;
casts wide:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Fetch benches, shops, historic sites, &lt;/span&gt;
&lt;span class="c1"&gt;// natural features, barriers, land use —&lt;/span&gt;
&lt;span class="c1"&gt;// anything physically present&lt;/span&gt;
&lt;span class="nx"&gt;node&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;amenity&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;bench&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;](&lt;/span&gt;&lt;span class="nx"&gt;around&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="nx"&gt;$&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="nx"&gt;radius&lt;/span&gt;&lt;span class="p"&gt;},...);&lt;/span&gt;
&lt;span class="nx"&gt;node&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;natural&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="o"&gt;~&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;tree|rock|spring&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;](&lt;/span&gt;&lt;span class="nx"&gt;around&lt;/span&gt;&lt;span class="p"&gt;:...);&lt;/span&gt;
&lt;span class="nx"&gt;way&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;barrier&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="o"&gt;~&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;wall|fence|gate&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;](&lt;/span&gt;&lt;span class="nx"&gt;around&lt;/span&gt;&lt;span class="p"&gt;:...);&lt;/span&gt;
&lt;span class="nx"&gt;way&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;landuse&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="o"&gt;~&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="s2"&gt;vacant|brownfield&lt;/span&gt;&lt;span class="dl"&gt;"&lt;/span&gt;&lt;span class="p"&gt;](&lt;/span&gt;&lt;span class="nx"&gt;around&lt;/span&gt;&lt;span class="p"&gt;:...);&lt;/span&gt;
&lt;span class="c1"&gt;// Plus named amenities, historic sites, tourism&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This is what makes every quest genuinely &lt;br&gt;
hyperlocal. A quest seeded from Lodi Garden &lt;br&gt;
and a quest seeded from Mayur Vihar are not &lt;br&gt;
just different waypoints — they are completely &lt;br&gt;
different stories because the raw material is &lt;br&gt;
completely different.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Street-Level Photos: Mapillary&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Mapillary is an open, community-contributed &lt;br&gt;
street-level photo platform. When a waypoint &lt;br&gt;
unlocks, the real photo of that street location &lt;br&gt;
appears — not a stock image of a famous monument, &lt;br&gt;
but an actual photograph of the specific street, &lt;br&gt;
corner, or alley the player is standing at.&lt;/p&gt;

&lt;p&gt;The image reveal is timed to the encounter &lt;br&gt;
animation: the player arrives, the screen &lt;br&gt;
flashes gold, and the real photo of the place &lt;br&gt;
fades in over the darkened encounter panel. &lt;br&gt;
The photo makes the lore land differently — &lt;br&gt;
you are reading about this specific cracked &lt;br&gt;
wall while looking at a photograph of it.&lt;/p&gt;

&lt;p&gt;Fallback chain when Mapillary has no coverage:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Wikipedia thumbnail via REST API&lt;/li&gt;
&lt;li&gt;Procedurally generated dungeon-map 
illustration (Canvas, seeded by coords)&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;Voice: ElevenLabs + Web Speech API fallback&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The dungeon master voice uses ElevenLabs &lt;br&gt;
eleven_multilingual_v2 model. The voice &lt;br&gt;
character is deliberately ancient and &lt;br&gt;
whispering — like the place itself speaking.&lt;/p&gt;

&lt;p&gt;Key design decisions:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Unlock cue spoken at high stability (0.85) — 
commanding, carved-in-stone quality&lt;/li&gt;
&lt;li&gt;Lore fragment spoken at lower stability (0.45) — 
more variation, like a voice remembering 
something painful&lt;/li&gt;
&lt;li&gt;1200ms silence between cue and lore — 
the silence is part of the performance&lt;/li&gt;
&lt;li&gt;Playback rate: 0.92 — slightly slowed, 
heavier, more ancient&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;All waypoint audio is pre-generated when the &lt;br&gt;
quest loads so there is zero loading delay &lt;br&gt;
when the player arrives at a waypoint. The &lt;br&gt;
voice fires instantly on encounter trigger.&lt;/p&gt;

&lt;p&gt;Web Speech API is the fallback — the game &lt;br&gt;
works without ElevenLabs.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Live Map: Leaflet + Stadia Stamen Toner tiles&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A real interactive map shows the player's &lt;br&gt;
live GPS position and all waypoint locations. &lt;br&gt;
The map tiles are color-graded with CSS filters &lt;br&gt;
to a dark amber dungeon aesthetic:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="nc"&gt;.leaflet-tile-pane&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="nl"&gt;filter&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nb"&gt;invert&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="n"&gt;sepia&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="n"&gt;saturate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;3&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; 
          &lt;span class="n"&gt;hue-rotate&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;180deg&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="n"&gt;brightness&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;0.4&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Roads become gold lines on near-black. &lt;br&gt;
The map feels like a dungeon map because &lt;br&gt;
it IS a dungeon map — just one that updates &lt;br&gt;
in real time as the player walks.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Burnt Manuscript System&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The quest scroll starts almost entirely hidden &lt;br&gt;
under scorched parchment. As the player walks &lt;br&gt;
and unlocks waypoints, the burnt overlay &lt;br&gt;
retreats — SVG clip-path animation with ember &lt;br&gt;
glow along the reveal edge — and the hidden &lt;br&gt;
lore is restored.&lt;/p&gt;

&lt;p&gt;This mechanic means the quest scroll is a &lt;br&gt;
reward that requires walking to earn. You &lt;br&gt;
cannot read the full story without completing &lt;br&gt;
the full walk.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Journey Map&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A persistent progress screen shows every &lt;br&gt;
completed quest as a stamp on a winding road — &lt;br&gt;
Candy Crush style, but the stamps contain &lt;br&gt;
real photos from the player's actual walks. &lt;br&gt;
The road is generated algorithmically with &lt;br&gt;
a sine-wave layout. Each stamp is a circular &lt;br&gt;
polaroid of the Mapillary photo or the player's &lt;br&gt;
own camera photo from that quest.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Frontend: Next.js 14, TypeScript, Tailwind&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Backend: Fastify, Node.js, TypeScript, Zod&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Inference: Gemma2 via Groq (hosted) or Ollama (local)&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Map data: OpenStreetMap / Overpass API&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Photos: Mapillary API&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Voice: ElevenLabs API&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Deployment: Vercel (frontend), Render (backend)&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Why Does Open Innovation Matter?
&lt;/h2&gt;

&lt;p&gt;This project is only possible because of open &lt;br&gt;
infrastructure at every layer. That is not an &lt;br&gt;
accident — it is the architecture.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Your location is private.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Every quest generation prompt contains your &lt;br&gt;
precise GPS coordinates and a detailed map of &lt;br&gt;
your immediate surroundings — every named place &lt;br&gt;
within 1km of where you are standing. With a &lt;br&gt;
closed API (GPT-4, Gemini API), that data goes &lt;br&gt;
to a server you do not control, is logged, and &lt;br&gt;
is potentially used for training or advertising &lt;br&gt;
targeting.&lt;/p&gt;

&lt;p&gt;With Gemma2 running locally via Ollama, the &lt;br&gt;
prompt never leaves your device. The quest is &lt;br&gt;
generated in your own RAM. Switch &lt;br&gt;
USE_LOCAL_OLLAMA=true and your walks are &lt;br&gt;
completely private.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The map belongs to everyone.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;OpenStreetMap is community-built and freely &lt;br&gt;
licensed under ODbL. Google Maps charges per &lt;br&gt;
API call, restricts derivative use, and owns &lt;br&gt;
the data. OSM data means the lore of your &lt;br&gt;
neighborhood is generated from a map that &lt;br&gt;
your neighbors helped build — the bench &lt;br&gt;
tagged by someone who walks that park every &lt;br&gt;
morning, the unnamed alley that a local &lt;br&gt;
mapper added because they knew it mattered.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The photos belong to the community.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Mapillary images are contributed by real &lt;br&gt;
people walking real streets. The photograph &lt;br&gt;
that appears when a player unlocks a waypoint &lt;br&gt;
was taken by someone who walked that exact &lt;br&gt;
spot. A closed alternative (Google Street View) &lt;br&gt;
would cost money at scale and send the player's &lt;br&gt;
location to Google's servers on every image load.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;You can swap the model.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Want darker, more literary lore? Fine-tune &lt;br&gt;
Gemma on Gothic fiction. Want quests in Hindi &lt;br&gt;
or Urdu? Drop in a multilingual open-weight &lt;br&gt;
model. Want faster generation on a low-end &lt;br&gt;
phone? Switch to a 1B quantized model. Want &lt;br&gt;
to run it entirely offline on a trail with &lt;br&gt;
no signal? Set USE_LOCAL_OLLAMA=true and &lt;br&gt;
pull the model before you leave.&lt;/p&gt;

&lt;p&gt;A closed API makes none of these choices yours &lt;br&gt;
to make. The model is the product, not a &lt;br&gt;
component you can inspect, modify, or replace.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;It works without internet.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;After the initial OSM data fetch and model &lt;br&gt;
pull, the quest generates on your device. &lt;br&gt;
On a trail, in a park with no signal, in a &lt;br&gt;
neighborhood where data is expensive — the &lt;br&gt;
quest still runs. The walk is yours regardless &lt;br&gt;
of connectivity.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A closed alternative would cost money.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Google Places API + GPT-4 + Google Street View &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;a cloud TTS service would cost approximately 
₹8-15 per quest generation at scale. This stack 
costs ₹0 per quest. That is not a minor detail 
for a product meant to make walking accessible 
to everyone — not just people with API budgets.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  My Agent Session
&lt;/h2&gt;

&lt;p&gt;The core engineering challenge was the prompt &lt;br&gt;
that turns raw OSM data into compelling lore. &lt;br&gt;
Here is the iteration that made the biggest &lt;br&gt;
difference:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What failed first:&lt;/strong&gt;&lt;br&gt;
Generic fantasy tropes. Gemma kept writing &lt;br&gt;
about "ancient warriors" and "mystical energies" &lt;br&gt;
regardless of location. A bench in Delhi got &lt;br&gt;
the same lore as a castle in Scotland.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What fixed it:&lt;/strong&gt;&lt;br&gt;
Explicit cultural grounding in the prompt:&lt;br&gt;
`Do NOT use European fantasy tropes.&lt;br&gt;
Draw from: Mughal court politics, the 1857&lt;br&gt;
uprising, the 1947 partition, DDA housing&lt;br&gt;
colony history, Delhi monsoon cycles,&lt;br&gt;
auto-rickshaw culture, chai stall regulars.&lt;/p&gt;

&lt;p&gt;The lore must reference the specific place&lt;br&gt;
name at least twice.&lt;br&gt;
Make the walker feel that THIS EXACT SPOT&lt;br&gt;
has a story only they now know.&lt;br&gt;
`&lt;/p&gt;

&lt;p&gt;The difference in output quality was immediate &lt;br&gt;
and significant. The same bench that generated &lt;br&gt;
"ancient mystical energy" started generating:&lt;br&gt;
&lt;em&gt;"The bench was placed here in 1978 by a DDA &lt;br&gt;
worker whose name appears in no other record &lt;br&gt;
from that project. The colony's oldest resident &lt;br&gt;
says he came back every monsoon season to &lt;br&gt;
repaint it. Nobody saw him arrive. Nobody saw &lt;br&gt;
him leave."&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;That is the version worth walking for.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The second key insight&lt;/strong&gt; was splitting lore &lt;br&gt;
into two layers — surface observation (what &lt;br&gt;
you see right now) and buried history (what &lt;br&gt;
happened here). The surface layer grounds the &lt;br&gt;
player in the physical present. The buried &lt;br&gt;
layer is revealed on tap, rewarding curiosity. &lt;br&gt;
This structure came from noticing that the &lt;br&gt;
best quest lore always does two things: &lt;br&gt;
describes and reveals.&lt;/p&gt;




&lt;h2&gt;
  
  
  Field Test
&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;Honest note: The submission deadline caught &lt;br&gt;
me before I could complete a full outdoor &lt;br&gt;
field test. Here is what I know from testing &lt;br&gt;
the GPS system indoors and what the planned &lt;br&gt;
test would have covered:&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;GPS system:&lt;/strong&gt; watchPosition with maximumAge:0 &lt;br&gt;
fires correctly on desktop simulation. The &lt;br&gt;
20-meter proximity threshold triggers the &lt;br&gt;
encounter animation as expected.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Planned test location:&lt;/strong&gt; Mayur Vihar, &lt;br&gt;
East Delhi.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What I expected to find:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;OSM coverage in Mayur Vihar is moderate — 
named roads and major amenities are well-tagged, 
but many unnamed alleys and street furniture 
may not appear&lt;/li&gt;
&lt;li&gt;Mapillary coverage confirmed via API test — 
5 images returned within 500m of my location&lt;/li&gt;
&lt;li&gt;AQI and heat in Delhi in October means 
morning walks (6-9am) are the realistic 
use window&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;What I would have reported honestly:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Whether the 20m proximity threshold is too 
tight for urban GPS accuracy (typical urban 
GPS error is 10-20m)&lt;/li&gt;
&lt;li&gt;Whether Gemma placed any waypoints inside 
buildings or behind gates&lt;/li&gt;
&lt;li&gt;Whether the ElevenLabs voice narration 
worked through earbuds while walking 
with the phone in a pocket&lt;/li&gt;
&lt;li&gt;Whether the Mapillary images matched 
the actual current state of the streets 
(images may be months or years old)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;I will update this post with real field test &lt;br&gt;
results within 24 hours of submission. The &lt;br&gt;
code is live and the quest generation works — &lt;br&gt;
the walk is next.&lt;/p&gt;




&lt;h2&gt;
  
  
  Prize Categories
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Gemma (Google) — Featured ($200)&lt;/strong&gt;&lt;br&gt;
Gemma2-9b-it is the core inference model. &lt;br&gt;
It generates all quest narrative from real &lt;br&gt;
OSM data. Benchmarked against Gemma2:2b &lt;br&gt;
(local) and Phi3:mini. The project is built &lt;br&gt;
around the open-weight Gemma2 model family — &lt;br&gt;
swappable between local and hosted with one &lt;br&gt;
environment variable, demonstrating the &lt;br&gt;
model-as-component argument concretely.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;ElevenLabs — Partner ($100)&lt;/strong&gt;&lt;br&gt;
The dungeon master voice is the primary UI &lt;br&gt;
of the walk experience. Without narration, &lt;br&gt;
players look at a screen. With ElevenLabs &lt;br&gt;
eleven_multilingual_v2 at tuned stability &lt;br&gt;
and pitch settings, the place itself speaks. &lt;br&gt;
All waypoint audio is pre-generated at quest &lt;br&gt;
start so narration fires instantly on arrival &lt;br&gt;
with zero loading delay. Web Speech API &lt;br&gt;
provides graceful degradation when offline.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Render — Featured ($200)&lt;/strong&gt;&lt;br&gt;
Backend (Fastify + Node.js) deployed on Render. &lt;br&gt;
Handles the full quest generation pipeline: &lt;br&gt;
Overpass API fetch → Gemma2 prompt build → &lt;br&gt;
Groq inference → Zod validation → Wikimedia &lt;br&gt;
image fetch → response. Free tier instance &lt;br&gt;
with environment-variable-driven configuration.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;SerpApi — Partner ($100)&lt;/strong&gt;&lt;br&gt;
Optional landmark enrichment layer. When &lt;br&gt;
SERPAPI_KEY is configured, the backend pulls &lt;br&gt;
real-world context about each OSM landmark &lt;br&gt;
before building the Gemma prompt. Recent news &lt;br&gt;
or historical facts about a location are &lt;br&gt;
injected as [REAL CONTEXT: "..."] into the &lt;br&gt;
prompt, grounding the AI lore in verifiable &lt;br&gt;
reality. Degrades gracefully when key is absent.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;GitHub Copilot — Partner ($100)&lt;/strong&gt;&lt;br&gt;
GitHub Copilot assisted throughout &lt;br&gt;
development — autocompleting TypeScript &lt;br&gt;
types, suggesting Zod schema structures, &lt;br&gt;
and accelerating the Fastify route handlers. &lt;br&gt;
The entire codebase is on GitHub with a &lt;br&gt;
documented commit history showing the &lt;/p&gt;

&lt;h2&gt;
  
  
  build progression over 3 days.
&lt;/h2&gt;

&lt;p&gt;&lt;em&gt;Built in 3 days for Hacktoberfest Week 1: &lt;br&gt;
Touch Grass. The neighborhood has always had &lt;br&gt;
stories. We just needed an open dungeon master &lt;br&gt;
to read them.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;— &lt;a class="mentioned-user" href="https://dev.to/sudhanshu_manitripathi_f"&gt;@sudhanshu_manitripathi_f&lt;/a&gt;&lt;/em&gt;&lt;/p&gt;

</description>
      <category>devchallenge</category>
      <category>hf26challenge</category>
      <category>hacktoberfest</category>
      <category>ai</category>
    </item>
    <item>
      <title>You don’t get hacked by one bad pod. You get hacked by the path between them.</title>
      <dc:creator>Sudhanshu Mani Tripathi</dc:creator>
      <pubDate>Tue, 07 Apr 2026 04:31:25 +0000</pubDate>
      <link>https://dev.to/sudhanshu_manitripathi_f/you-dont-get-hacked-by-one-bad-pod-you-get-hacked-by-the-path-between-them-49ak</link>
      <guid>https://dev.to/sudhanshu_manitripathi_f/you-dont-get-hacked-by-one-bad-pod-you-get-hacked-by-the-path-between-them-49ak</guid>
      <description>&lt;p&gt;Most Kubernetes security discussions I see focus on individual misconfigurations —&lt;br&gt;
bad RBAC, privileged pods, exposed services, etc.&lt;br&gt;
But in real-world incidents, attackers don’t stop at one mistake.&lt;br&gt;
They move. Laterally. Quietly.&lt;br&gt;
From:&lt;br&gt;
Pod → Node&lt;br&gt;
Node → IAM / Cloud&lt;br&gt;
One namespace → another&lt;br&gt;
That “movement” is what actually breaks clusters. &lt;br&gt;
DevOps Conference &amp;amp; Camps&lt;br&gt;
So I built something to explore that idea:&lt;br&gt;
A &lt;strong&gt;Kubernetes Attack Path Visualizer&lt;/strong&gt;&lt;br&gt;
Instead of showing isolated issues, it maps:&lt;br&gt;
How different misconfigs connect&lt;br&gt;
Possible attack chains across the cluster&lt;br&gt;
Where privilege escalation actually becomes possible&lt;br&gt;
Example: A low-priv pod + weak RBAC + node access&lt;br&gt;
→ suddenly becomes cluster takeover&lt;br&gt;
Individually? Not critical.&lt;br&gt;
Together? Game over.&lt;br&gt;
From what I’ve seen (and even in discussions here),&lt;br&gt;
people underestimate how attackers pivot:&lt;br&gt;
“More real attacks come from host stuff… spreading sideways” &lt;/p&gt;

&lt;p&gt;What I’m trying to figure out:&lt;br&gt;
Do you currently think in terms of attack paths or just misconfigs?&lt;br&gt;
How do you prioritize fixes when everything looks risky?&lt;br&gt;
Would something like this actually help in real clusters, or is it overkill?&lt;br&gt;
Not trying to sell anything — just building in public and looking for feedback.&lt;br&gt;
If you’ve dealt with K8s security in production, I’d love your perspective &lt;br&gt;
Npm package: &lt;a href="https://www.npmjs.com/package/k8s-av" rel="noopener noreferrer"&gt;https://www.npmjs.com/package/k8s-av&lt;/a&gt;&lt;/p&gt;

</description>
      <category>devops</category>
      <category>security</category>
      <category>kubernetes</category>
      <category>cybersecurity</category>
    </item>
  </channel>
</rss>
