Massclick
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.
# M.K. Abishek> Software Engineer · Massclick · TiruchirappalliI build the **app**, the **API**, and the **server** it runs on.  - Flutter · Node.js · MongoDB · React · AWS- Syuap → Digihope → Massclick, plus VandiZone- open to work: full-time or freelance
// hello, world
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.
Open to work · full-time or freelance
// 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});
Two apps I build directly with my client: a Customer Booking app and a Captain/Owner app, kept in sync in real time.
// 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
I built the Massclick Flutter app from its very first commit to v2.1.1 on Android and iOS, in English and Tamil.
// Search & Geo · Massclick APIconst category = resolveCategoryIntent(term); // intent firstconst results = await Business.aggregate([ { $match: { $text: { $search: term }, ...near(city) } }, { $sort: { distance: 1, score: -1 } },]);// too few results? widen to nearby pincodes, then the district
The search engine behind every Massclick query: category intent, text score and distance ranking over a location graph of about 18,000 places.
# 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
I moved every Massclick database onto a dedicated MongoDB server, then set up backups and monitoring that followed it there.
// 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
I re-keyed every object in the Massclick S3 bucket to a clean, owner-based structure, with the database updated to match.
// 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
Search Console flagged mobile business pages as slow. I measured why, then made the hero appear before any JavaScript runs.
// 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
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.
* (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
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.
Customer and captain apps in Flutter and Firebase, built directly with the client.
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.
Three months building Flutter mobile apps, then three months on React, in Agile sprints on live apps.
Second prize in an aptitude test competition.
Organised Naco Tech 2022 and coordinated its Python quiz.
{ "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"]}
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" }
What it does, who uses it, what "done" means.
Small commits you can see every day.
On real devices and real data.
Play Store, App Store or a server, with a rollback ready.
Alerts, crash reports and fixes after launch.
#!/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"
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