Find your way through any codebase.
CodeLantern reads a repository once and turns it into a map you can walk: the architecture, real request paths, source evidence checked line by line, a guided tour, and a 90-second film.
Claude reads once. Code checks everything.
Scan
Reads the repo, skips noise, and orders what matters: manifests, entry points, routes, models.
One Claude call
Claude writes a single structured map: components, journeys, a tour, first tasks.
Verify by code
Every quoted snippet is matched against the real file. Line numbers come from code, never the model.
Count by code
Routes, env vars, dependencies, data models and the import graph are extracted for free.
Cache & share
The map is saved once. Everyone after that explores it, tours it and watches the film at no cost.
Follow a real request, not a folder tree.
Pick a question a new engineer would ask. CodeLantern walks it across the components, one step at a time, with the code that does it.
- What happens when a user signs up?
What happens when a user signs up?
- Nginx Reverse Proxy
The request to http.takestance.xyz is proxied to port 3001.
nginx-conf/nginx.conf:26
- Express HTTP API
POST /signup checks that a username and password were sent and that the user does not already exist.
apps/http-server/src/index.ts:15
- Express HTTP API
The password is hashed with bcrypt using 10 salt rounds.
apps/http-server/src/index.ts:31
- Shared Prisma Package
The shared prisma client runs user.create.
packages/prisma/src/index.ts:26
- PostgreSQL
A row is inserted into the User table, which enforces a unique username.
packages/prisma/prisma/schema.prisma:11
Every claim points at a real line.
The model quotes code; CodeLantern finds that exact text in the file and computes the line numbers itself. If it can't be found, it's marked unverified — never guessed.
Nginx proxies the http subdomain to port 3001.
18 proxy_set_header Host $host;19 proxy_cache_bypass $http_upgrade;20 }21 }2223 server {24 listen 80;2526 server_name http.takestance.xyz;2728 location / {29 proxy_pass http://localhost:3001;3031 proxy_http_version 1.1;3233 proxy_set_header Upgrade $http_upgrade;34 proxy_set_header Connection "upgrade";The things the model shouldn't count.
Routes, environment variables, dependencies, data models, languages and the import graph are extracted by code — exact, instant and free.
- Which files everything depends on
- What you need in .env before it runs
- Every page and API route with its methods
- GET/hello
- POST/signin
- POST/signup
- packages/eslint-config/base.js2
- apps/web/app/globals.css1
- .dockerignore0
- .env.example0
- .github/workflows/cd_backend.yml0
DATABASE_URL NODE_ENV PORT
TypeScript · Markdown · JSON · YAML
Five steps from “what is this?” to your first change.
The tour drives the map for you: the big pieces, where requests enter, a live journey, and the safest place to start.
Follow signup
The signup route validates the input, hashes the password and creates a User row through Prisma.
- What is this?
- The big pieces
- Where requests enter
- Follow signup
- Your first change
A 90-second film, generated from the same map.
Architecture, a real journey with its code, your first task and the proof — rendered with Remotion straight from the data. Share it with the team.
Open one. It's already lit.
These were analysed once and cached. Opening them costs nothing and needs no key.
Map your own repo, on your own key.
CodeLantern is open source. Clone it, add your Anthropic key locally, and map any public repository. One analysis is a single Claude call; viewing, the tour and the film never call it again.
# get the code$ git clone https://github.com/titanjagpreet/code-lantern && cd code-lantern# install$ npm install# your key stays on your machine$ echo "ANTHROPIC_API_KEY=sk-ant-..." > .env.local# map any public repo (one Claude call)$ npm run analyze -- https://github.com/owner/repo# explore it$ npm run dev