Parent Issue
Part of #31 — v0.3 Repo Restructure
Depends on #32 — core/ must be in place before this work begins.
Context
The web demo currently runs off the same dashboard/main.py as the local app. Under the v0.3 restructure, pulseengine/web/ becomes its own dedicated surface — a deliberately stripped-down Streamlit app that imports from core/ but enforces the constraints required for Streamlit Community Cloud deployment.
The web demo's only job is to give visitors a taste of the tool and send them to the local download.
Hard Constraints for web/
These are non-negotiable — violations break the Streamlit Community Cloud deployment model:
- No local model inference — no FinBERT, no heavy ML models
- No file I/O — cannot write to disk, no snapshot persistence
- No state between requests — each session is stateless
- No backtesting — compute is too heavy for free tier
- No arbitrary ticker lookup — local-only feature
Locked Feature UX
Every feature that exists in local/ but not web/ must display a clear prompt to download the local app. The ROADMAP specifies: "Locked features in the web demo display a prompt to download the local app."
Files to Create
| File |
Purpose |
pulseengine/web/dashboard.py |
Restricted Streamlit demo — imports from core/, no heavy ops |
pulseengine/web/__init__.py |
Package init |
Feature Matrix for web/
| Feature |
Include in web/? |
| All 24 tracked assets |
Yes |
| Signal score + explanation |
Yes |
| Price chart |
Yes |
| News sentiment feed |
Yes |
| Market heatmap |
Yes |
| Category overview |
Yes |
| Arbitrary ticker lookup |
No — show download prompt |
| Backtesting |
No — show download prompt |
| Historical snapshots |
No — show download prompt |
| Export to CSV / PDF |
No — show download prompt |
| FinBERT local model |
No — show download prompt |
| Custom RSS feeds |
No — show download prompt |
| Offline mode |
No — show download prompt |
Acceptance Criteria
Privacy Note
From the ROADMAP: "We store nothing. Ever. The web demo is architecturally incapable of retaining user data." This constraint must be maintained in the implementation.
Parent Issue
Part of #31 — v0.3 Repo Restructure
Context
The web demo currently runs off the same
dashboard/main.pyas the local app. Under the v0.3 restructure,pulseengine/web/becomes its own dedicated surface — a deliberately stripped-down Streamlit app that imports fromcore/but enforces the constraints required for Streamlit Community Cloud deployment.The web demo's only job is to give visitors a taste of the tool and send them to the local download.
Hard Constraints for
web/These are non-negotiable — violations break the Streamlit Community Cloud deployment model:
Locked Feature UX
Every feature that exists in
local/but notweb/must display a clear prompt to download the local app. The ROADMAP specifies: "Locked features in the web demo display a prompt to download the local app."Files to Create
pulseengine/web/dashboard.pycore/, no heavy opspulseengine/web/__init__.pyFeature Matrix for
web/Acceptance Criteria
pulseengine/web/dashboard.pydeploys on Streamlit Community Cloud without errorslocal/(only fromcore/)pulseengine/web/__init__.pypresentPrivacy Note
From the ROADMAP: "We store nothing. Ever. The web demo is architecturally incapable of retaining user data." This constraint must be maintained in the implementation.