A 3D interactive room where you can track your books, articles, movies, series, podcasts, audiobooks and plants β all from a cozy virtual space filled with clickable objects and hidden easter eggs.
Cozy Chapter is a full-stack media tracker wrapped in a 3D room. Instead of a traditional dashboard, you interact with objects in the room β click the bookshelf to manage articles, the laptop to browse movies, the headphones for audiobooks, the orchid for plant care, and so on. There's also a terminal emulator with hidden commands to launch, and several buried easter eggs.
I wanted a better Goodreads. Then I wanted somewhere to track my plant watering. Then my movie watchlist. Then podcasts. At some point I realized I just wanted one cozy place to put all my stuff β so I built one. This started as a Three.js learning project and kept growing because every time I finished a feature I thought "wouldn't it be nice if it also did..." and here we are.
- Articles β save articles with URL, author, and reading status (to read / reading / read)
- Books β track page-by-page progress with chapter bookmarks via Google Books
- Audiobooks β monitor listening progress with chapter and position tracking
- Movies β search and add from TMDB, rate, review, and track watchlist status
- Series β track seasons and episodes with TMDB integration
- Podcasts β save episodes from Spotify and YouTube with playback position
- Plants β track watering schedules, light preferences, and plant health status
- Terminal β a command-line interface to launch apps, view stats, and discover easter eggs
- Sound effects β every clickable object has audio feedback (fireplace crackle, guitar strums, page turns)
- Ambient music β multiple lo-fi tracks to set the mood while you browse
-
Fully interactive Three.js environment
-
Clickable objects: bookshelf, laptop, headphones, orchid, guitar, fireplace, DJ decks, lamp, and more
-
Toggle the lamp on and off
-
A husky that does husky things
-
Interactive 3D reading room environment
-
Track read, currently reading, and to-read blogs
-
Optional authentication or demo mode
-
Full-stack application with modern tech
-
Audio and sound efffects implemented with howler.js
| Layer | Tools |
|---|---|
| Framework | TanStack Start, TanStack Router, TanStack Query |
| 3D | Three.js, React Three Fiber, Drei |
| Styling | Tailwind CSS, shadcn/ui |
| Database | Neon (PostgreSQL), Drizzle ORM |
| Auth | Better Auth |
| Validation | Zod |
| Forms | TanStack Form |
| Audio | Howler.js |
| Image uploads | UploadThing |
| Deployment | Netlify |
- TMDB β movie and TV series search, details, and metadata
- Google Books β book search and details
- Spotify β podcast episode search
- YouTube β podcast and video search
# Clone the repo
git clone https://github.com/TokiLoshi/cozy-chapter.git
cd cozy-chapter
# Install dependencies
npm install
# Set up environment variables
cp .env.example .env
Fill in your API keys β the .env.example file has comments linking to where you can get each one. The app will run without all keys, but some features will be limited:
| Key | Required for |
|---|---|
VITE_DATABASE_URL |
Everything (database connection) |
BETTER_AUTH_SECRET |
Authentication |
TMDB_API_KEY |
Movies and series search |
GOOGLE_BOOKS_API_KEY |
Book search |
SPOTIFY_KEY |
Podcast search |
YOUTUBE_API_KEY |
YouTube podcast search |
UPLOADTHING_TOKEN |
Image uploads |
# Run database migrations
npx drizzle-kit push
# Start the dev server
npm run devThe laptop in the 3D room opens a terminal emulator. Some commands to try:
| Command | What it does |
|---|---|
help |
Show all available commands |
movies |
Launch the movie tracker |
series |
Launch the series tracker |
podcasts |
Launch the podcast tracker |
neofetch |
Display system info |
whoami |
Print your username |
history |
Show command history |
sudo make me a sandwich |
Try it and find out |
There are more hidden commands. Explore and you might even see a humorous KABOOMπ₯
- Course tracker β track online courses, lectures, and progress across platforms
- Reading stats β visualize reading habits, streaks, pages per week, and completion rates
- Progress sync β automatically update book/audiobook progress when marking chapters complete
- User panel β account settings, profile customization, and a dashboard overview of all tracked media
- Meal planning β recipes and weekly meal plans (schema exists, UI coming)
- Reading goals β set and track yearly/monthly reading targets
- Export data β download your tracking data as CSV or JSON
- Accessibility audit β keyboard navigation, screen reader support, ARIA labels, focus management, and color contrast across all modals and the 3D room
- Magic link auth β passwordless login via email magic links
- More easter eggs β always more easter eggs
- Bookcase with Books by Quaternius via polypizza
- Wall Corner by Kenney via polypizza
- Wall by Kenney via polypizza
- Book by Quaternius (https://poly.pizza/m/LC0w7VI75u)
- L Couch by Quaternius (https://poly.pizza/m/1kwsjhpY84)
- Planks by Kay Lousberg (https://poly.pizza/m/5m4LLpNl2M)
- Open Book by Quaternius (https://poly.pizza/m/1A07aI9j2d)
- Open Book by Quaternius (https://poly.pizza/m/JEDMpG0UIR)
- DJ gear by Poly by Google [CC-BY] (https://creativecommons.org/licenses/by/3.0/) via Poly Pizza (https://poly.pizza/m/5Zq4tgSECXz)
- Plants - Assorted shelf plants by Jakers_H [CC-BY] (https://creativecommons.org/licenses/by/3.0/) via Poly Pizza (https://poly.pizza/m/5COCzyz489J)
- Book by Quaternius (https://poly.pizza/m/h3Wh4fxSQX)
- Headphones by Michael Fuchs [CC-BY] (https://creativecommons.org/licenses/by/3.0/) via Poly Pizza (https://poly.pizza/m/fPJoG2u0gnN)
- Husky by Quaternius (https://poly.pizza/m/wcWiuEqwzq)
- Windows by Francis Chen [CC-BY] (https://creativecommons.org/licenses/by/3.0/) via Poly Pizza (https://poly.pizza/m/c93mqlf3yl1)
- Light Stand by Quaternius (https://poly.pizza/m/9L6lLUl9sD)
- Record player by Poly by Google [CC-BY] (https://creativecommons.org/licenses/by/3.0/) via Poly Pizza (https://poly.pizza/m/6XodSi_3y_i)
- Fireplace by Poly by Google [CC-BY] (https://creativecommons.org/licenses/by/3.0/) via Poly Pizza (https://poly.pizza/m/fueH4_5W9Ug)
- Radio by Quaternius (https://poly.pizza/m/TPqvwkyWdV)
- Table by Kenney (https://poly.pizza/m/41R2HTYj1O)
- Houseplant by Quaternius (https://poly.pizza/m/bfLOqIV5uP)
- Painting by CreativeTrio (https://poly.pizza/m/Pi6oReAizt)
- Vines by Poly by Google [CC-BY] (https://creativecommons.org/licenses/by/3.0/) via Poly Pizza (https://poly.pizza/m/2jffIS8PMjZ)
- Orchid by Poly by Google [CC-BY] (https://creativecommons.org/licenses/by/3.0/) via Poly Pizza (https://poly.pizza/m/0gEtIcRV4do)
- Acoustic Guitar by Dave Edwards [CC-BY] (https://creativecommons.org/licenses/by/3.0/) via Poly Pizza (https://poly.pizza/m/bf6_h_1wp2D)
- Laptop by J-Toastie [CC-BY] (https://creativecommons.org/licenses/by/3.0/) via Poly Pizza (https://poly.pizza/m/WMW4C2J021)
Model JSX auto-generated by NikkitaFTW and Poimandres
- Sassy Husky Sound Effect by freesound_community from Pixabay
- Ambient noise background by ido berg from Pixabay
- Ambient track 2 by kaveesha Senanayake from Pixabay
- Ambient track 3 by Nver Avetyan from Pixabay>
- Ambient track 4 by Evgeny Bardyuzha from Pixabay
- Ambient track 5 by AllWorldMusic from Pixabay
- Ambient track 6 by (Yurii Semchyshyn)[https://pixabay.com/users/coma-media-24399569/?utm_source=link-attribution&utm_medium=referral&utm_campaign=music&utm_content=11492] from Pixabay
- Ambient track 7 by (Villatic Music)[https://pixabay.com/users/villatic_music-46790459/?utm_source=link-attribution&utm_medium=referral&utm_campaign=music&utm_content=257044] from Pixabay
- Fireplace generated on 11Labs
- Guitar strum G Sound Effect by freesound_community from Pixabay
- Guitar in D Sound Effect by freesound_community from Pixabay
- Pluck Sound Effect by freesound_community from Pixabay
- E flat minor Sound Effect by freesound_community from Pixabay
- Guitar Strumming Sound Effect by freesound_community from Pixabay
- Intro Ambient Audio Sound Effect by freesound_community from Pixabay
- Euro Samples Sound Effect by Alpha-Samples from Pixabay
- Alpha Samples Sound Effect by (Alpha-Samples)[https://pixabay.com/users/alpha-samples-46316338/?utm_source=link-attribution&utm_medium=referral&utm_campaign=music&utm_content=246889] from Pixabay
- Lamp Click Sound Effect by (freesound_community)[https://pixabay.com/users/freesound_community-46691455/?utm_source=link-attribution&utm_medium=referral&utm_campaign=music&utm_content=101351] from (Pixabay)[https://pixabay.com//?utm_source=link-attribution&utm_medium=referral&utm_campaign=music&utm_content=101351]
- Pages Turning Sound Effect by (freesound_community)[https://pixabay.com/users/freesound_community-46691455/?utm_source=link-attribution&utm_medium=referral&utm_campaign=music&utm_content=79935] from (Pixabay)[https://pixabay.com//?utm_source=link-attribution&utm_medium=referral&utm_campaign=music&utm_content=79935]
- Book Close Sound Effect by (freesound_community)[https://pixabay.com/users/freesound_community-46691455/?utm_source=link-attribution&utm_medium=referral&utm_campaign=music&utm_content=48184] from (Pixabay)[https://pixabay.com//?utm_source=link-attribution&utm_medium=referral&utm_campaign=music&utm_content=48184]
- Bush movement Sound Effect by (freesound_community)[https://pixabay.com/users/freesound_community-46691455/?utm_source=link-attribution&utm_medium=referral&utm_campaign=music&utm_content=6986] from (Pixabay)[https://pixabay.com//?utm_source=link-attribution&utm_medium=referral&utm_campaign=music&utm_content=6986]
For questions, feedback, or just to say hi, find me on X @3DBeeing.
MIT β see LICENSE for details.
3D models and sound effects are used under their respective licenses (CC-BY 3.0, CC0, Pixabay Content License). See attributions above for full credits.