Skip to content

// Case study

QPAS

Part of the Quality Installs suite, built on the same data model as QPIMS.

INP on the transactions table

from380 msto48 ms

Client
Quality Installs Co.
Year
2025
Role
Lead software engineer
Kind
Platform
A laptop and phone showing a dark analytics dashboard with an orange revenue chart

01

The problem

QPAS sits next to QPIMS in the Quality Installs suite, and its transactions table is where the office spends most of the day. With thousands of rows, every filter or sort froze the screen for a moment, long enough for people to click twice.

02

The approach

  • Built on the same data model as QPIMS, so a job and its transactions are one record, not two systems kept in sync.
  • Heavy totals worked out ahead of time and cached in Redis, so the table never adds up thousands of rows while someone waits.
  • Only the rows on screen are drawn, and filters update the list without blocking the next click.

03

The result

Interaction to next paint on the transactions table dropped from 380 ms to 48 ms. Filtering now feels instant, and the double clicks stopped.

The table answers before you notice you were waiting.

Built with

  • Next.js
  • TypeScript
  • Supabase
  • Redis
Next caseAPI · FreelancePDP Enrichment EngineAn API that fills product detail pages with clean, complete data from messy sources.

// Start a project

Tell me what you are building.

Three quick picks so the first reply is useful. You finish the message on the contact page.

01What do you need?
02Rough budget

brief.ts

draft, not sent

export const brief = {

kind: null, // not picked yet

budget: null, // not picked yet

name: null, // not typed yet

}

or write to hello@bokoisaac.com

Nothing is sent from this page. Your picks are kept in this browser tab and wait for you on the contact form.