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.
- 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
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.
The Server Under Your DeskLive
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.

Klass SuiteLive
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.
SiftLive
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.
Football Prediction SystemBuilt
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
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.
- HEIC to JPGHEIC → JPG
- Compress PDF to a sizePDF → under your limit
- Remove backgroundphoto → transparent PNG
- Passport photoselfie → 51×51 mm
- Compress image to a sizeimage → under your limit
- Unlock a PDFlocked PDF → open PDF
- Compress video400 MB → 16 MB
- Scan to textscan → text
- Upscale image220 px → 880 px
- Sign a PDFPDF → signed PDF
- Convert imageJPG ↔ PNG ↔ WEBP
- Merge PDFmany PDFs → one
- Images to PDFphotos → PDF pages
Student ToolsLive
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.
Dad's ArcadeLive
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.
Freelance work
Study MetaverseLive
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.
Alfred Hopo — PhotographyLive
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.
Learn Chess with PrinceLive
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.
Allyque CareLive
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.
Hope CatalystLive
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.
Abricare HospiceIn progress
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.
Rosenfeld & PartnerDelivered
A premium, high-end site for a boutique wealth-management firm.
- Designed a premium, high-end UI aligned to a boutique wealth-management brand.
KeganIn progress
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.
Experience
Business Intelligence InternMachiConsult LTD
Freelance Full-Stack DeveloperClient projects
Tutorial AssistantDr Maths Academy
Education
Business Administration with InformaticsFH Südwestfalen
Computer ScienceLagos State University