Ascendly — Development progress report
Audience: Leadership / product stakeholders
Last updated: July 15, 2026
This is a summary status document. Detailed technical specs live in the linked docs under Documentation index.
Executive summary
| Area | Status |
|---|---|
| Scorecard operations (7 submission pages + task delivery) | Complete — CRUD, filters, export, audit logs, month-lock UX, bulk Excel upload (ATW/SBS/Non-SBS/Additional Points/Incidents), SBS duplicate-as-new-entry, similar entry warning on form Save and upload preview (five main entry types), soft delete + recycle bin, Additional Points, Incidents |
| Scorecard configuration | Complete — per-cycle eval quotas, BSC metrics, goals, SBS rubric, schedule day codes, global brands list |
| BSC fiscal cycles (2025 / 2026) | Complete — versioned config per fiscal cycle |
| Organization | Complete — chart (by section + full company), list, department tasks, schedules |
| Employee schedules | Complete — monthly grid, day codes, working_days, wired into BSC attendance + task delivery |
| Employees admin | Complete — directory, edit, access levels |
| Dashboard / BSC rollups | Live — five dashboard pages (incl. Bonus qualification matrix); Mongo + optional BigQuery; sync, finalize, reopen; BSC + bonus eligibility filters; bonus qualification badge, filter, export, manager matrix; performance comparison (multi-site / level 5) |
| Learning (Learn) | L0 in progress — modules, player, author studio; plan |
| Assistant / MCP / AI bot | Planned — Assistant/MCP plan (separate track) |
| Desktop app | Phase 2 — BSC Home, notifications, My ATW, system tray, activity heartbeat, offline banner; installer + auto-update deferred |
| Platform admin | Live — system status, admin email compose, permissions matrix, welcome email, auth domain allowlist, activity tracking (web/desktop split), maintenance mode |
Recent milestones (July 2026):
- Bonus qualification dashboard (July 15) — Manager matrix at
/dashboard/bsc-bonus: Goal threshold + remark, six gate columns, Total BSC / KPMs, SBS tenure; sticky employee/qualification columns; sortable headers (default Total BSC high→low); Excel export. Guide: Bonus qualification, Dashboard overview. - Similar entry warning (July 14) — Advisory duplicate check on form Save and bulk upload preview for SBS, Non-SBS, ATW, Attendance, and Productivity (same similarity keys; never blocks submit/commit). Upload commit skips the check for speed. Guide: Scorecard § Similar entry warning.
- Task delivery UX & scoring (July 11) — Today without an entry is pending (excluded from month average / BSC KPI until saved); past missing workdays still score as 0%. Grid highlights: amber = pending today, red = missing earlier days. Avg (to date) column tooltips explain the breakdown. Schedule day code abbreviations (VL, SL, H, OFF, etc.) shown on non-WD cells. Separate
is_task_delivery_dayflag on schedule day codes so VL/SL accept entries without counting toward attendanceworking_days. Guides: Fiscal cycles § Task delivery, Scorecard § Task Delivery, Employee schedules. - Org chart overhaul (July 7) — By section drill-down and Full company toggle; divisional layout (GM → clusters → departments → vertical staff); SME layer (access level 2) between managers and members; level-1 members sorted by hire date; leader role labels and variable compact card sizes; multi-manager units no longer duplicate manager child cards; pan/zoom explore mode for full view; text selection disabled for easier dragging. Guide: Organization.
- Production data cutover (July 3) — One-shot Mongo copy (
ascendly→ascendly-production) and scoped BigQuery BSC 2025 migration; Jul 2026 BSC backfill. Runbook:design-log/2026-07-03-staging-to-production-data-migration.md. - Maintenance mode (July 3) — Env-driven API 503 with email bypass; web
/maintenancepage andGET /v1/public/app-status. Guide: Platform & admin § Maintenance mode. - Ops: month entry purge script —
delete_scorecard_month_entries.pyfor hard-delete by occurrence month + optional BQ resync. Reference: BigQuery dashboard § One-shot month purge.
Recent milestones (June 2026):
- Platform admin (June 25) — System status (
/system), admin email compose (/system/email), permissions matrix (/permissions), employee welcome email,ALLOWED_EMAIL_DOMAINSsign-in gate, legal pages (/privacy,/terms), web/desktop activity heartbeat split, Gmail notification email delivery. Guide: Platform & admin. - ATW entry requests (June 24) — Employees submit via desktop My ATW (proof upload); managers approve/reject on web ATW page; notifications on submit/approve/reject. Guide: Scorecard § ATW entry requests, Desktop § My ATW.
- BSC async sync jobs (June 24) — Background sync/finalize with job polling; per-employee cycle refresh. Guide: Dashboard overview § BSC sync jobs.
- Notifications + desktop/web parity (June 23) — Shared inbox hooks; UTC-safe relative times; desktop Home refetch on
scorecard.*notifications; soft-deleted entries excluded from all KPI/export paths; self-view BSC always live Mongo. Guides: Notifications, Desktop app, Scorecard § Recycle bin. - Bonus qualification — Per user-month
bonus_qualifiedflag (Goal band + zero attendance + zero incidents + no red-flag No + timely weekly when cadence applies); dashboard ⭐ Bonus Qualified badge, filter, export, hover breakdown; Bonus qualification manager matrix. Guide: User-month calculation § Bonus qualification, Bonus qualification dashboard, BigQuery dashboard § Eligibility. - Incidents scorecard — NTE, IR, CAR, Coaching log entries; bulk upload; recycle bin; feeds bonus qualification (re-sync after changes). Guide: Scorecard § Incidents.
- Additional Points bulk upload — Excel template → preview → commit (parity with ATW/SBS/Non-SBS). Guide: Scorecard § Bulk upload.
- Additional Points scorecard — Managers record discretionary percentage boosts to a KPM or KPI for a month; flows into live BSC compute, BigQuery sync, and dashboard UI (+ markers and hover breakdown). Recycle bin on seven submission pages (retention: any open non-finalized month). Guide: Scorecard § Additional Points, User-month calculation § Additional points.
- Performance comparison dashboard — Compare sites, clusters, or departments across a BSC cycle; trend chart with scope benchmark, vs cycle avg column, coverage warnings, CSV export, drill-through to Monthly performance. Guide: Performance comparison.
- Evaluation coverage semantics — Data health and comparison coverage use scored / expected (gap vs not-started), so mid-cycle hires no longer inflate missing counts. Guide: Monthly performance § Data health.
- Scorecard bulk upload — Excel template → preview → commit on ATW, SBS, Non-SBS, Additional Points, and Incidents pages. Guide: Scorecard § Bulk upload.
- Bonus eligibility — Separate from BSC cycle eligibility; dashboard filters, export, and overview labels on BSC and Monthly performance pages.
- Monthly performance dashboard — full-cycle trend, remark distribution, remark table with MoM and cycle insights, data health coverage strip, KPM trend metrics, CSV export. Guide: Monthly performance.
- Target Score Report — Cycle lens — Month | Cycle toggle; Running Score, remaining-month targets, nearest achievable remark, timeline strip, Plan [month] drill to Month scope. Guide: Target Score Report.
- Monthly performance — bonus qualification views — Remark | Bonus Qualification toggles on distribution chart and table (independent per section); cycle column shows qualified-month count in BQ lens; CSV includes Employee ID.
- BSC detailed export — Employee ID column; Not Qualified Reason (failed gates only) beside Bonus Qualification.
- Goal band classification fix — API and UI use lower-bound thresholds without integer rounding (94.69 no longer misclassified as Goal when min is 95).
- Performance comparison filter independence — Comparison cycle/scope no longer overwritten when changing filters on other dashboards.
Application pages
| Page | Route | Status | Notes |
|---|---|---|---|
| Login / OAuth | /login, /auth/callback | Done | Google sign-in; domain allowlist; legal links |
| Maintenance | /maintenance | Done | Shown when API reports maintenance; login/callback exempt |
| Privacy / Terms | /privacy, /terms | Done | Public legal pages |
| Dashboard — BSC | /dashboard/bsc | Done | Month snapshot, KPI cards, eligibility, sync/finalize/reopen (level 5) |
| Dashboard — Target | /dashboard/bsc-target | Done | Month + Cycle lenses; remark ladder, what-if, multi-KPI path, running score |
| Dashboard — Performance | /dashboard/bsc-performance | Done | Full cycle: averages, trend (Total/KPM), remark/BQ distribution toggles, remark/BQ table, data health |
| Dashboard — Comparison | /dashboard/bsc-comparison | Done | Segment comparison (site/cluster/department); gated to level 5 or multi-site managers |
| Scorecard — SBS | /scorecard/sbs | Done | Cycle-aware rubric from API |
| Scorecard — Non-SBS | /scorecard/non-sbs | Done | Output review entries |
| Scorecard — ATW | /scorecard/attitude-towards-work | Done | Attitude entries |
| Scorecard — Attendance | /scorecard/attendance-issues | Done | Tardiness, absenteeism, etc. |
| Scorecard — Productivity | /scorecard/productivity-issues | Done | Call-outs, performance issues |
| Scorecard — Additional Points | /scorecard/additional-points | Done | Discretionary KPM/KPI percentage boosts; BSC + dashboard integration; bulk upload |
| Scorecard — Incidents | /scorecard/incidents | Done | NTE, IR, CAR, Coaching log; bulk upload; bonus qualification input |
| Scorecard — Task Delivery | /scorecard/task-delivery | Done | Daily counts on scheduled workdays |
| Scorecard — Missing/Excess evals | /scorecard/missing-excess-evals | Done | Evaluation gap report |
| Scorecard — Configurations | /scorecard/configurations | Done | Per-cycle quotas, metrics, goals, SBS rubric |
| Organization — Chart | /organization | Done | By section drill-down + Full company view; SME hierarchy; hire-date member sort |
| Organization — List | /organization?view=list | Done | Hierarchy list + tasks drawer |
| Organization — Schedules | /organization/schedules | Done | Monthly schedule grid |
| Employees | /employees | Done | Admin (access level gated); row selection; welcome email; nullable BSC level |
| Permissions | /permissions | Done | Access-level matrix; impersonation (level 5) |
| Learning | /learning | Baseline | Courses / assignments (/learn redirects) |
| Profile | /profile | Done | User profile + photo; PATCH preserves email/image/password; initials fallback when image fails |
| Notifications | /notifications | Done | In-app inbox, bell, toasts; delivery prefs; scorecard + ATW request types |
| System — Status | /system | Done | Ops health: Mongo, BQ, S3, worker, rolling sync (level 5) |
| System — Email | /system/email | Done | Admin broadcast compose — email and/or in-app (level 5) |
| System — Notifications | /system/notifications | Done | Admin type catalog + email test (level 5) |
| Desktop — BSC Home | /bsc (desktop) | Done | Employee score snapshot; 15s poll; notification-driven refresh; desktop activity minutes |
| Desktop — My ATW | /my-atw (desktop) | Done | Submit/cancel ATW entry requests with proof upload |
| Desktop — Notifications | /notifications (desktop) | Done | Same API as web; titlebar bell + optional native toast |
| Desktop — Tray | (shell) | Done | Minimize-to-tray; sign out / quit from context menu |
June 2026 enhancements (since prior report)
| Area | Enhancement |
|---|---|
| Platform admin | System status, admin email compose, permissions matrix, welcome email, auth domain allowlist, legal pages |
| Notification email | Gmail delivery per user prefs; admin email test; quiet hours |
| ATW entry requests | Employee submit (desktop/web) with proof; manager approve/reject on web ATW; notifications |
| Activity tracking | Split last active (web/desktop), visibility-only heartbeats; User activity |
| BSC sync jobs | Async sync/finalize with job polling; per-employee cycle refresh; UI progress persistence |
| Scorecard filter persistence | Date + org filters in URL search params (shareable links) |
| Desktop tray & offline | Minimize-to-tray; connectivity banner; refresh token rotation |
| Bonus qualification | bonus_qualified + breakdown on BQ user-month; Scope panel badge; filter + export; Bonus qualification manager matrix (/dashboard/bsc-bonus); incidents + attendance + Goal band + red-flag + timely weekly gates |
| Incidents scorecard | New page: CRUD, export, recycle bin, bulk upload; gates bonus qualification |
| Additional Points upload | Excel template → preview → commit (same flow as ATW/SBS/Non-SBS) |
| Additional Points | KPM/KPI-target boosts; KPM boosts apply to KPM total (not scaled onto KPIs); dashboard + markers; BQ sync stores boosted scores |
| Recycle bin | Seven submission pages; restore while occurrence month is not finalized (any open month) |
| Performance comparison | New dashboard: compare by site / cluster / department; benchmark line, vs cycle avg, coverage warnings, CSV export, drill-through to Monthly performance |
| Evaluation coverage | Scored / expected / gap / not-started semantics on Monthly performance data health and comparison table |
| Site scope filter | Site filter on Monthly performance and comparison when access pool spans multiple sites |
| Scorecard upload | ATW, SBS, Non-SBS, Additional Points, Incidents: download personalized Excel template → preview validation → commit valid rows |
| Scorecard UX | SBS Duplicate entry from row context menu; modals close on Escape; add/upload enabled when current month open even if filter month is finalized; page actions float (activity log + recently deleted hub) |
| Scorecard recycle bin | Soft delete on seven submission pages; restore (edit) and permanent purge (delete) from drawer; worker backstop for expired bin rows |
| Brands list | Global config under Scorecard → Configurations; datalist on entry forms; auto-append new brands on save |
| BSC eligibility | bsc_eligible on BQ user-month (cycle rule: regularized on/before July 1 of cycle) |
| Bonus eligibility | bonus_eligible on BQ user-month (regular on/before first day of that month); dashboard filters + export |
| Target score report | Improved multi-KPI path planner and Current vs Needed chart |
| Profile | Images keyed by employee id; initials avatar when load fails; self-service PATCH no longer wipes protected fields |
| Platform | Separate login vs app theme; login page redesign; audit log listing performance + impersonation scope |
| Notifications | In-app inbox (web + desktop); scorecard submit/delete + ATW request types; scheduled eval reminders (worker); UTC timestamps |
| Soft delete hardening | Active filter on all seven entry types in lists, exports, BSC compute; scoped BQ resync after delete/restore/purge |
| Desktop Home refresh | 15s poll + invalidate on scorecard notifications so BSC % and ATW points stay aligned |
| Organization | Tighter header spacing on org chart page |
July 2026 enhancements
| Area | Enhancement |
|---|---|
| Task delivery — pending today | No entry on today's scheduled workday → pending (excluded from average); past missing days → 0%; KPI breakdown status: pending; unit tests in test_task_delivery_kpis.py |
| Task delivery — grid UX | Amber/red cell highlights; Pending / Missing / Future labels in employee detail; hover tooltips on month average column and cells; schedule day code abbreviations on off/non-WD days |
| Schedule day codes — task delivery flag | is_task_delivery_day per catalog row (VL/SL default true); decouples TD eligibility from attendance working_days; config UI checkbox; backfill from is_working_day for legacy rows |
| Org chart — Full company | Toggle from By section; compact cards; GM → cluster → department → vertical members; explore pan/zoom (50%–200%, default 75%) |
| Org chart — Hierarchy | Dept managers on leader card only (no duplicate child cards); SME (level 2) between manager and members; level-1 members by hire date |
| Org chart — Leaders | Role labels (General / Cluster / Department Manager, SME); wider leader cards in full view |
| Org chart — UX | select-none on canvas; drag-to-pan from cards; layout fixes for even partial rows |
| Org tree API | hire_date on employee nodes in GET /v1/organization/tree |
Doc: Organization.
Dashboard pages (shipped)
| Page | Route | Doc |
|---|---|---|
| Balanced Scorecard | /dashboard/bsc | Dashboard overview |
| Target Score Report | /dashboard/bsc-target | Dashboard overview |
| Monthly performance | /dashboard/bsc-performance | Monthly performance |
| Performance comparison | /dashboard/bsc-comparison | Performance comparison |
Performance comparison highlights (June 2026):
- Access gating — Level 5+ or 2+ sites with 2+ employees; nav hidden when ineligible
- Compare dimensions — Site, cluster, or department tabs (≥ 2 segments required)
- Summary table — Cycle avg, snapshot month, vs cycle avg, band mix, evaluation coverage
- Trend chart — One line per segment + dashed scope benchmark
- Drill-through — Row links to Monthly performance with cycle and segment filters pre-applied
- CSV export — Full comparison table download
Monthly performance highlights (June 2026):
- BSC cycle selector (all months Jul–Jun in one view)
- Cycle averages — Total BSC + per-KPM means
- Trend chart — multi-employee lines; KPM metric dropdown; band reference lines; Final month styling
- Remark distribution — 12-month stacked band mix
- Remark table — cycle avg + band, MoM deltas, cycle ? tooltip, sort, CSV export
- Data health — per-month scored / expected coverage; gap and not-started counts; report status (draft/final)
API: GET /v1/dashboard/bsc/performance?cycle_id=
BSC 2025 / 2026 rollout (June 2026)
| Capability | Status |
|---|---|
| Fiscal cycle registry (Jul–Jun, cycle id = start year) | Done |
| Per-cycle config documents + migration from legacy single docs | Done |
| BSC 2026 metrics: revised productivity formulas (four KPIs, new compute) | Done |
| June 2026: fiscal BSC 2025, metrics from 2025 bundle | Done |
| Per-cycle SBS checklist rubric (API + form) | Done |
| Task delivery collection, API, scorecard page | Done |
| Dashboard finalize / re-generate / reopen | Done |
| Scorecard entry lock when month finalized | Done |
| Disabled edit UI with lock tooltips | Done |
Scorecard & BSC
| Capability | Status |
|---|---|
| Seven operational submission surfaces + task delivery + Additional Points + Incidents | Done |
| Soft delete + recycle bin (seven submission pages) | Done |
| Config: per-cycle eval quotas, metrics, goals, SBS rubric | Done |
Server-side KPI helpers + bsc_employee_compute | Done |
Per-employee working_days from schedules in BSC run | Done |
| Live dashboard / employee BSC cards | Done |
| BigQuery user-month ETL + read path | Done (optional via env); bsc_eligible, bonus_eligible, bonus_qualified on summary rows |
| Rolling sync + Final Report + Reopen | Done |
Docs: Scorecard, BSC metrics, Fiscal cycles & locks, BigQuery dashboard, User-month calculation
Platform & operations
| Capability | Status |
|---|---|
| FastAPI + MongoDB | Done |
JWT auth via tbl_employees + Google | Done |
Audit logging (tbl_logs) on scorecard + schedules | Done |
| Activity log UI (per page) | Done on scorecard pages, employees, org, learn, profile |
| In-app notifications (web + desktop) | Done |
| Notification email (Gmail) | Done (when NOTIFICATION_EMAIL_ENABLED) |
| Desktop app — BSC Home, My ATW, notifications, tray | Done (Phase 2) |
| Desktop installer + auto-update | Deferred (Phase 3) |
| Docker Mongo (local) / Atlas | Supported |
Recommended next steps
- Deep data health — TD / eval / attendance gaps on dashboard (see Roadmap).
- July 2026 validation — Full fiscal BSC 2026 cycle in production; confirm metrics and task delivery in live scores.
- Learning dashboard — When Learn is prioritized for managers.
Documentation index
| Document | Contents |
|---|---|
| Documentation home | Doc index |
| Dashboard overview | Five dashboard pages and how they relate |
| Bonus qualification | Manager bonus gate matrix (month) |
| Monthly performance | Cycle performance page (sections, filters, export) |
| Performance comparison | Segment comparison dashboard (access, table, drill-through) |
| User activity | Last active, active minutes, heartbeat rules |
| Platform & admin | Sign-in domains, system status, admin email, permissions |
| Organization | Org chart (by section + full company), list, SME hierarchy, hire-date sort |
| Notifications | In-app + email inbox, types, web/desktop parity |
| Desktop app | Windows employee client |
| Scorecard | Scorecard pages, API, schemas |
| Fiscal cycles & locks | Fiscal cycles, task delivery, month locks |
| Employee schedules | Schedules, day codes, working days |
| BSC metrics | KPM/KPI config and formulas |
| Total score goals | Total score goal tiers |
| Progress report | This file |
| BigQuery dashboard | BQ ETL, sync, finalize; eligibility + bonus qualification flags |
| User-month calculation | Per employee-month compute |
| Roadmap | Planned dashboard enhancements |
When to update docs: Any new page, collection, or breaking API change should update the feature doc and a one-line entry in this progress report (date + summary).
