Technical Reference

API documentation, data structures, and technical setup instructions for Your Radar.

User Guide Technical Reference

Overview

The Dashboard is a personal venture management dashboard. It tracks multiple projects (ventures), their priorities, tasks, and status across two main pages:

All Dashboard state (ventures, tasks, rules, layout) is stored in localStorage under the key vcc_state. Use Export/Import to back up or transfer data.

Ventures

A venture is any project, product, channel, or business entity you track. Each venture has:

FieldDescription
NameDisplay name
TypeEmployment, YouTube, Software, Event, Commerce, IP, Playground
StatusActive, Maintenance, Growth, Dormant, Seasonal, Backlog, Pitch
Priority LevelBaseline priority: Critical, High, Medium, Low
Risk LevelNone, Low, Medium, High
Attention RuleMust Not Break, Maintain Only, Opportunistic, Optional, Paused Safely
Value LineBrief revenue/value description shown on cards
DescriptionFull description (shown in card details)
TasksUp to 10 prioritized tasks (see Tasks section)
Escalation RulesRules that dynamically elevate priority (see below)
TagsCategorization labels for filtering
Event DatesKey dates for event-relative task scheduling
Card StyleColor, gradient, texture customization
Key DataLive metrics shown on the card (YouTube subs, Stripe revenue, etc.)

Click the + button (bottom-right) to add a venture, or click the pencil icon on any card to edit.

Priority System

The priority system determines how ventures and their tasks are sorted and displayed. It has three layers: baseline priority, escalation rules, and per-todo overrides.

Priority Levels

There are four levels, from most to least urgent:

  1. Critical — Immediate action required, failure has major consequences
  2. High — Important and time-sensitive, needs attention soon
  3. Medium — Should be addressed but not urgent
  4. Low — Nice to have, do when there's bandwidth

Each venture has a baseline priority set manually in the editor. This is the default when no escalation rules are active.

Escalation Rules

Escalation rules dynamically raise a venture's effective priority based on real-time conditions. The baseline priority is never changed — escalation is computed on the fly at render time.

Key concept: Rules can only escalate (raise) priority, never lower it. If the baseline is High and a rule says Medium, the effective priority stays High. The highest-urgency result across all active rules wins.

Rule Type: YouTube Upload Gap

Escalates when a YouTube channel hasn't uploaded a new video within a configurable number of days.

SettingDescription
ChannelWhich YouTube channel to monitor (matches window._revenueData.youtube[key])
ThresholdsList of { days, escalateTo } pairs. E.g., after 7 days → High, after 14 days → Critical

Example: A YouTube channel venture has a default rule — if no video is uploaded in 7 days, escalate to High. After 14 days, escalate to Critical.

Baseline: Medium Day 1-6: Medium (no rule fires) Day 7-13: High (7-day threshold fires) Day 14+: Critical (14-day threshold fires) Upload: Medium (resets to baseline)
Requires: The YouTube API must return lastUploadDate for the channel. This is fetched via the YouTube Data API search.list endpoint in services/youtube.js.

Rule Type: Event Proximity

Escalates as an event date (from the venture's Event Dates list) approaches. Uses the next upcoming event.

SettingDescription
ThresholdsList of { daysBeforeEvent, escalateTo } pairs. Checked from largest to smallest.

Example: An event venture uses event proximity to ramp up priority as the show date approaches:

Baseline: High 90+ days out: High (baseline, no rule fires) 90 days out: Low — wait, baseline is higher, stays High 30 days out: Medium — still High (baseline wins) 14 days out: High (matches baseline) 7 days out: Critical (escalated!) Event passes: Falls back to baseline for next event
Note: If the venture's baseline is already higher than the rule's escalation level, the baseline wins. Rules can only push priority up, not down.

Rule Type: Calendar Date Range

Escalates during a specific date range. Useful for seasonal obligations.

SettingDescription
Start DateWhen the rule becomes active
End DateWhen the rule deactivates
Escalate ToPriority level during the active window
LabelOptional description shown as the escalation reason (e.g., "Tax season")

Example: Set a rule from Feb 1 to Apr 15 that escalates to Critical with label "Tax season". During that window, the venture and its tasks will be treated as Critical priority.

Managing Escalation Rules

  1. Open the venture editor (click the pencil icon on a card)
  2. Expand the "Priority Escalation Rules" collapsible section
  3. Click "+ Add escalation rule" to create a new rule
  4. Choose a rule type, configure its parameters and thresholds
  5. Use the Enabled checkbox to toggle rules on/off without deleting them
  6. Click × to delete a rule
  7. Save the venture — rules are persisted with the venture data

Per-Todo Priority Overrides

Individual tasks can override their venture's effective priority. In the venture editor, each task row has a dropdown:

This is useful when one specific task is more urgent than the venture as a whole. For example, a Low-priority venture might have one Critical task like "Renew domain before expiration".

How Effective Priority Is Computed

When the dashboard renders, each venture's effective priority is calculated:

1. Start with baseline priorityLevel (set in editor) 2. Evaluate each enabled escalation rule 3. Each rule returns a level or null (no match) 4. Take the HIGHEST urgency across baseline + all rule results (Critical > High > Medium > Low) 5. Result = effective priority for the venture For each task: - If task has priorityOverride set → use that - Otherwise → use venture's effective priority

The effective priority determines:

Tasks & Recurrence

Each venture can have up to 10 tasks (called "priorities" in the UI). Tasks appear in the right-side panel, sorted by effective priority.

Task Fields

FieldDescription
TextTask description (max 80 chars)
Priority OverrideAuto (inherit) or Critical/High/Medium/Low
RecurrenceOne-off, Recurring (interval), or Before Event

Recurrence Types

One-off

Standard task. When completed, you choose a reset timer (Never, 1 week, 2 weeks, 1 month) or it stays checked off permanently.

Recurring (Interval)

Automatically resets after a set interval: Weekly (7d), Biweekly (14d), or Monthly (30d). When you check it off, it schedules an auto-reset for the interval period.

Before Event

Tied to the venture's event dates. You specify how many days before the event the task is due. The task auto-resets for each new event cycle.

Example: "Lock venue" is due 90 days before an event. After the event passes, it resets for the next event date.

Event Dates

Ventures can have a list of event dates with labels (e.g., "Spring Show - May 16"). These dates are used by:

The system always uses the next upcoming event date (any event within the past day or in the future, sorted soonest first).

Card Display & Key Data

Venture cards can show live data chips pulled from external APIs. The Key Data editor in the venture modal lets you drag chips between three zones:

Available Key Data Types

ChipSourceShows
Value LineManualRevenue/value description text
Next StepsTasksFirst 3 task texts
DescriptionManualFull venture description
NoteManualCustom card note text
YouTube SubsYouTube APISubscriber count
YouTube ViewsYouTube APITotal view count
Stripe RevenueStripe APIMRR
Stripe SubsStripe APIActive subscriber count
Event DatesEvent dates listNext event countdown
Last Event RecapTicket TailorRevenue from last event
Vendor Booths LeftTicket TailorAvailable vendor slots
TicketsTicket TailorTicket sales data

Card Styling

Each card can be customized with:

Revenue

The Revenue page (/dashboard.html) aggregates financial data from multiple sources:

SourceDataAPI Endpoint
StripeMRR, active subs, available balance per account/api/stripe
YouTubeEstimated revenue, views, watch time (requires OAuth)/api/youtube-revenue
SquareMonthly revenue, transaction count/api/square
Ticket TailorEvent ticket sales, vendor table revenue/api/tickettailor
Cash PaymentsManual cash payment records per event/api/cash-payments

Features: date range filtering (MTD, 30d, 90d, YTD, custom), privacy mode to blur dollar amounts.

Data & Storage

Client-Side (localStorage)

All Dashboard state is stored in localStorage under key vcc_state:

{ ventures: [ ... ], // Array of venture objects tags: [ ... ], // Global tag library uiSettings: { viewMode: 'priority', // 'priority' or 'category' activeTag: null, // Tag filter layout: { priorityOrder: [ { id, colSpan } ], categoryOrder: { type: [ { id, colSpan } ] } } } }

Export / Import

Use the Export button to download the full state as JSON. Use Import to restore from a backup. This is the only way to transfer data between browsers or recover from a localStorage clear.

Server-Side

The Express server (server.js) serves static files and provides API endpoints. External data is fetched server-side and cached. Service modules live in services/:

Architecture

┌─────────────────────────────────────────────────┐ │ Browser (Client) │ │ │ │ index.html ─── Landing Page │ │ dashboard.html ─── Dashboard │ │ demo.html ─── Interactive Demo (sample data) │ │ ├─ Venture cards (grid layout) │ │ ├─ Priority panel (right sidebar) │ │ ├─ Escalation engine (getEffectivePriority) │ │ └─ State in localStorage │ │ │ │ revenue.html ─── Revenue │ │ └─ Fetches from /api/* endpoints │ │ │ │ guide.html ─── This page │ └──────────────────────┬──────────────────────────┘ │ HTTP ┌──────────────────────┴──────────────────────────┐ │ server.js (Express) │ │ ├─ Static file serving │ │ ├─ /api/data ─── collector.js │ │ ├─ /api/stripe ─── stripe.js │ │ ├─ /api/square ─── square.js │ │ ├─ /api/tickettailor ─── tickettailor.js │ │ ├─ /api/youtube-revenue ─── youtube.js │ │ ├─ /api/cash-payments ─── cashpayments.js │ │ └─ /auth/youtube ─── OAuth flow │ └──────────────────────┬──────────────────────────┘ │ ┌─────────────┼─────────────┐ Stripe API YouTube API Square API Ticket Tailor API

Key Functions (dashboard.html)

FunctionPurpose
getEffectivePriority(venture)Computes effective priority from baseline + escalation rules
evaluateEscalationRule(venture, rule)Evaluates a single escalation rule against current conditions
sortVentures(arr)Sorts ventures by effective priority, then attention rule, then name
renderPrioritiesPanel()Renders the right-side task list grouped by effective priority
renderPriorityView(main, ventures)Renders the card grid sorted by effective priority
createCard(v)Creates a venture card DOM element with badges, key data, and details
openModal(id)Opens the venture editor modal (add/edit ventures, rules, tasks)
normPri(p)Normalizes a task to object form with all fields including priorityOverride
getNextEventDate(v)Returns the next upcoming event timestamp for a venture
checkResets()Auto-resets completed recurring/event-relative tasks when due
loadState() / saveState()Loads from / saves to localStorage with migrations
Last updated: February 1, 2026