RJ DowellPERSONAL PORTFOLIO
← All projects

PROFESSIONAL WORK · Reporting & operations

Calling performance dashboard

Combines two calling systems into one team view and scheduled daily and weekly summaries, showing talk time as a range when exact timing isn’t available.

BuiltProduction · initial rolloutDocumented October 16, 2026

1 dayinitial build · Oct 16, 2026 record

My contribution

Built and deployed the initial dashboard, then refined custom windows, talk-time uncertainty, exports, and audit details.

Tools
Python · FastAPI · HTML/CSS/JavaScript · JustCall APIs

How it works

Calling performance workflow
  1. InputTwo call sourcesRegular calls and dialer calls come from separate endpoints
  2. StepDeduplicateBy shared call ID, not by phone number or timestamp
  3. StepApply the reporting windowCalls that cross the edge get a minimum–maximum range
  4. CheckCompleteness checkEvery source must return before a new result is used

    Source failure → last good result, labeled

  5. StepTeam & user totalsMatched to the roster by stable user ID
  6. OutputDashboard, CSV & scheduled emailsSame data in the live view and the daily and weekly summaries

Decisions that mattered

Two endpoints are required

Dialer calls are not included in the regular call list. Cross-source deduplication uses a shared call identifier when present, not similar phone numbers or timestamps.

Talk time isn’t total call length

Verified conversation time is kept apart from calculated minimum/maximum ranges for calls that cross the edge of a window. When connection timing is missing, the dashboard shows a range instead of a guess.

Never publish a partial refresh

If a source fails, the new result is held back. The last good result can still be shown, with a visible fallback label.

Reuse expensive reads

A short per-range cache and shared in-flight request handling reduce duplicate API work. Users are matched by stable ID rather than display name.

Results

The October 16, 2026 record documents a one-day initial build, verification against production data, rollout to leadership, and follow-up changes to how uncertainty and audit details are shown.

Scope & limits

The initial release wasn’t load tested; long date ranges and many concurrent viewers are known performance limits.

Related projects

Next projectOperational chat