Projects
Things I've built and still run outside work. The source for each is on
GitHub.
Blocks ads, trackers, malware and adult content for whole networks, with nothing to install. Seven servers in four locations, serving plain DNS, DNS-over-TLS and DNS-over-HTTPS, and answering around six million lookups a day. It started as a personal ad-blocking DNS server and grew into a filtering server written in Rust, a dnsdist front end with automatic certificates, and a blocklist tuned with its users.
bancuh.comGitHub
All seven daily prayer times, a Qibla compass and home screen widgets, working offline. Uses official timetables for nine countries, gathered from each country's religious authority, and calculates times locally everywhere else. New countries are added through a data repository without an app update. On about 600 phones, mostly in Malaysia.
- React Native
- Expo
- TypeScript
- Rust
- Python
simplesolat.comGoogle PlayGitHub
An Augmentative and Alternative Communication app, inspired by JABtalk: tap words and pictures to speak them aloud. Word sets can be edited, backed up and loaded from ready-made collections. Free, with no ads. On about 1,250 Android devices, almost all in Malaysia, and on iPhone and iPad too.
- React Native
- Expo
- TypeScript
- Rust
gibtalk.comGoogle PlayApp StoreGitHub
One keytree.yaml in a public repository says who can log in where: users, groups, and servers by hostname or pattern. Every server syncs it hourly into its own authorized_keys, and a failed fetch never removes access. It looks after the logins on every server I run.
GitHubThe story
A Proxmox host running small Alpine Linux VMs for the router and a k3s cluster managed with Flux, plus a VM for development workspaces. Public traffic arrives through an frp tunnel from a small VPS, and wildcard certificates come from a self-hosted acme-dns. It runs this site, the projects' websites, GibTalk's symbol search and Bancuh's status page; Bancuh's DNS servers are rented separately.
- Proxmox
- Alpine Linux
- k3s
- Flux
- frp
VM scriptsTunnel ingress