Otobong Okoko

Lab

Experiments

Side projects, tools, and explorations. Things I build to learn, to scratch an itch, or to see what happens.

Projects

Status: Live
AI Product

Tyck

A stage timer for conferences and services that you run by talking to it. Type or say "add five minutes to the keynote", or photograph a printed schedule and get a working run-sheet.

  • SvelteKit 2
  • Svelte 5
  • TypeScript
  • Tailwind 4
  • WebSockets
  • Postgres
  • Redis
  • Claude API
  • Stripe
Status: Live
Learning App

LiD Prep

A free, ad-free study app for Germany's Leben in Deutschland and naturalisation tests. It turns the official 460-question catalogue into 44 bilingual chapters, so you learn the civics behind the answers instead of memorising them.

  • Next.js 15
  • React 19
  • TypeScript
  • Tailwind 4
  • Drizzle ORM
  • Supabase Postgres
  • Playwright + axe-core
  • Gemini / Claude (content pipeline)
Status: Beta
macOS App

Tauker

Push-to-talk dictation for the Mac. Hold a key, speak, release, and finished text lands in whatever app you are using. Your voice is transcribed on the Mac and the recording never leaves it.

  • Swift 6
  • SwiftUI
  • AppKit
  • Apple SpeechAnalyzer
  • Accessibility API
  • XcodeGen
  • Ollama (optional)
Status: Live
AI Audio Tool

VoiceGen

A voice-over studio that turns a script into expressive speech. Mark up delivery with inline tags like [whisper], [pause] or [suspense], or let an AI voice director do it, then render a master WAV.

  • React 19
  • Vite
  • TypeScript
  • Tailwind
  • Vercel Functions
  • Gemini 2.5 TTS
  • Gemini 2.5 Flash
  • Firebase Auth
  • Firestore
Status: Completed
Product

Portfolio + AI Chatbot + Case Study Presenter

My portfolio site, an AI chatbot trained on my professional profile, and a custom case study presentation tool - all built with Claude Code.

  • Next.js
  • Claude API
  • Sanity CMS
  • Vercel
Status: Planned
Automation

LinkedIn Publishing Pipeline

Publish blog posts to LinkedIn with one toggle in the CMS. Sanity fires a webhook, an API route picks it up, and the LinkedIn API does the rest.

  • Sanity
  • LinkedIn API
  • Webhooks