A high-performance, full-stack video streaming application inspired by TikTok and Instagram Reels. Built with a native Kotlin Android frontend and a robust Node.js/PostgreSQL backend.
This project is a complete end-to-end solution for a short-form video streaming platform. It features a butter-smooth vertical scrolling feed on Android, backed by a scalable REST API capable of handling secure authentication, video metadata management, and AWS S3-integrated media delivery.
Are you looking for a skilled developer to bring your app idea to life?
I am available for freelance work! Check out the Hire Me section below.
- Seamless Video Playback: Utilizes ExoPlayer for highly optimized, low-latency video rendering and caching.
- Vertical Swiping: Implements ViewPager2 to deliver the familiar "Reels/TikTok" infinite scroll experience.
- Secure Authentication: End-to-end user authentication utilizing JWT (JSON Web Tokens) and bcrypt password hashing.
- Cloud Storage Integration: Seamless AWS SDK integration for handling video uploads and streaming securely.
- Modern Android Architecture: Built entirely with Kotlin, heavily leveraging Coroutines for asynchronous programming and Retrofit for network calls.
- Relational Database: Robust PostgreSQL schema to handle users, video metadata, and relationships.
- Language: Kotlin
- Media Player: ExoPlayer
- UI/Navigation: ViewPager2, SwipeRefreshLayout, Material Design
- Networking: Retrofit2, OkHttp3 (with logging interceptors)
- Asynchronous & State: Coroutines, ViewModel, LiveData
- Local Storage: DataStore preferences
- Runtime: Node.js (v18+)
- Framework: Express.js
- Database: PostgreSQL (using
pgdriver) - Authentication: JWT, bcryptjs
- Cloud & Media: AWS SDK (S3)
- Utilities: CORS, UUID, dotenv
VideoPlayer/
│
├── app/ # Native Android Client (Kotlin)
│ ├── src/main/ # Android source code & resources
│ └── build.gradle.kts # App-level dependencies (ExoPlayer, Retrofit, etc.)
│
├── backend/ # Node.js REST API
│ ├── config/ # Database and environment configurations
│ ├── controllers/ # API logic (Auth, Videos)
│ ├── middleware/ # Custom Express middlewares (e.g., JWT Auth)
│ ├── models/ # Database schema & queries
│ ├── routes/ # Express router definitions
│ └── server.js # Backend entry point
│
└── frontend/ # Additional web assets/materials- Navigate to the backend directory:
cd backend - Install dependencies:
npm install
- Set up environment variables:
- Copy
.env.exampleto.env - Fill in your PostgreSQL database credentials, JWT secret, and AWS S3 configuration.
- Copy
- Start the server:
# Development mode with nodemon npm run dev # Production mode npm start
- Open the root
VideoPlayerfolder in Android Studio. - Let Gradle sync the project dependencies.
- Configure the Backend URL:
- In
app/build.gradle.kts, update theBASE_URLindefaultConfigto point to your local IP (e.g.,http://192.168.x.x:3000/) or your deployed backend URL.
- In
- Run the app on an emulator or physical device.
The backend exposes a clean RESTful API:
-
Authentication
POST /auth/register- Create a new user accountPOST /auth/login- Authenticate and receive a JWT
-
Videos
GET /videos/feed- Fetch a paginated list of videos for the main feedPOST /videos/upload- Upload a new video securely to AWS S3
(A simple health check is available at GET /health)
I am a passionate Full-Stack & Mobile Developer specializing in high-performance applications, custom architectures, and seamless user experiences.
What I can do for you:
- Build complete native Android applications.
- Develop scalable backend systems (Node.js, Python, PostgreSQL, NoSQL).
- Integrate cloud services (AWS, Firebase, GCP).
- Fix bugs, optimize performance, and refactor legacy codebases.
📧 Interested in working together? Feel free to reach out to discuss your next project!
If you found this repository helpful, please consider leaving a ⭐!


