Trendable is a lightweight headline intelligence tool for ranking what is worth paying attention to across Dylan's news and signal sources.
It runs as both a local CLI and a Vercel-ready dashboard/API. The scraper collects headline candidates from configured source dashboards, JSON endpoints, and page metadata, then scores them for recency, source placement, keyword overlap, cross-source momentum, and available article context.
- Pulls from multiple configured dashboards and news endpoints.
- Extracts headlines from HTML, metadata, and JSON payloads.
- Deduplicates near-matching stories before ranking.
- Enriches strong candidates with summaries and images when available.
- Ships as a zero-dependency Python script plus a Vercel serverless endpoint.
- Includes a static front end for quickly scanning the ranked list.
| Layer | Technology |
|---|---|
| Scraper | Python standard library |
| Ranking | Keyword frequency, cross-source overlap, source-position weighting |
| API | Vercel Python serverless function |
| UI | Static HTML, CSS, JavaScript |
| Deploy | Vercel |
Configured sources
-> HTML + JSON extraction
-> headline cleanup
-> scoring + deduplication
-> metadata enrichment
-> CLI output or `/api/trendable`
The ranking model intentionally stays transparent. Every result carries source, score inputs, summary, image URL when found, and a direct link when available.
python trendable.pyOptional arguments:
python trendable.py --limit 20 --timeout 12GET /api/trendable?limit=15&timeout=10Parameters:
| Name | Default | Range | Purpose |
|---|---|---|---|
limit |
15 |
1-50 |
Number of ranked headlines to return |
timeout |
10 |
2-20 |
Seconds to wait per source |
Example response shape:
{
"triggerword": "Trendable",
"count": 15,
"sourceCount": 6,
"durationSeconds": 3.42,
"headlines": [
{
"text": "Example headline",
"source": "https://example.com/",
"url": "https://example.com/story",
"tag": "json",
"position": 1,
"score": 42.5,
"summary": "Short story summary",
"image_url": "https://example.com/image.jpg"
}
],
"errors": []
}Deploy the repository to Vercel. The project exposes:
/- static dashboard/api/trendable- Python serverless API endpoint
No Python package installation is required; the scraper uses the standard library.
| Path | Purpose |
|---|---|
trendable.py |
Scraper, ranking logic, CLI |
api/trendable.py |
Vercel serverless API wrapper |
public/index.html |
Production dashboard |
index.html |
Local/static dashboard copy |
TRENDABLE.md |
Codex triggerword runbook |
vercel.json |
Vercel routing |
- Add source health snapshots and latency telemetry.
- Add persisted trend history for "rising" vs. "already saturated" stories.
- Add screenshot examples to the README after a stable deployment pass.
- Add unit tests for JSON extraction, deduplication, and score weighting.
Trendable favors explainable ranking over opaque virality claims. It is built to help a human operator scan faster, spot overlap earlier, and turn raw headline flow into better editorial judgment.