Oystraz - Hackathon Submission
Inspiration
The breaking point came during a 14-hour workday. I was tracking my health on three different apps - one for food, one for exercise, one for sleep - and none of them talked to each other. Worse, they all felt like chores. Another notification. Another guilt trip. Another reminder that I wasn't doing enough.
I asked myself: What if health tracking felt like playing a game instead of filling out a spreadsheet?
Three observations shaped Oystraz:
Gamification works - I've spent hundreds of hours in games caring about virtual characters' stats. Why not channel that energy into caring about my own health?
Workplace stress is universal - Everyone has an "octopus boss" moment. That fantasy of pranking your manager? It's therapeutic just to imagine. What if we made that cathartic release a game mechanic?
Anti-hustle is the new hustle - "Rise and grind" culture is burning people out. I wanted an AI companion that actively discourages overwork, not one that guilt-trips you for missing a workout.
The name "Oystraz" combines "oyster" (the world is your oyster) with "orchestrate" (orchestrate your life through wellness). The pearl inside? That's Pearl, your AI companion who's passionate about food science and has zero patience for hustle culture BS.
What I Learned
Technical Learnings
1. Gemini 2.0 Flash is incredibly capable for personality engineering
I spent hours crafting Pearl's system prompt. The key insight: Gemini responds brilliantly to specific constraints. Instead of saying "be funny," I wrote:
- "Dry humor and dad jokes, dropped casually without announcing them"
- "2-3 sentences max, no filler words"
- "PASSIONATE about food - light up when discussing nutrition"
The result is an AI that genuinely feels like a character, not a chatbot.
2. Framer Motion + Spring physics = buttery smooth animations
My seal employee was originally animated with CSS transitions. It looked robotic and janky. Switching to Framer Motion's useSpring with proper stiffness/damping values made the seal swim. The difference was night and day.
const smoothSealX = useSpring(sealX, { stiffness: 120, damping: 20, mass: 0.5 });
3. State persistence matters for user experience
Users navigating away from the Work page would lose their fishing progress. Implementing Zustand persistence for work sessions was a small change with huge UX impact.
Design Learnings
1. Humor requires variety
Pearl's work culture roasts started with 20 lines. Users saw repeats within minutes. I expanded to 80+ lines with anti-repetition tracking. Same for character state comments (96 lines across 5 emotional states).
2. Negative space is your friend
Early UI was cramped. Adding breathing room between cards, reducing border-radius, and letting elements float improved the aesthetic dramatically.
3. Sound design is underrated
The neo-soul BGM (Suno AI) transforms the experience. Without music, Oystraz feels like a tool. With music, it feels like a world.
How I Built It
Development Timeline
Phase 1: Core Architecture
- Set up FastAPI backend with PostgreSQL (Supabase)
- Built React 19 frontend with Material-UI v6
- Implemented JWT authentication
- Created character stat system (stamina, energy, nutrition, mood, stress)
Phase 2: Health Tracking
- Integrated USDA FoodData API (600k+ foods)
- Built diet, exercise, and sleep logging
- Connected real health data to character stats
Phase 3: Pearl AI Integration
- Integrated Gemini 2.0 Flash
- Crafted personality-driven system prompt
- Built 3-mode system (Relaxed, Active, Do Not Disturb)
Phase 4: Ocean Work Simulator
- Created seal employee fishing mechanic
- Built octopus boss with prank system
- Integrated Veo 3.1 prank video
- Added smooth spring-based swimming animation
Phase 5: Polish
- Character emotional states with hover comments
- Fish-based sleep quality ratings
- Work page humor bubbles
- Background music integration
Tech Stack Decisions
| Decision | Why |
|---|---|
| React 19 | Latest features, great DX |
| Zustand over Redux | Simpler, less boilerplate |
| FastAPI over Flask | Async support, auto-docs, Pydantic |
| Supabase over self-hosted | Managed PostgreSQL, easy setup |
| Framer Motion | Best-in-class React animation library |
Google Products Integration
Gemini 2.0 Flash powers Pearl's entire personality. The extended context window lets Pearl remember health history across conversations, and the fast response time keeps the chat feeling natural.
Google Veo 3.1 created the "Seal Pranks Octopus" video that plays during stress relief events. The video is triggered by:
- Manual prank button (stress ≥ 30)
- Catching 24+ fish (overwork detection)
- Working >8 hours (overtime alert)
Google AI Studio was invaluable for prompt engineering and testing Gemini responses before integrating them into the app.
Challenges I Faced
Challenge 1: Making the AI Feel Like a Character, Not a Bot
Problem: Early Pearl responses were generic wellness advice. "Remember to stay hydrated!" Boring.
Solution: I rewrote the system prompt with specific personality constraints:
- Anti-hustle beliefs (work-life balance is sacred)
- Food science enthusiasm (gets excited about resistant starch)
- Communication style (dry humor, 2-3 sentences max)
Result: Pearl now says things like "Your stress is at 80/100. That's not sustainable - unless you're trying to speedrun burnout."
Challenge 2: Smooth Seal Swimming Animation
Problem: CSS transitions made the seal move like a robot. No swimming feel.
Solution: Replaced transitions with Framer Motion springs:
useMotionValuefor direct position updatesuseSpringfor physics-based smoothing- Added body wave and tail wiggle effects
- Bubble trail behind the seal
Result: The seal now swims instead of slides.
Challenge 3: Humor Content Repetition
Problem: With 20 work culture roasts, users saw repeats within minutes.
Solution:
- Expanded to 80+ roasts, 100+ work page humor lines, 96 character state comments
- Implemented anti-repetition tracking (last N used)
- Different humor pools for different contexts
Challenge 4: Health → Game Stats Balance
Problem: How do you translate "8 hours of sleep" into game stats without being arbitrary?
Solution: Research-backed formulas:
- Sleep 9h → +25 stamina, -20 stress (optimal)
- Sleep <5h → -10 stamina, +5 stress (penalty)
- Work >8h → overtime penalty on stamina
- Boss prank → -20 stress, +10 mood (catharsis!)
Challenge 5: Keeping Users in Flow
Problem: Navigating away from Work page lost progress.
Solution: Zustand store with session persistence. Users can leave and return without losing their fishing session.
What's Next
Immediate Plans
- Mobile responsive optimization
- Performance improvements
- iOS App Store deployment
Future Features
- Achievement system
- Daily/weekly challenges
- Social features (friend system, group challenges)
- Apple Health integration
Final Thoughts
Oystraz started as a frustration with boring health apps and became a meditation on what makes tracking feel fun. The answer isn't more features or more notifications - it's personality, humor, and a genuine respect for the user's time and wellbeing.
Pearl doesn't guilt you for skipping a workout. She roasts your octopus boss instead.
The world is your oyster. Orchestrate your life through wellness.
Try It Yourself
Demo Video: https://youtu.be/DRbhOWUHf2o
Test Account:
- Username:
oystrazjudge - Password:
judges@oystraz.com
Tested on: Google Pixel 7
Built with Google Gemini 2.0 Flash, Google Veo 3.1, Supabase, Suno AI, and a lot of late nights (which Pearl would definitely disapprove of).
Built With
- docker
- fastapi
- git
- google-gemini-api
- jwt
- material-ui-v6
- postgresql
- pwa
- python
- react-18
- redis
- sqlalchemy
- sunoai
- supabass
- typescript
- usda-fooddata-central-api
- veo
- vite
- zustand
Log in or sign up for Devpost to join the conversation.