💡 Inspiration
We wanted a mood tracker that actually helps in the moment, not just a calendar of feelings. Friends said generic tips felt hollow and hard to act on. MOJO turns tiny check-ins into timely, personal support.
🎯 What it does
- Tracks moods (Happy, Sad, Anxious, Excited), intensity (1-10), and context notes
- Visualizes trends on a calendar with simple insights
- Delivers AI-powered, context-aware recommendations (movies/TV, music, activities, cocktails/mocktails)
- Lets users share and discover helpful ideas in a lightweight community
- Works mobile-first, privacy-first, with offline logging and gentle reminders
🛠️ How we built it
Frontend
- Lynx framework for cross-platform development
- TypeScript/React patterns for type safety and component architecture
- Rspeedy dev server for fast development and building
- CSS3 animations and responsive UI design
Backend
- Python (Flask) for lightweight web framework
- Flask-CORS for cross-origin resource sharing
- Marshmallow validation for data serialization
- JWT auth (PyJWT) for secure authentication
- bcrypt for password hashing
Data
- MongoDB (PyMongo) for flexible data storage
- Collections: users, moods, recommendations, community posts, feedback
AI & External Services
- OpenRouter API via HTTPX (async) for AI recommendations
- Fallback templates and rate-limit cooldowns for reliability
Performance & Operations
- Redis caching for improved performance
- Environment-based configs for deployment flexibility
- Biome/Prettier for code quality and formatting
- Vitest for unit testing
🚧 Challenges we ran into
- Cold-start personalization before enough history exists
- Prompt design and safety, including age filters
- CORS and auth edge cases across web and mobile
- Timezone handling and backfilling for accurate calendars
- Network resilience, graceful AI/API degradation, and caching without stale results
🏆 Accomplishments that we're proud of
- A working end-to-end experience: log → analyze → tailored suggestions → share
- Privacy-first defaults (hashed credentials, scoped tokens) with clear consent flows
- Offline-first mood logging with a fast, touch-friendly UI
- A community feed that turns good ideas into reusable micro-interventions
📚 What we learned
- Cross-platform UX with Lynx is fast when components are clean and state is minimal
- Small context clues (notes, time, intensity) dramatically improve recommendations
- Designing for emotional moments means latency, copywriting, and safety matter as much as code
- Clear fallbacks make AI features feel dependable, not fragile
🔮 What's next for MOJO
Enhanced Features
- Deeper analytics: pattern detection, triggers, and "what helps me" insights
- Voice input and richer journaling (photos, tags)
- Integrations: Apple/Google Health, calendars, music services
Social & Community
- Social graph: opt-in friend circles and mood sharing
- Enhanced community features for better peer support
Technical Improvements
- GraphQL and microservices to scale read/write paths and experimentation
- Push reminders and A/B tests to build sustainable check-in habits
- Advanced analytics to measure impact and user engagement
MOJO transforms mood tracking from passive observation into active emotional support, helping users understand their patterns and discover personalized ways to feel better.
Built With
- animations
- flask
- javascript
- json
- jwt
- lynx
- mongodb
- node.js
- openrouter
- python
- rspeedy
- typescript
Log in or sign up for Devpost to join the conversation.