Computer Systems Engineering @ MSUZimbabwe · --:-- CAT Open to work

Platform-minded engineer building tools.

See the work

What I do

I build lightweight infrastructure, developer tools, and practical systems for teams working with real-world constraints.

Selected work · 06

Systems with real constraints behind them.

All projects
02 / 06Self-Hosted Mail Engine

Lightr

A self-hosted mail engine in Python: SMTP in and out, SPF/DKIM/DMARC, a retrying outbound queue, and a REST API and CLI, with Dovecot serving the mailboxes. It runs the mail for this site.

PythonDovecotSQLitePostgreSQLLinux
lightr · mail.nigelbasa.techsmtp · api · dovecotSMTP:25 / :587AUTHspf·dkim·dmarcLMTP→ dovecotIMAPinbox · idle✓ dkim pass250 2.0.0 accepted from mx.google.comauth dkim=pass spf=pass dmarc=passlmtp 250 2.0.0 saved to INBOXimap INBOX · 1 new · clients notified
03 / 06Zimbabwe Domain Intelligence Toolkit

zwdomain

CLI and npm library for .co.zw domain intelligence, DNS diagnostics, and email configuration checks. Useful for registry lookup workflows, provider detection, and troubleshooting domain setups.

Node.jsJavaScriptnpm
~/ · zsh.co.zw$ zwdomain check example.co.zw --providerquerying the .co.zw registry…●statusTAKEN✓nsns1.example.co.zw, ns2…✓spfv=spf1 include:…✓dkimconfigured · selector: default!dnssecnot enabled✓emailprovider detected
05 / 06yt-dlp Inside React Native Apps

expo-yt-dlp

An Expo module that runs the real yt-dlp on an Android phone: a bundled, stripped-down Python runtime behind a typed JS API for info, formats, downloads, subtitles and playlists. No server.

TypeScriptKotlinPythonExpoAndroid
expo-yt-dlp · androidon-deviceconst task = YtDlp.download(url, {maxHeight: 720, onProgress })137 · 1080p · avc1136 · 720p · avc1140 · m4a · aacvideo0%audio0%mergegetInfo(url)…python 3.14 · real yt-dlp · no server in between
06 / 06Playwright-Style WebView Automation for Android

Droidwright

A native Expo module that drives offscreen Android WebViews with a Playwright-like TypeScript API: navigation, locators, fills, taps, waits, screenshots, cookies and storage, inside the app itself. No desktop Chrome, ADB or Appium.

TypeScriptKotlinExpoAndroid
droidwright · script.tsconst page = await launch()await page.goto('example.com')await page.locator('#email').fill(me)await page.getByText('Sign in').tap()const png = await page.screenshot()await page.close()about:blankSign inEMAILSign inscreenshot.pngoffscreen WebView · inside the appno desktop chrome · no adb · no appium
Nigel Basarokwe

About

Engineering depth, practical usefulness.

Studying · 2022 — 2026
BSc Computer Systems Engineering
Midlands State University
Recently · Mar 2025 — Feb 2026
IT Consultant - Internship
Nyanhewe Primary School
More about me

github.com/nigelbasa

Writing

Notes from the build.

All writing

Open to roles, internships and interesting problems

Got something that needs to ship?