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
LOexperience.logLog● source
experience.log9 lines
* (HEAD -> massclick) Software Engineer · Apr 2026 – now* (freelance/vandizone) my own client · ongoing* (digihope) Head of Mobile · Apr 2025 – Mar 2026|   shipped: Veezzo* (syuap) Intern, Flutter then React · Jan – Jun 2024|   shipped: Vmark* (msc) M.Sc, Bishop Heber College · 2023 – 2025* (bsc) B.Sc, National College · 2020 – 2023    shipped: COS OD
⚡ hot reload
HEAD → massclickApr 2026 – 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.

digihopeApr 2025 – Mar 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
syuapJan – Jun 2024

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 · abishekmk.dev · built with Next.js on Firebase App Hosting