
eating.computer is the platform I built for my class at The Cooper Union. A web app, a site, and an iOS app. I designed the identity and the UX and heavily used claude to make it. If I'm teaching AI, I wanted to show my students something that they could make with it.

Why not Discord? Why not Teams?
A studio class runs on communication, and that ends up on Discord or in email, or Instagram, nowhere near the syllabus or the assignment it's about. I wanted one place where the conversation and the coursework sit next to each other. If there's a question the chat is visible next to all the content on desktop.
Expressive chat
Text can shake, wave, ripple, glitch. You can set a run anywhere from 0.5x to 7x inline, type is important and expressive, the compose bar exposes real variable-font axes: weight 100 to 700, width 25% to 150%. Colors, rainbow, bold through strike, all there too.
Effects stack. Rainbow over ripple gives you a wavy rainbow.
Each effect is a Unicode private-use codepoint wrapped around the styled run, so a formatted message is still an ordinary string. It survives the database, notifications, and copy-paste.
Around that: reactions, threads, mentions, custom emotes, and animated stickers rendered through a Skottie worker, WebGL on desktop and a CPU frame atlas on iOS.


Code counts as a message
Half the class is code. Type something that looks like JavaScript, or Python, or SQL (or many other programming languages) and a pill appears offering to format it. One tap sends it as a real code block: syntax highlighting, a language badge, line numbers, one-tap Copy. Anything past twenty lines collapses behind a Show all control.

Gemma is hosted locally in the School of Engineering
The AI in the sidebar isn't a commercial API. Gemma is an open-weights model served off chatterbox.ee.cooper.edu, behind an OpenAI-compatible endpoint. Students ask her about coursework and code; the reply above came from that server. She also keeps each student's task list current from what they say in chat and what the assignments require, and writes an opt-in digest: what's due, what you said you'd do, and one thing to look at.

Those inspiration links are real, checked links rather than model output. A second Cooper machine runs Scout, a worker that pulls from are.na, Wikipedia, museum archives like the V&A and Ars Electronica, and the most-cited papers on each week's topic, routed through the Cooper library proxy so students get the full text.

One seed, every color
Pick a seed color and every token in the UI derives from it through Material 3's palette. Presets or your own seed, light or dark, with contrast and chroma controls. Themes are per student and sync across devices, so the same conversation is amber on one phone and slate on the next. The mark works the same way: one letterform on a seed color.
Gestures
On a phone the app is one horizontal track. Swipe between Home, Chat, Orbit, and the Lab. A conversation opens as a layer on top and a left-to-right swipe dismisses it. Threads work the same way, so swiping out of a reply drops you back in the main chat exactly where you left it. The picker follows those rules too: swipe across its surfaces, or drag the sheet down to close it. The nav bar is for finding things the first time; after that everything is a swipe.
The semester
Home is the current week: the assignment, its checklist, what's due Friday. Orbit holds the roadmap, the syllabus, and every file anyone shared in chat. Assignments get written in the same expressive editor as the chat, so they animate too.


Built with
| Layer | Choice |
|---|---|
| Web app | SvelteKit, deployed on Vercel |
| Database | Turso (libSQL) |
| Realtime | Firebase Realtime Database |
| Media | Cloudflare R2 |
| AI | Gemma, self-hosted in Cooper Union's School of Engineering behind an OpenAI-compatible API |
| iOS app | Capacitor shell around the live site: native keyboard, haptics, push |
| Auth | Google + credentials, bridged to Firebase, student and instructor roles |
| Notifications | web-push + VAPID in the browser, real APNs in the iOS shell |
The iOS app is thin. It's a Capacitor shell around the live site, so a fix reaches the App Store version the moment it deploys.