MyLists
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.
Key Features
- Multi-Media lists: Dedicated lists 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.
Quick Start
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
Environment Variables
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 | ||
| 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 Setup
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 :)).
LLM Integration (Optional)
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
Contributing
Contributions are welcome!
If you'd like to improve MyLists, fork the repo, create a feature branch, and open a pull request.
License
This project is licensed under the MIT License.
Built with using Bun, Drizzle, Better-Auth, React, TypeScript, and TanStack.