I build web products from the front end (React, Vue) through the back end (FastAPI, Django) down to the LLM or vision layer inside them. Five-plus years of it, most of that in Dubai and Abu Dhabi.
At AppliedAI I work on Opus, an enterprise AI workflow platform used by teams in finance, telecom, healthcare and AI infrastructure. I own Process Discovery, a multiplayer canvas built on Yjs where customers co-edit the process documentation that Opus turns into workflows, wired to Anthropic and OpenAI models. I also rewrote large parts of the n8n fork that became Opus' technical canvas, and built Opus-CX on React and Zustand.
On my own time I like products where the model is the product and privacy is the feature. That is why most of the repos below run on-device.
| Now | Getting ScamShield 0.5 through the Chrome and Firefox stores | Growing MeetingMind past its first paying users | A year of Mandarin, one character at a time |
Real screenshots from the store listing (popup, in-page banner, message checker, settings, wallet guard)
![]() |
![]() |
![]() |
![]() |
🎙️ MeetingMindOffline-first meeting recorder PWA. Records in the browser, keeps audio and notes in IndexedDB on the device, writes Gemini summaries, exports Markdown or PDF. Pro tier billed through Paddle; UI in five languages.
|
Spotify companion that uses Claude to fill a weekly discovery playlist, since Spotify retired its recommendation endpoints for new apps. It also turns your stats into a downloadable Wrapped-style poster, with lifetime numbers taken from your own GDPR export rather than invented.
|
|
My site, with a chat agent that answers questions about my experience and projects instead of making you scroll.
|
Daily GitHub Action that curates OpenPhish and URLhaus into ScamShield's blocklist, with shared-host scoping and a Tranco top-10k false-positive guard.
|
|
pip-installable resume and document parser: cleans and sections the text, then pulls out names, emails, phone numbers and skills. Written because the open-source options were thin.
|
Streamlit front end for chatting with local models over Ollama, with model pulling and management built in.
|
Older experiments (kept public because they were useful once)
- tracr: recursive image finder that crawls out from a starting URL. Python.
- cv_analysis: Dockerised CV analysis server with OCR, a parser and a test suite, on port 8501. Python.
- sessions-node-api: tiny session API that fed a randomizer on an early version of my site. Node.js.
- huffman-test-python: Huffman encoding from scratch, because reading about it wasn't enough. Python.
- sentiment-analysis: Flask API wrapping a sentiment model. Python.
AI layer: Anthropic and OpenAI SDKs · Ollama · Gemini · scikit-learn models exported to ONNX or plain JS · YOLOv5 and OpenCV · Yjs / CRDT real-time collaboration · n8n · Manifest V3 extensions
Testing: Pytest · Vitest · Cypress · Playwright
- Based in Abu Dhabi. B.E. Computer Science (Hons), BITS Pilani Dubai Campus.
- Languages: English, Malayalam, Hindi, and a year of Mandarin underway.
- Weekend reading is astronomy, the software side of it: how telescopes catch things that flare up or explode in the night sky, and how you sort through millions of those alerts a night.
- Small, sharp tools over big frameworks. Most repos here started as a Friday-evening problem.
Both images are generated daily by a GitHub Action in this repo (visuals.yml); no third-party stats service involved. The banner and cards above are hand-written SVG, built by tools/build-assets.py.
Thanks for stopping by. Say hi at joel.stephen.work@gmail.com or on LinkedIn. · Sponsor
Last updated August 2026






