Web Interface (v0.2)
4. Web Interface¶
Depends on: sec1 (personas, scope decision — web portal deferred to v0.2), sec2 (architecture, backend integration layer) Feeds into: sec5 (API Client Libraries), Implementation (v0.2)
Status: Deferred to Aperture v0.2
The web portal is explicitly out of scope for v0.1. This section captures the design decisions already made, the open questions that remain, and the architectural constraints the v0.1 CLI implementation must not violate in order to make the v0.2 web portal straightforward to add.
4.1 Motivation¶
The bass CLI (v0.1) is sufficient for bioinformaticians and data managers working in terminal
environments. A web portal extends BASS to bench scientists and data consumers who prefer a
browser-based interface for browsing entities, requesting collections, and downloading manifests.
The web portal is not a separate product — it is an additional presentation layer over the
same backends/ integration layer used by the CLI (see sec2 §2.2). No new business logic is
introduced in the portal.
4.2 Decisions Made (Binding for v0.1 Implementation)¶
| Decision | Choice | Rationale |
|---|---|---|
| When to deliver | v0.2 | v0.1 scope is CLI-only; web adds complexity without addressing the primary user (bioinformatician) |
| Portal server vs SPA | Decision deferred — see §4.5 | Neither server-rendered (Jinja/HTMX) nor SPA (React/Vue) is ruled out |
| Auth dependency | Bridge required for web portal | A public-facing web UI must have auth; deploying the portal without Bridge is not supported |
| Package structure | aperture/portal/ directory reserved |
portal/__init__.py stub exists in v0.1 to reserve the namespace |
| Backend sharing | Portal must use the same backends/ layer as the CLI |
Prevents divergence in entity access patterns |
4.3 Anticipated Scope (v0.2)¶
The following capabilities are planned for the v0.2 web portal. This list is not a commitment — it will be revised when the v0.2 spec is written.
Entity browsing: - Filterable, sortable tables for each entity type - Entity detail view with all fields and relationship links - Provenance timeline for each entity
Collection requests (Cappella integration): - Form-based collection request builder - Progress tracking for active collection jobs - Downloadable manifest (CSV/JSON) on completion
Ingestion: - Drag-and-drop flat file upload for batch ingest - Real-time progress view (delegating to Hippo IngestionPipeline) - Error report download for failed rows
System: - Dashboard: entity counts, recent activity, system health - Schema browser
4.4 Architectural Constraints for v0.1¶
The following constraints must be observed in the v0.1 CLI implementation to ensure the web portal can be added in v0.2 without restructuring:
-
backends/layer must be transport-agnostic.HippoSdkBackendandHippoRestBackendmust not import or depend on any CLI-specific code (Typer, Rich, stdout). They are plain Python classes that can be instantiated from both a CLI command and a web request handler. -
No CLI-specific state in backends. Backends must be stateless or configuration-stateful only (holding a URL or SDK client). Session state (auth tokens) will be managed by the portal layer in v0.2.
-
aperture/portal/namespace is reserved. Do not place non-portal code in this directory. It exists as an empty package stub (__init__.py) only. -
OutputFormattermust not be called from backends. Formatting is a presentation-layer concern. Backends return plain Python dicts/lists. The CLI layer callsOutputFormatter; the portal will call its own template/serialization layer.
4.5 Open Questions (for v0.2 Spec)¶
| Question | Priority | Notes |
|---|---|---|
| Server-rendered (Jinja2 + HTMX) vs SPA (React/Vue)? | High | Server-rendered is simpler to deploy and maintain; SPA enables richer UX. Decision should follow user research with bench scientists. |
Standalone portal process or embedded in bass serve? |
High | A standalone FastAPI + ASGI process is cleanest. Embedding in hippo serve would create unwanted coupling. |
| Session management: server-side sessions or JWT-only? | Medium | Depends on Bridge auth model (see Bridge INDEX). |
| Real-time progress (WebSocket vs polling)? | Medium | Ingestion and collection jobs need progress feedback. WebSocket is richer; polling is simpler. |
| Mobile/tablet support? | Low | Bench scientists may use tablets; responsive layout is desirable but not blocking. |