Inspiration
The theme was Y2K, and the Millennium Bug was the first thing that came to mind. Everyone was scared it would break the world in 1999, and then nothing really happened. So we joked: what if the bug did survive, and now you have to look after it? Most of us had a Tamagotchi or spent way too long on Club Penguin as kids, so a virtual pet living on an old Windows 98 desktop felt like the right mix.
What it does
You hatch a little bug, name it, and look after it. It has a house with a kitchen, bathroom, bedroom, playroom and lab, and it gets hungry, dirty, bored and tired like any pet. If you ignore it for too long it starts glitching. The dates go wrong, the screen gets corrupted, and it starts thinking it's 1900.
The main idea is that your bug starts off knowing nothing. It picks up words from what you say to it, and its personality changes depending on how you treat it, so it can end up cheerful or grumpy, clingy or independent, sweet or sarcastic. It remembers things you tell it, like your name, and brings them up later.
It also grows up. It starts as a toddler that can only say things like "Me hungy!", then becomes a kid, a teen and finally an adult who talks in full 2000s slang. To grow up it needs to level up its skills, which you do by chatting with it, playing the mini-games (Coin Catcher and Snake), petting it, and redrawing it in the pixel editor.
There's also a shared lobby where you can walk your bug around, see other people's bugs live, and go and visit them.
How we built it
We used Next.js with TypeScript and Tailwind, plus 98.css to get the Windows 98 look. Supabase handles logins, saving your pet, and the real-time lobby. The pet's replies come from a language model through OpenRouter, and we only call it from the server so our API key stays hidden.
Most of the pet's "brain" is just normal game logic. Its words, personality, skills and memories are all tracked in code based on what you do. When you chat with it, we send all of that to the model so it replies in character, at the right age, using only words it actually knows.
The mini-games and pixel editor are plain canvas, the voice uses the browser's built-in text-to-speech, and we made all the sound effects ourselves in Python.
Challenges we ran into
The lobby gave us the most trouble. Bugs kept disappearing whenever people walked around. It turned out we were sending everyone's full details every time they moved, which overloaded it. We fixed it by sending who's online separately from where they are.
Getting the toddler bug to talk badly was harder than expected too. The model kept wanting to write proper sentences, so it took a lot of tweaking to keep it to a few broken words.
We also wanted anyone to be able to open the link and play straight away, so we added backups for when things fail. If the AI is down, the pet uses pre-written replies, and saves still work locally without an account.
Accomplishments that we're proud of
We're proud that every bug ends up different. Two people raising their bugs in different ways get pets that talk and act differently, which is what we were going for.
Seeing a bug go from baby talk to proper sentences because you taught it words was really satisfying. We're also happy that the multiplayer lobby works and that all the sounds are our own.
What we learned
We learned a lot about real-time features in Supabase, mostly by breaking them first. We also found that the pet feels alive because of what it remembers and how it's been treated, not because of how clever the AI is. And we learned to cut features early so we'd have something that actually works by the deadline.
What's next for Millenium Bug
We'd like the AI to write the conversations when two bugs visit each other, since those use pre-written lines right now. We also want to add clubs where groups can hang out, and maybe a Chrome extension so your bug can follow you around other websites.
Built With
- 98.css
- html5
- next.js
- numpy
- openrouter
- postgresql
- python
- react
- supabase
- supabase-realtime
- tailwindcss
- typescript
- vercel
- web-speech-api

Log in or sign up for Devpost to join the conversation.