Skip to content

Commit 8fb0cba

Browse files
authored
Merge branch 'main' into pre-commit-ci-update-config
2 parents 1c03af0 + 4b85e7d commit 8fb0cba

File tree

2 files changed

+30
-67
lines changed

2 files changed

+30
-67
lines changed

docs/pg-atlas/dashboard.md

Lines changed: 29 additions & 66 deletions
Original file line numberDiff line numberDiff line change
@@ -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? -->

docs/pg-atlas/operations.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,7 @@ Security: HTTPS enforced, rate limiting, no public writes.
3737
- Hosted PostgreSQL.
3838
- FastAPI container on DigitalOcean App Platform (managed PaaS, auto-deploys from GitHub).
3939
- Periodic workers: App Platform background workers or separate Celery container.
40-
- Dashboard: Static build (Next.js) on App Platform static site or separate.
40+
- Dashboard: Static build on App Platform static site or separate.
4141

4242
**Pros**:
4343

0 commit comments

Comments
 (0)