From 1b0b602aa47c8b69fdfc932387e306cfd825cbfe Mon Sep 17 00:00:00 2001 From: Rene Fichtmueller Date: Sat, 28 Mar 2026 00:37:10 +1300 Subject: [PATCH] =?UTF-8?q?feat:=20Phase=208=20=E2=80=94=20Dashboard=20fro?= =?UTF-8?q?ntend=20+=20static=20serving?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Single-file dashboard with 6 tabs: Overview, Semantic Search, Hype Cycle, Transceivers, News, Blog Engine. Dark theme, no build step, served as static HTML from Express. - Overview: health stats, vector collection counts, recent news - Semantic Search: query across all 6 Qdrant collections - Hype Cycle: Norton-Bass table with phase colors + position bars - Transceivers: searchable table with form factor/speed/reach - News: semantic news search with source links - Blog: generate drafts from templates, view draft history Live at: https://transceiver-db.context-x.org/dashboard/ --- packages/api/src/index.ts | 13 +- packages/dashboard/index.html | 570 ++++++++++++++++++++++++++++++++++ 2 files changed, 581 insertions(+), 2 deletions(-) create mode 100644 packages/dashboard/index.html diff --git a/packages/api/src/index.ts b/packages/api/src/index.ts index d4e84c9..b49c4bd 100644 --- a/packages/api/src/index.ts +++ b/packages/api/src/index.ts @@ -2,6 +2,7 @@ import express from "express"; import cors from "cors"; import helmet from "helmet"; import rateLimit from "express-rate-limit"; +import { join } from "path"; import { cfg } from "./config"; import { transceiverRouter } from "./routes/transceivers"; import { switchRouter } from "./routes/switches"; @@ -16,7 +17,7 @@ import { blogRouter } from "./routes/blog"; const app = express(); // Middleware -app.use(helmet()); +app.use(helmet({ contentSecurityPolicy: false })); app.use(cors()); app.use(express.json()); app.use( @@ -39,8 +40,16 @@ app.use("/api/search", searchRouter); app.use("/api/documents", documentRouter); app.use("/api/blog", blogRouter); -// Root +// Dashboard (static HTML) +app.use("/dashboard", express.static(join(__dirname, "..", "..", "dashboard"))); + +// Root — redirect to dashboard app.get("/", (_req, res) => { + res.redirect("/dashboard/"); +}); + +// API info +app.get("/api", (_req, res) => { res.json({ name: "Transceiver Intelligence Platform", version: "0.1.0", diff --git a/packages/dashboard/index.html b/packages/dashboard/index.html new file mode 100644 index 0000000..7584097 --- /dev/null +++ b/packages/dashboard/index.html @@ -0,0 +1,570 @@ + + + + + + TIP — Transceiver Intelligence Platform + + + + +
+

TIP — Transceiver Intelligence Platform

+
+ API + Database + Qdrant + +
+
+ +
+
Overview
+
Semantic Search
+
Hype Cycle
+
Transceivers
+
News
+
Blog Engine
+
+ +
+ +
+
+
Transceivers
+
Vendors
+
Standards
+
News Articles
+
+ +
+
+
Vector Collections
+
+
+
+
Recent News
+
+
+
+ +
+
API Endpoints
+
+
+
+ + + + + + + + + + + + + + + +
+ + + +