Runs locallySolo build · 287 jobs collected over 61 runs
Job Assistant
A collect → filter → dedup → deliver pipeline over seven source adapters, including LinkedIn ingested from alert emails over IMAP rather than scraped.
- Source adapters
- 7
- Tests
- 162
Computer Science graduate building polished products, real-time systems and production-ready software.
Work
Four flagship projects, and two more worth a look.
Live
A poker study platform and home-game manager, shipped from one codebase
One Expo codebase renders iOS, Android and the live web app, backed by an ASP.NET Core CQRS service over PostgreSQL. The financial core runs in integer cents, and the two stacks carry 6,210 passing tests.



Runs locally
A Security Operations Centre where module isolation is enforced by the compiler
Security events flow from ingestion through detection and threat scoring to alerts over MassTransit and RabbitMQ, and reach the dashboard live over SignalR. The whole stack comes up from one Docker command that mints its own RS256 keys.
Runs locally — the live stream shown is a local demo
Streaming — local demo

Released
A local-first code workspace that refuses to answer without evidence
It indexes your own projects into a private SQLite FTS5 index and answers with real file and line citations, declining when the index can't support an answer. It ships as one Python package with no runtime dependencies: a CLI, a browser dashboard, an installable PWA or a Windows desktop window.




Grounded answers · file:line citations
Release candidate
One touch, 150 hand-tuned levels, and physics that had to feel fair
Press and hold to spawn an inverse-square gravity well and pull a lost star home, across 150 data-driven levels in 15 worlds. Built on Phaser 3 in strict TypeScript, with a Vitest suite that pins both the physics and the progression.
v1.0.0-rc · Android-only · not yet in a store


v1.0.0-rc · Android-only
More work
Runs locallySolo build · 287 jobs collected over 61 runs
A collect → filter → dedup → deliver pipeline over seven source adapters, including LinkedIn ingested from alert emails over IMAP rather than scraped.
CourseworkUniversity coursework · HIT
A multithreaded Java server speaking JSON over raw sockets to a JavaFX client, with pluggable shortest-path routing for delivery ETAs.
About
I'm a Computer Science graduate, and nearly everything I build comes back to one idea: make the wrong thing hard to express. Money moves in integer cents, so a rounding error has nowhere to live. Module boundaries are compile errors, not code-review habits. A retrieval layer that can't cite a file and a line refuses to answer rather than guess.
That started in C and C++, where nothing is handed to you and the machine is honest about what you got wrong. It carries into the C#/.NET, TypeScript and Python work I do now — each taken from an empty repo to a running system. I'm looking for a junior software development role on a team that ships.
Stack
Enough range to own a product end to end.
C# carries Aegis's and T Poker's backends, TypeScript their clients, and Python carries DeveloperOS and Job Assistant.
One Expo codebase renders iOS, Android and the live web app for T Poker — designing for the narrowest target first.
8bounded contexts
Aegis moves events across 8 bounded contexts over RabbitMQ, with 0 cross-context references and a retry ladder per endpoint.
SQLite FTS5 powers DeveloperOS’s grounded retrieval; PostgreSQL and Redis back Aegis’s partitioned events and sliding windows.
T Poker's CI runs eight jobs across two languages, each scoped to what a push changes, and Aegis's whole stack — API, frontend, PostgreSQL, Redis, RabbitMQ — comes up under one compose file.
7,061passing tests across five projects
7,061 passing tests across five projects, weighted toward settlement math, threat scoring, retrieval grounding and level progression.
The hard part of T Poker wasn't the poker UI: it was guaranteeing the money is exact on a phone with no signal, and still correct when the server reconnects.
T Poker
Eight bounded contexts, structured so a cross-module reference fails to compile — verified by a script, not by code review.
Aegis
The TypeScript settlement fixtures mirror the C# service case for case, and Aegis comes up from a single Docker command that gates on health.
T Poker · Aegis
Available for software development roles
Open to junior software development roles — onsite, hybrid, or remote.
GitHub (opens in a new tab)LinkedIn (opens in a new tab)EmailTay Shofer