SkyWeb Analytics is a full-stack macroeconomic analytics platform built for exploring indicators, curated macro lenses, authenticated dashboards, alert rules, signal notifications, and professional chart surfaces.
It is the public/member-facing analytics layer of the Sky ecosystem. SkyServer remains the private control plane for ingestion, automation, workers, tooling, repository utilities, and alert evaluation execution.
| Layer | Technology |
|---|---|
| Client | React, Vite, React Router, Bootstrap, Axios |
| Charts | Apache ECharts with D3 helpers |
| API | ASP.NET Core Web API, C# |
| Data access | Dapper, Npgsql |
| Database | PostgreSQL |
| Auth | App-scoped login, opaque bearer sessions, BCrypt validation, SHA-256 session-token hashes |
| Control plane | SkyServer Node.js / Express / Knex for ingestion, workers, automation, and alert evaluation |
| Macro Dashboard | Indicator Alert Overlays |
|---|---|
![]() |
![]() |
| Macro View Detail | Signal Center |
|---|---|
![]() |
![]() |
Additional screenshots are available in docs/assets/screenshots/, including the macro overview, alert rules, dashboard builder, account preferences, alert preferences, chart tooltip, and presentation-mode views.
- React + ASP.NET Core full-stack architecture with a dedicated C# analytics API.
- PostgreSQL-backed macro data exploration across public indicators and curated multi-series macro views.
- Authenticated member workflows for profiles, preferences, saved views, dashboards, alert rules, and signal notifications.
- Professional charting with ECharts/D3, including dense time-series charts, tooltips, adaptive axes, threshold overlays, and optional alert-event markers.
- Safe migration discipline, moving route families from a Node-backed prototype path into native C# services with validation and cutover cleanup.
- Clear system boundaries, with SkyWeb focused on analytics/product presentation and SkyServer focused on operational control-plane work.
| Surface | Purpose |
|---|---|
| Macro Overview | Public macro entry point with curated economic context |
| Macro Dashboard | Authenticated cockpit with dashboard blocks, charts, saved content, and alert summary |
| Macro Views | Curated multi-indicator lenses such as rates, inflation, labor, FX, and macro regime views |
| Indicator Details | Single-indicator drilldown with ECharts chart, time-series table, and alert overlays |
| Dashboard Builder | Member dashboard creation with saved-view and direct-indicator cards |
| Alert Rules | Threshold watches with severity, status, history, clone/edit/delete, and evaluate-now flows |
| Signal Center | Alert-notification lifecycle for open, acknowledged, dismissed, and historical signals |
| Account + Preferences | Authenticated profile, dashboard preferences, and alert-surfacing preferences |
flowchart LR
Browser[Browser] --> Client[SkyWeb.Client\nReact + Vite + ECharts + D3]
Client --> Api[SkyWeb.Api\nASP.NET Core + C#]
Api --> Db[(PostgreSQL\nmacro + skyweb + auth schemas)]
Api -->|evaluate alerts only| Server[SkyServer\nNode.js control plane]
Server --> Db
Current request flow:
SkyWeb.Client
→ SkyWeb.Api
→ native C# public macro endpoints
→ native C# auth/session endpoints
→ native C# profile, preference, saved-view, dashboard, alert-rule, alert-notification, and Signal Center endpoints
→ proxy to SkyServer Node API for evaluate-now alert execution only
Alert evaluation remains intentionally SkyServer-owned because SkyServer owns ingestion, workers, scheduler/listener behavior, automation, and control-plane execution.
Active phase: Phase 9.5 — Demo / Release Cleanup
The .NET transition is complete, the retired React-only client has been removed, and the Phase 9 portfolio/docs track is in release-candidate cleanup. SkyWeb is now presented as a post-cutover React + ASP.NET Core analytics product rather than a migration workbench.
Primary implementation path:
apps/web-dotnet/SkyWeb.Client React / Vite / Apache ECharts / D3
apps/web-dotnet/SkyWeb.Api ASP.NET Core / C# / Dapper / PostgreSQL
Default npm scripts use the active SkyWeb client:
npm run web -> apps/web-dotnet/SkyWeb.Client
npm run build -> apps/web-dotnet/SkyWeb.Client production build
npm run preview -> apps/web-dotnet/SkyWeb.Client preview
Install JavaScript dependencies from the repository root:
npm installRun these in separate terminals:
# Terminal 1 — SkyServer Node API / control plane
cd ../SkyServer
npm run api# Terminal 2 — SkyWeb ASP.NET Core API
cd ../SkyWeb
npm run dotnet:api# Terminal 3 — SkyWeb Analytics client
cd ../SkyWeb
npm run webOpen:
http://localhost:5175
Useful validation/build commands:
npm run dotnet:prep
npm run dotnet:build
npm run build
npm run lintCreate .env.local from .env.example when needed:
cp .env.example .env.localActive client variables:
VITE_SKYWEB_API_BASE_URL=/api
VITE_SKYWEB_API_ORIGIN=http://localhost:7280
VITE_SKYSERVER_API_BASE_URL=/api
VITE_SKYSERVER_API_ORIGIN=http://localhost:7171
VITE_MACRO_API_PREFIX=/public/macro
VITE_SKYWEB_AUTH_APP_CODE=SKYWEB
VITE_SKYWEB_SESSION_TOKEN_KEY=skyweb.sessionToken
VITE_SKYWEB_PUBLIC_MODE=true
VITE_API_TIMEOUT_MS=20000
The .NET API connection string is configured in:
apps/web-dotnet/SkyWeb.Api/appsettings.Development.json
Use .NET user secrets for local database passwords instead of committing real credentials.
| Surface | URL |
|---|---|
| SkyWeb Analytics client | http://localhost:5175 |
| SkyServer Node API | http://localhost:7171 |
| SkyWeb.Api health | http://localhost:7280/_health |
| SkyWeb.Api DB health | http://localhost:7280/_db/health |
| SkyWeb.Api Swagger | http://localhost:7280/swagger |
SkyWeb/
├── apps/
│ └── web-dotnet/
│ ├── SkyWeb.DotNet.sln
│ ├── SkyWeb.Api/ # ASP.NET Core / C# API
│ └── SkyWeb.Client/ # React / Vite client backed by SkyWeb.Api
├── docs/
│ ├── assets/screenshots/ # Portfolio screenshots
│ └── *.md # Portfolio, feature-tour, roadmap, and repo-map docs
├── .env.example
└── package.json
Build artifacts such as bin/, obj/, dist/, and node_modules/ should not be included in generated repo zips. Generated AI/project handoff zips also exclude screenshot image binaries by default so transfer archives stay small; the GitHub working tree can still retain the screenshot assets used by this README.
| Asset | Purpose |
|---|---|
docs/SkyWeb_Portfolio_Brief.md |
Concise product story, technical proof points, and interview-ready summary |
docs/SkyWeb_Feature_Tour.md |
Guided product walkthrough and screenshot sequence |
docs/SkyWeb_Interview_Talking_Points.md |
Interview-ready explanations for architecture, migration, alerts, charts, and tradeoffs |
docs/SkyWeb_Architecture_Decisions.md |
ADR-style notes explaining major engineering decisions and consequences |
docs/SkyWeb_Resume_Bullets.md |
Resume, LinkedIn, ATS keyword, and role-specific project bullet source material |
docs/SkyWeb_Recruiter_Brief.md |
Short recruiter-friendly summaries and role-specific positioning |
docs/SkyWeb_Demo_QA.md |
Demo walkthrough Q&A, STAR prompts, and technical interview answers |
docs/SkyWeb_Release_Checklist.md |
Final local validation, demo, security, and release-candidate checklist |
docs/SkyWeb_Release_Notes.md |
Portfolio release-candidate summary and completed milestone notes |
docs/SkyWeb_Known_Limitations.md |
Honest limitations and future roadmap framing |
docs/SkyWeb_Phase_9_Roadmap.md |
Phase 9 execution plan and polish status |
docs/SkyWeb_Visual_Asset_Manifest.md |
Canonical screenshot inventory and README usage notes |
docs/assets/screenshots/README.md |
Screenshot folder notes and file inventory |
Phase 9.5 marks the portfolio release-candidate cleanup pass. Before public sharing or interview use, run the checklist in docs/SkyWeb_Release_Checklist.md, confirm the README screenshots render in GitHub, and keep local secrets out of committed configuration.
Known limitations and future roadmap items are tracked in docs/SkyWeb_Known_Limitations.md. The short version: SkyWeb is portfolio-ready locally; deployment, external alert delivery, ingestion resilience, and workflow orchestration remain future product/hardening tracks.
SkyWeb Analytics should not duplicate SkyServer Admin features. SkyServer owns:
- Tool execution
- Ingestion management
- Worker automation
- Access control administration
- Audit reporting
- Repository/system configuration
- Application membership management
- Future Temporal workflow orchestration
- Current alert evaluation execution
SkyWeb Analytics consumes curated APIs and focuses on public presentation, exploration, member personalization, dashboards, alerts, and chart intelligence.



