
DeepSeaFeels: Matching Moods with Marine Vibes
A playful React project that pairs your emotions with ocean creatures. I picked up tons about hooks, component structure, and Tailwind CSS along the way.
TL;DR
Built a mood-matching React app that pairs emotions with sea creatures using React hooks, TypeScript, and Framer Motion. Perfect for learning component state management and animation patterns.
Who This Is For
- React beginners learning hooks and state management
- Frontend developers exploring animation libraries
- Anyone wanting a fun first TypeScript project
Prerequisites: Basic HTML/CSS, some JavaScript experience helpful.
Ever feel like your emotions run as deep as the ocean? That was pretty much the idea behind DeepSeaFeels, a little side project where you pick your mood, and it shows you a sea creature that captures your vibe. No accounts, no data tracking — just a bit of fun and a chance to sharpen my frontend skills.
In this post, I'll share what I built, what I learned, and a few challenges I ran into.
Project Overview
DeepSeaFeels is a mood-matching web app that pairs your current emotions with ocean creatures. It's built with React, TypeScript, and Tailwind CSS for a smooth, animated experience.
🌊 What's DeepSeaFeels?
Here's how it works:
- You pick how you're feeling (like happy, stressed, or tired).
- The app reveals an underwater creature along with a short, friendly blurb.
- That's it — just pure, mood-based ocean energy. 🐙
It's meant to be simple and a little bit whimsical.
🔧 Tech Stack
- React (TypeScript) – for all the component logic and state handling.
- Tailwind CSS – to quickly style everything without leaving my markup.
- Framer Motion – for smooth, subtle animations.
- Mock Data – I created a simple mapping of moods to creatures instead of using an API.
🧠 What I Learned
1. Hooks and State Management
This was one of my first times leaning heavily on useState
and useEffect
in a project. I got comfortable with conditional rendering, resetting state, and lifting state up to keep everything in sync.
// Example of state management
const [selectedMood, setSelectedMood] = useState<string | null>(null);
const [isAnimating, setIsAnimating] = useState(false);
useEffect(() => {
if (selectedMood) {
setIsAnimating(true);
// Trigger animation sequence
}
}, [selectedMood]);
Environment Used
Last tested with: React 18.x, TypeScript 5.x, Tailwind CSS 3.4.x, Framer Motion 11.x
Limitations & Trade-offs
- Static data: Mood mappings are hardcoded, not personalized - Simple animations: Basic Framer Motion usage, not complex interactions - Limited moods: Only covers ~8 common emotional states - No persistence: Selections don't save between sessions
2. Building Modular Components
I split the UI into clear, reusable components: one for mood selection, one for the result, and a few smaller ones for layout and animations. This helped me think more intentionally about separation of concerns.
Component Structure
MoodSelector
- Handles mood selection UI -CreatureDisplay
- Shows the matched sea creature -AnimationWrapper
- Manages Framer Motion animations -Layout
- Overall page structure
3. Tailwind Workflow
Tailwind turned out to be a huge time-saver. Being able to tweak styles right in the markup made me much faster, and I learned a lot about how consistent spacing and typography improve the feel of an app.
4. Animations with Framer Motion
Even basic fade-ins and slides made the UI feel more polished. It was a good intro to how animation libraries can add life to React projects without much overhead.
🤯 Challenges
- Making the experience feel natural without any real-time API data.
- Figuring out which creatures matched each mood (it took more brainstorming than I expected).
- Not overcomplicating the project — keeping it small on purpose.
Key Challenge
The biggest challenge was creating meaningful mood-to-creature mappings that felt intuitive and fun. I spent more time on this than expected!
🐳 Sneak Peek

🔗 Check It Out
💬 Next Steps
Ready to build your own mood-based app?
- Start with basic React hooks -
useState
anduseEffect
- Try Framer Motion docs for animations
- Experiment with Tailwind's animation utilities
Related concepts to explore:
- Advanced React animation patterns
- TypeScript with React hooks
- Building engaging micro-interactions
What's Next
I'm considering expanding this concept with more creatures, seasonal themes, or even a mood tracking feature. The possibilities are endless!
Enjoyed this project? Let me know what mood-based apps you'd build or share your own creative coding experiments at /contact.
— Maruf