Skip to content
Aashish Dhiman
SDE · Blitz · Bangalore, India

Aashish Dhiman

Software engineer building for mobile and the web, end to end. Flutter and Dart on mobile, Java and Spring Boot on the backend, React and Next.js on the web — currently pointed at supply chain and logistics.

01About

What I do now

IbuildappsandwebproductsendtoendFlutterandDartonmobile,JavaandSpringBootonthebackend,ReactandNext.jsontheweb.Rightnowthatmeanssupplychainandlogistics,whereadroppedstatetransitionstrandsarealdriveratarealwarehouse.

Right now that plays out in supply chain and logistics at Blitz, which is a good place to learn: state machines with real-world consequences, operations teams who tell you immediately when something is wrong, and no room for a flow that only works on the happy path.

Before this I built job boards, e-commerce, and an AI stock analysis platform across four internships — which is where most of my web and product instincts came from.

Outside of shipping, most of my curiosity goes into two things: algorithms — 600+ problems across the judges, which is where I learned to actually reason about a solution before typing it — and pulling apart products I admire to work out how they are built. A fair number of the projects below started as exactly that.

CurrentlySDE, BlitzBigShort Tails Pvt Ltd
Based inBangalore, IndiaIST · UTC+5:30
MobileFlutter · Dart · BLoCProduction apps, 99%+ crash-free
BackendJava · Spring BootServices, APIs and contracts
WebReact · Next.js · TypeScriptProducts and internal tooling
EducationB.Tech, Computer ScienceGautam Buddha University · CGPA 9.24
02Experience

Five roles, one direction.

01

Blitz

BigShort Tails Pvt Ltd

current

Software Development Engineer 1

Jun 2025Present

Bangalore, India

Own the driver app end to end — the Flutter client, the Spring Boot services it talks to, and the release pipeline that ships it.

  • Built the driver app from scratch on BLoC, architecting first-mile and mid-mile pickup & drop flows around a workflow-oriented design: the UI consumes configurable workflow definitions instead of hardcoded logic, so a new operational flow is a config change rather than a release.
  • Built a plug-and-play support ticketing module that drops into any Flutter mobile or web app as a standalone package — integration went from days to hours, and in-app reporting made ground issues visible for the first time.
  • Extended internal Java (Spring Boot) services powering tracking and first-mile/mid-mile flows, building and refining the exact APIs the driver app consumes so features land end to end rather than stalling at a contract boundary.
  • Led the migration of the internal panel from JavaScript to TypeScript and implemented Google Sign-In across client-facing and internal panels, cutting production crashes and unblocking support tooling.
  • Set up CI/CD and integrated Shorebird OTA updates, automating 95% of build and distribution and turning releases from an event into a routine.
99%+crash-free sessions
95%release pipeline automated
<8hto integrate ticketing
FlutterDartJavaSpring BootNext.jsTypeScript
02

Blitz

BigShort Tails Pvt Ltd

Software Engineer Intern

Nov 2024May 2025

Bangalore, India

Joined on rider operations tooling and shipped the workflows that ops depended on daily.

  • Revamped the Reverse QC workflow for return tasks, cutting manual effort and processing time per task while measurably improving SLA compliance.
  • Integrated Google Maps for lat/lng capture on the tracking page, improving on-ground delivery accuracy by roughly 25%.
  • Integrated HyperVerge for real-time KYC document verification — rider onboarding got 50% faster at 95%+ identity-verification accuracy, removing most manual verification overhead.
50%faster rider onboarding
95%+KYC verification accuracy
~25%delivery accuracy gain
FlutterReactNext.jsTypeScript
03

TribeLink

Frontend Engineer Intern

Sep 2024Nov 2024

Remote

Stood up the frontend architecture for a creator gifting platform from an empty repo.

  • Designed and implemented a scalable frontend architecture from scratch, translating Figma into pixel-accurate, responsive UI.
  • Worked directly with design and product to land features cleanly, tuning the experience around how creators actually use the product.
Next.jsTypeScriptReact QueryTailwind CSSshadcn/ui
04

Go Careers

SDE Intern

Apr 2024Jul 2024

Remote

Built and scaled a job board aggregating listings from multiple sources, then moved it onto Next.js.

  • Constructed a job board platform aggregating listings across sources, lifting engagement metrics 40% and boosting ad revenue 20% via Google Ads integration.
  • Led the React.js → Next.js migration: 30% better performance, 50% lower load times through SSR, comfortably serving 100k+ monthly traffic.
  • Improved SEO with Open Graph metadata and shipped an admin panel plus a blog section for content operations.
100k+monthly traffic served
50%load time reduction
40%engagement lift
Next.jsTypeScriptReact QueryTailwind CSS
05

Epoch

US-based

Full Stack Engineer Intern

Jan 2024Apr 2024

Remote

Built an AI-powered stock analysis platform with a live dashboard and an integrated chatbot.

  • Engineered the stock analysis platform end to end — real-time dashboard over WebSocket plus an integrated analysis chatbot.
  • Implemented backend API-key management for chatbot access, making key rotation and access control a single safe operation across all requests.
  • Migrated the codebase from the pages router to the app router, optimising the UI and leading a cross-functional team of three.
3engineers led on migration
Next.jsTypeScriptTailwind CSSPythonWebSocket
03Selected work

A few things I built, and why they are shaped that way.

The decisions matter more than the feature list, so that is what these are about.

01Blitz2025 — present

First & mid-mile driver app

Moving shipments from origin to the hub nearest the customer

Built from an empty Flutter project to the app every Blitz driver opens at the start of a shift — the one that runs first-mile pickup from the seller and mid-mile transfer onward to the hub closest to the end customer.

The problem

First-mile and mid-mile logistics flows are not one flow. Pickup differs from drop, mid-mile differs from first-mile, and every client onboarding bends the sequence a little further. Hardcoding each variant meant a new screen, a new state, and a new release for what operations correctly saw as a small change — and every fork multiplied the surface area where a rider could get stranded mid-task.

Approach
  • 01Modelled each operational flow as a workflow definition — an ordered set of steps with their inputs, validations and transitions — served from the backend rather than compiled into the app.
  • 02Made the UI a renderer over that definition. A screen asks the workflow what step it is on and what that step needs; it does not know whether it is a first-mile pickup or a mid-mile drop.
  • 03Drove all of it through BLoC, so every transition is an explicit event → state pair that can be replayed, logged and tested without a device in hand.
  • 04Extended the Spring Boot services on the other side of the wire so the definitions, the tracking events and the app's expectations were designed as one contract instead of two.
Architecture
runtime calldefinition / config
Decisions

Workflow definitions over branch logic

The expensive part of logistics software is not any single flow — it is the tenth variant of it. Pushing the sequence into data means a new variant is a definition change, not a release, and the app's complexity stops tracking the number of clients.

BLoC over lighter state management

A rider mid-task is a state machine with real-world consequences. BLoC's explicit event/state separation makes illegal transitions visible in code review rather than in a support ticket, and it keeps the flow testable in isolation from the UI.

Own both sides of the contract

Building the Spring Boot endpoints alongside the client removed the usual round-trip where the API almost fits and the app compensates. Features shipped end to end instead of stalling at the boundary.

99%+Crash-free sessionsin production
95%Release pipeline automatedCI/CD + Shorebird OTA

Config

not a release, for a new flow

End-to-end

shipped across app and backend

First & mid-mile

both legs in one app

FlutterDartBLoCJavaSpring Boot
02Blitz2025

Support ticketing, as a package

Drop-in, not build-in

A standalone Flutter package that gives any app — mobile or web — a working support surface in an afternoon.

The problem

Every app in the estate needed the same thing: let a user raise an issue, attach context, and let support see it. Every app was also going to build it slightly differently, at the cost of several days each, and produce a support inbox that could not be reasoned about across products. Meanwhile the issues happening on the ground were invisible until someone phoned them in.

Approach
  • 01Scoped the module as a package with a narrow public surface: mount it, hand it an auth token and a context object, and it owns everything behind that.
  • 02Kept the host app's design system in play through injected theming, so the module never looks bolted on despite being shared.
  • 03Made the transport pluggable so the same package works against the mobile and web deployments without forks.
  • 04Captured device and task context automatically with each ticket, so a report arrives already diagnosable instead of starting a conversation.
Architecture
runtime calldefinition / config
Decisions

A package, not a shared screen

Copy-pasted screens drift within a quarter. A versioned package means one implementation improves for every consumer, and a consumer upgrading is a dependency bump rather than a merge conflict.

Context capture by default

The difference between a useful ticket and a useless one is almost never the user's description — it is the surrounding state. Attaching it automatically moved most tickets from 'needs a follow-up' to 'actionable on arrival'.

<8hTo integratedown from several days

Any Flutter app

mobile or web, one package

In-app

ground-issue visibility, first time

FlutterDartPackage designREST
03Personal2024

Jobify

A job board that writes its own listings

A full job board — posting, admin, search — where the most tedious part of creating a listing is handled by a model.

The problem

Job boards die on supply. The friction is not the platform, it is that writing a good job description is a twenty-minute task nobody wants, so listings arrive thin or not at all — and thin listings are exactly the ones candidates skip.

Approach
  • 01Built the data layer on Prisma over PostgreSQL with server actions, so mutations stay on the server and the client ships less.
  • 02Generated descriptions with Google Gemini from a handful of structured fields — role, level, stack, location — turning a blank page into an editable draft.
  • 03Shipped an admin panel for moderation and lifecycle management, because a board without curation becomes a spam surface within a week.
Architecture
runtime calldefinition / config
Decisions

Generation as a draft, never as the answer

The model produces a starting point the poster edits. Treating output as final would have traded a thin-listing problem for a generic-listing problem.

Server actions over an API layer

For a single-consumer app, a REST layer is ceremony. Server actions kept mutations colocated with the code that needed them and cut a whole class of client-side state.

50%Less time per job postwith generated drafts

Full stack

board, admin and generation

Server actions

no separate API layer

Next.jsTypeScriptPrismaPostgreSQLGeminishadcn/ui
04Personal2023

BuzzBuy

A storefront that stays responsive on a bad connection

A full MERN e-commerce platform — catalog, cart, checkout, order history and an admin dashboard — built end to end.

The problem

Every cart interaction on a naive implementation is a round trip: tap add, wait, watch a spinner, see the count change. On a slow Indian mobile connection that is a second of dead air per tap, and users stop trusting that the button worked — so they tap again, and now the cart is wrong as well as slow.

Approach
  • 01Applied cart mutations optimistically: the UI commits the change immediately and reconciles with the server response, rolling back only if the request actually fails.
  • 02Centralised cart and auth state in Context API so every surface reads one source of truth rather than refetching independently.
  • 03Moved image delivery to Cloudinary so product media is served resized and cached rather than shipped full-size from the app server.
  • 04Secured the transactional path properly — JWT sessions, bcrypt-hashed passwords, and Stripe holding card data so the application never touches it.
Architecture
runtime calldefinition / config
Decisions

Optimistic updates over spinners

Perceived performance is the product here. Committing locally and reconciling turns a one-second wait into an instant response, and the rollback path is far less code than the loading states it replaces.

Stripe owns the card, always

Payment data never reaching my server is a decision that removes an entire category of liability rather than mitigating it. The same logic drove bcrypt for passwords and Cloudinary for uploads: hand the risky asset to the system built for it.

Context API over Redux

The state here is a cart, a user and a product list. Redux would have added a store, actions and middleware to manage three things that React already manages, and the boilerplate would have outweighed the structure it bought.

4000+API requests / monthserved in production
30%Faster load timesafter state consolidation

Optimistic

cart, no spinner on tap

PCI-free

card data never hits the server

Admin panel

full product lifecycle

ReactNode.jsExpressMongoDBStripeCloudinary
04Capabilities

What I reach for.

Ordered by how much I actually lean on each one, with what it was used to build where that is worth saying.

Mobile

05

Production Flutter, shipped to riders on the ground.

  • FlutterDriver app, 99%+ crash-free
  • DartPrimary language day to day
  • BLoCState machine for pickup/drop flows
  • Shorebird OTA95% of releases automated
  • Firebase

Backend

07

Services and contracts behind the apps I build.

  • REST API designOwned both sides of the wire
  • JavaInternal tracking services
  • Spring BootFirst-mile / mid-mile APIs
  • PostgreSQL
  • MySQL
  • Node.js
  • Express

Web

07

Internal panels and client-facing products.

  • TypeScriptLed a full JS → TS migration
  • React
  • Next.jsSSR migration, 100k+ monthly traffic
  • Tailwind CSS
  • React Query
  • shadcn/ui
  • Redux

Foundations

06

The part that does not change when the framework does.

  • Data structures & algorithms600+ problems solved
  • OOP & design
  • Operating systems
  • DBMS
  • Computer networks
  • C++

Delivery

05

Getting it to production and keeping it there.

  • Git
  • CI/CDAutomated build + distribution
  • Package/module designPlug-and-play ticketing module
  • Observability & crash triage
  • AWSDeployment and cloud services
05Contact

Let’s build something worth maintaining.

Open to interesting problems — especially the ones at the boundary between mobile, backend and the people who have to operate the thing. Happy to talk even if there is nothing concrete on the table.

1400

Opens a pre-filled draft in your mail app.