How it's built
How it's built
I built Dashboard Gallery as a single Cloudflare Worker — API and React front end in one deployable.
The search
When a visitor types a question, the Worker runs two retrieval passes in parallel: a keyword index and a vector index. Their rankings are fused before the model sees any result. The keyword side uses SQLite FTS5 with weights tuned per field — title scores highest, then summary, description, facet labels, and chart titles. The vector side uses 768-dimensional embeddings; both the visitor's own sentence and the model's rewritten search terms are embedded separately and merged into the final ranking.
Chart titles from each bundle are indexed, so a question about a specific metric can surface by chart name — but the model is shown at most one matched chart title, never the full list. Cards in the UI come only from rows the search actually returned; the model cannot produce a card for a dashboard that isn't in the index. Model choice came from a benchmark I ran on the gallery's own question set: the primary scores higher on precision; a fallback takes over when the day's compute budget approaches its ceiling. When the ceiling is reached, the search degrades gracefully to a clean message and points the visitor to the filters.
The converter
The /convert page converts a dashboard export between RUCKUS One and RUCKUS AI (SmartZone). The conversion runs entirely in the browser — the file is read locally and never uploaded. Direction is read from the file, not picked by the user. A “Before you import” report shows exactly what will change and flags anything the target platform is likely to lack; the check never blocks the download.
The converter exists because I develop dashboards on RUCKUS One and needed a reliable conversion path for sites running SmartZone. I validated the output by importing a converted bundle on a real RUCKUS AI instance and confirmed the charts and filters worked. The page is also available as a standalone tool for anyone who needs to convert their own exports.