KshіtijJha

I build backends and the screens that sit on top of them. The work I’m proudest of started with noticing something small that was wrong.

Canterbury, --:-- UK

CEO and co-founder of Black Reef.

Looking for a 12-month placement from summer 2027.

Five things on this page are broken on purpose, each one a small version of a real bug from the work below. Find them if you like. The counter is in the corner.

Pick a card. Each one is something I built or won.

FraudLens AI
Hackathon build, team lead2026

Reads a scam in English, French or Kreol and shows you the exact words that gave it away.

Tests
631
Precision
100%
Team
5
Winner, Finnovate 2026No. 01 / 11

Legendary · No. 01 / 11

FraudLens AI

Led five people over 72 hours. I owned the backend and the Chrome extension. The rules decide the verdict, the AI only reads language, and it still works when the AI is down.

BlueNet
Hackathon build, team lead2026

Spots fishing boats that switch off their trackers, and tells three patrol boats where to look first.

Sea
2.3M km²
Patrols
3
Team
5
Judge's Choice, Build with GemmaNo. 02 / 11

Epic · No. 02 / 11

BlueNet

Code flags suspicious vessel behaviour, then a Gemma agent investigates each one and ranks the cases for the coast guard. I led the team and built the backend.

Black Reef
Company, CEO2026

The hackathon team that didn't split up. Five of us, building software for clients in Mauritius and abroad.

Founders
5
Based
Mauritius
Started
Oct 2026
CEO and Co-founderNo. 03 / 11

Epic · No. 03 / 11

Black Reef

Websites, mobile apps and custom software, at a fixed price agreed upfront. The clients own everything we build.

SmartERP Attendance
Internship, ITL2026

Clock-in data for a whole company, processed for the month before you can blink.

Punches
13,487
Run time
1.5s
Tables
8
In user testingNo. 04 / 11

Epic · No. 04 / 11

SmartERP Attendance

Built from the schema up in Next.js and SQL Server, in a team of four. Found and fixed an import that was quietly losing one punch in six.

Sultan Mauritius
Client work2026

A bilingual online shop for a Mauritian brand, built and launched for a paying client.

Languages
2
CMS
Sanity
Status
Live
LiveNo. 05 / 11

Rare · No. 05 / 11

Sultan Mauritius

Next.js, Prisma and Sanity CMS, so the client edits their own products without calling me.

Country Materials
Client work2026

The website for a Tanzanian construction materials and recycling company.

Built in
Next.js
ERP sync
Yes
Status
Live
LiveNo. 06 / 11

Rare · No. 06 / 11

Country Materials

Includes an endpoint that keeps the product catalogue in step with the company's ERP, and the legal compliance pages.

Fleet Manager
Internship, CubeStone2026

Every truck, driver, fuel log and repair job for a fleet, on a phone.

Endpoints
~40
Built by
Me
Apps
2
Solo buildNo. 07 / 11

Rare · No. 07 / 11

Fleet Manager

A C# API against SAP HANA and the React Native app on top. Bearer-token login and per-person permissions.

Speed Coding
Competition, pair2026

13 locked problems, each answer opening the next. Nobody got past six. We got six.

Solved
6 of 13
Best any team
6
Prize
Cash
1st Runner-UpNo. 08 / 11

Epic · No. 08 / 11

Speed Coding

Middlesex University's speed coding competition, Python, in a team of two.

TCP Chat Server
Personal project2026

A chat server built from raw sockets to learn how many things can talk at once without tripping over each other.

Language
Go
Clients
Many
Deadlocks
0 now
GoNo. 09 / 11

Common · No. 09 / 11

TCP Chat Server

One goroutine per client, shared state behind a mutex, and a clean shutdown across every connection.

Platformer
Personal project, game2026

A 2D platformer built in Godot and exported to the web. You can play it further down the page.

Engine
Godot 4
Runs in
Browser
Lives
Few
PlayableNo. 10 / 11

Rare · No. 10 / 11

Platformer

Player controller, an enemy, coins, killzones and a game manager tying the run together, exported to WebAssembly so it needs no install.

Database Foundations
Certificate2026

The certificate. The stored procedures came later, and there were a lot of them.

Issued
Feb 2026
By
Oracle
Topic
SQL
Oracle AcademyNo. 11 / 11

Common · No. 11 / 11

Database Foundations

Oracle Academy Database Foundations.

01 of 11

FraudLens AIWinner, Finnovate 2026

Scroll to turn the deck. Click a card to pick it up.

The company I run, and the two internships before it.

After FraudLens won Finnovate, the five of us kept going and started a software studio. Black Reef builds websites, mobile apps and custom software for businesses, at a price agreed before any work starts.

  1. e6392b3Five co-founders, the same team that built FraudLens. The people on a client's first call are the people who build the product.
  2. 7e9424eFixed-scope written proposals. The client owns the code, designs, domains and accounts from day one.
  3. 860520eBuilt the company site: Next.js 16, statically prerendered, with one public endpoint for the contact form, validated server-side, rate limited and origin-checked, behind strict security headers.

Next.jsTypeScriptGSAPVercel

teamblackreef.com

I built the attendance module for SmartERP, ITL's ERP product, from the schema up. Next.js on the front, MSSQL stored procedures underneath, deployed under IIS. It's in user acceptance testing now, and ships to ITL's customer companies after that.

The bug I’m proudest of finding

The import ran clean. No errors, no warnings, and about one punch in six was quietly missing. Two doors recording the same employee in the same minute looked identical to the unique index, so it kept one and threw the other away. The fix was one column.

The clock-in device exports a CSV. The import de-duplicated it on a unique index, which sounds safe until two doors record the same person in the same minute.

CREATE UNIQUE INDEX ux_raw_punch
  ON raw_punch (employee_id, punch_time)
  WITH (IGNORE_DUP_KEY = ON);
12,410 of 14,888 punches imported. 2,478 discarded, and no error raised.One dot is eight punches from a real July file.
  1. b751d2cMulti-company from the session down: every login carries a company ID, every route passes it to the procedures, so one deployment serves several companies.
  2. 8a251b3An 8-table schema with one read and one write procedure per table. JSON in, JSON out, errors to an audit table.
  3. 9961373Attendance processing runs each employee in their own transaction. A full month, 49 people and 13,487 punches, processes in about 1.5 seconds with no failures.
  4. a39af00Signed HttpOnly sessions with a sliding 30-minute timeout, one live session per user, per-IP rate limiting and a nonce-based CSP.
  5. d253f73Built the same 9-endpoint API twice, in .NET 8 and in Node.js, so the team could decide on leaving ASP.NET MVC with numbers instead of opinions.
  6. ece99b6Built the dashboard: daily KPIs, a filterable roster with CSV export, an exceptions panel and a weekly calendar, with unit and integration tests against SQL Server.
  7. 6fc0ac0Redesigned the MUA portal's landing page and components, now in production. Also got the team using Claude Code, which turned days of UI work into hours.

Next.jsMSSQLC# / .NET 8Node.jsIISStimulsoft

My first codebase with somebody else's money on it. I built a fleet management system on my own: around 40 endpoints in C# with Dapper against SAP HANA, the schema behind them, and the React Native app on top.

  1. 04ddac1Assets, drivers, fuel logs, service schedules, work orders, reports.
  2. 1281aafBearer-token login plus a per-employee permission table that decides which tabs and report cards each person sees.
  3. 49e9baaExpo app with dashboard analytics, preventative maintenance scheduling and PDF export.

C#DapperSAP HANAReact NativeExpo

Read the app code

Two hackathon teams I led, and one server I built to understand concurrency.

FraudLens AI

Winner, Finnovate Hackathon 2026

A scam checker for messages, links and emails, built for Mauritius in English, French and Kreol Morisien. I led the team of five and owned the backend and the extension.

The decision I’d defend in any interview: the language model never decides the verdict. A deterministic engine with about 70 signal codes owns the score. The model only reads language, and it has to quote words that are actually in the message, or its output is thrown away. When the model is down, the rules still return a full answer.

Before the code, a test for you. Eight real-looking messages. Which ones are scams?

73% recall

100% precision

On 84 test messages, with the model switched off.

Message 1 of 8

ScamLegit

MCB

Your account has been blocked. To unblock it immediately, click https://mcb-secure.top/verify and enter your OTP code.

now

Swipe, tap, or use the arrow keys

Or paste your own message into a small version of the engine

Paste anything. It runs in your browser and nothing is sent anywhere.

85High risk
  • +25Asks for a one-time code or PINOTP
  • +12Pushes you to act nowimmediately
  • +15Threatens your accountblocked
  • +30Looks like MCB, but the real site is mcb.mumcb-secure.top
  • +10Domain ending often used for throwaway sitesmcb-secure.top

Wording alone earned 52 points, capped at 45. Scary words are not enough for a high-risk verdict on their own.

630 of 631 backend tests passing.

BlueNet: Ocean Watch

Judge’s Choice, Build with Gemma

Mauritius has 2.3 million square kilometres of sea and three patrol boats. BlueNet helps decide where they go.

Plain code flags the patterns that matter in vessel tracking data: ships going dark in protected zones, two vessels meeting at sea, trawling patterns. Then a Gemma agent investigates each flagged vessel with function calling and writes a ranked case file for the coast guard. I led the team of five and built the backend.

Vessel reporting position Coast guard patrolWatch the protected zone.

Concurrent TCP chat server

Raw TCP in Go, one goroutine per client, mutex-guarded shared state, and a clean shutdown across every connection.

I wanted to understand concurrency rather than trust the runtime with it. It deadlocked, raced on a map and misused a WaitGroup, and I fixed each one by tracing it through the synchronisation model instead of adding sleeps until it stopped.

go func transferA() {
  a.Lock()
  b.Lock()
  // move money
  b.Unlock(); a.Unlock()
}

running

go func transferB() {
  a.Lock()
  // move money
  a.Unlock(); b.Unlock()
}

running

Two goroutines, two locks. Watch what happens.

Don’t take my word for it. Try the real things.

Hackathon winner

FraudLens AI

Paste a suspicious message and watch it explain itself.

Client site, live

Sultan Mauritius

The bilingual shop I built and launched for a Mauritian drinks brand.

Client site, live

Country Materials

Corporate site for a Tanzanian construction materials company.

Playable, made in Godot

Platformer

A small 2D platformer I made in Godot. Coins, enemies, a knight, and a few ways to fall to your death. It runs right here in the browser.

Arrow keys to move. Click the game once it loads so it hears your keyboard.

Three places so far.

  1. Dar es SalaamTanzania

    Where it started

    I grew up on the Tanzanian coast, which is where the diving started. Years later I came back for both internships: a fleet system at CubeStone, then the attendance module at ITL.

  2. MauritiusIndian Ocean

    Where it got serious

    First year of Computer Science at Middlesex, with a First in every graded module. Two hackathon teams, two awards, and my first paying clients.

  3. CanterburyUnited Kingdom

    Where I am now

    Second year at the University of Kent. Looking for a 12-month placement from summer 2027.

Second year at Kent, and the rest of me.

University of Kent

BSc Computer Science with a Year in Industry 2026 to 2029

Stage 2 now. Algorithms and Database Systems this autumn, AI and Cyber Security in spring, Web and Software Development in summer. Placement year from July 2027.

Middlesex University Mauritius

BSc Computer Science (Systems Engineering), Year 1 2025 to 2026

120 of 120 credits. Grade 1, a First, in every graded module: systems architecture and operating systems, networking, and information in organisations.

Middlesex University Mauritius

BSc Psychology one year

A year studying psychology, also at Middlesex.

Languages

Backend and data

Frontend

Infrastructure

Press a key to see where I used it.

Spoken English and Hindi natively. Maithili is my mother tongue.

  • Underwater

    I dive. Growing up on the Tanzanian coast and then living in Mauritius does that. The whole skill is staying calm and breathing slowly.

  • Souls-likes

    A lot of FromSoftware, and a lot of time in game engines trying to work out why their combat feels the way it does.

  • Fedora, KDE

    Daily driver, reinstalled more often than necessary. I learn systems by taking them apart.

  • Films

    Everything I watch gets logged on Letterboxd, because otherwise I forget it.

Looking for a 12‑month placement from summer 2027. Write to me.