abishek / README.md
MDREADME.mdMarkdown● source
README.md10 lines
# M.K. Abishek> Software Engineer · Massclick · TiruchirappalliI build the **app**, the **API**, and the **server** it runs on.![commits](1,557) ![s3](33,096/33,096) ![cutover](~90s)- Flutter · Node.js · MongoDB · React · AWS- Syuap → Digihope → Massclick, plus VandiZone- open to work: full-time or freelance
⚡ hot reload

// hello, world

M.K. Abishek

I build the app, the API, and the server it runs on.

Software engineer in Tiruchirappalli. I interned at Syuap, led mobile at Digihope for a year, build VandiZone for my own client, and since April 2026 work on every layer of Massclick.

commits1,557s3 re-key33,096 / 33,096db cutover~90 sappv2.1.1geo coverage89.3%

Open to work · full-time or freelance

DAwork / vandizone.dartDart● source
work/vandizone.dart11 lines
// VandiZone · my own client · Flutter + Firebase// (a sketch of the idea, not production code)final trip = FirebaseFirestore.instance    .collection('bookings').doc(bookingId);// the customer app and the captain app share one live doctrip.snapshots().listen((t) {  map.animateCamera(t.captainLocation); // live tracking  notify(t.status);                     // FCM on every change});
⚡ hot reload
Freelance · Flutter + FirebaseMy own client project

VandiZone

Two apps I build directly with my client: a Customer Booking app and a Captain/Owner app, kept in sync in real time.

  • Real-time bookings with Firebase Realtime Database and Firestore
  • Google Maps live vehicle tracking, route navigation and trip history
  • Phone/email login, and push notifications for every trip update
FlutterFirebaseFirestoreGoogle MapsFCM
2 appsone live booking system
DAwork / massclick_app.dartDart● source
work/massclick_app.dart9 lines
// Massclick app · v2.1.1 · Android + iOS · EN + தfinal leads = ref.watch(leadsProvider);        // Riverpodsocket.on('lead:analytics:update', (_) {  ref.invalidate(leadsProvider);               // live lead alerts});// OTP auto-fill · App Links · FCM lead channel
⚡ hot reload
Massclick · Mobile

Massclick App

I built the Massclick Flutter app from its very first commit to v2.1.1 on Android and iOS, in English and Tamil.

  • Riverpod state, go_router navigation, cached feeds that refresh in the background
  • A map with a draggable results sheet, a leads dashboard and the Spotlight feed
  • Web-to-mobile parity audit: ~25 fixes and features shipped from 20 features checked
FlutterRiverpodgo_routerSocket.IOFCM
263 / 264commits in the app repo are mine
SHwork / mongo-move.shShell Script● source
work/mongo-move.sh9 lines
# The Database Move · production cutovernode db-backups/backup.js --label pre-cutover --prod# stop both app replicas together, final sync, repoint the URLdocker compose up -d --no-deps# nightly dumps on the new box, pulled off-box at 03:30# verified byte-for-byte with sha256sum
⚡ hot reload
Massclick · Infra

The Database Move

I moved every Massclick database onto a dedicated MongoDB server, then set up backups and monitoring that followed it there.

  • Snapshots with checksums before every change, and a tested restore path
  • Nightly backups, plus an off-box copy pulled by the app server
  • Monitoring and exporters repointed so the dashboards measure the real database
MongoDBLinuxDockerPrometheusGrafana
~90 sof production downtime at cutover
JSwork / s3-rekey.jsJavaScript● source
work/s3-rekey.js7 lines
// 36,187 files, zero lost · AWS S3await plan();                  // every object mapped to an ownerawait copy({ commit: true });  // 33,096 / 33,096 · failed = 0await verifyS3();              // sizes match, old keys still there// lintS3Paths.js: 51 call sites migrated, 0 hardcoded URLs left
⚡ hot reload
Massclick · Cloud

36,187 Files, Zero Lost

I re-keyed every object in the Massclick S3 bucket to a clean, owner-based structure, with the database updated to match.

  • Plan, copy, verify, resume and rollback commands, all dry-run first
  • A lint gate so no code can write to the old paths again
  • Nothing deleted: old keys kept until the new ones were verified
AWS S3Node.jsMongoDB
33,096 / 33,096objects copied, 0 failed
JSwork / mobile-lcp.jsxJavaScript React● source
work/mobile-lcp.jsx7 lines
// Fast on a budget phone · React + Express SSRconst AddBusinessModal = lazy(() => import('./AddBusinessModal'));const ShareSheet       = lazy(() => import('./ShareSheet'));// the server paints the hero before React bootsres.send(businessRouteShell(business));  // LCP before JS
⚡ hot reload
Massclick · Web

Fast on a Budget Phone

Search Console flagged mobile business pages as slow. I measured why, then made the hero appear before any JavaScript runs.

  • Server-rendered business hero with a preloaded photo
  • Login popup and share sheet load only when someone needs them
  • Nearly halved the business-page JavaScript bundle
ReactExpress SSRCore Web Vitals
173 → 92 KBbusiness-page bundle, brotli
JSwork / crawl-trap.jsJavaScript● source
work/crawl-trap.js8 lines
// The crawl trap · Express SSR middlewareif (isJunkPath(req.path)) {  return res.status(410).end();   // Gone, for good}// emitted links now pass through slugify, every $regex is escaped// alert rule rewritten so 410s no longer page anyone
⚡ hot reload
Massclick · Ops

The Crawl Trap

Googlebot was generating ever-longer junk URLs from one bad link, and the database CPU alert kept firing. I found the generator and closed it.

  • Fixed the URL generator and escaped every regex built from a path
  • Junk and unknown-category URLs now return 410 Gone
  • Rewrote the Grafana error-rate rule, which had a logic bug hiding real errors
ExpressGrafanaSearch Console
6–7% → ~0.1%non-410 client error rate
JSwork / otp-abuse.jsJavaScript● source
work/otp-abuse.js12 lines
// SMS pumping · Massclick sign-in// 1. stop the bleeding at the edge (backup first, rollback ready)// 2. know who is really callingconst ip = clientIp(req);          // proxy-aware, right to left// 3. caps per number and per day, plus a verify lockoutif (await abuseGuard.blocks(ip, mobile)) {  return decoy(res);               // looks sent. nothing sent.}await sendOtp(mobile);             // real people only
⚡ hot reload
Massclick · Security

The SMS Pump

Someone was firing sign-in codes at our login endpoint to farm the SMS payout, and every message was billed to us. I cut it off, then rebuilt the defence so the attack pays nothing.

  • Blocked at the edge within minutes of detection, with the config backed up and the rollback ready
  • Rebuilt the defence: true client IP behind the proxy, caps per number and per day, a lockout after repeated failures, and the old unused routes retired
  • Attack traffic now meets a decoy that answers like success and sends no SMS; real sign-ins were back on the same day
  • Reconciled the provider’s full export against the bill to get the real figures, correcting a first count that read six times too high
nginxNode.jsExpressRate limitingIncident response
₹1,882 → ₹0what the attack costs us now
LOexperience.logLog● source
experience.log9 lines
* (HEAD -> massclick) Software Engineer · 2026 – now* (freelance/vandizone) my own client · ongoing* (digihope) Head of Mobile · 2025 – 2026|   shipped: Veezzo* (syuap) Intern, Flutter then React · 2024|   shipped: Vmark* (msc) M.Sc, Bishop Heber College · 2023 – 2025* (bsc) B.Sc, National College · 2020 – 2023    shipped: COS OD
⚡ hot reload
HEAD → massclick2026 – now

Massclick

Software Engineer

A local-search platform for Tamil Nadu. The Flutter app, the Node and MongoDB API, the React web and its SEO, and the servers underneath.

freelance/vandizoneongoing

VandiZone

Freelance · my own client

Customer and captain apps in Flutter and Firebase, built directly with the client.

digihope2025 – 2026

Digihope Technologies

Head of Mobile App Development · 1 year

Led the Flutter apps for Android and iOS: architecture, state management, every Play Console, App Store and TestFlight release. Cut crash rates and mentored junior developers.

Veezzo · food delivery on AWS Lambda + S3
syuap2024

Syuap Tech Solution

Intern · 6 months, during my M.Sc

Three months building Flutter mobile apps, then three months on React, in Agile sprints on live apps.

Vmark · multi-seller e-commerce, React + Express
msc2023 – 2025

M.Sc, Bishop Heber College

Tiruchirappalli · GPA 8.6

Second prize in an aptitude test competition.

bsc2020 – 2023

B.Sc, National College

Tiruchirappalli · GPA 8.4

Organised Naco Tech 2022 and coordinated its Python quiz.

COS OD · my own attendance app, Flutter + Laravel
JSstack.jsonJSON● source
stack.json8 lines
{  "mobile":  ["Flutter", "Dart", "Riverpod"],  "web":     ["React", "Next.js"],  "backend": ["Node.js", "Express", "MongoDB", "Redis", "Socket.IO"],  "cloud":   ["Firebase", "AWS", "Docker", "nginx", "GitHub Actions"],  "watch":   ["Grafana", "Prometheus"],  "also":    ["Laravel", "Python"]}
⚡ hot reload

"mobile"

Fl
FlutterAndroid · iOS
Dt
Dartlanguage
Rp
Riverpodstate

"web"

Re
ReactMassclick web · Vmark
Nx
Next.jsthis site · Daybook

"backend"

No
Node.jsMassclick API
Ex
ExpressREST + SSR
Mg
MongoDBsearch, geo
Rd
Rediscache
Io
Socket.IOlive leads, chat

"cloud"

Fb
FirebaseVandiZone, Daybook
Aw
AWSS3 · Lambda
Dk
DockerAPI replicas
Ng
nginxedge
GA
GitHub ActionsCI/CD

"watch"

Gf
Grafanaalerts
Pr
Prometheusmetrics

"also"

Lv
LaravelCOS OD
Py
Pythondeck generators
YMship.ymlYAML● source
ship.yml9 lines
name: how-i-shipon: [your-idea]jobs:  brief:  { run: "what it does, who uses it, what done means" }  build:  { needs: brief, run: "small commits you can see daily" }  test:   { needs: build, run: "real devices, real data" }  ship:   { needs: test,  run: "stores or servers, rollback ready" }  watch:  { needs: ship,  run: "alerts, crash reports, fixes" }
⚡ hot reload
how-i-ship · on: your-ideaqueued

brief

What it does, who uses it, what "done" means.

—

build

Small commits you can see every day.

—

test

On real devices and real data.

—

ship

Play Store, App Store or a server, with a rollback ready.

—

watch

Alerts, crash reports and fixes after launch.

—
SHcontact.shShell Script● source
contact.sh7 lines
#!/usr/bin/env bash# say hello · I reply within a day./contact.sh \  --to    "abishek.mk.01@gmail.com" \  --type  "mobile app" \  --about "what you're building"
⚡ hot reload

Got an idea? Let's ship it.

An app, an API, a platform that has to stay up, or a full-time role. Tell me what you're building.

-- EOF · abishek.wiozen.in · built with Next.js on Firebase App Hosting