@@ -59,78 +59,41 @@ The dashboard should be public, zero-auth (read-only), mobile-responsive, and fo
5959
6060<!-- FUTURE SELF: Wireframes or Figma link once prototyped. -->
6161
62- ## Implementation Options
62+ ## Technology Decision
6363
64- We have a RESTful FastAPI backend with endpoints for nodes, scores, dependents, and bulk exports. The
65- dashboard consumes this API exclusively (no direct DB access).
64+ ** Decided (Issue #3 ):** ** Vite with TypeScript** (` react-ts ` template). The dashboard will be a
65+ custom TypeScript frontend, consuming the RESTful FastAPI backend exclusively (no direct DB access)
66+ and dogfooding our OpenAPI-generated TypeScript SDK.
6667
67- ### Option 1: Streamlit
68+ ### Rationale
6869
69- ** Description** : Build with Streamlit — rapid prototyping, data-focused, Python-only stack.
70+ - ** TypeScript SDK dogfooding** — We should be the first consumers of our own SDK; a Python dashboard
71+ would mean catching SDK ergonomics issues only when external developers hit them.
72+ - ** Contributor accessibility** — Vite with TypeScript is a widely adopted frontend stack. To attract
73+ contributions (bug fixes, visualizations, accessibility, localization), lowering the barrier
74+ matters. The ecosystem (shadcn/ui, React Flow, Tailwind, etc.) lets us move fast and benefit from
75+ community momentum.
76+ - ** Build tool choice** — Vite is the better choice for this client-side app: superior development
77+ speed, simplicity, and smaller production bundles.
78+ - ** Scoped v0** — A static Vite app with the leaderboard and basic PG detail pages, including a
79+ ** sub-graph explorer on PG detail pages** so voters and maintainers get a transparent breakdown of
80+ derived metrics (criticality, score). The ** full-graph** explorer can be deferred to v1; it is not
81+ essential for the Q2 PG Award.
7082
71- ** Pros ** :
83+ ### Ownership
7284
73- - Extremely fast iteration (live reload, Python code for UI/logic).
74- - Built-in components for tables, charts (Altair/Plotly), search, caching.
75- - Graph viz via st.graphviz or pyvis integration.
76- - Hosting simplicity (Streamlit Community Cloud free tier or self-host).
77- - Low maintenance — aligns with Python backend team skills.
78-
79- ** Cons** :
80-
81- - Limited custom UI flexibility (harder for complex interactive graph dragging/zooming).
82- - Mobile experience good but not pixel-perfect.
83- - Less "app-like" feel compared to full JS frameworks.
84-
85- ### Option 2: Dash
86-
87- ** Description** : Use Dash for interactive data apps with Plotly charts and Cytoscape.js for graph
88- visualization.
89-
90- ** Pros** :
91-
92- - Superior interactive graphing (Cytoscape component native).
93- - Rich callbacks for dynamic filtering/search.
94- - Strong data table components (Dash DataTable with sorting/pagination).
95- - Deployable via same Python ecosystem (Gunicorn, Docker).
96- - Good for metric-heavy dashboards (built-in Plotly for trends/heatmaps).
97-
98- ** Cons** :
99-
100- - Steeper learning curve than Streamlit for layout.
101- - Performance overhead for very large graphs (client-side rendering).
102- - Licensing nuance (Dash Enterprise paid; open-source core sufficient for v0).
103-
104- ### Option 3: Custom Build with React / Next.js
105-
106- ** Description** : Full custom frontend using Next.js (SSR/SSG), Tailwind CSS, and specialized
107- libraries (Vis.js, React-Flow, or Cytoscape.js for graphs; TanStack Table for leaderboards).
108-
109- ** Pros** :
110-
111- - Maximum flexibility and polish (custom animations, advanced graph interactions, PWA potential).
112- - Best performance for large interactive graphs (WebGL options like sigma.js).
113- - Modern app feel, excellent mobile/responsive support.
114- - Static generation possible for landing/leaderboard (fast CDN hosting via Vercel/Netlify).
115- - Decouples frontend skills (JS/TS community contributions easier).
116- - Fully open-source.
117-
118- ** Cons** :
119-
120- - Highest initial development time/effort.
121- - More complex deployment (unless we force a static build).
122- - Risk of over-engineering early features.
85+ [ KoxyG] ( https://github.com/KoxyG ) has taken ownership: build with ** Vite's ` react-ts ` template** .
86+ [ GitHub Issue #3 ] ( https://github.com/scf-public-goods-maintenance/scf-public-goods-maintenance.github.io/issues/3 ) .
12387
12488## Open Questions
12589
126- - Prioritize speed-to-launch (Streamlit/Dash) vs. long-term polish (custom React)?
127- - Graph viz library choice (Cytoscape.js common across options)?
128- - Hosting strategy (single container vs. separate frontend/backend)?
129- - Analytics/integration needs (e.g., Plausible for usage tracking)?
130- - Can we use our own Typescript SDK (API client) with each of the options?
131- - Host on xlm.sh?
132-
133- <!-- QUESTION FOR LEAD: Include mockup descriptions or Mermaid UI flow here? Which option leans
134- strongest for v0 timeline? -->
90+ - ** Sub-graph explorer on PG detail pages:** In scope for v0 (essential for the voter user story:
91+ "drill into a specific PG's dependency graph and score breakdown to inform my NQG-weighted vote").
92+ [ @aolieman ] ( https://github.com/aolieman ) and [ @jaygut ] ( https://github.com/jaygut ) to be involved in
93+ detailing the specs.
94+ - Graph viz library choice (Cytoscape.js or Sigma.js)? Needs to support interactive (incremental)
95+ loading of additional vertices and edges.
96+ - Analytics/integration (e.g. Plausible for usage tracking).
97+ - Host on xlm.sh? What are its limitations compared to other static site hosting options?
13598
136- <!-- FUTURE SELF: Prototype one-pager for each option post-backend selection to compare real UX. -->
99+ <!-- QUESTION FOR KoxyG: Include mockup descriptions or Mermaid UI flow here? -->
0 commit comments