// 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

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