chore: auto-commit uncommitted changes

This commit is contained in:
James 2026-02-17 18:01:07 -05:00
parent d905def5ee
commit a2d00ab71a
7 changed files with 334 additions and 13 deletions

View File

@ -2218,5 +2218,100 @@
"session_percent": 11, "session_percent": 11,
"timestamp": "2026-02-17T17:00:04.218973Z", "timestamp": "2026-02-17T17:00:04.218973Z",
"weekly_percent": 44 "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
} }
] ]

View File

@ -139,6 +139,29 @@
"status": "shipped", "status": "shipped",
"created_at": "2026-02-16T21:32:56.660954276-05:00", "created_at": "2026-02-16T21:32:56.660954276-05:00",
"updated_at": "2026-02-16T21:32:56.660954333-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"
} }
] ]
} }

View File

@ -1,5 +1,130 @@
{ {
"items": [ "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", "id": "c3856d11",
"title": "US markets closed — Presidents Day", "title": "US markets closed — Presidents Day",
@ -317,15 +442,6 @@
"source": "Reuters/StockMarketWatch", "source": "Reuters/StockMarketWatch",
"url": "https://stockmarketwatch.com/live/stock-market-today/", "url": "https://stockmarketwatch.com/live/stock-market-today/",
"timestamp": "2026-02-14T20:01:24.291022423-05:00" "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"
} }
] ]
} }

View File

@ -2,9 +2,9 @@
"items": { "items": {
"claude": { "claude": {
"key": "claude", "key": "claude",
"value": "44% used · 12:00 PM", "value": "53% used · 6:00 PM",
"type": "info", "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": { "claude-code-update": {
"key": "claude-code-update", "key": "claude-code-update",
@ -14,9 +14,9 @@
}, },
"claude-usage": { "claude-usage": {
"key": "claude-usage", "key": "claude-usage",
"value": "📊 Weekly: 44% used", "value": "📊 Weekly: 53% used",
"type": "info", "type": "info",
"updated_at": "2026-02-17T12:00:03.920768203-05:00" "updated_at": "2026-02-17T18:00:47.635585966-05:00"
}, },
"claude_usage": { "claude_usage": {
"key": "claude_usage", "key": "claude_usage",

View File

@ -224,6 +224,43 @@
} }
.collapse-toggle::after { content: '▼'; margin-left: 4px; } .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 */ /* Alerts/News */
.alert-item { .alert-item {
padding: 12px 16px; padding: 12px 16px;
@ -524,6 +561,19 @@
</div> </div>
</div> </div>
<div class="section">
<div class="section-header">
<div class="section-header-left">
<div class="section-indicator alerts"></div>
<span class="section-title">Topics</span>
</div>
<span class="section-count" id="topics-count">0</span>
</div>
<div class="card" id="topics-container">
<div class="empty">No topics</div>
</div>
</div>
<div class="section"> <div class="section">
<div class="section-header"> <div class="section-header">
<div class="section-header-left"> <div class="section-header-left">
@ -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 = '<div class="empty">No topics</div>';
return;
}
document.getElementById('topics-container').innerHTML = keys.map(t => {
const emoji = topicEmoji[t] || '📌';
const items = groups[t].map(n => `
<div class="topic-item">
<div class="topic-item-body">${n.body || n.title}</div>
<div class="topic-item-meta">
${n.url && n.source ? `<a href="${n.url}" target="_blank">${n.source}</a>` : (n.source || '')}
<span>${formatTime(n.timestamp)}</span>
</div>
</div>`).join('');
return `<div class="topic-group"><div class="topic-header">${emoji} ${t.charAt(0).toUpperCase() + t.slice(1)}</div>${items}</div>`;
}).join('');
}
function renderAlert(n) { function renderAlert(n) {
return ` return `
<div class="alert-item"> <div class="alert-item">
@ -748,6 +831,9 @@
? recentNews.map(renderAlert).join('') ? recentNews.map(renderAlert).join('')
: '<div class="empty">No alerts in last 24h</div>'; : '<div class="empty">No alerts in last 24h</div>';
// Render topics (from all news, not just 24h)
renderTopics(news);
// Render deliveries (active only - API already filters out delivered) // Render deliveries (active only - API already filters out delivered)
document.getElementById('deliveries-count').textContent = deliveries.length; document.getElementById('deliveries-count').textContent = deliveries.length;
document.getElementById('deliveries-container').innerHTML = deliveries.length document.getElementById('deliveries-container').innerHTML = deliveries.length

Binary file not shown.

View File

@ -170,6 +170,7 @@ type NewsItem struct {
Type string `json:"type"` // info, success, warning, error Type string `json:"type"` // info, success, warning, error
Source string `json:"source,omitempty"` Source string `json:"source,omitempty"`
URL string `json:"url,omitempty"` URL string `json:"url,omitempty"`
Topic string `json:"topic,omitempty"`
Timestamp time.Time `json:"timestamp"` Timestamp time.Time `json:"timestamp"`
} }