01 · 2023 - Present
Coventi.app
A cloud-native video streaming platform with live-stream chat and its own admin portal. I co-founded it and built it end to end.
Co-founder
Architecture, backend, frontend, and infrastructure
Co-founder / Lead Full-Stack Developer
The problem
Video streaming is hard to build with a small team. Live and on-demand delivery needs infrastructure you don't want to run yourself. Viewers expect live chat that keeps up with the stream. Subscriptions have to be charged in the currency people expect, not one exchange rate for everyone. And the people running the platform need an admin portal that's a proper application, not a settings page bolted onto the main site. Getting all of that working across two clouds is what decides whether a two-person team can run this.
Decisions that mattered
I integrated a third-party video streaming service for both live and on-demand delivery instead of running streaming servers myself. A small team should rent that kind of infrastructure, especially before there's revenue.
Live-stream chat runs on WebSockets, separate from the REST API that handles everything else, so chat speed doesn't depend on a request and response cycle built for ordinary CRUD.
Payments pick the currency and gateway automatically from the visitor's timezone. Nigerian users pay in Naira through Flutterwave or Paystack, and everyone else pays in US dollars through Stripe. The app and the API agree on that choice, so the price shown is the price charged.
The admin portal is its own React and Vite app, deployed separately to Azure App Service, instead of a route inside the main Next.js site. The people running the platform get a tool built for their job, and it ships on its own schedule.
Sign-in uses NextAuth.js and JWT across the Next.js site, the admin portal, and the backend API, so there's one way of handling sessions instead of three.
Email goes through Amazon SES, with IAM permissions limited to SES only, even though the rest of the platform runs on Azure. SES is the right tool for deliverability, and the limited permissions can't reach anything else in the account. Azure Application Insights covers the backend and CloudWatch tracks email delivery, so a bounce shows up alongside everything else in production.
Outcome
Live at coventi.app. The backend API and admin portal run on Azure App Service with MongoDB as the database, and media lives in Azure Blob Storage and ImageKit. Code and deployments run through Azure DevOps, and Application Insights and CloudWatch cover monitoring across both clouds.
- TypeScript
- Next.js
- React
- Vite
- NestJS
- Node.js
- NextAuth.js
- JWT
- MongoDB
- WebSockets
- Azure App Service
- Azure Blob Storage
- ImageKit
- Azure DevOps
- Azure Application Insights
- Amazon SES
- AWS IAM
- CloudWatch
- Tailwind CSS
- Stripe
- Paystack
- Flutterwave
