Inspiration

Every old forum thread, blog post and Hacker News discussion is a graveyard of links. We wanted a number, not a vibe: how much of the 2012 web is actually dead, and how much of it can be raised?

What it does

Necrolink scans a cohort of links, classifies each one (alive · dead · moved · bot-blocked), then holds a séance: it asks the Wayback Machine for the nearest snapshot and resurrects the dead link.

Measured result (real scan, reproducible with make judge-demo):

  • Of 299 links from 2012 Hacker News front-page stories (>300 points), 55.2% are dead or moved.
  • Of those, 84.2% are resurrected from the Wayback Machine.
  • Control cohort: 300 links from 2025 stories show only 10% dead, so the 2012 rot is age, not a broken scanner.

Bot-block responses (401/403/405/436) are counted as BLOCKED, never as dead, so the claim isn't inflated.

The live app is a haunted graveyard UI: each tombstone is a dead link, and the Séance box resurrects any URL you paste.

How we built it (with Kiro)

  • Spec-driven: .kiro/specs/necrolink/{requirements,design,tasks}.md. Kiro implemented every task from the spec. We amended the spec twice when real scans exposed bugs: Wayback 429s led to serial requests with backoff, and bot-blocks got their own BLOCKED class.
  • Steering: .kiro/steering/product.md holds the falsifiable claim and the control-cohort rule; tech.md holds the zero-dependency, CORS and theme rules.
  • Hooks: test-on-save runs tests on library edits; claim-sync regenerates the README claim when data changes.
  • Property-based tests: randomized never-throw and idempotence checks on the URL normalizer. 82 tests in total.

Zero runtime dependencies. Data from hn.algolia.com; snapshots from the Wayback availability API. MIT licensed.

Challenges

  • The Wayback availability API rate-limits under concurrency, so the scanner went serial with exponential backoff.
  • Many "dead" links were actually bot walls. Separating BLOCKED from DEAD changed the headline number, and it made the number honest.

What we learned

A spec with a falsifiable claim plus a control cohort keeps an AI-built project honest: the spec told Kiro what "correct" meant, and the control told us whether the scanner was lying.

What's next

Browser extension that rewrites dead links in place; scanning other corpora (Reddit 2010, Wikipedia citations).

Built With

Share this project:

Updates

Submission history