The all-in-one media tracking platform.
MyLists is a comprehensive, type-safe web-app designed to help you organize and track your movies, TV series, anime, manga, books, and video games in one unified interface.
- Multi-Media Collections: Dedicated lists/collections for Movies, Series, Anime, Manga, Books, and Games.
- Upcoming Media: Get notified when new Media are released.
- Advanced Analytics: Visualize your habits with detailed statistics, trends, and platform-wide insights.
- Modern Full-Stack Architecture: Built with TanStack Start and end-to-end type-safety.
- Daily Moviedle: A daily guessing game to test your movie knowledge.
- Achievements System: Earn unique badges and track your progress as you consume more media.
- Secure Authentication: Robust user management powered by Better-Auth.
Ensure you have Bun installed on your machine.
-
Clone the repo
git clone https://github.com/crossoufire/mylists.git cd mylists -
Install deps
bun install
-
Configure the env file
Create a
.envfile in the root directory (you can copy from.env.example): Update it with your credentials and configuration values. See Environment Variables for more info.cp .env.example .env
-
Initialize Database Initialize a new SQLite database in the
instancedirectory.bun run new:db
-
Run the Dev Server
bun run dev
Below is an explanation for each key found in .env.example:
| Variable | Description | Required | Example |
|---|---|---|---|
| Main Configuration | |||
DATABASE_URL |
SQLite / PostgreSQL / other DB connection URL | ✅ | file:./instance/site.db |
VITE_BASE_URL |
Base URL used by the frontend | ✅ | http://localhost:3000 |
| File Management | |||
UPLOADS_DIR_NAME |
Folder name where uploaded files are stored | ✅ | static |
BASE_UPLOADS_LOCATION |
Path to the uploads directory (relative or absolute) | ✅ | ./public/static/ |
| Admin Access | |||
ADMIN_PASSWORD |
Admin dashboard password | ✅ | password |
ADMIN_TOKEN_SECRET |
Secret key for admin access token signing | ✅ | |
ADMIN_TTL_COOKIE_MIN |
Lifespan of the admin session cookie (in minutes) | ❌ | 10 |
| Admin Mail Service | |||
ADMIN_MAIL_USERNAME |
SMTP username/email used to send verification emails | ✅ | |
ADMIN_MAIL_PASSWORD |
SMTP password | ✅ | |
| Demo User | |||
DEMO_PASSWORD |
Password for demo profile (if enabled) | ❌ | |
| Cache / Redis | |||
CACHE_TTL_MIN |
Cache duration (min) | ❌ | 5 |
REDIS_ENABLED |
Enables Redis usage; false for dev, required for prod |
✅ | false (dev) / true (prod) |
REDIS_URL |
Redis connection string | ✅ | redis://localhost:6379 |
| Authentication | |||
BETTER_AUTH_SECRET |
Secret used by Better Auth for encryption | ✅ | |
| OAuth2 Providers | |||
GITHUB_CLIENT_ID / GITHUB_CLIENT_SECRET |
GitHub OAuth2 credentials | ❌ | |
GOOGLE_CLIENT_ID / GOOGLE_CLIENT_SECRET |
Google OAuth2 credentials | ❌ | |
| API Keys | |||
THEMOVIEDB_API_KEY |
API key for TMDB | ✅ | |
GOOGLE_BOOKS_API_KEY |
API key for Google Books | ❌ | |
IGDB_CLIENT_ID / IGDB_CLIENT_SECRET |
IGDB OAuth credentials | ✅ | |
IGDB_API_KEY |
API key for IGDB | ✅ | |
| LLM Integration (Optional) | |||
LLM_MODEL_ID |
Model ID (OpenRouter or local) used to generate book genres | ❌ | google/gemini-2.5-flash-lite |
LLM_BASE_URL |
Base URL for the chosen LLM API | ❌ | https://openrouter.ai/api/v1 |
LLM_API_KEY |
API key or local access token for the LLM provider | ❌ |
Redis caching is optional for dev and mandatory for prod.
- In dev, set:
REDIS_ENABLED=false
- In prod, ensure Redis is available and configured:
REDIS_ENABLED=true REDIS_URL=redis://your-redis-instance:6379
Redis is used for caching, session/state management, and performance optimization. The app will not build without it (but it can be changed of course, you do you :)).
The LLM is exclusively used to generate genre data for books since Google Books does not provide genre metadata. You can choose how this background task runs:
- Manually, by executing it with the CLI
- Automatically, using a scheduled cron job
Contributions are welcome!
If you’d like to improve MyLists, fork the repo, create a feature branch, and open a pull request.
This project is licensed under the MIT License.
Built with ❤️ using Bun, Drizzle, Better-Auth, React, TypeScript, and TanStack.