Easy-to-manage touch screens
무료 오픈소스 터치스크린으로 USB 설정 가이드, 드래그‑드롭 편집기, 로컬 제어를 제공하며 Home Assistant용으로 제작되었습니다
Charlotte-Mecklenburg 실시간 대시보드, 알림·날씨·교통·정전·CATS 지연·지역 주식
Live Charlotte-Mecklenburg dashboard with real-time alerts, weather, traffic incidents, power outages, CATS transit delays, and local stocks.
라이프스타일TypeScript · HTMLGitHub @nickFalcone온라인운영자 미확인
써 보셨어요? 한 번만 눌러 주세요. 로그인은 필요 없어요.
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기what's going on, charlotte?
저장소 README에서 가져옴
README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
Real-time dashboard for Charlotte, NC metro area
Monitor weather, traffic alerts, transit, power outages, news, and markets — all in one place.
• What is Charlotte Watch?
• For Developers
• Quick Start
• Environment Variables
• Project Structure
• Contributing
• Deployment
Charlotte Watch is a real-time monitoring dashboard for residents of the Charlotte, NC metro area. It aggregates critical information from multiple sources into a single, customizable interface.README 전문 보기 ↗Real-time dashboard for Charlotte, NC metro area
Monitor weather, traffic alerts, transit, power outages, news, and markets — all in one place.
Live: clt.watch
Charlotte Watch is a real-time monitoring dashboard for residents of the Charlotte, NC metro area. It aggregates critical information from multiple sources into a single, customizable interface.
Each widget is an independently updating panel on the dashboard. Widgets can be rearranged and resized, and each refreshes on its own schedule so data stays current without a page reload.
| Widget | Description |
|---|---|
| Alerts | Unified feed from 9 sources with AI-powered BLUF summary and interactive map |
| Weather | Current conditions, NWS alerts, forecast, radar map, air quality, and pollen |
| LYNX Transit | Real-time vehicle positions on Blue and Gold Lines, service alerts |
| News | Charlotte-area RSS news parsed and categorized by AI |
| Markets | Real-time stock quotes for CLT-area public companies |
The Alerts widget aggregates from 9 sources simultaneously:
Option 1: Basic development (no API functions)
npm install
npm run dev
# Open http://localhost:5173
Most widgets work without API keys. Stocks, AI summaries, air quality, pollen, and some alert feeds require keys.
Option 2: Full development (with API functions)
npm install
cp .env.example .dev.vars # Then fill in your API keys
npm run dev:pages
# Open http://localhost:8788
This mode uses Wrangler to run Cloudflare Pages Functions locally, which is required for AI summaries, stock quotes, and any endpoint that needs API keys.
# Development
npm run dev # Vite dev server only (no serverless functions)
npm run dev:pages # Full dev with Cloudflare Pages Functions (requires wrangler)
# Build
npm run build # TypeScript compile + Vite production build
npm run preview # Preview the production build locally
# Quality checks (run after every change)
npm run check:fix # Format + lint (auto-fix) + type-check
npm run check # Format + lint + type-check (read-only)
# Individual checks
npm run type-check # TypeScript type checking (frontend)
npm run type-check:functions # TypeScript type checking (functions/)
npm run lint # ESLint
npm run lint:fix # ESLint with auto-fix
npm run format # Prettier format
npm run format:check # Prettier check (no write)
# Tests
npm test # Run all tests once
npm run test:watch # Run tests in watch mode
# Workers
npm run deploy:cache-warmer # Deploy the cache warmer worker to Cloudflare
Always run before committing:
npm run check:fix
Copy .env.example to set up your local environment:
.env.local — used by npm run dev (Vite dev server). Vite loads these via loadEnv(...), and the values are read only by server-side dev middlewares/proxies..dev.vars — used by wrangler pages dev and Cloudflare Pages Functions/Workers in deployment.Environment variables are never bundled into client-side code. They are only read in server-side contexts (Vite dev server middleware and Cloudflare Functions) and are not exposed directly to the browser.
| Variable | Purpose | Required |
|---|---|---|
AI_PROVIDER | AI provider: openai or anthropic | For AI summaries |
OPENAI_API_KEY | OpenAI API key | If AI_PROVIDER=openai |
ANTHROPIC_API_KEY | Anthropic API key | If AI_PROVIDER=anthropic |
FINNHUB_API_KEY | Stock quotes (Markets widget) | For Markets widget |
RAPIDAPI_KEY | CATS Twitter, CFD Twitter, CMS Twitter | For transit/alerts |
HERE_API_KEY | Real-time traffic flow | For HERE traffic alerts |
GOOGLE_API_KEY | Air quality and pollen data | For Weather widget extras |
DRIVENC_API_KEY | NCDOT traffic incidents (DriveNC) | For NCDOT alerts |
TRANSIT_LAND_API_KEY | CATS Blue/Gold Line vehicle positions | For LYNX transit map |
DUKE_OUTAGE_URL | Duke Energy outage API endpoint | For Duke outage alerts |
DUKE_OUTAGE_AUTH | Duke Energy auth (Base64-encoded) | For Duke outage alerts |
| Service | Purpose | Free Tier | Sign Up |
|---|---|---|---|
| OpenAI | AI alert/weather summaries | Yes (limited) | platform.openai.com |
| Anthropic | AI alert/weather summaries | Yes (limited) | console.anthropic.com |
| Finnhub | Stock quotes | Yes | finnhub.io |
| RapidAPI | CATS/CFD/CMS Twitter | Varies | rapidapi.com |
| HERE Technologies | Traffic flow data | Yes | developer.here.com |
| Google Cloud | Air quality + pollen | Yes (limited) | console.cloud.google.com |
| Transitland | CATS vehicle positions | Yes | transit.land |
charlotte-watch/
├── src/
│ ├── components/
│ │ ├── widgets/ # Dashboard widgets (Weather, Alerts, etc.)
│ │ └── common/ # Reusable UI primitives
│ ├── services/ # API client functions
│ ├── alerts/ # Per-source alert fetchers (NWS, FAA, NCDOT, etc.)
│ ├── hooks/ # Custom React hooks
│ ├── utils/
│ │ └── queryKeys.ts # Centralized TanStack Query keys
│ ├── data/
│ │ └── transitRoutes.ts # Blue/Gold Line geometry and station coordinates
│ ├── types/ # TypeScript type definitions
│ ├── stores/ # Zustand state (layout, theme)
│ ├── prompts/ # AI system prompts (JSON)
│ └── assets/icons/ # Material Design SVG icons
├── functions/ # Cloudflare Pages Functions (serverless API proxies)
│ ├── api/ # API routes (/api/*)
│ └── _lib/ # Shared utilities for functions
├── workers/
│ └── cache-warmer.ts # Cloudflare Worker — pre-warms KV cache for news
├── public/
│ └── _headers # CSP and security headers
└── docs/ # Documentation
├── DEVELOPMENT.md
├── DEPLOYMENT.md
├── CONVENTIONS_*.md
└── GUIDE_*.md
Frontend: React 18 + TypeScript, TanStack Query, Styled Components, Radix UI, Vite
Backend: Cloudflare Pages Functions (17 serverless API routes), Cloudflare KV for response caching (30 seconds to 6 hours depending on endpoint)
Cache Warmer: A separate Cloudflare Worker (workers/cache-warmer.ts) pre-fetches and LLM-parses RSS news feeds on a schedule, writing results to KV so the News widget loads instantly.
Key Patterns:
src/utils/queryKeys.ts) — never inline query key strings.env files loaded by Vitepublic/_headersContributions are welcome. Before you start:
docs/ for relevant guides (widgets, API integration, accessibility, etc.)npm run check:fix before committingFor AI coding agents: See AGENTS.md for full instructions including query key conventions, accessibility requirements (WCAG 2.2 AAA), and API patterns.
Deploys automatically via GitHub Actions on push to master (production) and on pull requests (preview deployments).
Quick checklist:
CLOUDFLARE_API_TOKEN, CLOUDFLARE_ACCOUNT_ID, CLOUDFLARE_PAGES_PROJECT.dev.vars)master or open a PRSee docs/DEPLOYMENT.md for full instructions, including the cache warmer worker deployment.
MIT
Built for the Charlotte community.