Premium BLAST Results UX¶
Date: 2026-05-09
Motivation¶
The BLAST job detail page (BlastResults.tsx) had a basic progress stepper with
inconsistent phase ordering, no elapsed timer, and no visual feedback on
completion or failure. The orchestrator also did not set custom_status to
completed before returning, causing the frontend to show a stale phase.
Changes¶
Backend (api/orchestrators/submit_blast.py)¶
- Added
context.set_custom_status({"phase": result_phase, "job_id": job_id})before the finalreturn, so the orchestrator'scustom_status.phasereflectscompleted/failedinstead of being stuck onexporting_results.
Frontend (web/src/pages/BlastResults.tsx)¶
-
Phase order fixed: Stepper now matches orchestrator sequence (
checking_vm → enabling_storage → uploading → …) — previouslyenabling_storageanduploadingwere swapped. -
Per-phase icons: Each step displays a lucide icon (
Server,HardDrive,Upload,Settings,Send,Dna,Package,Trophy) instead of plain numbers. Completed steps showCheckCircle2, current step shows a spinningLoader2. -
Glow effects: Current step has a blue box-shadow; completed steps have a green glow. CSS transitions (0.3 s) animate state changes.
-
Elapsed timer: A live-updating
ElapsedTimercomponent (usingsetInterval) shows elapsed time in the page header next to the job title while the job is running. -
Phase priority fix: When
runtime_status === "Completed", phase is overridden to"completed"regardless ofcustom_status.phase. This prevents a staleexporting_resultsdisplay if the orchestrator didn't set the final status (older running instances). -
Completion banner: Green gradient banner with Trophy icon and file count.
-
Failure banner: Red gradient banner with XCircle icon and truncated error.
-
Toast notifications: Phase transitions to
completedorfailedtrigger a toast. -
Phase messages:
PHASE_MESSAGESlookup table for human-readable status descriptions (e.g. "Verifying Remote Terminal VM is running…"). -
Better stepper layout: Short uppercase labels (
VM CHECK,STORAGE,UPLOAD, …,DONE), column layout with connector lines, consistent spacing.
Validation¶
- BLAST job
job-3c417e30ef44submitted and monitored end-to-end. - All 8 phases transitioned correctly in the browser.
- Elapsed timer updated in real time.
- Completion banner and all-green stepper displayed on finish.
- 13 Python tests pass, 0 TypeScript errors.