siya.agrawal

Computer science · Indore, India · Portfolio, 2026

Software for the moment before someonedecides.

Hover a projectSix things I built, each about a choice made with incomplete information.

I build full products end to end: interfaces, APIs, databases, browser extensions, keyboards, and the research design behind them. Most of it runs locally first and only goes online when it has to.

01 · Communicationvac-app-peach.vercel.app

VAC.

Virtual Auto Communicator. It reads your WhatsApp history, remembers what you promised, and suggests replies while you type.

The reply box is the product. VAC began as a dashboard and became a keyboard: three to five context-aware suggestions above the input, tone coaching mid-sentence, a hidden commitment surfaced at the moment it matters, and the judgement to say when no reply is needed at all.

  • EnginesContext, style, psychology, commitment. Each feeds the keyboard.
  • LearningLogs which draft you picked and how much you edited it, so the ranking adapts per person.
  • PrivacyRuns fully on-device with Ollama, or with Claude when you choose.
  • SurfacesWeb app, live WhatsApp bridge, Chrome extension, iOS and Android keyboards.
ReactTypeScriptViteExpress 5SQLitewhatsapp-web.jsOllamaClaude APISwift keyboard ext.Capacitor

The hosted version shows the interface. The AI and WhatsApp bridge run on your own machine. Source is private.

Keyboard layerillustration
did you send the deck to ma'am?Riya · 9:41 pm
she asked again in the group 😬9:42 pm
Commitment found · "will send the deck by tonight" · you, Tuesday
Tap a suggestion to draft it. Sample chat, not real data.
02 · Researchcanon-is-a-prior.vercel.app

The Canon Is a Prior.

How do we decide what a story means when the evidence is incomplete? An open experiment on how humans and language models revise interpretations.

The site opens with one word, "Sure.", and asks what it means before giving you the facts. Underneath sit fifteen routes of instruments. The flagship asks you to design the observation that would separate two models that both fit the same evidence.

  • RuleNo fabricated data. An empty dataset renders as zero; aggregates are withheld below n = 5.
  • FindingsA status machine with no PROVEN state. Every candidate names what would move it and what else explains it.
  • ControlsThree fabricated claims written in the same voice as the real ones, judged before any reveal.
  • OutputA manuscript generated from storage that prints "insufficient data" below n = 30.
Next.js 14TypeScriptTailwindFramer MotionVercel Blobtsx tests
Instrument · sketchI · construction
Sure.

What did he mean?

guessing60%certain
OBSERVEDMODELANALOGYHYPOTHESISOPENABANDONED
Simplified from the live homepage. Nothing here is recorded.
03 · Productkhapee.com

Khapee.

A complete ordering system for cafes and restaurants. Customers browse a menu, say where they are, and order. Staff watch orders land on a live board.

Three ways to arrive: at the table by scanning a QR code, from the car, or delivered. Restaurants sign up and get their tables and QR codes in one step, then edit menus, prices, photos and sold-out items from a dashboard. Guests never need an account.

  • No servicesNo external APIs or keys. SQLite, local password hashing, QR codes generated and scanned locally.
  • DeployOne Node process on Render, so two phones on different networks share one database.
  • TimingThe kitchen is asked for food no sooner than it promises, so it is hot when you arrive.
  • NextA Petpooja POS integration for dine-in, waiting on per-restaurant credentials.
ReactViteNode APISQLitebcryptjsqrcode / jsQRDockerRender
Live board · example order#A-214
Malwa Chai & PohaTable 6
2 × Indori poha₹120
1 × Cutting chai₹30
1 × Jalebi (100 g)₹60
Total₹210
Placed
Accepted
Cooking
Ready
Demo restaurant from the seed data. Prices are examples.
04 · Marketing sitekhapee-site.vercel.app

Khapee, the website.

You don't wait. Your food does. The pitch for Khapee, told as one continuous scroll.

Four animated scenes carry a single order from leaving home to collecting at the counter. Each scene is its own component with hand-drawn SVG paths, and the whole thing builds to three static files that run on any host.

  • ScenesCover, Journey, Arrival, Advantages.
  • HandoffShips with a built site/ folder for hosting and a source/ folder for designers.
  • TypeDisplay sizes clamp to both width and height, so each scene fits one screen on a phone.
ReactViteTailwindFramer MotionSVG
Scene picker1 / 4
Let your food wait for you.
Lines quoted from the site's own scenes.
05 · RecommendationRuns on your Mac

FicBrain.

A personal fanfiction librarian. It watches what you actually read, learns what you actually love, and recommends very selectively: three at most.

A Chrome extension reads your AO3 history through your own session, since AO3 has no API. FicBrain merges that with Apple Books, downloaded EPUBs and browser history, resolves reposts of the same story into one work, and ranks candidates against a taste model built from chapters finished, rereads and abandonments.

  • IdentityAO3 id, then a simhash content fingerprint, then fuzzy title, author and word count. Each link records its confidence.
  • EmbeddingsLocal bge-small, falling back to Ollama, then to a pure-numpy hashed TF-IDF.
  • MetricsRec to read, rec to completion, reread rate, diversity, and calibration by Brier score.
  • PrivacyEvery source is off until granted. The API binds to 127.0.0.1 and fic text never leaves the machine.
PythonSQLitesentence-transformersNumPyOllamaNext.jsChrome MV3Supabase relay

The phone page pairs with your Mac. Your library stays local.

PipelineV1

Output · at most three

01slow-burn, enemies to lovers, finished, 120k+
02post-war, Ministry setting, by an author you reread
03a wildcard outside your usual tags, for diversity
Layers are from the README. Recommendations are illustrative.
06 · Conference29–31 August 2026

DCMUN 2026.

Nexus Temporis: shaping tomorrow by reflecting on yesterday. The site for the twelfth Daly College Model United Nations.

Every committee has its own page, motif and agenda. The Reading Room holds the rules of procedure and each background guide. Pages are prerendered with server-side rendering so each one has its own title and description for search and link previews.

  • ScaleSeven committees, twenty-six executive board members, three days of debate.
  • DesignGuilloche linework, per-committee motifs, document art and a countdown to the opening.
  • BuildA prerender script runs the React app on the server for every route at build time.
ReactTypeScriptViteSSR prerenderVercel
CommitteesDaly College, Indore
7Committees
26Board
12thEdition
Agendas ran from Cold War Latin America to the bioethics of AI-driven medicine.

The connection

Every project sits just before a decision.

VAC is about what to say, and whether to say anything. The Canon Is a Prior is about what a story means when you only have part of it. FicBrain is about what to read next. Khapee moves the order to before you arrive. DCMUN is a room of people deciding together under rules.

Building them taught me the same engineering habits each time: keep the data on the user's machine unless there's a reason not to, show your confidence instead of hiding it, and make the empty state honest.

DateRepoLast commit
ficbrainLearned page: load ships on open
khapeeAsk the kitchen for food no sooner than it promises
canonPin the premise control so the Achilles case can actually be used
dcmun-2026DCMUN 2026 — Nexus Temporis conference site

Frontend

  • React, Next.js, Vite · all six
  • TypeScript
  • Tailwind, Framer Motion
  • SVG and canvas animation
  • SSR prerendering

Backend & data

  • Node, Express 5
  • Python
  • SQLite, Postgres, Vercel Blob
  • Auth and password hashing
  • Deploys on Vercel, Render, Docker

AI & ML

  • Claude API, Ollama · VAC
  • Sentence embeddings, TF-IDF · FicBrain
  • Ranking and calibration metrics
  • Human-vs-model study design · Canon

Platforms

  • Chrome extensions (MV3)
  • iOS and Android keyboards
  • Capacitor
  • WhatsApp bridge
  • QR generation and scanning