Skip to content
Sayam Jain
CV

FixPoint Drive

Vehicle ownership, made simpler.

A live app that keeps every vehicle in a household in one place: its documents, what's due next and what to do about it.

Role
Frontend, server layer and the Docker build
Team
Mohit Sharma (founder), Sahil Singhai Jain (backend), me
sahilsinghai.com
When
September 2026 to now
Status
Live, launching in Bhopal
Sheet
01 of 05
  • 1 day

    from the first commit to the full MVP frontend

  • 6 days

    to the first production release

  • 425

    of the frontend's 437 commits in its first month are mine

  • 148

    test files, with Playwright end to end tests on top

Overview

People buying their first vehicle in India get a stack of paperwork nobody explains: the RC, insurance, PUC, service dates and challans. It usually ends up split across the glove box, the phone gallery and email.

FixPoint Drive puts every vehicle in a household in one place, with its documents and what's due next. FixPoint is Mohit Sharma's company; we rebuilt the product from scratch in September 2026. The full MVP frontend landed the day after the first commit, and the first version reached production six days in.

What I built

  • Frontend

    • The whole Next.js 16 app: the public website (features, pricing, partners, FAQ and more), sign up and onboarding, vehicles, documents, reminders, cost calculators, partner tools for service centres, driver accounts and an SOS page.
    • Four themes, including Simple, with larger text and 56px controls for older family members.
    • API calls typed from the backend's OpenAPI schema, with server data kept in TanStack Query.
  • Server layer

    • Next.js route handlers between the browser and the Django API: sign in by email, an emailed code or Google, and sessions kept in HttpOnly cookies.
    • One refresh path for Django's rotating refresh tokens, and a proxy that forwards each visitor's IP so rate limits count people, not the server.
    • Document files and streamed AI chat responses served through the same layer.
  • Delivery

    • A standalone Next.js server in a Docker image, shipped by its own GitHub Actions pipeline, set up by Sahil, independent of the backend.
    • Release time cut from about 32 minutes to about 10, by fixing a stalled build cache and moving the long end to end suite off the release path.
    • Feature flags and a capability registry, so each feature switches on in production as soon as its API is ready.
  • Quality

    • Vitest unit tests, and Playwright end to end and accessibility tests on mobile and desktop.
  • Working as two

    • A written list of API asks for Sahil, now past 120 items, most with a “done when” line.

How it works

  1. Browser
  2. Next.js route handlerssessions in HttpOnly cookies
  3. Django APIby Sahil
Fig. 1 How a request travels

The browser talks only to Next.js route handlers, which keep the session in HttpOnly cookies and forward each request to the Django API.

Key decisions

  1. D-01

    Build the screens ahead of the API

    The frontend is built ahead of the backend. Anything whose API isn't ready yet shows “Coming soon”, so every record a user sees is real.

    In Fig. 1:BrowserDjango API

  2. D-02

    Work document status out from expiry dates

    The app computes each document's status (expired, due soon, active) from its expiry date, and every due date shows where it came from.

    In Fig. 1:Browser

  3. D-03

    Treat dates read from a document as suggestions

    When a document is uploaded, its dates are read and shown with a “Use this date” button. Nothing is saved until the owner confirms, and nothing is labelled verified.

    In Fig. 1:Browser

  4. D-04

    Say “All good” only when every date is known

    A vehicle shows “All good” once its insurance, PUC (not for electric vehicles) and service dates are known and none is due. Otherwise it lists exactly what's missing.

    In Fig. 1:Browser

  5. D-05

    Keep tokens out of the browser

    The browser never holds a JWT. Route handlers keep the session in HttpOnly cookies, and every refresh goes through one function because Django rotates refresh tokens.

    In Fig. 1:BrowserNext.js route handlersDjango API

  6. D-06

    Ship as soon as the core works

    Features go live behind flags as soon as their core works, and the remaining API work is tracked openly on the asks list.

What's live

  • Sign in by email, an emailed code or Google
  • Vehicles, with make and model suggestions
  • A document vault, with dates read from uploads
  • What's due next, for every vehicle
  • 51 cost calculators
  • Driver accounts, service booking and partner tools
  • Four themes, including Simple

Why the design keeps changing

On 25 October we started the design of the app's signed in screens again from nothing.

We change the design on purpose. Each round teaches us more about who the app is for and what the brand should feel like, and we keep going until we look at it and say: this is the one.

Stack

  • Frontend

    Next.js 16 / React 19 / TypeScript / Tailwind CSS 4 / TanStack Query

  • Server layer

    Next.js route handlers / HttpOnly cookie sessions / OpenAPI types

  • Testing

    Vitest / Playwright

  • Delivery

    Docker / GitHub Actions

  • Backend (Sahil)

    Django REST Framework

Want to talk through FixPoint Drive, or build something like it?