TeneoCast is a cross-platform, multi-tenant indoor radio software platform that empowers local businesses to run customized radio stations with real-time control, offline playback, and flexible infrastructure.
TeneoCast blends the Latin word "teneo" (to hold or possess) with "cast" (broadcast), capturing the essence of empowering users with control over audio streaming.
- Player: Audio playback with smart controls and offline support (Windows, Android, Web)
- Studio: Interface for local business owners to manage station preferences and send remote commands
- Console: Admin panel for platform administrators to manage tenants, media libraries, and system analytics
TeneoCast System Architecture
Clients:
βββ Player (Flutter)
β βββ Windows (.exe)
β βββ Android (.apk)
β βββ Web (Progressive Web App)
βββ Studio (Flutter Web)
βββ Console (Flutter Web)
Backend Services (Spring Boot):
βββ auth-service β Authentication & authorization
βββ tenant-service β Multi-tenancy management
βββ media-service β Audio asset management
βββ player-service β WebSocket control & commands
βββ analytics-service β Playback analytics & reporting
βββ tts-service β Text-to-speech generation
βββ admin-service β Platform administration
Infrastructure:
βββ PostgreSQL β Relational data
βββ Redis β Caching & sessions
βββ Kafka β Event streaming (optional)
βββ S3/MinIO β Audio file storage
- Docker & Docker Compose - Install Docker
- Git - Install Git
Note: Java, Flutter, and Node.js are not required locally as all services run in Docker containers.
-
Clone the repository
git clone https://github.com/saviobatista/teneocast.git cd teneocast -
Verify your setup
# Check Docker installation docker --version docker compose version # Ensure Docker daemon is running docker info
-
Start the complete environment
# Start all services (frontend, backend, and infrastructure) docker compose up -d # View logs for all services docker compose logs -f # Stop all services docker compose down
What's included:
- β PostgreSQL database with automatic migrations
- β Redis cache
- β MinIO (S3-compatible storage)
- β Frontend applications (Player, Studio, Console)
- β Auth Service (user authentication)
- π§ Additional backend services (in development)
-
Access the applications
- Frontend Applications: http://localhost:3000
- Player, Studio, and Console are served from the same frontend container
- Auth Service API: http://localhost:8081
- MinIO Console: http://localhost:9001 (admin: teneocast/teneocast_dev)
- PostgreSQL: localhost:5432 (user: teneocast/teneocast_dev)
- Redis: localhost:6379
- Frontend Applications: http://localhost:3000
Common Issues:
-
Port conflicts
# Check what's using ports lsof -i :3000 # Frontend lsof -i :8081 # Auth service lsof -i :5432 # PostgreSQL # Kill the process or change ports in docker-compose.yml
-
Docker permission issues
sudo usermod -aG docker $USER # Log out and back in
-
Services not starting
# Check service health docker compose ps # Check logs for specific service docker compose logs auth-service
-
Database connection issues
# Restart PostgreSQL and dependent services docker compose restart postgres auth-service
Getting Help:
- Check the Issues page
- Join our Discord community
- Review the Full Stack Plan
teneocast/
βββ apps/ # Frontend applications
β βββ player/ # Cross-platform player (Flutter: Web, Windows, Android)
β βββ studio/ # Studio interface (Flutter Web)
β βββ console/ # Admin console (Flutter Web)
βββ backend/ # Spring Boot services
β βββ auth-service/ # Authentication service
β βββ tenant-service/ # Tenant management
β βββ media-service/ # Media asset management
β βββ player-service/ # Player control & WebSocket
β βββ analytics-service/ # Analytics & reporting
β βββ tts-service/ # Text-to-speech service
β βββ admin-service/ # Admin operations
β βββ common/ # Shared utilities & DTOs
βββ infrastructure/ # Docker, K8s, Terraform
βββ docs/ # Documentation
βββ scripts/ # Build & deployment scripts
βββ .github/workflows/ # CI/CD pipelines
- JWT-based authentication with role-based access control
- Multi-tenant architecture with tenant isolation
- Player pairing using secure one-time codes
- WebSocket security with token-based authentication
Each backend service is a Spring Boot application with:
- RESTful APIs
- WebSocket support (player-service)
- PostgreSQL integration
- Redis caching
- Comprehensive testing with Testcontainers
All frontend applications use Flutter with:
- Responsive design
- Offline-first architecture (Player)
- Real-time updates via WebSocket
- Modern UI/UX with Material Design
- Docker Compose: Complete containerized development environment with all services
- Single Command Setup: Everything runs with
docker compose up -d
- Backend: AWS Fargate + RDS + ElastiCache
- Frontend: S3 + CloudFront CDN
- CI/CD: GitHub Actions with multi-platform builds
# Start all services
docker compose up -d
# Start specific services
docker compose up -d postgres redis minio # Infrastructure only
docker compose up -d frontend auth-service # App services only
# View logs
docker compose logs -f # All services
docker compose logs -f frontend # Specific service
docker compose logs -f auth-service # Auth service logs
# Rebuild and restart services
docker compose up -d --build
# Stop services
docker compose down # Stop all
docker compose stop frontend # Stop specific service
# Clean up (remove containers, networks, and volumes)
docker compose down -v --remove-orphans- Fork the repository
- Create a feature branch
- Commit your changes
- Push to the branch
- Create a Pull Request
TeneoCast uses a dual-licensing model:
- π Free for individuals and small businesses (β€ 10 employees)
- πΌ Commercial licenses for larger organizations
See LICENSE.md for detailed licensing information.
Copyright Β© 2024 TeneoCast. All rights reserved.