PL
← All projects

In production · 2026

Sales Ops PWA

A PWA that replaced spreadsheets in the sales-meeting cycle of a direct-sales company.

  • Business apps
“Today” screen: progress on own meetings and today's meeting with a close button
Monthly calendar with meeting days marked and the selected day's meetings
Weekly statistics: attendance, effectiveness, own-meetings goal and breakdown by status

A private PWA for a direct-sales company. It runs the whole sales-meeting cycle — from booking by the call centre, through the field rep's visit, to statistics for management — and the whole team uses it every day.

Problem

Meetings were booked and reported in shared spreadsheets. Statuses drifted apart, field reps had no convenient access from their phones, and management calculated effectiveness by hand.

Solution

An app with four roles — telemarketer, coordinator, sales rep and director — that works on a phone like a native app, with push and email notifications. Attendance and effectiveness statistics calculate themselves, and all business logic lives in one package that the apps cannot bypass.

  1. Telemarketer books a meeting
  2. Coordinator assigns a rep
  3. Field rep sets the status
  4. Statistics: attendance and effectiveness
The sales-meeting cycle
roles with separate permissions
4
sliding session with a device list
48 h
database migrations, additive only
24

Architecture

A monorepo with three parts: the web app (Next.js), a worker for notifications and scheduled jobs, and a core package with the data model and business logic. An ESLint rule blocks database access outside core, so every operation goes through the same validation. Production runs on Docker Compose behind Caddy, with backups and a safe-deployment runbook.

Security

  • An append-only sign-in journal protected by a database trigger
  • Logins in the journal stored only as HMACs
  • A lockout after failed sign-in attempts that survives server restarts
  • 48-hour sliding sessions with the option to sign out selected devices