diff --git a/data/claude-usage-history.json b/data/claude-usage-history.json index fe48d1f..cae1a20 100644 --- a/data/claude-usage-history.json +++ b/data/claude-usage-history.json @@ -2218,5 +2218,100 @@ "session_percent": 11, "timestamp": "2026-02-17T17:00:04.218973Z", "weekly_percent": 44 + }, + { + "session_percent": 11, + "timestamp": "2026-02-17T18:00:01.868010Z", + "weekly_percent": 44 + }, + { + "session_percent": 11, + "timestamp": "2026-02-17T18:00:01.946216Z", + "weekly_percent": 44 + }, + { + "session_percent": 11, + "timestamp": "2026-02-17T18:00:03.845286Z", + "weekly_percent": 44 + }, + { + "session_percent": 0, + "timestamp": "2026-02-17T19:00:01.592060Z", + "weekly_percent": 46 + }, + { + "session_percent": 0, + "timestamp": "2026-02-17T19:00:01.925561Z", + "weekly_percent": 46 + }, + { + "session_percent": 0, + "timestamp": "2026-02-17T19:00:03.080475Z", + "weekly_percent": 46 + }, + { + "session_percent": 8, + "timestamp": "2026-02-17T20:00:02.081983Z", + "weekly_percent": 47 + }, + { + "session_percent": 8, + "timestamp": "2026-02-17T20:00:02.289754Z", + "weekly_percent": 47 + }, + { + "session_percent": 8, + "timestamp": "2026-02-17T20:00:04.791951Z", + "weekly_percent": 47 + }, + { + "session_percent": 41, + "timestamp": "2026-02-17T21:00:01.633967Z", + "weekly_percent": 51 + }, + { + "session_percent": 41, + "timestamp": "2026-02-17T21:00:02.047220Z", + "weekly_percent": 51 + }, + { + "session_percent": 41, + "timestamp": "2026-02-17T21:00:06.169924Z", + "weekly_percent": 51 + }, + { + "session_percent": 50, + "timestamp": "2026-02-17T21:48:56.600469Z", + "weekly_percent": 52 + }, + { + "session_percent": 53, + "timestamp": "2026-02-17T22:00:02.553066Z", + "weekly_percent": 53 + }, + { + "session_percent": 53, + "timestamp": "2026-02-17T22:00:02.623498Z", + "weekly_percent": 53 + }, + { + "session_percent": 53, + "timestamp": "2026-02-17T22:00:03.948134Z", + "weekly_percent": 53 + }, + { + "session_percent": 54, + "timestamp": "2026-02-17T23:00:01.920826Z", + "weekly_percent": 53 + }, + { + "session_percent": 54, + "timestamp": "2026-02-17T23:00:01.949403Z", + "weekly_percent": 53 + }, + { + "session_percent": 54, + "timestamp": "2026-02-17T23:00:03.380113Z", + "weekly_percent": 53 } ] \ No newline at end of file diff --git a/data/deliveries.json b/data/deliveries.json index 6d1f720..b1ab54a 100644 --- a/data/deliveries.json +++ b/data/deliveries.json @@ -139,6 +139,29 @@ "status": "shipped", "created_at": "2026-02-16T21:32:56.660954276-05:00", "updated_at": "2026-02-16T21:32:56.660954333-05:00" + }, + { + "id": "fc1de09b", + "carrier": "Delta", + "retailer": "Delta Air Lines", + "description": "Delta flight TPA→JFK", + "tracking_number": "F86VDN", + "expected_date": "2026-02-19", + "status": "shipped", + "notes": "DL2475 TPA 7:16am → JFK 10:00am, DL2093 connecting. Basic Economy.", + "created_at": "2026-02-17T15:42:44.522789353-05:00", + "updated_at": "2026-02-17T15:42:44.522789397-05:00" + }, + { + "id": "5c63a5b4", + "carrier": "UPS", + "retailer": "Macys", + "description": "Alfred Dunner Ankle Pants (Tanya)", + "tracking_number": "1Z44FW28YW11545582", + "status": "shipped", + "notes": "Order #4720443389, 3-6 business days", + "created_at": "2026-02-17T15:42:44.528415555-05:00", + "updated_at": "2026-02-17T15:42:44.528415603-05:00" } ] } \ No newline at end of file diff --git a/data/news.json b/data/news.json index dc674cb..0ea4454 100644 --- a/data/news.json +++ b/data/news.json @@ -1,5 +1,130 @@ { "items": [ + { + "id": "8d5ad2b3", + "title": "851 Brightwaters: Sarasota buyers interested", + "body": "Bird Key homeowners with daughter in St Pete viewed 851 + a $8.95M new build at 1075 31st Ter NE. Agent expects to hear back today after their dinner discussion.", + "type": "info", + "source": "Diana Geegan", + "timestamp": "2026-02-17T15:43:00.350509513-05:00" + }, + { + "id": "301d4860", + "title": "S\u0026P 500 hits new high", + "body": "Markets rallied on strong earnings reports.", + "type": "info", + "source": "Bloomberg", + "url": "https://bloomberg.com", + "topic": "markets", + "timestamp": "2026-02-17T15:26:27.36295592-05:00" + }, + { + "id": "99116ff8", + "title": "NS to Improve Rail Services in North \u0026 East", + "body": "Dutch rail operator NS announced plans to improve train services in the north and east of the Netherlands next year.", + "type": "info", + "source": "NL Times", + "url": "https://nltimes.nl/", + "topic": "netherlands", + "timestamp": "2026-02-17T15:26:21.305073162-05:00" + }, + { + "id": "3edf97b4", + "title": "New Dutch Government Finalized", + "body": "The new coalition cabinet features 15 men and 13 women, with D66 (7), VVD (6), and CDA (5) ministers. Plans include tougher healthcare spending controls and more funding for education and defence.", + "type": "info", + "source": "DutchNews.nl", + "url": "https://www.dutchnews.nl/2026/02/the-new-dutch-government-the-complete-ministerial-line-up/", + "topic": "netherlands", + "timestamp": "2026-02-17T15:26:21.298193638-05:00" + }, + { + "id": "413936f4", + "title": "Trump Proposes Massive FEMA Overhaul", + "body": "The Trump administration is proposing sweeping changes to the Federal Emergency Management Agency, reshaping federal disaster response.", + "type": "warning", + "source": "NPR", + "url": "https://www.npr.org/sections/news/", + "topic": "news", + "timestamp": "2026-02-17T15:26:21.29128998-05:00" + }, + { + "id": "60bf135d", + "title": "Trump Pressures Ukraine Ahead of Geneva Talks", + "body": "Trump warned Zelenskyy to reach a deal with Russia \"fast,\" blaming Ukraine for holding up peace efforts. Second round of US-Iran talks also underway in Geneva today.", + "type": "info", + "source": "The Guardian", + "url": "https://www.theguardian.com/us-news/2026/feb/17/trump-administration-news-updates-today", + "topic": "news", + "timestamp": "2026-02-17T15:26:21.284328698-05:00" + }, + { + "id": "dbbfea57", + "title": "NABL Market Cap Under $1B", + "body": "N-able market cap now at $962M with negative EPS. RBC Capital maintained Buy rating in January, but the stock continues its downward slide.", + "type": "warning", + "source": "CNBC", + "url": "https://www.cnbc.com/quotes/NABL", + "topic": "nabl", + "timestamp": "2026-02-17T15:26:21.277407177-05:00" + }, + { + "id": "67fb477a", + "title": "NABL Hits New 52-Week Low: $5.13", + "body": "N-able (NABL) dropped 3.5% to $5.17, hitting a new 52-week low today. Stock has halved from its 52-week high of $10.41. Earnings report due Feb 19.", + "type": "error", + "source": "CNBC", + "url": "https://www.cnbc.com/quotes/NABL", + "topic": "nabl", + "timestamp": "2026-02-17T15:26:21.270491887-05:00" + }, + { + "id": "c4cc9cab", + "title": "Sonnet 4.6: 1M Context Window, Same Price", + "body": "Sonnet 4.6 doubles the context window to 1M tokens — enough for entire codebases. Priced the same as Sonnet 4.5. Opus 4.6 was released Feb 5.", + "type": "info", + "source": "TechCrunch", + "url": "https://techcrunch.com/2026/02/17/anthropic-releases-sonnet-4-6/", + "topic": "ai", + "timestamp": "2026-02-17T15:26:21.263317574-05:00" + }, + { + "id": "18b497a4", + "title": "Anthropic Launches Claude Sonnet 4.6", + "body": "Claude Sonnet 4.6 released today as the new default model for free and Pro users. Features 1M token context window, improved coding, computer use, and agent planning capabilities.", + "type": "success", + "source": "CNBC", + "url": "https://www.cnbc.com/2026/02/17/anthropic-ai-claude-sonnet-4-6-default-free-pro.html", + "topic": "ai", + "timestamp": "2026-02-17T15:26:21.255023772-05:00" + }, + { + "id": "6001cfde", + "title": "Tech Under Pressure, Value Rotation Gains Steam", + "body": "Growth-oriented tech shares diverged sharply from defensive sectors Tuesday afternoon, as consumer unease and tech volatility weighed on markets.", + "type": "warning", + "source": "StockMarketWatch", + "url": "https://stockmarketwatch.com/live/stock-market-today/", + "topic": "markets", + "timestamp": "2026-02-17T15:26:21.246362045-05:00" + }, + { + "id": "39a68d63", + "title": "Markets Reopen Lower After Presidents Day", + "body": "Stocks fell Tuesday as traders returned from the long weekend. Nasdaq 100 futures declined over 1%, with tech volatility and rotation toward value stocks characterizing the session.", + "type": "info", + "source": "TheStreet / StockMarketWatch", + "url": "https://www.thestreet.com/latest-news/stock-market-today-feb-17-stocks-fall-after-long-presidents-day-weekend", + "topic": "markets", + "timestamp": "2026-02-17T15:26:21.236707264-05:00" + }, + { + "id": "17e76651", + "title": "Claude Sonnet 4.6 Released", + "body": "Anthropic launched Sonnet 4.6 — 1M context (beta), adaptive thinking, improved web search, code execution GA, context compaction. $3/$15 per M tokens. Available on API, Bedrock, Vertex AI, and Foundry.", + "type": "info", + "timestamp": "2026-02-17T15:03:04.333449485-05:00" + }, { "id": "c3856d11", "title": "US markets closed — Presidents Day", @@ -317,15 +442,6 @@ "source": "Reuters/StockMarketWatch", "url": "https://stockmarketwatch.com/live/stock-market-today/", "timestamp": "2026-02-14T20:01:24.291022423-05:00" - }, - { - "id": "5077ff6a", - "title": "ByteDance Drops Doubao 2.0 + Seedance 2.0 — China AI Blitz Continues", - "body": "ByteDance released Doubao 2.0 (general AI model for \"agent era\") and Seedance 2.0 (video generation) this week. Seedance 2.0 went viral on Chinese social media, drawing DeepSeek-level comparisons. Alibaba also launched RynnBrain, Kuaishou dropped Kling 3.0. China keeping pace with US AI.", - "type": "info", - "source": "Reuters/CNBC", - "url": "https://www.reuters.com/world/asia-pacific/chinas-bytedance-releases-doubao-20-ai-chatbot-2026-02-14/", - "timestamp": "2026-02-14T20:01:24.28465218-05:00" } ] } \ No newline at end of file diff --git a/data/status.json b/data/status.json index 63cfa34..5c4107e 100644 --- a/data/status.json +++ b/data/status.json @@ -2,9 +2,9 @@ "items": { "claude": { "key": "claude", - "value": "44% used · 12:00 PM", + "value": "53% used · 6:00 PM", "type": "info", - "updated_at": "2026-02-17T12:00:04.279102463-05:00" + "updated_at": "2026-02-17T18:00:03.439268538-05:00" }, "claude-code-update": { "key": "claude-code-update", @@ -14,9 +14,9 @@ }, "claude-usage": { "key": "claude-usage", - "value": "📊 Weekly: 44% used", + "value": "📊 Weekly: 53% used", "type": "info", - "updated_at": "2026-02-17T12:00:03.920768203-05:00" + "updated_at": "2026-02-17T18:00:47.635585966-05:00" }, "claude_usage": { "key": "claude_usage", diff --git a/index.html b/index.html index 8af63e0..9a490c4 100644 --- a/index.html +++ b/index.html @@ -224,6 +224,43 @@ } .collapse-toggle::after { content: '▼'; margin-left: 4px; } + /* Topics */ + .topic-group { padding: 0; } + .topic-header { + padding: 10px 16px; + font-weight: 600; + font-size: 0.9rem; + color: var(--gold); + border-bottom: 1px solid var(--border); + text-transform: capitalize; + } + .topic-item { + padding: 8px 16px 8px 28px; + border-bottom: 1px solid var(--border); + } + .topic-item:last-child { border-bottom: none; } + .topic-item-body { + font-size: 0.8rem; + color: var(--text); + display: -webkit-box; + -webkit-line-clamp: 2; + -webkit-box-orient: vertical; + overflow: hidden; + margin-bottom: 4px; + } + .topic-item-meta { + font-size: 0.7rem; + color: var(--text-muted); + display: flex; + gap: 8px; + align-items: center; + } + .topic-item-meta a { + color: var(--gold); + text-decoration: none; + border-bottom: 1px dotted var(--text-muted); + } + /* Alerts/News */ .alert-item { padding: 12px 16px; @@ -524,6 +561,19 @@ +
+
+
+
+ Topics +
+ 0 +
+
+
No topics
+
+
+
@@ -676,6 +726,39 @@ } } + const topicEmoji = { + markets: '🏦', ai: '🤖', news: '📰', nabl: '📉', + politics: '🏛️', infrastructure: '🔧', netherlands: '🇳🇱' + }; + + function renderTopics(newsItems) { + const groups = {}; + newsItems.forEach(n => { + if (!n.topic) return; + const t = n.topic.toLowerCase(); + if (!groups[t]) groups[t] = []; + groups[t].push(n); + }); + const keys = Object.keys(groups); + document.getElementById('topics-count').textContent = keys.length; + if (!keys.length) { + document.getElementById('topics-container').innerHTML = '
No topics
'; + return; + } + document.getElementById('topics-container').innerHTML = keys.map(t => { + const emoji = topicEmoji[t] || '📌'; + const items = groups[t].map(n => ` +
+
${n.body || n.title}
+
+ ${n.url && n.source ? `${n.source}` : (n.source || '')} + ${formatTime(n.timestamp)} +
+
`).join(''); + return `
${emoji} ${t.charAt(0).toUpperCase() + t.slice(1)}
${items}
`; + }).join(''); + } + function renderAlert(n) { return `
@@ -748,6 +831,9 @@ ? recentNews.map(renderAlert).join('') : '
No alerts in last 24h
'; + // Render topics (from all news, not just 24h) + renderTopics(news); + // Render deliveries (active only - API already filters out delivered) document.getElementById('deliveries-count').textContent = deliveries.length; document.getElementById('deliveries-container').innerHTML = deliveries.length diff --git a/james-dashboard b/james-dashboard index 2a16459..ca67d61 100755 Binary files a/james-dashboard and b/james-dashboard differ diff --git a/server.go b/server.go index 62ad0fd..bc79860 100644 --- a/server.go +++ b/server.go @@ -170,6 +170,7 @@ type NewsItem struct { Type string `json:"type"` // info, success, warning, error Source string `json:"source,omitempty"` URL string `json:"url,omitempty"` + Topic string `json:"topic,omitempty"` Timestamp time.Time `json:"timestamp"` }