Inspiration

Reproducing older software environments is far harder than it should be. Trying to recreate a “Node + Express 2015” setup or a “Django 2018” environment usually leads to missing versions, inconsistent docs, and guesswork.

As a solo developer, I wanted to build a tool that truly revives old stacks — stitching together real registry data and reconstructing environments from the past. The Kiroween Frankenstein theme immediately clicked: bring dead technology back to life with modern tools.

What it does

MCP Time-Traveler lets you pick: a language a framework a year …and instantly rebuilds a realistic software environment for that time period.

The system returns: runtime version package manager version real package versions from npm, PyPI, and RubyGems confidence levels historical notes Haunted Mode, which highlights uncertain versions (spooky but useful)

Everything runs live through: Frontend (Vercel) API backend (Heroku) Custom MCP server for real registry lookups

How I built it

I built the entire project as a solo developer, relying on Kiro throughout the process as a development accelerator and architectural partner.

Tech Stack Frontend: React + Vite → Vercel Backend: Node + Express (TypeScript) → Heroku MCP Server: Custom tool querying npm, PyPI, RubyGems Shared Types: Consolidated structure across services Deployment: Independent builds for API and web, clean monorepo layout

How Kiro helped Vibe coding to create the initial API routes, Express server, MCP commands, and web components Specs in .kiro/specs to formalize the system and keep API / MCP / UI aligned Steering docs to ensure consistent coding style across all generated code Agent Hooks for: scaffold regeneration pre-commit type checks MCP integration to give Kiro live registry-querying abilities (transforming Kiro into a tool-augmented assistant instead of a static chat agent)

Working alone, Kiro’s structured assistance allowed me to maintain momentum, avoid architecture drift, and ship three coordinated services quickly.

Challenges I ran into

TypeScript builds on Vercel failed due to shared-module imports -> solved by isolating frontend types Heroku builds failed because type packages were in devDependencies -> moved to dependencies Registry APIs behave differently (npm vs PyPI vs RubyGems) -> required normalization logic Designing a cross-ecosystem version-confidence algorithm Keeping the monorepo clean and consistent across three independently deployed services Doing all of this solo meant Kiro’s scaffolding and refactor guidance were essential to stay efficient.

Accomplishments that I'm proud of

Built a working, fully deployed Frankenstein-style time machine for developer stacks Designed and implemented a custom MCP server from scratch Achieved clean type-shared architecture across API, UI, and MCP Created Haunted Mode to highlight uncertainty using historical data Leveraged all major Kiro features (vibe coding, specs, hooks, steering, MCP) in one cohesive project Delivered the full build, deployments, and polish as a solo developer

What I learned

MCP is extremely powerful — giving an AI access to real registry data changes everything Spec-driven development prevents drift, especially in multicomponent projects Steering docs dramatically improve code consistency across generated outputs Agent Hooks feel like a lightweight CI system, catching issues before they land Small, well-structured services deploy more reliably on platforms like Heroku and Vercel

What's next for Frankenstein - MCP Time-Traveler

Add more ecosystems (Go, Rust, PHP, .NET, Android) Generate complete environment exports (Dockerfile, requirements.txt, package.json for any year) Introduce “Bug Replay Mode” to recreate known ecosystem bugs from specific years Build a CLI powered entirely by the MCP server Add caching + fallback logic to speed up registry queries

Built With

Share this project:

Updates

Submission history