Skip to main content
Dex organizes functionality into specialized command centers, each providing focused interfaces for specific workflows. All centers are accessible through the Dashboard.

Entry Command Centers

Manage entry creation, editing, and health validation.

Init Wizard

Purpose: Create new entries via guided wizard interface. Launch: Dashboard → Init or dex init Workflow:
1

Basic Info

  • Slug (URL-safe identifier)
  • Title
  • Artist name
  • Series (dex/inDex/dexFest)
2

Credits

  • Artist details
  • Video crew (director, cinematography, editing)
  • Audio crew (recording, mix, master)
  • Instruments
  • Location and year
3

Downloads

Configure recording downloads with channels:
  • Mono (single file)
  • Stereo (left + right)
  • Multichannel (multiple discrete tracks)
Special Features:
  • Ctrl+I - Import recording index from Google Sheets URL
  • Ctrl+P - Paste mode for large URLs
  • Ctrl+G - Cycle channel view
  • Tab - Focus different panes (rows/pdf/bundle/source/segments)
4

Tags

  • Type to filter available tags
  • Space to toggle selection
  • Navigate with arrow keys
5

Review & Save

  • Preview all configuration
  • Enter to write entry HTML
  • Esc to return and edit
Output: entries/<slug>/index.html
The init wizard caches the last configuration to .dex-last.json for faster iteration during batch entry creation.

Update Wizard

Purpose: Rehydrate and edit existing entry metadata. Launch: Dashboard → Update or dex update Workflow:
1

Select Entry

Choose entry slug from filesystem scan
2

Checklist

Review sections to update:
  • Basic metadata
  • Credits
  • Downloads
  • Tags
Toggle sections with Space
3

Edit Fields

  • Navigate with /
  • Type to edit current field
  • Ctrl+I to import recording index
4

Review & Save

  • Ctrl+S to save and regenerate HTML
  • Esc to cancel
Output: Updates entries/<slug>/index.html and embedded JSON manifest

Doctor

Purpose: Scan entries for drift and health issues with safe repair. Launch: Dashboard → Doctor or dex doctor Features:
  • Scans all generated entries in entries/ directory
  • Detects drift between metadata and HTML
  • Shows per-entry health report:
    • ✓ PASS - Entry is healthy
    • ✗ FAIL - Drift detected or invalid data
Repair Flow:
  1. Navigate to failed entry with /
  2. Review error details in right pane
  3. Press Ctrl+S to repair selected entry
  4. Doctor regenerates HTML from embedded manifest
Non-TTY Mode: Prints report and exits with nonzero status on failures
Doctor repair regenerates entry HTML. Always commit working state before running batch repairs.

Entry Audit

Purpose: Run production-readiness checks and validate download tree coverage. Launch: Dashboard → Entry Audit or dex entry audit --all Interface:
  • Left pane: List of all entries with audit status
  • Right pane: Download tree visualization for selected entry
Audit Checks:
  • Recording index reference validity
  • Asset token format validation
  • Download tree completeness
  • Protected asset coverage
  • Manifest schema compliance
Actions:
  • r - Rerun audit scan
  • / - Navigate entries
  • Filter by typing slug text
Download Tree Model: Shows hierarchical coverage:
✓ Recording Index
  ✓ Stereo Master
    ✓ L (protected://...)
    ✓ R (protected://...)
  ✓ PDF Score
  ✓ Bundle

Content Command Centers

Manage catalog, home page, and editorial content.

Catalog Manager

Purpose: Manage catalog manifest, spotlight, and live publication. Launch: Dashboard → Catalog View Modes:
  • Full (m to toggle) - All entries from built snapshot
  • Staged - Only manifest entries ready for publish
Primary Operations:

Stage Entry (a)

Add entry to catalog manifest with metadata:
  • Lookup token
  • Season
  • Performer name
  • Instrument

Set Spotlight (s)

Configure featured spotlight entry:
  • Headline text
  • CTA label
  • Entry reference

Validate (v)

Run validation and create snapshot:
  • Schema validation
  • Linkage integrity
  • Protected asset coverage

Publish (p/o)

Push to live environment:
  • p - Test environment
  • o - Prod (requires “PUBLISH PROD” confirmation)
Diff Operations:
  • d - Compare local vs test
  • f - Compare local vs prod
Shows added, modified, and removed entries. Pull Operations:
  • l - Pull snapshot from test
  • k - Pull snapshot from prod
Always validate (v) before publishing. Validation failures block publish operations.
Purpose: Manage featured entries on home page. Launch: Dashboard → Home Operations:
1

Set Featured List (a)

Input comma-separated entry IDs:
entry-001,entry-042,entry-099
2

Reorder (e)

Change display order of featured entries
3

Validate (v)

Check that all referenced entries exist in catalog
4

Publish

  • p - Publish to test
  • o - Publish to prod (with confirmation)
Status Display:
  • Current featured count
  • Last validation result
  • Publish history

Dex Notes Manager

Purpose: Manage markdown blog posts and editorial workflow. Launch: Dashboard → Notes Post Lifecycle:
1

Create Draft (a)

Runs dex notes add to create post wrapper with frontmatter
2

Edit Content (e)

Opens selected post in $EDITOR (vim, nano, code, etc.)
3

Set Metadata (t)

Update post title and frontmatter fields
4

Build (b)

Generate HTML from markdown sources
5

Validate (v)

Check frontmatter schema and link validity
6

Publish

Run dex notes publish to deploy
Display:
  • List of all posts with status
  • Frontmatter preview
  • Publish dates

Polls Manager

Purpose: Create, edit, and publish audience polls. Launch: Dashboard → Polls Poll Fields:
  • Question text
  • Visibility (public or members)
  • Status (draft, open, closed)
  • Manual close toggle
  • Close timestamp
Operations:
Opens editor with empty poll template:
{
  "question": "",
  "visibility": "public",
  "status": "draft",
  "manualClose": false
}
Publishing:
  • t - Publish to test environment
  • p - Publish to prod environment

Newsletter Manager

Purpose: Manage email campaigns, templates, and sending. Launch: Dashboard → Newsletter Campaign Workflow:
1

Create Draft (n)

Configure campaign:
  • Template (e.g., “newsletter”)
  • Name
  • Subject line
  • Preheader text
  • Audience segment
  • Template variables
2

Preview (p)

Render HTML preview with variables:
  • Opens in browser
  • Shows actual rendered content
  • Validates template syntax
3

Test Send (t)

Send to test email address for inbox review
4

Schedule (s)

Schedule send +5 minutes from now
5

Send Now (x)

Immediately send to segment
Campaign List:
  • Draft campaigns
  • Scheduled sends
  • Sent campaigns with stats
Stats Display (g):
  • Open rate
  • Click rate
  • Bounce rate
  • Unsubscribe count
Newsletter sending and scheduling are PUBLISH operations that immediately affect production email systems.

Calls Manager

Purpose: Manage “IN DEX” calls registry and active state. Launch: Dashboard → Calls Features:
  • View canonical calls list
  • Toggle active/inactive state
  • Edit call metadata
  • Validate call linkage

Infrastructure Command Centers

Manage protected assets, status incidents, and operational links.

Protected Assets Manager

Purpose: Validate and publish protected asset lookup mappings. Launch: Dashboard → Assets Asset Coverage: Maps lookup tokens to protected storage:
lookup:performer-title:track -> protected://bucket/path/to/file.flac
Operations:

Validate (v)

Check coverage for active catalog lookups:
  • All active entries have assets
  • Token format validation
  • Storage bucket existence

Diff (d/f)

Compare local vs environment:
  • d - Test environment
  • f - Prod environment

Publish (p/o)

Push asset mappings:
  • p - Test environment
  • o - Prod environment

Ensure Bucket (b/n)

Create storage bucket if missing:
  • b - Test bucket
  • n - Prod bucket
Display:
  • List of all lookup tokens
  • Coverage status
  • Missing asset warnings
Preflight checks block deployment if protected asset coverage is incomplete for active catalog entries.

Status Manager

Purpose: Manage status incidents and generate incident pages. Launch: Dashboard → Status or dex status Incident Lifecycle:
1

Create Incident (n)

Open incident editor with fields:
  • Title
  • Description
  • Severity (minor, major, critical)
  • Status (investigating, identified, monitoring, resolved)
  • Affected systems
2

Save (Ctrl+S)

Commits incident and triggers:
  • JSON file write
  • Incident page generation
  • Status page update
  • Publish event
3

Resolve (r)

Mark incident as resolved:
  • Sets status to “resolved”
  • Records resolution timestamp
  • Updates status page
4

Regenerate Page (g)

Rebuild incident HTML from data
Editor Controls:
  • / - Navigate fields
  • Enter - Edit text field
  • / - Cycle enum values
  • S or Ctrl+S - Save
  • Esc - Cancel
Status incident creation and resolution trigger publish events that immediately update the live status page.
Purpose: Open staff operational links in default browser. Launch: Dashboard → Links Link Categories:
  • Production sites
  • Test environments
  • Admin panels
  • Analytics dashboards
  • Documentation
Usage:
  1. Navigate to desired link with /
  2. Press Enter to open in browser
  3. Press Esc to return to dashboard

Command Center Design Patterns

Consistent Navigation

All command centers follow these patterns:
  • / - Navigate lists and menus
  • Enter - Activate/select/continue
  • Esc - Back/cancel
  • Ctrl+Q - Quit Dex
  • Type - Filter or edit

Status Line

Bottom of each center shows:
  • Current operation state
  • Row counts (e.g., “full=42 staged=38”)
  • Last operation result
  • Error messages

Multi-Pane Layout

Complex centers use split views:
  • Left pane - List/menu
  • Right pane - Details/preview
  • Bottom - Status and help
Inline editing for structured data:
  • Field-by-field navigation
  • Type-appropriate controls (text/enum/bool)
  • Preview before save
  • Cancel with Esc

Performance Considerations

Large Datasets

Command centers handle large entry sets efficiently:
  • Windowed rendering (only visible rows)
  • Lazy loading for details panes
  • Incremental filtering
  • Debounced search

Async Operations

Long-running operations show:
  • “Busy” indicator
  • Progress messages
  • Graceful error handling
  • Results display

Troubleshooting

Symptom: Returns to dashboard immediatelyCauses:
  • Missing data files (catalog.json, polls.json, etc.)
  • Invalid JSON syntax
  • File permissions
Fix:
# Check file existence and validity
cat data/catalog.editorial.json | jq .

# Fix permissions
chmod 644 data/*.json
Symptom: Auth errors or 401 responsesCauses:
  • Missing admin tokens
  • Expired credentials
  • Wrong environment
Fix:
# Set tokens in shell
export DEX_CATALOG_ADMIN_TOKEN_TEST="..."
export DEX_CATALOG_ADMIN_TOKEN_PROD="..."

# Verify environment
echo $DEX_CATALOG_ADMIN_TOKEN_PROD
Symptom: Publish disabled after validation failsCauses:
  • Schema errors
  • Missing coverage
  • Invalid references
Fix:
  1. Review validation errors in status line
  2. Run CLI commands for detailed output:
    dex catalog validate
    dex assets validate
    
  3. Fix errors and re-validate (v)
Symptom: $EDITOR command fails or opens unexpected programFix:
# Set preferred editor
export EDITOR=vim
# or
export EDITOR=nano
# or
export EDITOR="code --wait"

Next Steps

Keybindings Reference

Complete keyboard shortcut reference

CLI Commands

Non-interactive CLI command reference

Workflows

Production-safe operational workflows

Dashboard

Main dashboard navigation guide

Build docs developers (and LLMs) love