Skip to content

plexusone/dashforge

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

37 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

Dashforge

Go CI Go Lint Go SAST Go Report Card Docs Docs Visualization License

A JSON-first dashboard framework that starts simple with static hosting (GitHub Pages) and grows into a full Metabase-like analytics platform with an AI-powered visual builder.

Features

Core Platform

  • 🎨 Visual Dashboard Builder - Drag-and-drop dashboard editor optimized for LLM agents
  • πŸ“„ JSON Dashboard IR - Non-polymorphic, AI-friendly dashboard definitions
  • πŸ”— Cube.js Semantic Layer - Business-friendly queries with pre-built relationships
  • ⚑ Static or Dynamic - Start with static file hosting, graduate to PostgreSQL
  • πŸ—„οΈ Multi-Database Support - Connect to PostgreSQL, MySQL, and more via plugin providers
  • 🏒 Multi-tenant - Row Level Security (RLS) for tenant isolation
  • πŸ” SSO Authentication - GitHub and Google OAuth support
  • πŸ“Š ChartIR Integration - Uses echartify for charts

Template Marketplace

  • πŸ“¦ Dashboard Templates - Publish and sell reusable dashboard templates
  • πŸͺ Publisher System - Organizations can become publishers with creator roles
  • βœ… Template Licensing - Seat-based licensing for purchased templates
  • πŸ”„ Version Control - Template versioning with auto-update options
  • πŸ–ΌοΈ Preview & Screenshots - Gallery views for template discovery

Authorization

  • πŸ”€ Dual-Mode Auth - Simple role hierarchy or SpiceDB for fine-grained control
  • πŸ‘€ Publisher Roles - Owner, Admin, Creator, Reviewer hierarchies
  • πŸ‘₯ Consumer Roles - Owner, Admin, Editor, Viewer hierarchies
  • 🎯 Resource Permissions - Granular control over dashboards, queries, alerts, integrations

Quick Start

Visual Dashboard Builder

The fastest way to create dashboards:

# Build the React dashboard builder
cd builder && npm install && npm run build && cd ..

# Start the server
go run ./cmd/dashforge-server serve --port 8080

# Open the builder
open http://localhost:8080/builder/

Static Mode (No Server)

Open viewer/index.html in a browser with a dashboard URL:

cd dashforge
python3 -m http.server 8080
# Open http://localhost:8080/viewer/?dashboard=../examples/compliance-dashboard.json

Server Mode

# Build the server
go build -o dashforge-server ./cmd/dashforge-server

# Run with PostgreSQL
export DATABASE_URL="postgres://user:pass@localhost:5432/dashforge?sslmode=disable"
export JWT_SECRET="your-secret-key"

./dashforge-server serve --port 8080 --auto-migrate

Documentation

Full documentation is available at docs/:

Architecture

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                        Dashforge                                β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚  builder/               Visual dashboard builder (React)        β”‚
β”‚    β”œβ”€β”€ src/components/  Canvas, widgets, chart builder          β”‚
β”‚    β”œβ”€β”€ src/ai/          AI generation schemas & prompts         β”‚
β”‚    └── src/api/         Dashforge & Cube.js clients             β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚  cube/                  Cube.js semantic layer                  β”‚
β”‚    └── model/cubes/     Data models (YAML)                      β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚  cmd/dashforge/         Static CLI (validate, convert)          β”‚
β”‚  cmd/dashforge-server/  Full server with API                    β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚  dashboardir/           Dashboard JSON schema & types           β”‚
β”‚  viewer/                Embedded static HTML/JS viewer          β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚  datasource/            Plugin-style data source providers      β”‚
β”‚    β”œβ”€β”€ providers/       PostgreSQL, MySQL implementations       β”‚
β”‚    β”œβ”€β”€ manager.go       Connection pool management              β”‚
β”‚    └── query.go         Query execution engine                  β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚  internal/server/                                               β”‚
β”‚    β”œβ”€β”€ api/             REST API handlers                       β”‚
β”‚    β”œβ”€β”€ auth/            JWT + OAuth (GitHub, Google)            β”‚
β”‚    β”œβ”€β”€ db/              PostgreSQL with Ent ORM                 β”‚
β”‚    └── middleware/      Tenant context, logging                 β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚  ent/                   Ent schema & generated code             β”‚
β”‚    └── schema/          User, Dashboard, Tenant, etc.           β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Dashboard Builder

The visual builder provides a Metabase-style drag-and-drop interface:

  • Widget Palette - Drag charts, metrics, tables, and text onto the canvas
  • 12-Column Grid - Responsive layout with snap-to-grid positioning
  • Chart Builder - Visual configuration for line, bar, pie, scatter, and area charts
  • Query Builder - Connect to Cube.js for semantic queries
  • AI Integration - Generate widgets and dashboards from natural language
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                   Dashboard Builder UI                          β”‚
β”‚         (React + TypeScript + react-grid-layout)                β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”  β”‚
β”‚  β”‚ Widget      β”‚  β”‚ Canvas      β”‚  β”‚ Properties Panel        β”‚  β”‚
β”‚  β”‚ Palette     β”‚  β”‚ (Grid)      β”‚  β”‚ β”œβ”€β”€ Chart Builder       β”‚  β”‚
β”‚  β”‚ β”œβ”€β”€ Chart   β”‚  β”‚             β”‚  β”‚ β”œβ”€β”€ Query Builder       β”‚  β”‚
β”‚  β”‚ β”œβ”€β”€ Metric  β”‚  β”‚  [Widget]   β”‚  β”‚ └── Style Editor        β”‚  β”‚
β”‚  β”‚ β”œβ”€β”€ Table   β”‚  β”‚  [Widget]   β”‚  β”‚                         β”‚  β”‚
β”‚  β”‚ └── Text    β”‚  β”‚  [Widget]   β”‚  β”‚                         β”‚  β”‚
β”‚  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜  β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Dashboard Example

{
  "id": "sales-dashboard",
  "title": "Sales Overview",
  "layout": { "type": "grid", "columns": 12, "rowHeight": 80 },
  "dataSources": [
    {
      "id": "sales",
      "type": "postgres",
      "query": "SELECT date, SUM(amount) as total FROM sales GROUP BY date"
    }
  ],
  "widgets": [
    {
      "id": "revenue-chart",
      "type": "chart",
      "position": { "x": 0, "y": 0, "w": 8, "h": 4 },
      "dataSourceId": "sales",
      "config": {
        "geometry": "line",
        "encodings": { "x": "date", "y": "total" },
        "style": { "smooth": true, "showLegend": true }
      }
    }
  ]
}

Development

# Build all binaries
go build ./...

# Build the dashboard builder
cd builder && npm install && npm run build && cd ..

# Run tests
go test -v ./...

# Lint
golangci-lint run

# Generate Ent code (after schema changes)
go generate ./ent

# Start Cube.js (optional, for semantic queries)
cd cube && npm install && npm run dev

Integration with PipelineConductor

Visualize compliance reports from pipelineconductor:

# Generate compliance data
pipelineconductor check --users plexusone --languages Go -o data/compliance.json

# View in dashboard
open viewer/index.html?dashboard=examples/compliance-dashboard.json

# Or use the visual builder
open http://localhost:8080/builder/

License

MIT

About

A JSON-first dashboard framework that starts simple with static hosting (GitHub Pages) and grows into a full Metabase-like analytics platform with an AI-powered visual builder.

Resources

Stars

Watchers

Forks

Contributors