PoetryTube
Language-First Video Platform for African Spoken Word Poetry
A dedicated video platform for African spoken word poets — isiZulu, Sesotho, Luganda as first-class discovery dimensions. Live applause via Supabase Realtime turns individual viewing into collective experience. Built by a published poet who has lived the exact problem.
Serving
African spoken word poets continent-wide
Market
African creative digital economy
Problem
Algorithmic invisibility for African poets
Result
Language-first: isiZulu, Sesotho, Luganda as search filters
What needed solving
YouTube's algorithm has no concept of spoken word poetry as a distinct cultural form. A poet performing in isiZulu has the same discoverability as a gaming livestream. African poets deserve a home built for them.
How I built it
Language-first content architecture: filter by language, style, country, and emotion. Live applause via Supabase Realtime broadcast — all connected viewers receive the increment simultaneously. Mux video for smooth streaming on SA mobile data.
PoetryTube was built from a personal injustice: YouTube's algorithm has no concept of spoken word poetry as a distinct cultural form. A poet performing in isiZulu has the same discoverability as a gaming livestream. PoetryTube treats language as a first-class discovery dimension — you can filter by language, style, country, and emotion. The live applause feature was the most technically complex component: when a viewer taps applause during a performance, a Supabase Realtime broadcast is sent to all connected clients watching that performance simultaneously. The applause counter increments in real time for everyone. That shared moment — a room filling with applause through a screen — changes the product from media consumption to live cultural event.
// Supabase Realtime — live applause during performances
// All viewers on the same performance receive the increment simultaneously
import { createClient } from '@supabase/supabase-js';
const supabase = createClient(url, key);
// SENDER: viewer taps applause
async function sendApplause(performanceId: string) {
await supabase.channel(`performance:${performanceId}`)
.send({
type: 'broadcast',
event: 'applause',
payload: { performance_id: performanceId, ts: Date.now() }
});
// Also increment persistent counter
await supabase.rpc('increment_applause', { perf_id: performanceId });
}
// RECEIVER: all connected viewers update their counter
function subscribeToApplause(performanceId: string, onApplause: () => void) {
return supabase
.channel(`performance:${performanceId}`)
.on('broadcast', { event: 'applause' }, onApplause)
.subscribe();
}What This Taught Me
- 1
Supabase Realtime presence channels are the right primitive for live collaborative features — not WebSockets from scratch
- 2
Language-first content architecture: language must be a discovery dimension, not a filter option
- 3
The most personal project is the most differentiated — biographical legitimacy cannot be engineered
- 4
Products built from injustice last
Next.js 14
SSR for content discovery SEO
TypeScript
Type-safe content and user models
Supabase
Realtime broadcast for live applause + content database
Mux
Adaptive video streaming optimised for African mobile data
Tailwind CSS
African-inspired dark design system
# PoetryTube > Language-First Video Platform for African Spoken Word Poetry ## Project Context **Category:** Creative · Web App · Social Impact **Status:** Beta · 2025 **Author:** Nandawula Regine Kabali-Kagwa — East London, South Africa **Company:** Mirembe Muse (Pty) Ltd · Reg: 2026-005658 ## Stack ``` Next.js 14 # SSR for content discovery SEO TypeScript # Type-safe content and user models Supabase # Realtime broadcast for live applause + content database Mux # Adaptive video streaming optimised for African mobile data Tailwind CSS # African-inspired dark design system ``` ## Architecture Notes - All data mutations validated server-side via Next.js API routes - Row-Level Security enforced at database level (Supabase) - Mobile-first, PWA-ready, offline-tolerant where connectivity is unreliable - PayFast integration for ZAR-native payments (no USD conversion) - SEO-optimised: metadata, JSON-LD, canonical URLs, sitemap - POPIA compliant — data minimisation + user consent by design ## Environment Variables ```env NEXT_PUBLIC_SUPABASE_URL= NEXT_PUBLIC_SUPABASE_ANON_KEY= SUPABASE_SERVICE_ROLE_KEY= ANTHROPIC_API_KEY= NEXT_PUBLIC_PAYFAST_MERCHANT_ID= NEXT_PUBLIC_PAYFAST_MERCHANT_KEY= PAYFAST_PASSPHRASE= RESEND_API_KEY= ``` ## Links - Live: https://poetry-tube.vercel.app - GitHub: https://github.com/Nanda-Regine/PoetryTube - Portfolio: https://creativelynanda.co.za/projects/poetry-tube --- Built from East London, South Africa · Nine months · Zero to production
More Projects
Interested in similar work?
Let's discuss how I can build something like this for your business.
Let's Talk