Avery Keller · Bloomington, IN

Building software that gets used

I build tools people pick up without being asked.

I work retail at a T‑Mobile store and study computer science at Indiana University. In between, I build things — and the test I care about is whether anyone actually uses them. Two of the tools below run on my store's floor every day. One of them my manager adopted the day I showed it to him.

6shipped projects
2in daily use at work
4languages in production
2026B.S. CS in progress
01

Selected work

Everything here I built and maintain myself. Where something is in real use by other people, I say so — and where it is half-finished, I say that too.

JARVIS

In use daily

A personal assistant I run my life on. It is not a chat window — it is infrastructure: a phone client, a cloud relay, and a process on my Mac that does real work while I am at my job.

  • Phone or voice → Cloudflare Worker → Durable Object → WebSocket → daemon on my Mac
  • Scheduled agents that brief me each morning and catch their own silent failures
  • A written memory it carries between sessions, so it does not start over every time
  • Native iOS app and an installable web app, both with push
TypeScriptCloudflare Workers Durable ObjectsD1 PythonSwift

agent-from-scratch

Active build

An AI agent harness with no frameworks and no hidden parts. I wrote the loop, the tool definitions, and the safety gates myself, because I wanted to understand the thing rather than import it.

  • The loop: ask the model → it requests a tool in text → my code decides and runs it → feed the result back
  • A path fence the model cannot talk its way past — tested against the gate, not by asking the model nicely
  • Written twice, Python then Java, specifically so failures get loud instead of silent
  • Next: a test suite that attacks my own agent, so I find the holes before anyone else does
PythonJava 21Gemini APIno dependencies

Store EOD tracker

Adopted by my store

My store posts its numbers three times a day. It used to be a whiteboard and a lot of retyping. Now the reps tap a few steppers and paste. My manager started using it the day I showed him.

  • Shared day totals — any rep can update, everyone sees the same numbers
  • Output matches the old handwritten format character for character, so nothing had to change downstream
  • Conflict-safe writes, offline fallback, and an automatic rollover at local midnight
  • Linked from the spreadsheets the store already kept
Cloudflare WorkersD1Vanilla JS

Plan & bundle calculator

On the floor

Quoting a family plan with trade-ins and add-ons means holding a lot of numbers at once. This does it on a phone, in front of the customer, with every price verified against the source rather than remembered.

  • All-in monthly totals across plan tiers, not just the headline rate
  • Eligibility-aware, so it stops offering what the customer cannot have
  • Full end-to-end test suite — a wrong number here costs a real customer real money
Cloudflare WorkersD1Vitest

Learn

Live

A tutor that draws instead of lecturing. It works a problem one step at a time on a shared canvas, built for an iPad and a pencil. I have dyslexia and ADHD; walls of text are where I lose the thread, so this one deliberately refuses to produce them.

  • Pressure-sensitive pen input with palm rejection, tuned on real hardware
  • One step at a time, and it waits — it will not hand over a finished answer
  • Any subject, four model providers behind one interface
  • Open source, MIT
TypeScriptCloudflare WorkersCanvasMIT

Dinner Picker

Live

Built to end a recurring argument at home: “what do you want for dinner?” Thirty real Bloomington restaurants, each one verified by hand, and a shared list two people can both edit.

  • Its own Worker and database, shared by passcode — no accounts to create
  • Every restaurant checked against a live source, not scraped and hoped for
Cloudflare WorkersD1
02

How I work

Three habits that came out of shipping things to people who are not me.

Verified, not assumed

A passing test is not a working feature. I open the page, drive the real surface, and check the thing a user would see. Most of what I have gotten wrong, I got wrong by trusting a green check instead of looking.

Look for it before building it

Before writing infrastructure I spend half an hour finding out whether it already exists. I would rather assemble something maintained and spend my own time on the part that is genuinely mine.

Break it myself first

Anything that runs code or touches files gets a gate, and the gate gets attacked — by me, on purpose, before it ships. Finding out where my own work fails is cheaper than being shown.

03

Now

What I am actually doing this term.

Current focus

School B.S. Computer Science, Indiana University Online. Java and calculus this term.
Building A test suite that attacks my own agent — malformed tool calls, paths aimed outside the fence, instructions planted in files it reads.
Learning How agent harnesses fail in practice: prompt injection, escalation between models, and where the guardrails have to live.
Day job Retail sales at T‑Mobile, Bloomington. It is where most of my ideas for tools come from.

Working with

LanguagesTypeScript, Python, Java, SQL
PlatformCloudflare Workers, Durable Objects, D1, R2
AIAgent loops, tool design, MCP, model routing
AlsoSwift / iOS, macOS automation, Vitest

Get in touch

I am most interested in work where AI systems meet real users — solutions and forward-deployed engineering, or anything that involves making an agent behave in production. Happy to talk about any of the above.