Veg momos from the army canteen at Nathu La. Easily the best I've had.
Apurv Das

Base station · Gangtok · 1,650 m

Apurv Das

I build fast, good-looking software that still runs well on old, cheap PCs.

Show me the route for

Software engineer · QA · Systems · Web · AI/ML

MCA graduate (2026) who tests software for a living, writes native C++ for weak Windows PCs, builds full-stack web apps and has trained CNN image-search models.

Scroll to ride

Experience

Apr 2026 – Present

Zentrax Solutions LLP

QA Tester & Product Contributor (Part-Time)

backoffice defects in one test cycle (3 High)
8
  • Perform manual functional, regression, exploratory and UI/UX testing of an intercity cab-sharing platform: the Android app, the web admin panel (backoffice) and its backend APIs.
  • Reported 8 backoffice defects in one test cycle (3 High priority) covering navigation, CSV export data integrity and UI layout.
  • Write test plans, test cases and test scenarios from feature requirements; retest fixes and verify bugs before each release.
  • Log bug reports in JIRA with steps to reproduce, expected vs actual results, severity and priority, and track them through the bug life cycle.
  • Test Android builds on devices and emulators with Android Studio and ADB across screen sizes.
  • Contribute to requirements analysis and product brainstorming on features, flows and improvements, collaborating with developers and the product team.

Jan 2026 – May 2026 · Remote

Pheme Software Pvt. Ltd.

AI / ML Intern (Remote Mentoring Program) · IBM Platinum Business Partner

  • Built "AI Visual Search Engine for E-Commerce", an image-based product search system using CNN feature extraction and image similarity matching in Python.
  • Trained and fine-tuned Convolutional Neural Network (CNN) models to improve visual search relevance and retrieval accuracy.
  • Applied deep learning and computer vision (TensorFlow/Keras, OpenCV) to a real-world e-commerce use case, mentored by Mr. Krishna K.

May 2023 – Jun 2024 · Bhopal

Technotask Business Solutions

Web Developer Intern

  • Developed and maintained web applications using PHP, CodeIgniter (MVC), HTML5, CSS3, JavaScript and MySQL.
  • Contributed to the company HRMS portal supporting employee records and management workflows.
  • Improved system stability and sped up issue resolution with structured logging; worked in Agile sprints with Git and code reviews.

Projects · Mid station · Tsomgo Lake · 3,753 m

Systems · Native C++

WreckBox for Windows

A native C++ rewrite of the WreckBox DJ-library app, built for weak Windows PCs.

  • C++20
  • Win32
  • Direct2D
  • libVLC
  • WASAPI
  • projectM
  • CMake / vcpkg
first paint (105–147 ms, 300 ms budget)
0.1s
RAM at rest
43MB
idle CPU, no frame loop
0%
Library view with BPM, key, energy and file type filters
Track details panel: BPM, Camelot key and energy
Full-screen DasVis visualizer with the player bar
Case study

Problem

WreckBox keeps a DJ's music in one library, works out BPM, key and energy for every track and tags the files. It is an app by another developer (moloyb301-eng); this is my native rewrite of it, aimed at old, cheap Windows PCs.

Limits

Weak hardware, a 300 ms first-paint budget, and no frame loop, so nothing runs when nothing changes.

What I built

  • One native executable (Win32, Direct2D).
  • Ported the Rust audio-analysis engine (tempo, key, energy) to C++ with my own SSE2 FFT, computed frame by frame so a 5-minute track needs no spectrogram in memory. Results match the Rust engine on every file both can read.
  • Low-latency playback: libVLC into a 0.25 s ring, miniaudio / WASAPI at 20 ms periods, and a sample-accurate "heard" clock that keeps visuals on the beat, with automatic Bluetooth latency compensation.
  • The Soulseek peer-to-peer protocol, natively (server, peers, relayed transfers), with 28 messages verified byte for byte against a reference implementation.

Numbers

  • First paint in 105–147 ms against a 300 ms budget; search across 5,000 tracks in 0.8 ms.
  • 0% idle CPU and about 43 MB of RAM at rest.
  • Memory after scrolling roughly halved (about 92 to 50 MB) by fixing GPU brush retention and moving to the Windows segment heap.

Testing

  • 12 CTest suites (690+ assertions); CI builds, tests, smoke-tests and packages each release.
  • Smoke testing caught a crash on every app exit (2 root causes fixed).
  • Compatibility testing of 18 audio formats found 3 audio defects, each locked in with a regression test.

Web · Full-stack

Project Manager

A project manager that works offline: Kanban board, roles, comments, time tracking. Live on the web and as a Windows desktop app.

  • Supabase / PostgreSQL (RLS)
  • JavaScript
  • Tauri (Rust)
  • Playwright
  • PHPUnit
  • GitHub Actions
automated tests (v1 and v2)
354
desktop app idle (Chrome ~315 MB)
170MB
idle CPU per 10 s, down from ~320
<64ms
Dashboard: project stats, open tasks and notifications
Kanban board with Todo, In progress, Review and Completed columns
The same Kanban board in dark mode
Task detail with checklist, comments, time tracking and history
Project analytics: completed per week and burndown
Case study

Problem

A PHP project manager (v1: PHP 8.3, CodeIgniter 4, MySQL) rebuilt as a live app on Supabase and GitHub Pages, plus a Windows desktop app.

Limits

Free hosting and unreliable networks, so it has to work offline and merge edits safely.

What I built

  • Projects, a role ladder (owner / manager / member / viewer), tasks with multiple assignees, a drag-and-drop Kanban board, tags, checklists, comments, notifications and an activity log.
  • An offline-first sync engine: an IndexedDB copy plus an outbox replayed through server RPCs, with per-field conflict merging and data wiped on sign-out.
  • A Tauri Windows desktop app with tray, notifications, browser sign-in and signed auto-updates, released through a GitHub Actions pipeline.

Numbers

  • About 170 MB idle for the desktop app against about 315 MB for Chrome.
  • A fix cut idle CPU time from ~320 ms to under 64 ms per 10 s.

Testing

  • 60 Playwright end-to-end tests covering offline editing, conflict merging, live sync and sign-out data wiping.
  • 32 role-based API permission tests across 6 user roles; a responsive sweep of 20 screen sizes × 5 pages; a performance regression test guarding the CPU fix.
  • v1 had 244 PHPUnit tests covering authorization, output escaping, XSS, CSRF, IDOR and mass assignment.

Systems · Direct3D 11

DasVis

A Direct3D 11 music visualizer that follows the song: build-ups, drops and cover colours. Spun out of WreckBox.

  • C++20
  • Direct3D 11 (feature level 10_0)
  • HLSL
  • Media Foundation
of one CPU core
5%
extra RAM at the low tier
20MB
GPU scenes
15
DasVis: Feedback Classic scene, a waveform ring with trails and particles
DasVis: a liquid chrome blob reflecting the album colours
DasVis: a generated organic world
DasVis: Neon Tunnel, one ring per beat
Case study

Problem

Most visualizers only react to the sound that is playing. DasVis maps the song first, so the visuals can anticipate build-ups and drops.

Limits

Runs on GPUs back to Direct3D 11 feature level 10_0 (about 2008 hardware), pixel shaders only. Big flashes are held to 3 a second.

What I built

  • Streaming song analysis (STFT, harmonic-percussive separation, dynamic-programming beat tracking, novelty-based section detection) maps beats, build-ups and drops in about 4–6 s using about 6 MB.
  • 15 GPU scenes, including stable-fluids, reaction-diffusion and a one-million-star galaxy, all as pixel shaders on ping-pong textures.
  • Quality tier and render scale chosen from GPU timestamp queries.
  • Frame-exact H.264 video export through Media Foundation, Spout GPU texture sharing, and WLED LED-strip control over realtime UDP.

Numbers

  • About 5% of one CPU core and +20 MB of RAM at the low tier.
  • Song map in about 4–6 s using about 6 MB.

Testing

  • Automated GPU rendering tests on a software renderer (WARP).
  • Determinism tests: same input, bit-identical frames.
  • A photosensitivity (accessibility) test for the flash limiter.

Systems · Windows tools

Unigen Manager

A Wi-Fi 6 and Bluetooth manager for the Unigen USB dongle and MediaTek cards: dark UI, live charts, always-on tray widget.

  • Python
  • ctypes (SetupAPI, WLAN API)
  • WinRT
  • pywebview + WebView2
  • anime.js
  • pytest
  • Playwright
one .exe, no installer
33MB
to move Wi-Fi between adapters
3s
pytest tests
536
Wi-Fi page: nearby networks with a 2.4 and 5 GHz view
Bluetooth page: paired and nearby devices
Speed test results and signal strength over time
Live traffic graph and daily totals per adapter
Tray flyout with the main controls at a glance
Case study

Problem

Run a USB Wi-Fi 6 + Bluetooth dongle and a laptop's built-in card side by side, and move Wi-Fi and Bluetooth between them from one window. An unofficial, independent app.

Limits

System-changing actions on real hardware, so it needs an unplug / replug watchdog and rollback on failure. Ships as one executable, no installer.

What I built

  • Switches radios and devices through SetupAPI and the WLAN API; Wi-Fi moves in about 3 s with no driver restart.
  • Reads device battery levels from Windows device properties.
  • One dark-mode window with live charts and an always-on tray widget (pywebview + WebView2, anime.js).

Numbers

  • One 33 MB executable; Wi-Fi moves between adapters in about 3 s.

Testing

  • 536 pytest tests: unit, API contract and Playwright UI tests in Microsoft Edge, plus 20 read-only hardware checks that run on demand against the real adapters.
  • A 24-case manual test checklist for system-changing actions.
  • Releases diagnosed from the app's own log and the Windows event log.

AI/ML · Python

NetRisk AI

Course project: home-network risk assessment that runs unattended on a 4 GB laptop. No LLM, alerts only.

  • Python (standard library only)
  • SQLite
  • nmap
  • Windows Task Scheduler
TCP ports scanned per device
200
between unattended scans
6h
unit tests
44
HTML risk report header with overall level and counts (sample data)
Findings with why it matters and how to fix it (sample data)
Case study

Problem

Course project for AI Powered Cybersecurity Network Architecture and Threat Mitigation (MCA): find how risky a home network is, and notice when it changes. The screenshots use sample data.

Limits

A 4 GB laptop, unattended, standard library only. Alerts only: it never changes the network, pins the home network on first run and skips any other network.

What I built

  • Finds every device on the subnet and scans the top 200 TCP ports with versions, plus a UDP probe for SNMP and UPnP, every 6 hours.
  • Scores each finding by likelihood × impact into device and network risk (Low to Critical).
  • An anomaly model learns how often each port is open on each device and flags scans far more surprising than that device's history (it starts after 20 scans).
  • A SQLite history (new devices, newly opened ports), a self-contained HTML report with fix steps, and a Windows notification only for High / Critical or unusual findings.

Numbers

  • Top 200 TCP ports, every 6 hours, on a 4 GB laptop.

Testing

  • 44 unit tests with mocks.

Web · Next.js

Ciba Library

A motion-first community recipe site, with animation at the centre of the design.

  • Next.js 16
  • React 19
  • TypeScript
  • Prisma
  • PostgreSQL
  • Auth.js
  • anime.js
  • react-three-fiber
tests: 27 Vitest + 4 Playwright E2E
31
signature animations
4
Ciba Library home with top picks and the latest recipes (light)
Ciba Library home (dark)
Browse recipes with category, time, diet and cuisine filters
Recipe page with scalable ingredients, method and comments
Case study

Problem

A recipe website where motion is a feature, not decoration.

Limits

Every animation has to be motivated by feedback, hierarchy or reveal, and collapse gracefully under reduced motion.

What I built

  • A full-stack Next.js (App Router) site over Prisma and PostgreSQL, with Auth.js (email + Google OAuth, JWT sessions, bcrypt).
  • An anime.js motion system: a live servings scaler, FLIP grid re-layout, an add-to-cart flight and a react-three-fiber WebGL hero, with light/dark and reduced-motion support.
  • Browse filtering, ratings and comments, a follows / activity feed and a per-user shopping list.

Numbers

  • 27 Vitest unit tests and 4 Playwright E2E tests.

Testing

  • 27 Vitest unit tests and 4 Playwright end-to-end tests.

Web · Python

Focus

A motion-first focus app: Pomodoro timer, reminders, focus tasks and streak stats.

  • Python
  • FastAPI
  • Jinja2
  • SQLite
  • anime.js
  • pytest
pytest tests, run in CI
46
build steps
0
Focus timer with a glass ring that clears as you work (light)
Focus timer in dark mode
Focus tasks to log time against
Reminders with snooze and repeat
Focus stats: streak, sessions and the last 7 days
Case study

Problem

Grown from a small desktop reminder app into a focus web app.

Limits

One process, a single user and no login. Notifications fire only while a Focus tab is open (a known ceiling).

What I built

  • A Pomodoro timer with an animated countdown ring and tweened digits; finished sessions are logged and trigger a browser notification.
  • Reminders with once / daily / weekly recurrence and snooze; focus tasks to log time against.
  • Stats: today's focus, day streak, totals and a 7-day chart. Design tokens and motion are ported from Ciba Library.

Numbers

  • 46 pytest tests.

Testing

  • The timer and reminder logic live in pure, tested modules; 46 pytest tests run in GitHub Actions CI.

Web · Python

Khaata

An Indian expense tracker: income and spending by category, in ₹ with DD-MM-YYYY dates.

  • Python
  • Flask
  • Jinja
  • Tailwind CSS
  • Tkinter
tests
24
of them security tests
8
front ends: web and desktop
2
Khaata dashboard: balance, spending by category, cash flow
Searchable, filterable transactions ledger
Monthly budgets with progress bars
Insights: income vs expenses and category mix over time
Case study

Problem

A multi-user expense tracker in rupees, with Indian date format.

Limits

Each account's data stays in its own folder; an import that fails validation is rejected whole.

What I built

  • A Flask web app and a Tkinter desktop app sharing UI-agnostic ledger logic through a common core module.
  • Dashboards (net balance, spending donut, cash-flow charts), per-category budgets and insights.
  • CSV / XLSX import and export with strict validation; hashed-password accounts with CSRF-protected forms; every flow works without JavaScript.

Numbers

  • 24 tests, 8 of them security tests.

Testing

  • 24 tests including 8 security tests.

Small tool · Python

SmartThings A/C

A one-file Python command-line tool to check and control a Samsung air conditioner through the SmartThings REST API: status, power, temperature.

By the numbers

1,035 automated tests, and what the apps cost to run

Test counts come from collecting the suites themselves; the other figures are from the project READMEs.

Memory (MB)
MemoryHorizontal bars, unit MB. WreckBox at rest: ~43 MB. DasVis at the low tier: +20 MB. Project Manager desktop, idle: ~170 MB. Chrome, same task (reference): ~315 MB.WreckBox at rest~43 MBDasVis at the low tier+20 MBProject Manager desktop, idle~170 MBChrome, same task (reference)~315 MB
Memory
WreckBox at rest~43 MB
DasVis at the low tier+20 MB
Project Manager desktop, idle~170 MB
Chrome, same task (reference)~315 MB
Automated tests by project (tests)
Automated tests by projectHorizontal bars, unit tests. Project Manager: 354. Unigen Manager: 536. Focus: 46. NetRisk AI: 44. Ciba Library: 31. Khaata: 24.Project Manager354Unigen Manager536Focus46NetRisk AI44Ciba Library31Khaata24
Automated tests by project
Project Manager354
Unigen Manager536
Focus46
NetRisk AI44
Ciba Library31
Khaata24

Plus 12 CTest suites in WreckBox (690+ assertions) and GPU rendering, determinism and photosensitivity tests in DasVis.

First paint (ms)
First paintHorizontal bars, unit ms. WreckBox, measured 105–147 ms: ≤147 ms. Budget I set: 300 ms.WreckBox, measured 105–147 ms≤147 msBudget I set300 ms
First paint
WreckBox, measured 105–147 ms≤147 ms
Budget I set300 ms

Searching 5,000 tracks takes 0.8 ms.

CPU (% of one core)
CPUHorizontal bars, unit % of one core. WreckBox idle (no frame loop): 0%. DasVis, low tier: ~5%.WreckBox idle (no frame loop)0%DasVis, low tier~5%
CPU
WreckBox idle (no frame loop)0%
DasVis, low tier~5%

Project Manager desktop: idle CPU time cut from ~320 ms to under 64 ms per 10 s.

Shipping log

What I have shipped

Releases with downloads, newest at the bottom of the timeline.

Releases, October 2026 (spaced by date)
Release timelineFive releases between 5 and 18 October 2026: desktop-v0.2.1 (Project Manager, Oct 5). v0.1.0 (WreckBox for Windows, Oct 7). v0.7.0 (WreckBox for Windows, Oct 9). v0.7.6 (WreckBox for Windows, Oct 15). v1.0.7 (Unigen Manager, Oct 18).desktop-v0.2.1Project Manager · Oct 5v0.1.0WreckBox for Windows · Oct 7v0.7.0WreckBox for Windows · Oct 9v0.7.6WreckBox for Windows · Oct 15v1.0.7Unigen Manager · Oct 18
Releases
ReleaseProjectDate
desktop-v0.2.1Project Manager2026-10-05
v0.1.0WreckBox for Windows2026-10-07
v0.7.0WreckBox for Windows2026-10-09
v0.7.6WreckBox for Windows2026-10-15
v1.0.7Unigen Manager2026-10-18
  1. Project Manager desktop-v0.2.1Project Manager desktop app (Tauri), signed auto-updates, browser sign-in.
  2. WreckBox for Windows v0.1.0First build of the native C++ / Direct2D rewrite: library, BPM and key analysis, imports, player, visualizer.
  3. WreckBox for Windows v0.7.0Roughly half the memory after scrolling a big library (about 92 to 50 MB).
  4. WreckBox for Windows v0.7.6A web player, and two new DasVis scenes: Journey and Score.
  5. Unigen Manager v1.0.7Unigen Manager, one 33 MB .exe with no installer.

Skills

What I use, and where

Hover, focus or tap a skill to see the projects and jobs that use it. Press Enter or tap to pin it.

Testing

Systems & graphics

Web & data

AI / ML

Delivery

Education

  • Master of Computer Applications (MCA), UPES, Dehradun · Aug 2024 – Jul 2026 (completed)
  • Bachelor of Computer Applications (BCA), Christ (Deemed to be University), Delhi NCR · Apr 2024
  • Higher Secondary, NIOS · Jun 2020

Top station · Nathu La · 4,310 m

Summit

Hiring for QA, systems, web or AI/ML work, or want to talk about fast software on slow hardware? Write to me.

Stylised route sheetA decorative survey-style sheet, not to scale: the ropeway from Gangtok at 1,650 metres via Tsomgo Lake at 3,753 metres to Nathu La at 4,310 metres, with a conventional boundary symbol crossing the pass.GANGTOK · 1,650 mTSOMGO LAKE · 3,753 mNATHU LA · 4,310 mINDIA · SIKKIMTIBET (CHINA)NATHU LA PASS · 4,310 mSTYLISED ROUTE SHEET · NOT TO SCALEVeg momos from the army canteen at Nathu La. Easily the best I've had.