A personal developer dashboard for tracking contributions and team activity.
Requires Go 1.26+.
export GITHUB_TOKEN="your_token_here"
make runThe server starts on :8080 by default.
You'll need a personal access token set as GITHUB_TOKEN.
Recommended setup:
- Classic token
- 30-day expiration
- Scopes: repo, read:user
make docker-run GITHUB_TOKEN=your_token_heremake kind-setup GITHUB_TOKEN=your_token_here
make kind-forward # in a second terminalkind-setup creates a local cluster, builds the image, and installs the Helm chart. Re-running is safe — it upgrades the existing release.
make check-deps
make run-liveOmni is built around a widget registry. Each plugin provides one or more widgets that users can pin, resize, and arrange on their dashboard.
Tracks your GitHub activity across PRs, reviews, and issues. All widgets support time filters: 1d, 7d, 1mo, ytd, all.
Go to Settings → GitHub to watch orgs and repos using GitHub Search qualifier format (org:myorg, repo:owner/repo).
Renders animated ASCII art as dashboard widgets. Built-in animations are embedded at compile time. Additional animations can be added at runtime via the API or by dropping files into $OMNI_DATA_DIR/ascii/ — no restart needed.
An invisible layout widget for padding and alignment.
The grid is 5 columns wide with 130px rows. It is responsive — at narrower viewports it collapses to 3 and then 2 columns.
By default all breakpoints share one layout (auto mode). Switch to per-breakpoint mode in settings to configure each breakpoint independently.
app/ # Entrypoint and HTTP routes
helm/ # Helm chart for Kubernetes deployment
scripts/ # Developer scripts (kind cluster setup)
pkg/
api/ # Runtime API handlers and store watcher
apis/ # Kubernetes CRD type definitions
controller/ # Kubernetes controller
store/ # Storage interface and backends
plugins/ # Plugin implementations
github/ # GitHub plugin
ascii/ # ASCII animation plugin
spacer/ # Spacer plugin
widgets/ # Widget interface and registry
settings/ # User settings persistence
internal/
cache/ # TTL cache
ui/
templates/ # Page templates
static/ # CSS, JS, fonts
Each plugin is a self-contained package under pkg/plugins/. A plugin provides widgets — components the user can pin and arrange on the dashboard.
pkg/plugins/yourplugin/
templates/
widget.tmpl
widgets.go
type Widget interface {
Definition() WidgetDef
Render(ctx context.Context, filter string, sizeName string) (template.HTML, error)
}Embed and parse templates once at package init:
//go:embed templates/*.tmpl
var templateFS embed.FS
var tmpl = template.Must(template.ParseFS(templateFS, "templates/*.tmpl"))See pkg/plugins/github/widgets.go for a complete example.
In pkg/plugins/plugins.go, add to NewPluginManager:
reg.Register(yourplugin.NewWidget())The dashboard, widget picker, and preview API all work off the registry automatically.
Sizes define how many grid columns/rows a widget spans:
Sizes: []widgets.SizeOption{
{Name: "small", W: 1, H: 1},
{Name: "wide", W: 2, H: 1},
{Name: "tall", W: 1, H: 2},
}