fangjet
// public projects & private contract work

Projects

Shipped apps, open source projects and client work, built with clear architecture, tests and CI. Contract work is marked as such, and public repos are linked.

Live on Play Store; caregiver app in active development

An Android launcher for older adults and people with low vision, paired with a caregiver app that configures it remotely. Both apps live in one multi-module Kotlin codebase with shared contracts, pair with a 6-digit code, and use Firestore security rules to enforce which side owns what. The launcher stays simple and legible: large color-coded buttons, medication reminders, voice commands, a magnifier, and photo speed dial.

KotlinJetpack ComposeHiltRoomFirebaseMVVM

260+ unit tests · multi-module · GitHub Actions CI

Sunny & Misty

A weather app where Sunny the dog and Misty the cat act out the forecast and suggest the best time for a walk. Native on both platforms: Kotlin/Compose for Android, Swift/SwiftUI for iOS. Features include multiple saved cities, multi-day forecasts, animated radar, and scheduled daily weather briefings. Offline-first: per-city caching paints instantly and refreshes in the background. Feature switches and walk-safety thresholds are tunable from Remote Config without shipping a build.

KotlinJetpack ComposeSwiftSwiftUIWorkManagerDataStoreFirebase

Unit tests + Compose UI tests on Android · XCTest on iOS · GitHub Actions CI

Rolo CRM

Contract work

A relationship-first CRM built for Data Story Strategy, a commercial translation firm for diagnostic and biotech companies, in production since July 2026. A configurable rules engine schedules each contact's next follow-up, and a dashboard and daily email surface what's overdue. An MCP server lets AI assistants read contacts and propose changes, with every agent write gated on human approval. Plain PHP 8.4 and MariaDB, server-rendered with no build step.

PHP 8.4MariaDBPHPUnitMCP

Hark: Offline Wake Word Detection

Fully on-device wake word speech recognition for Android, powered by PocketSphinx: no cloud and no network dependency. Designed to help hearing-impaired users notice when they're being addressed. Runs as a microphone foreground service that handles Android 14's background and boot restrictions, with multi-word phrases, tunable sensitivity, and custom alert sound and duration. My most starred and forked repo.

KotlinJetpack ComposePocketSphinxHiltDataStore

Whiteboard Camera

Contract work

Android prototype that removes the presenter from the shot entirely, isolating whiteboard content in real time using OpenCV and the NDK, then streaming the enhanced feed to conferencing platforms. The result looks like text appearing on the board with no one in front of it.

KotlinOpenCVAndroid NDKCamera2WebRTCRTMP

Commercial Translation Diagnostic

Contract work

An AI-assisted diagnostic platform built for Data Story Strategy, a commercial translation firm. A client completes a structured intake and uploads a deck and supporting documents; the system also reads their website, then drafts a findings report with Claude. A consultant reviews and edits every report in an admin console (with Word export) before the client can see it. Also includes Stripe checkout, invitation links for sponsored engagements, Google Sign-In for admins, and automatic retry and alerting when generation fails.

PHP 8.4StripePHPUnitClaude API

fangjet.com

You're looking at it :) Originally a WordPress site, rebuilt using React and Vite, with every page prerendered to plain HTML at build time for speed and SEO. Served from Firebase Hosting, with Cloudflare running the DNS. The source is open on GitHub under the MIT license.

ReactViteTailwind CSSSEOFirebase HostingCloudflare DNS