Now liveThe Skillselion MCP - thousands of ranked skills, loaded into your agent mid-task. No install.Get it →
hkuds avatar

Personal Monitor Domain

  • 2 installs
  • 7.3k repo stars
  • Updated July 27, 2026
  • hkuds/openspace

Reference specification defining a personal daily monitoring dashboard's panels, data sources, APIs, and priority ordering for incremental development.

About

A domain specification listing the panels, data sources, APIs, and priority ordering for a personal daily monitoring dashboard. A developer uses it as a reference to decide which panel to build next or find API details for a data source.

  • Defines 18 dashboard panels with data sources and APIs
  • Priority ordering P0-P3 for incremental development

Personal Monitor Domain by the numbers

  • 2 all-time installs (skills.sh)
  • Ranked #1,287 of 1,879 Documentation skills by installs in the Skillselion catalog
  • Data as of Aug 4, 2026 (Skillselion catalog sync)
npx skills add https://github.com/hkuds/openspace --skill personal-monitor-domain

Add your badge

Show developers this skill is listed on Skillselion. Paste this into your README.

Listed on Skillselion
Installs2
repo stars7.3k
Last updatedJuly 27, 2026
Repositoryhkuds/openspace

What it does

Reference specification defining a personal daily monitoring dashboard's panels, data sources, APIs, and priority ordering for incremental development.

Files

SKILL.mdMarkdownGitHub ↗

Personal Monitor Domain Specification

This skill defines WHAT the my-daily-monitor dashboard should do — the panels, data sources, APIs, and features that make up a personal daily monitoring system. Use this as a reference when creating new panels or deciding what to build next.

When to Use

  • You are planning which panel to build next
  • You need API details for a specific data source
  • You are composing multiple panels into an integrated dashboard
  • You need to understand the priority ordering for incremental development

Target Panels Overview

#PanelData SourcePriorityStatus
1Schedule / CalendarGoogle Calendar APIP0 — CoreImplemented
2Email InboxGmail API (OAuth)P0 — CoreImplemented
3Feishu MessagesFeishu/Lark Open APIP0 — CoreImplemented
4Stock MarketFinnhub APIP0 — CoreImplemented
5News FeedGNews / HackerNewsP0 — CoreImplemented
6Code Status (CI/CD)GitHub Actions APIP1 — ImportantImplemented
7Office DocumentsMicrosoft Graph APIP1 — ImportantImplemented
8Social Feed (Twitter)Twitter API v2P1 — ImportantImplemented
9Daily FinanceManual / SpreadsheetP1 — ImportantImplemented
10WeatherOpenWeatherMap / wttr.inP1 — ImportantImplemented
11World ClockBuilt-in (no API)P2 — Nice to HaveImplemented
12MapMapLibre GLP2 — Nice to HaveImplemented
13AI InsightsLLM API (Groq/Ollama)P2 — Nice to HaveImplemented
14XiaohongshuWeb scraping / APIP2 — Nice to HavePartial
15DevOpsServer probesP2 — Nice to HaveImplemented
16Quick LinksStatic configP3 — ExtraImplemented
17Live NewsYouTube embedP3 — ExtraImplemented
18My MonitorsCustom keywordsP3 — ExtraImplemented

Panel Details

1. Schedule / Calendar

Purpose: Show today's meetings, upcoming events, and agenda

API: Google Calendar API v3

  • Auth: OAuth 2.0 (reuses Gmail credentials)
  • Endpoint: GET /api/calendar?calendarId=primary
  • Headers: X-Gmail-Client-Id, X-Gmail-Client-Secret, X-Gmail-Token

Data shape:

interface CalendarEvent {
  id: string;
  title: string;
  startTime: string;      // ISO 8601
  endTime: string;
  location?: string;
  isAllDay?: boolean;
  color?: string;
  meetingLink?: string;    // Zoom/Meet URL
}

Refresh interval: 5 minutes

2. Email Inbox

Purpose: Show unread emails, sender, subject, snippet

API: Gmail API v1

  • Auth: OAuth 2.0 (Client ID + Client Secret + Refresh Token)
  • Endpoint: GET /api/emails?maxResults=15&q=is:unread
  • Headers: X-Gmail-Client-Id, X-Gmail-Client-Secret, X-Gmail-Token
  • Server-side: Exchange refresh token for access token, call Gmail API

Data shape:

interface EmailMessage {
  id: string;
  from: string;
  subject: string;
  snippet: string;
  receivedAt: string;
  unread: boolean;
  labels?: string[];
}

Refresh interval: 2 minutes

3. Feishu Messages

Purpose: Show recent Feishu/Lark chat messages across all conversations

API: Feishu Open Platform API

  • Auth: App ID + App Secret → tenant access token
  • Endpoint: GET /api/feishu
  • Headers: X-Feishu-App-Id, X-Feishu-App-Secret
  • Server-side: Get tenant_access_token, fetch chat list, fetch recent messages

Data shape:

interface FeishuMessage {
  id: string;
  chatName: string;
  chatType: string;        // 'group' | 'p2p'
  avatar: string;
  senderName: string;
  content: string;
  imageUrl: string;
  timestamp: string;
  unread: boolean;
  chatId: string;
  recentMessages: FeishuRecentMsg[];
}

Refresh interval: 1 minute

4. Stock Market

Purpose: Track personal stock watchlist with prices, changes, sparklines

API: Finnhub Stock API

  • Auth: Query param token=API_KEY
  • Endpoint: GET /api/stocks?symbols=AAPL,MSFT,...
  • Free tier: 60 requests/minute
  • Server-side: Batch fetch quotes, return unified format

Data shape:

interface StockQuote {
  symbol: string;
  name: string;
  price: number | null;
  change: number | null;
  changePercent: number | null;
  high: number | null;
  low: number | null;
  sparkline?: number[];
}

Default watchlist: AAPL, MSFT, GOOGL, AMZN, TSLA, NVDA, META

Refresh interval: 1 minute

5. News Feed

Purpose: Aggregated headlines from multiple sources with threat classification

APIs:

  • GNews (primary): https://gnews.io/api/v4 — 100 req/day free
  • HackerNews (tech): https://hacker-news.firebaseio.com/v0/ — unlimited, no key
  • RSS feeds (fallback): Direct XML parsing

Data shape:

interface NewsArticle {
  title: string;
  description: string;
  url: string;
  source: string;
  publishedAt: string;
  image?: string;
  threatLevel?: 'critical' | 'high' | 'medium' | 'low';
}

Refresh interval: 5 minutes

6. Code Status (CI/CD)

Purpose: Show GitHub Actions workflow runs — passed, failed, in-progress

API: GitHub REST API v3

  • Auth: Personal Access Token (PAT) in GITHUB_TOKEN
  • Endpoint: GET /api/github?action=runs&owner=...&repo=...
  • Server-side: Fetch /repos/{owner}/{repo}/actions/runs

Data shape:

interface WorkflowRun {
  id: number;
  name: string;
  status: string;
  conclusion: string | null;   // 'success' | 'failure' | 'cancelled'
  branch: string;
  createdAt: string;
  url: string;
}

Refresh interval: 2 minutes

7. Office Documents

Purpose: Recent Office document activity (PPT, DOC, XLSX, PDF)

API: Microsoft Graph API

  • Auth: OAuth 2.0 (Azure AD app registration)
  • Endpoint: GET /api/office
  • Server-side: Call Graph API /me/drive/recent

Data shape:

interface OfficeDocument {
  id: string;
  name: string;
  type: 'doc' | 'xlsx' | 'ppt' | 'pdf';
  modifiedAt: string;
  modifiedBy: string;
  url?: string;
}

Refresh interval: 5 minutes

Note: Currently uses demo data. Full implementation requires Azure AD app registration with Files.Read permission.

8. Social Feed

Purpose: Twitter timeline + Xiaohongshu content

Twitter API v2:

  • Auth: Bearer Token
  • Endpoint: GET /api/social?action=search&q=... or action=list&listId=...
  • Server-side: Forward to Twitter search/list endpoint

Xiaohongshu:

  • No official API; requires web scraping or reverse-engineered endpoints
  • Potential approach: headless browser scraping via server-side proxy

Data shape:

interface SocialPost {
  id: string;
  platform: 'twitter' | 'xiaohongshu';
  author: string;
  username?: string;
  content: string;
  timestamp: string;
  likes?: number;
  retweets?: number;
  comments?: number;
  url?: string;
}

Refresh interval: 3 minutes

9. Daily Finance

Purpose: Track daily income and expenses, show balance

Data source options:

  • Google Sheets API (personal budget spreadsheet)
  • YNAB API (budgeting app)
  • Local JSON file / localStorage
  • Custom bookkeeping endpoint

Data shape:

interface DailySummary {
  totalIncome: number;
  totalExpense: number;
  balance: number;
  transactions: FinanceTransaction[];
}

interface FinanceTransaction {
  id: string;
  description: string;
  amount: number;
  type: 'income' | 'expense';
  category: string;
  date: string;
}

Refresh interval: 10 minutes

Composition: Today Focus Sidebar

The sidebar aggregates highlights from multiple panels into a single glanceable view:

interface TodayFocusData {
  nextEvent?: { title: string; startTime: string; minutesUntil: number };
  unreadEmails: number;
  unreadFeishu: number;
  stockAlerts: Array<{ symbol: string; changePercent: number }>;
  ciFailures: number;
  dailyBriefing?: string;   // AI-generated summary
}

Dependencies: schedule, email, feishu, stock-market, code-status, ai-summary

Composition: AI Daily Briefing

Uses an LLM to synthesize a morning briefing from all data sources:

Input: Unread emails, today's events, top news headlines, stock movers Output: 2-3 paragraph natural language summary API: Groq (free, fast) or local Ollama

API Key Configuration

All API keys are stored in browser localStorage via a Settings modal:

KeyRequired ForHow to Get
FINNHUB_API_KEYStock Markethttps://finnhub.io/ (free)
GNEWS_API_KEYNewshttps://gnews.io/ (free, 100/day)
GMAIL_CLIENT_IDEmail + CalendarGoogle Cloud Console OAuth
GMAIL_CLIENT_SECRETEmail + CalendarGoogle Cloud Console OAuth
GMAIL_REFRESH_TOKENEmail + CalendarOAuth flow
FEISHU_APP_IDFeishuFeishu Open Platform
FEISHU_APP_SECRETFeishuFeishu Open Platform
GITHUB_TOKENCode StatusGitHub → Settings → PAT
TWITTER_BEARER_TOKENSocial FeedTwitter Developer Portal
GROQ_API_KEYAI Insightshttps://console.groq.com/

Keys are passed to the server via request headers (never in query params), and the server-side proxy uses them to call external APIs.

Personal Data Sensitivity

This dashboard handles personal data. Key considerations:

1. API keys — stored in localStorage, never sent to third parties 2. Email content — proxied through your own server, not cached 3. Calendar events — may contain sensitive meeting details 4. Finance data — keep local, never expose to external APIs 5. Social accounts — use read-only tokens, never write access 6. No analytics — unlike WorldMonitor, no Sentry/Vercel Analytics needed 7. Self-hosted — run on localhost or personal server, not public deployment

Development Priority

Phase 1 (MVP): Schedule + Email + Feishu + Stock + News — the daily essentials Phase 2 (Complete): Code Status + Office + Social + Finance + Weather Phase 3 (Enhanced): Map + AI Insights + World Clock + Xiaohongshu Phase 4 (Polish): DevOps + Live News + Quick Links + My Monitors + Command Palette

Related skills

Documentationworkflowpm

This week in AI coding

Five minutes, every Monday - the tools, releases and tactics for developers.

unsubscribe anytime.