The problem
Incoming feeds repeat stories, use different titles, and carry different levels of evidence. A useful dashboard needs to link reports while preserving their sources and making uncertainty visible.
My contribution
I scoped and directed the AI-assisted dashboard, defined source and classification requirements, and reviewed ingestion and matching outcomes. The portfolio distinguishes observed dataset counts from factual accuracy.
Architecture
A React/TypeScript interface presents the feed, map, filters, source registry, and event details. FastAPI exposes the local event store. HTTPX and feedparser support ingestion; the wrapper manages the local processes.
Read the architecture flow
- 1Public feed adapters
- 2Normalize reports
- 3URL + similarity matching
- 4SQLite events and links
- 5Confidence rules + FastAPI
- 6React dashboard
Count reports and sources separately
The ingestion service normalizes reports, matches canonical URLs, then considers title and token similarity within a bounded time, location, and event-type candidate set. SQLite retains event-to-report links. Confidence is rule-based and exposed alongside the event rather than presented as ground truth.
The tradeoff
Matching similar reports reduces duplicate event rows, but neither repeated URLs nor multiple registered sources proves independent corroboration. That distinction changes how the result should be described.
189 retained events from a documented ingestion snapshot
Read-only aggregate queries found 2,350 fetched items in retained fetch logs and 189 non-demo events. Of those events, 101 link to multiple report URLs; 39 link to more than one registered source ID. Distinct IDs still do not establish independent publishers.
| Fetched items in logs | 2,350 |
|---|---|
| Non-demo events | 189 |
| Multiple report URLs | 101 / 189 |
| Distinct source IDs | 39 / 189 |
Method and scope
Read-only immutable SQLite aggregate queries on October 21, 2026. The store contains 64 fetch-log rows across five minute-groups. These are retained-data observations, not a fresh ingestion benchmark. The schema has no dedicated run identifier. The items_created counter totals 1,161; it is not treated as proof of that many unique independently verified reports.
Verification and limits
3 existing tests pass on a private source copy: two confidence-scoring cases and one manual-event round trip. Source inspection supports the matching architecture; dedicated deduplication regression coverage remains a gap.
- No factual accuracy, coverage, live freshness, or calibrated confidence rate is claimed.
- The earlier 53% multi-source wording conflates multiple report URLs with distinct registered sources. The counts above preserve that distinction.
- Source failures, remote ingestion, and matching need broader fixture-based regression tests.
- During capture, the configured CARTO basemap returned an API-key requirement. Current external-map availability is not established; the screenshot shows analytics.
These results describe the inspected project and stated test conditions. They are not a guarantee for every input or machine.
