Syzne TV was born from a simple frustration: watching anime online shouldn’t feel like fighting through layers of intrusive ads and popups. Many platforms today prioritize aggressive monetization over user experience, and somewhere along the way, the joy of watching got lost.
- Runtime: Bun (v1.3)
- Framework: Elysia (latest)
- Database: PostgreSQL 18
- ORM: Prisma (v7.0)
- Caching: Redis (v8.4)
- Authentication: JWT
- Monitoring: Sentry
⚠️ Docker support is planned but not fully implemented yet. Full containerized deployment will be finalized once the backend reaches production readiness. For now, please follow the manual setup below.
git clone https://github.com/rafiarrafif/SyzneTV-backend.git
cd SyzneTV-backendCopy the example environment file:
cp .env.example .envThen configure .env properly:
- Database credentials
- Redis configuration
- SMTP configuration
- Admin account credentials
- Any other required environment variables
⚠️ Make sure all required variables are filled correctly. The application will fail to start if any critical configuration is missing.
bun installbunx prisma deploybun run prisma:seedDevelopment Mode
bun run devProduction Mode
Build the application:
bun run buildMake the binary executable:
chmod +x ./dist/serverRun the server:
./dist/serverroot/
├── prisma/
│ ├── dbml/ # DBML schema generated from Prisma
│ ├── migrations/ # Database migration history
│ └── seed/ # Database seeding scripts
│ └── (run with: bun run prisma:seed)
│
├── scripts/ # Automation & maintenance scripts (⚠️ do not modify unless necessary)
│
└── src/
├── config/ # Non-secret system configuration
│ # ⚠️ Never store secrets here — use .env instead
│
├── constants/ # Editable system keys (e.g., cookie names, Redis keys)
│
├── helpers/ # Reusable helper functions (cross-module usage)
│
├── middleware/ # All application middlewares
│
├── modules/ # Domain-based modules (auth, user, media, etc.)
│
├── utils/ # External service utilities
│ # (database, bucket storage, SMTP, etc.)
│
├── route.ts # Root route aggregator (registers all modules)
│
└── index.ts # Application entry point
This structure keeps the core system separated from domain logic, automation tools, and infrastructure-related utilities. Making the project easier to scale, debug, and maintain over time.
Syzne TV uses a modular architecture to keep the codebase clean, scalable, and easy to maintain.
Each feature is separated by domain (e.g., auth, user, media) and stored inside:
./src/modules
Every module follows the same internal structure:
module-name/
├── controllers/
├── services/
├── repositories/
├── validations/
├── types.ts
└── index.ts
- Controllers: Handle incoming HTTP requests and responses. Every file must end with:
*.controller.ts - Services: Contain the core business logic. Every file must end with:
*.service.ts - Repositories: Interact with the database using Prisma. Every file must end with:
*.repository.ts - Validations: Define request validation schemas using Zod. Every file must end with:
*.schema.ts - types.ts: Contains module-specific TypeScript types.
- index.ts: Defines the module routes and route prefix (e.g.,
/auth).
IMPORTANT Whenever you create a new module and configure its routes, you must run:
bun run route:syncThis command registers the module route into the root route automatically. This structure ensures consistency across the project and makes it easier to scale without turning the codebase into a mess.
Due to the large number of routes and their complexity, listing every endpoint directly in this README would quickly become messy and hard to maintain.
Instead, we provides an OpenAPI-based documentation page that can be accessed at:
/openapi
Before accessing the documentation, you need to temporarily disable the application protector.
Open your .env file and change:
ENABLED_APP_TOKEN=falseAfter that, start the server and open the /openapi route in your browser.
The OpenAPI documentation is still in an early stage and may look a bit rough at the moment. It will be improved and structured more clearly as the project evolves.
For now, it serves as a reference for exploring available routes and understanding how the API is structured.
This project is licensed under the GNU Affero General Public License v3.0 (AGPL-3.0).
You are free to use, modify, and distribute this project under the terms of the license. However, if you run a modified version of this software as a service, you must also make the source code available under the same license.
For the full license text, please see the LICENSE file in this repository.
