incredible week in India.
two things stood out:
1) the moment for builders is now. I’ve spent this year with builder communities around the world and the same energy keeps showing up: people building for their own local use cases, on their own terms. India might be the strongest example yet.
2) we’re still so early. many innings left in this game
Still can't believe it. We won 🥇 1st place at the @GoogleDeepMind × @cerebral_valley Hackathon Bangalore! 🎉
We built an AI-powered RPG where worlds, assets, dialogues, and quests are generated in real time using @NanoBanana. Every playthrough is unique.
lots of ppl asked about how we did it, so here we go!
the why:
> the idea was to push the limits of the new @NanoBanana model which is fast and cheap. building a game came to mind as they are a good representation of pushing creative limits.
the how:
> you type an idea
> gemini-3.5-flash builds a game bible - clues, npcs, the story, rooms, street, etc. the bigger game mechanics like no of clues & npcs are always fixed.
> nano banana paints a top-view street image (the background you walk on)
> nano banana runs again and draws magenta outlines around every object (buildings, paths, trees, etc.). this is done so the next model can “see” where things are
> gemini-3.5-flash looks at the clean street + the outlined copy and marks hotspots + edges (where you can walk / enter / talk)
> at the same time, nano banana draws your player character
> also in parallel: the 3 story rooms (interiors) start building in the background while you walk, so opening a door feels instant. some buildings on the street are just flavor and don’t open into a real room
> the world is infinite - meaning if you enter the edge of a screen, it will create another screen with the previous frame as a reference
> we now have all the elements to play. all of this is rendered in an HTML canvas in the browser, where you play.
the gameplay:
> every run is one mystery with one goal
> enter a room, talk to an npc - each one guards 1 clue
> gemini-3.5-flash writes the dialogue, then gemini tts speaks it out loud
> explore, move around, pick up items, notice local nuances, engage with the npcs until you’ve got all 3 clues!
Introducing Viri
Checkout the code - https://t.co/Cr0D711UEr
Playground - https://t.co/b916UEtK7G
Viri feature set 🧠⚙️
– functions with closures
– classes with methods and inheritance
– lexical scoping and block scopes
– loops, conditionals, and expressions
– modules with import / export and resolution
– runs as both a tree-walking interpreter and a compiler + bytecode VM (~3× faster)
Follow along. Actively building and iterating.
Working on a search engine to really understand how it works 🧠
One optimization that actually moved the needle:
Earlier, boolean queries built full in-memory lists for each term upfront. That meant decoding doc IDs plus extra data and allocating memory before knowing which documents would even survive AND / OR.
Changed the execution model:
Boolean queries now operate only on document IDs using bitmap-based set operations. All the heavier work (scores, lookups, extra decoding) happens only after the final document set is known.
Net effect: less decoding, less memory pressure, simpler execution flow and faster query execution
Building in public. Feedback and suggestions welcome 👇
Added fuzzy search, regex search, and prefix search⚡️
Check it out - https://t.co/zczayQwoJ6
All of them fall out naturally from the FST-based term dictionary. Fuzzy queries use a Levenshtein distance automaton, regex queries use a regex automaton, and prefix queries are just a range scan over the FST to collect matching terms.
Once terms are collected, the rest is straightforward: fetch postings and aggregate docs. The heavy lifting is done by the FST.
Added fuzzy search, regex search, and prefix search⚡️
Check it out - https://t.co/zczayQwoJ6
All of them fall out naturally from the FST-based term dictionary. Fuzzy queries use a Levenshtein distance automaton, regex queries use a regex automaton, and prefix queries are just a range scan over the FST to collect matching terms.
Once terms are collected, the rest is straightforward: fetch postings and aggregate docs. The heavy lifting is done by the FST.
Introducing postings 🔎
A search engine built to reason about modern full-text search architecture.
https://t.co/rzwnk1PwyF
The system follows an LSM-style design: writes go to a mutable in-memory layer and flush into immutable on-disk segments. Segments are memory-mapped (mmap) for efficient reads, FST-backed dictionaries drive term lookups in the inverted index, and per-segment bitmap tombstones hide obsolete documents.
In parallel, reading Introduction to Information Retrieval and studying @blevesearch’s production search engine design.