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
Log in or sign up for Devpost to join the conversation.