From cfef13dee8b0eaa1f6326883c985fe2caef9f73a Mon Sep 17 00:00:00 2001 From: RyanAI Date: Tue, 3 Mar 2026 20:22:44 +0800 Subject: [PATCH 1/6] feat: add sprint management dashboard MVP prototype for issue #14 --- profile/README.md | 6 +- profile/sprint-dashboard-mvp/README.md | 33 +++++ profile/sprint-dashboard-mvp/index.html | 164 ++++++++++++++++++++++++ 3 files changed, 202 insertions(+), 1 deletion(-) create mode 100644 profile/sprint-dashboard-mvp/README.md create mode 100644 profile/sprint-dashboard-mvp/index.html diff --git a/profile/README.md b/profile/README.md index 81c01aa..428ed15 100644 --- a/profile/README.md +++ b/profile/README.md @@ -1,3 +1,7 @@ # UbiquityOS -The operating system for the organizations of tomorrow. We host plugins which extend the capabilities of the UbiquityOS system at the [UbiquityOS Marketplace](https://github.com/ubiquity-os-marketplace). \ No newline at end of file +The operating system for the organizations of tomorrow. We host plugins which extend the capabilities of the UbiquityOS system at the [UbiquityOS Marketplace](https://github.com/ubiquity-os-marketplace). + +## Prototype Artifacts + +- Sprint Management Dashboard MVP (Issue #14): [`profile/sprint-dashboard-mvp`](./sprint-dashboard-mvp) \ No newline at end of file diff --git a/profile/sprint-dashboard-mvp/README.md b/profile/sprint-dashboard-mvp/README.md new file mode 100644 index 0000000..552293e --- /dev/null +++ b/profile/sprint-dashboard-mvp/README.md @@ -0,0 +1,33 @@ +# Sprint Management Dashboard MVP (Issue #14) + +This folder delivers a **mergeable MVP artifact** for `ubiquity-os/.github#14`: + +- Conversion-first hero section with **GitHub sign-in** CTA placeholder +- **Priority quick-set** UI (left/right/up swipe equivalent via buttons) +- **Sprint calendar assignment** for real team members (skill-aware mock planner) +- **Quantitative value metrics** (manager time + salary savings) + +## Why in `.github/profile/` + +Issue #14 is currently tracked in `ubiquity-os/.github` and this repository has no app scaffold yet. To keep scope tight and reviewable, this MVP is shipped as a standalone static artifact under profile assets, enabling maintainers to validate product direction before committing to a full app repo. + +## Run locally + +```bash +cd profile/sprint-dashboard-mvp +python3 -m http.server 8080 +# open http://localhost:8080 +``` + +## Acceptance mapping + +- [x] Calendar view of team members and assignments +- [x] Priority-level setting UI (swipe-equivalent controls) +- [x] Quantitative metrics for saved manager time / cost +- [x] Conversion-oriented landing section with GitHub sign-in entry point + +## Next implementation slice + +1. Replace sign-in placeholder with OAuth callback to ingestion backend. +2. Load real tasks from imported backlog (GitHub/Asana/Jira). +3. Persist priority labels and assignment feedback for model tuning. diff --git a/profile/sprint-dashboard-mvp/index.html b/profile/sprint-dashboard-mvp/index.html new file mode 100644 index 0000000..281481a --- /dev/null +++ b/profile/sprint-dashboard-mvp/index.html @@ -0,0 +1,164 @@ + + + + + + UbiquityOS Sprint Dashboard MVP + + + +
+
+

UbiquityOS Sprint Management Dashboard (MVP)

+

Conversion-focused landing + sprint planner demo for engineering managers. Includes GitHub sign-in placeholder, task prioritization, auto assignment, and ROI metrics.

+
+ + MVP prototype · static demo +
+
+ +
+
+

1) Priority quick-set (swipe alternative)

+

Use buttons to classify tasks as low/high/urgent. This simulates swipe-left/right/up input.

+
+
+ +
+

2) Value metrics

+
0 hrs
+
Estimated manager assignment time saved this sprint
+
$0
+
Estimated salary savings (@$95/hr engineering manager cost)
+
0 tasks
+
Tasks auto-assigned by AI planner
+
+
+ +
+

3) Calendar-style sprint assignment

+

Auto-assignment distributes work by skill tags and availability across a 5-day sprint.

+
+
+
+ + + + From b0517519d8b775b52e5591e1a49f67d1ef92218b Mon Sep 17 00:00:00 2001 From: RyanAI Date: Wed, 4 Mar 2026 05:36:41 +0800 Subject: [PATCH 2/6] docs: add one-command reproducibility check for sprint dashboard mvp --- profile/README.md | 3 ++- profile/sprint-dashboard-mvp/README.md | 15 ++++++++++++- profile/sprint-dashboard-mvp/verify.sh | 30 ++++++++++++++++++++++++++ 3 files changed, 46 insertions(+), 2 deletions(-) create mode 100755 profile/sprint-dashboard-mvp/verify.sh diff --git a/profile/README.md b/profile/README.md index 428ed15..4507cd9 100644 --- a/profile/README.md +++ b/profile/README.md @@ -4,4 +4,5 @@ The operating system for the organizations of tomorrow. We host plugins which ex ## Prototype Artifacts -- Sprint Management Dashboard MVP (Issue #14): [`profile/sprint-dashboard-mvp`](./sprint-dashboard-mvp) \ No newline at end of file +- Sprint Management Dashboard MVP (Issue #14): [`profile/sprint-dashboard-mvp`](./sprint-dashboard-mvp) + - Quick verify: `cd profile/sprint-dashboard-mvp && ./verify.sh` \ No newline at end of file diff --git a/profile/sprint-dashboard-mvp/README.md b/profile/sprint-dashboard-mvp/README.md index 552293e..8d00cbe 100644 --- a/profile/sprint-dashboard-mvp/README.md +++ b/profile/sprint-dashboard-mvp/README.md @@ -11,7 +11,20 @@ This folder delivers a **mergeable MVP artifact** for `ubiquity-os/.github#14`: Issue #14 is currently tracked in `ubiquity-os/.github` and this repository has no app scaffold yet. To keep scope tight and reviewable, this MVP is shipped as a standalone static artifact under profile assets, enabling maintainers to validate product direction before committing to a full app repo. -## Run locally +## One-command reproducibility (recommended) + +```bash +cd profile/sprint-dashboard-mvp && ./verify.sh +``` + +Expected output: + +- `✅ Sprint Dashboard MVP is reproducible` +- URL printed (default `http://127.0.0.1:18080`) + +`verify.sh` starts a temporary local server, fetches the homepage, checks key content, and exits non-zero if validation fails. + +## Run locally (manual) ```bash cd profile/sprint-dashboard-mvp diff --git a/profile/sprint-dashboard-mvp/verify.sh b/profile/sprint-dashboard-mvp/verify.sh new file mode 100755 index 0000000..3911099 --- /dev/null +++ b/profile/sprint-dashboard-mvp/verify.sh @@ -0,0 +1,30 @@ +#!/usr/bin/env bash +set -euo pipefail + +cd "$(dirname "$0")" + +PORT="${PORT:-18080}" +URL="http://127.0.0.1:${PORT}" + +python3 -m http.server "$PORT" >/tmp/sprint-dashboard-mvp-server.log 2>&1 & +SERVER_PID=$! +cleanup() { + kill "$SERVER_PID" >/dev/null 2>&1 || true +} +trap cleanup EXIT + +for _ in {1..20}; do + if curl -fsS "$URL" >/tmp/sprint-dashboard-mvp-home.html 2>/dev/null; then + break + fi + sleep 0.2 +done + +if ! grep -q "Sprint Management Dashboard" /tmp/sprint-dashboard-mvp-home.html; then + echo "❌ Verification failed: expected page title/content not found" + exit 1 +fi + +echo "✅ Sprint Dashboard MVP is reproducible" +echo " URL: $URL" +echo " Check: homepage contains 'Sprint Management Dashboard'" From d96b55c2283e5697304b87d9a88d64bced85a216 Mon Sep 17 00:00:00 2001 From: RyanAI Date: Thu, 2 Apr 2026 10:48:46 +0800 Subject: [PATCH 3/6] fix: address code review comments - Fix sort comparator operator precedence and add null safety for unknown priorities - Clarify README: mock/sample assignees not real team members Co-Authored-By: coderabbitai[bot] --- profile/sprint-dashboard-mvp/README.md | 2 +- profile/sprint-dashboard-mvp/index.html | 6 +++++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/profile/sprint-dashboard-mvp/README.md b/profile/sprint-dashboard-mvp/README.md index 8d00cbe..25c16e5 100644 --- a/profile/sprint-dashboard-mvp/README.md +++ b/profile/sprint-dashboard-mvp/README.md @@ -4,7 +4,7 @@ This folder delivers a **mergeable MVP artifact** for `ubiquity-os/.github#14`: - Conversion-first hero section with **GitHub sign-in** CTA placeholder - **Priority quick-set** UI (left/right/up swipe equivalent via buttons) -- **Sprint calendar assignment** for real team members (skill-aware mock planner) +- **Sprint calendar assignment** for task planning (skill-aware mock planner with sample assignees) - **Quantitative value metrics** (manager time + salary savings) ## Why in `.github/profile/` diff --git a/profile/sprint-dashboard-mvp/index.html b/profile/sprint-dashboard-mvp/index.html index 281481a..1c99ffb 100644 --- a/profile/sprint-dashboard-mvp/index.html +++ b/profile/sprint-dashboard-mvp/index.html @@ -104,7 +104,11 @@

${task.title}

} function assign() { - const backlog = [...tasks].sort((a, b) => ({ urgent: 3, high: 2, low: 1 }[b.priority] - ({ urgent: 3, high: 2, low: 1 }[a.priority]) || b.estimate - a.estimate); + const backlog = [...tasks].sort((a, b) => { + const p = { urgent: 3, high: 2, low: 1 }; + const priorityDiff = (p[b.priority] ?? 0) - (p[a.priority] ?? 0); + return priorityDiff || b.estimate - a.estimate; + }); const plan = days.map((d) => ({ day: d, items: [] })); backlog.forEach((task, i) => { From ef80c40fcf70eac46823a040aa75084fdf78f1ea Mon Sep 17 00:00:00 2001 From: Luna Ops Date: Thu, 2 Apr 2026 16:35:56 +0800 Subject: [PATCH 4/6] verify.sh: distinguish server-unreachable from wrong-content errors Adds FETCHED flag to clearly distinguish between: - Server never responding (all 20 curl attempts failed) - Server responded but with unexpected content Fixes CodeRabbit nitpick feedback. --- profile/sprint-dashboard-mvp/verify.sh | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/profile/sprint-dashboard-mvp/verify.sh b/profile/sprint-dashboard-mvp/verify.sh index 3911099..637dd27 100755 --- a/profile/sprint-dashboard-mvp/verify.sh +++ b/profile/sprint-dashboard-mvp/verify.sh @@ -13,13 +13,20 @@ cleanup() { } trap cleanup EXIT +FETCHED=false for _ in {1..20}; do if curl -fsS "$URL" >/tmp/sprint-dashboard-mvp-home.html 2>/dev/null; then + FETCHED=true break fi sleep 0.2 done +if [ "$FETCHED" != "true" ]; then + echo "❌ Verification failed: server did not respond after 20 attempts" + exit 1 +fi + if ! grep -q "Sprint Management Dashboard" /tmp/sprint-dashboard-mvp-home.html; then echo "❌ Verification failed: expected page title/content not found" exit 1 From d7d65990cf4a5508af5db9f811db2892c7a17502 Mon Sep 17 00:00:00 2001 From: Luna Ops Date: Mon, 13 Apr 2026 10:25:34 +0800 Subject: [PATCH 5/6] fix(verify.sh): distinguish server-unreachable from wrong-content error CodeRabbit nit: when all 20 curl attempts fail, the error message now points to server logs (/tmp/sprint-dashboard-mvp-server.log) so the operator can distinguish a server startup failure from a content mismatch. --- profile/sprint-dashboard-mvp/verify.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/profile/sprint-dashboard-mvp/verify.sh b/profile/sprint-dashboard-mvp/verify.sh index 637dd27..02be934 100755 --- a/profile/sprint-dashboard-mvp/verify.sh +++ b/profile/sprint-dashboard-mvp/verify.sh @@ -23,7 +23,7 @@ for _ in {1..20}; do done if [ "$FETCHED" != "true" ]; then - echo "❌ Verification failed: server did not respond after 20 attempts" + echo "❌ Verification failed: server did not respond after 20 attempts (check /tmp/sprint-dashboard-mvp-server.log for errors)" exit 1 fi From c8a01b89f67c5a4c4e90fddbc2550c35130968f2 Mon Sep 17 00:00:00 2001 From: RyanAI Date: Thu, 16 Apr 2026 07:26:54 +0800 Subject: [PATCH 6/6] chore: trigger coderabbit re-review