All Projects
Beta2025Creative · Web App · Social Impact

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

The Problem

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.

The Solution

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.

Build Journey

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 broadcast
typescript
// 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. 1

    Supabase Realtime presence channels are the right primitive for live collaborative features — not WebSockets from scratch

  2. 2

    Language-first content architecture: language must be a discovery dimension, not a filter option

  3. 3

    The most personal project is the most differentiated — biographical legitimacy cannot be engineered

  4. 4

    Products built from injustice last

Tech Stack & Decision Rationale
01

Next.js 14

SSR for content discovery SEO

02

TypeScript

Type-safe content and user models

03

Supabase

Realtime broadcast for live applause + content database

04

Mux

Adaptive video streaming optimised for African mobile data

05

Tailwind CSS

African-inspired dark design system

README.md — poetry-tube
📄 README.md
# 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

Interested in similar work?

Let's discuss how I can build something like this for your business.

Let's Talk