Osegonte Hopo

I build software, and I run the systems it sits on.

Web apps mostly, but also emulators, on-device machine learning, and data work. I pick up new tools fast.

chess.com
1117Rapid
890Bullet
Play a game with me
  • Vercel deploy
  • Docker Compose
  • Tailscale VPN
  • Sanity headless CMS
  • Google OAuth 2.0
  • Server-side rendering
  • Payment webhooks
  • ISR instant publish
  • HMAC-SHA512 webhooks
  • Server-side PDF
  • Image CDN (WebP/AVIF)
  • SEO / JSON-LD
  • Puppeteer E2E
  • AES-256 encryption
  • WCAG AA accessibility
  • Least-privilege infra

Selected work

Personal projects

UndertoneLive
Skills
Vanilla JavaScriptHTMLCSSMediaPipeCanvas APIheic-to (libheif)CIELAB color sciencePHP
Processes
Client-side ML (WASM / WebGPU)Puppeteer E2E harnessProgrammatic OG / favicon generationVercel + cPanel deploySEO / JSON-LD structured dataSelf-hosted PHP counter
Compliance
Privacy-by-architectureAccessibility-aware

Free, private, on-device personal color analysis from a single photo.

  • Runs computer-vision models (MediaPipe Face Landmarker + Image Segmenter) and a full sRGB→CIELAB→ITA color pipeline 100% client-side — no backend, private by design, zero per-use cost.
  • Built a 12-season classifier over a three-axis model (undertone / depth / clarity) with confidence scoring and adjacent-season fallback, mapping measured color to the professional seasonal system.
  • Diagnosed and fixed iPhone HEIC decoding (tiled, 10-bit HDR) by reproducing the failure and A/B-testing decoders in a real browser before swapping the decoder.
  • Built a headless-Chrome (Puppeteer) harness to drive the real app with real photos, verify the pipeline end to end, and render the OG image and favicon set programmatically.
tryundertone.space
The Server Under Your DeskLive
Skills
PythonBashPostgreSQLTelethonRegex
Processes
Ubuntu 24.04 (headless)Docker & Docker ComposeTailscale VPN + MagicDNSSSH administrationsystemd / cronLeast-privilege / defense-in-depthNextcloudKomga (REST)

A decommissioned 2014 Mac Mini turned into a private, self-hosted cloud, reachable from any device.

  • Repurposed decommissioned hardware into a 24/7 headless Ubuntu server, administered entirely over SSH.
  • Orchestrated 6+ containerized services with Docker Compose using least-privilege patterns: read-only mounts, UID/GID mapping, loopback-bound admin.
  • Built an idempotent Python (Telethon) ingestion pipeline with rate-limit handling, a regex content-routing engine, health alerting, and MangaDex-API gap detection.
  • Migrated a 46 GB dataset with a custom deduplicating shell script, and reach it from any device over a Tailscale mesh VPN.
The server under my desk — a 2014 Mac Mini turned into a self-hosted cloud, wired into the home network over hand-run Ethernet beside the Wi-Fi 6 router.
The server under my desk — a 2014 Mac Mini turned into a self-hosted cloud, wired into the home network over hand-run Ethernet beside the Wi-Fi 6 router.
Klass SuiteLive
Skills
Next.jsReactTypeScriptTailwind CSSPostgreSQL
Processes
Supabase auth + Postgres with row-level securityMulti-tenant subdomain per school, provisioned automatically49 SQL migrationsTransactional email (Resend)

A multi-tenant exam platform for Nigerian secondary schools: students sit the real WAEC and JAMB CBT, teachers see exactly which topics are failing.

  • A question bank of 8,715 sittable questions (4,581 JAMB, 4,036 WAEC, 98 authored SAT) across 744 topics and 4,202 subtopics, with a super-admin review queue that approves every one before it can be sat.
  • Every school gets its own subdomain, provisioned end to end without me touching it: the app creates the Cloudflare DNS record and attaches it to the host. Tenants are isolated in Postgres itself, and 17 row-level-security probes assert that a cross-tenant write is rejected by the database rather than by application code.
  • Timed WAEC (50 questions) and four-subject JAMB (180 questions) papers built from the bank, graded with a topic-level breakdown, plus class rosters, bulk student upload, staff invites, streaks and awards, teacher progress reports, and guardian email.
  • Mine end to end: the data model, the exam engine, the tenancy, the deploy, and the on-call.
klass.school
SiftLive
Skills
TypeScriptAstroNode.jsPythonONNX Runtime
Processes
File System Access API (nothing uploaded)Cloudflare R2 object storageStatic hosting, no application serverOn-device face clustering (ONNX / CoreML)

Photo tools for working photographers: a culler that runs on your own drive, and a delivery gallery for the couple.

  • The culler is one 1,130-line HTML file with no build step and no upload. It opens the memory card or the external drive directly through the File System Access API, so a photographer trying an unknown tool on a client’s only copy never hands the files to anyone. Keep and reject apply to the fine+RAW pair together, so a .RAF is never orphaned from its .JPG, and decisions land as same-disk renames rather than copies, so a 200GB shoot is sorted without being duplicated.
  • The delivery gallery has run a real wedding end to end: 993 photographs across 17 chapters, delivered from a static site with no application server. A local pipeline does the heavy work up front and publishes a single manifest to object storage, so a visit costs a handful of requests instead of a database query.
  • Face clustering runs locally on ONNX, grouping the delivered set into 207 people, so a guest can find the frames they are actually in.
  • Built for my own Fujifilm workflow first, then generalized, because the tools that cover both ends of this charge monthly for the privilege.
cull.osegonte.com
Football Prediction SystemBuilt
Skills
PythonData Analysis
Processes
REST API integration

Analytics platform turning raw match data into predictive signals.

  • Integrated the football-data.org API v4 across 9 leagues.
  • Computed 7-metric performance ratings for 186+ teams and 6 predictive signals per fixture.
  • Surfaced everything through an interactive web dashboard.
QuicktoolsLive
Skills
Next.js 16TypeScriptReact 19WebAssemblypdf-libpdf.jslibheif-jsTransformers.js (RMBG-1.4, Swin2SR)Tesseract.jsffmpeg.wasmCanvas APIWebGPU
Processes
Cloudflare Pages (static export)Wrangler CLI deployInstallable PWA (service worker + manifest)Client-side ML inferencePuppeteer E2E harnessesAutomated responsive + SEO auditingProgrammatic OG image generationJSON-LD structured data
Compliance
Privacy-by-architectureWCAG-aware (2.5.5 target size)

Thirteen file tools that run entirely in your browser — nothing uploaded, nothing metered, no watermark.

  • Cut the flagship model download 4x — 168 MB to 42 MB — by measuring real transfer against the claim printed on the page, then proving the quantised model matched the full one on 99.99% of mask pixels of a real photo.
  • Made file size the input rather than the output: the compressors binary-search JPEG quality, then pixel dimensions, to hit an exact target — 2.81 MB down to 199 KB against a 200 KB limit.
  • Genuinely offline as an installed PWA, verified by an automated test that cuts the network via Chrome DevTools Protocol, reloads, and asserts the tool is still interactive.
  • 38 automated checks driving the real UI in real Chrome, which caught eight defects manual clicking missed — including three compressors that silently made files larger.
quicktools.osegonte.com
Student ToolsLive
Skills
Next.js 16TypeScriptReact 19pdf-libpdf.jslibheif-jsCanvas APIWake Lock APICompressionStreamCrossRef APIOpen Library API
Processes
Cloudflare Pages (static export)Wrangler CLI deployInstallable PWA (service worker + manifest)Local-first persistence (useSyncExternalStore)Serverless device-to-device transfer (URL fragment + QR)Puppeteer E2E harnessesAutomated responsive + SEO auditingJSON-LD structured data
Compliance
Privacy-by-architectureWCAG-aware (2.5.5 target size)

Eight coursework tools — citations, grades, scanning, flashcards, focus, planning — that run on the student’s own device, with no account.

  • Built cross-device sync with no account and no server: state is gzipped into the URL fragment, the one part of a URL a browser never transmits, and read as a QR code — verified moving between two browser profiles with zero off-origin requests.
  • Turned the flashcard tool from a formatter into a card maker with cloze deletion and an editable preview, deliberately without an LLM — which in-browser costs hundreds of megabytes for mediocre cards, and server-side costs the user their privacy.
  • Wrote a revision scheduler that counts spacing from the day a topic was actually revised rather than the day it was planned, so falling behind reshapes the plan: a topic rated 1 of 5 landed on 10 of 10 days, one rated 5 on 4.
  • Implemented Bradley adaptive thresholding over a summed-area table so a shadow across a photographed page does not become a grey band, and a countdown derived from timestamps that provably does not drift when the tab is backgrounded.
studenttools.osegonte.com
Dad's ArcadeLive
Skills
RustWebAssemblyTypeScriptViteCanvas
Processes
wasm-pack (Rust compiled to WebAssembly)Offline PWA, service worker precacheVitest, 1,099 testsNo backend, no accounts, no network after first load

Five J2ME phone games from the 2000s, running again in a browser on my father’s Android handset.

  • A J2ME engine compiled from Rust to WebAssembly, wrapped in a browser layer I wrote, so the original .jar files run unmodified. Nothing is emulated on a server and nothing is re-drawn by hand.
  • The games had to be found before they could be run. They were recovered from archives, including one catalogued only under its Chinese title, which no English-language search route returns.
  • The shelf is an offline PWA: it installs to the home screen, precaches every asset, and after the first load never touches the network again. There is no account and no menu to get lost in, because there is exactly one user and he is in his sixties.
  • The handset layout is computed rather than guessed, and 1,099 tests hold the five-way pad, the soft keys and the reachability of every control in place.
arcade.osegonte.com

Freelance work

Study MetaverseLive
Skills
Next.jsTypeScriptD3.jsSupabasePostgreSQLPaystack@react-pdf/renderer
Processes
Paystack integrationHMAC-SHA512 webhook verificationServer-side PDF generationSupabaseVercel deploy
Compliance
PCI via Paystack

Helping students discover and apply to 500+ German university programmes.

  • 500+ programmes with an interactive D3.js orthographic globe and a 14-dimension real-time search.
  • Full Paystack flow with HMAC-SHA512 webhook verification, live NGN conversion, and server-side PDF report generation.
  • Personalised admission assessments and a complete admin dashboard.
studymetaverse.com
Alfred Hopo — PhotographyLive
Skills
Next.jsReactTypeScriptSanityGROQCSS
Processes
Sanity CMS + webhooksISR + tag revalidationImage CDN (WebP / AVIF, LQIP)SEO / structured dataVercel deploy
Compliance
Accessibility-aware

A fully client-editable photography portfolio on a headless CMS.

  • Headless CMS so the non-technical owner edits everything — photos, captions, a "Logbook", settings — with the schema written in TypeScript and queried with GROQ.
  • ISR + webhook cache-tag revalidation for instant publish, decoupling editing from deploys.
  • Sanity image CDN (WebP/AVIF) with LQIP blur-up, eliminating layout shift (CLS).
  • Custom masonry gallery with filtering by category / country / year and a full-screen keyboard lightbox.
alfredhopo.com
Learn Chess with PrinceLive
Skills
Next.jsTypeScriptHTML5 CanvasWeb WorkersStockfish WASMreact-chessboardchess.js
Processes
Google OAuth 2.0Vercel deploy

A chess-coaching platform with a real Stockfish engine in the browser.

  • In-browser Stockfish engine via UCI protocol in a Web Worker, with Elo estimation (400–2400+) and 6 adaptive difficulty profiles.
  • Consolidated a 672-element DOM grid into a single HTML5 Canvas render to hold a steady 60fps.
  • Google OAuth 2.0 with cookie-based session management.
chesswithprince.com
Allyque CareLive
Skills
Next.jsTypeScriptPHP
Processes
AES-256-GCM encryptionPHP document uploadAutomated email notificationsAdmin dashboard
Compliance
HIPAA-aligned (not certified)WCAG accessibility

A secure healthcare platform for a developmental-disability provider.

  • Career-application portal with AES-256-GCM encrypted data handling and a HIPAA-aligned (not certified) 10-year retention archive.
  • PHP document-upload system, automated email notifications, and a secure admin dashboard with status tracking.
  • Full WCAG accessibility compliance.
allyquecare.com
Hope CatalystLive
Skills
Next.jsTypeScriptTailwind CSS
Processes
Authenticated dashboardNewsletter

A platform helping Nigerian public-school students overcome financial barriers to education.

  • Built a four-step support pipeline: students submit a request, get verified, receive payments made directly to their school, and confirm completion.
  • Authenticated application dashboard for students to submit and track support requests.
  • Partner-network access to free courses, with newsletter signup and testimonials from parents, students, and guardians.
hopecatalyst.net
Abricare HospiceIn progress
Skills
Next.jsReactTypeScriptTailwind CSSshadcn/uiRadixFramer MotionSupabase
Processes
SEO structured-data pipelineAccessibility engineeringVercel deploy (planned)
Compliance
WCAG AAHIPAA

A premium, SEO- and accessibility-first marketing site for a Texas hospice provider.

  • Built-in SEO — local Arlington/Texas metadata and structured data generated from the same source as the visible copy, so the two can never drift.
  • High accessibility bar: AA contrast, focus states, labelled forms and errors, keyboard-safe, reduced-motion-safe, and it renders with JavaScript off.
  • Rethemed my own care-sector template into a wholly distinct brand with zero residual branding — 14 routes, 3 forms, and a graceful no-backend fallback.
abricareinc.com
Rosenfeld & PartnerDelivered
Skills
Next.jsTypeScriptTailwind CSS
Processes
Vercel deploy

A premium, high-end site for a boutique wealth-management firm.

  • Designed a premium, high-end UI aligned to a boutique wealth-management brand.
rmp-partner.vercel.app
KeganIn progress
Skills
Next.jsTypeScriptSanity
Processes
Sanity headless CMSVercel deploy

A personal-brand site for a Nigerian content creator, with a headless CMS.

  • Custom personal-brand website with Sanity.io integrated as a headless CMS for content and SEO.
kagan-site.vercel.app

Experience

Apr 2025 — now

Business Intelligence InternMachiConsult LTD

2025 — now

Freelance Full-Stack DeveloperClient projects

2021 — 23

Tutorial AssistantDr Maths Academy

Education

exp. 2028

Business Administration with InformaticsFH Südwestfalen

2023 — 24

Computer ScienceLagos State University

Hobbies

Chess

I play on chess.com and spend a fair bit of time analyzing openings.

Photography

I shoot with a camera, mostly catching the local light around Hamm, and share on Instagram.

Training

Strength training is the other daily practice, the offline counterweight to screen time.