Same company. Different problem. Reps had to log their daily numbers — meetings booked, contracts signed, kilometers driven. The system was an Excel sheet. Most people didn't fill it in. The ones who did spent 10 minutes on it and still got it wrong. Management had no real-time visibility into anything. They'd ask for weekly reports and get back whatever people could remember. I built a replacement in a week as a side project. Then everyone started using it.
RepTrack is a PWA. Reps open it on their phone, pick their work mode — field, home, or off — enter their activity counts, and close it. That's 30 seconds on a bad day. Every activity converts to points through a weighted scoring system. Meetings are worth 2. Contracts range from 2 to 5 depending on type. The leaderboard updates in real time. Reps see where they stand. Managers filter by team and time period and see live rankings without asking anyone for a report. No more weekly emails. The numbers are always current.
"Points aren't stored anywhere. They're calculated fresh from raw activity counts every time you load the leaderboard. That sounds like extra work until you realize the scoring rules changed twice while people were already using the app. Because nothing was hardcoded, historical data recalculated automatically both times. No migration scripts. No stale numbers. No angry reps wondering why their score from last month looks wrong. The right way to build this was to never store derived data in the first place."
Strict Google OAuth flow checks domain allowlists. Role-based middleware ensures field reps and office coordinators access the correct reporting endpoints.
Submitting a report triggers a conflict-aware PostgreSQL upsert. Points are strictly a computed derivative of raw activity, maintaining a single source of truth.
Parallel execution paths push relevant lead statuses to an external Google Sheet using stored refresh tokens via the Google API.
React components map raw data into heatmap grids, 30-day trend lines, and tie-aware rank leaderboards instantly.
Field reps work on phones. That's the only requirement that matters. Building a native app for an internal tool means App Store approvals, release cycles, and maintenance overhead nobody needs. A PWA installs from the browser, works offline-capable, and ships like a website.
The team already had lead data in Google Sheets. That habit wasn't going away. Fighting it would mean a migration nobody wanted and a tool nobody trusted. So I plugged into their existing sheets instead. Reps manage leads from the app. Data writes back to the spreadsheet they already knew.
Points aren't saved anywhere — they're computed from raw activity counts every time they're needed. Storing derived values is a trap: the moment the scoring rules change, your historical data is wrong. The rules did change, twice. Because points are always recalculated on the fly, every change applied retroactively with zero effort.
Internal tool. Company emails only. Google OAuth with an email-domain allowlist means no password management, no reset flow, no account security headaches. Someone leaves the company — access stops working the moment IT revokes their account.