We help small US banks read and safely modernize their old COBOL systems. AI reads the old code fast. Our engineers check every result, so nothing breaks. COBOL goes in, Java comes out.
This repo holds three things:
- backend is the internal web app's API. Java 21 and Spring Boot. It takes in old code, calls a hosted AI to explain it, maps how the parts connect, helps rewrite pieces into Java, and checks the new Java behaves like the old code by compiling and running both and comparing them. Only our team uses it.
- frontend is the screens our engineers use, built with React and IBM Carbon.
- website is the small public site, just enough to show banks we are real. It is its own app, fully separate from the internal tool. React and TypeScript with Tailwind and shadcn/ui, plus a little motion: GSAP, Lenis, and one small 3D moment in the hero.
backend/ Java 21 + Spring Boot API, PostgreSQL, Flyway migrations
frontend/ The internal tool: React + IBM Carbon (TypeScript)
website/ The public site: a separate React + Tailwind + shadcn/ui app
docs/ Notes and the running list of decisions
report/ A plain-English report on the project as a Word file, plus the script that builds it
A few top-level folders are third-party source we downloaded only for reference, and Git
ignores all of them: carbon-main (IBM Carbon), GSAP-master, lenis-main,
react-three-fiber-master, and ui-main (shadcn/ui). They are not part of our app. Where we
actually use one of these libraries, we pull it in as a normal package instead. The frontend
uses the official @carbon/react. The public site uses tailwindcss, gsap, lenis,
@react-three/fiber, and @react-three/drei, and its shadcn/ui components are generated into
the project rather than imported.
The repository lives at https://github.com/devpilotX/Bank-Legacy. To clone it:
git clone https://github.com/devpilotX/Bank-Legacy.git
cd Bank-Legacy- Java 21 (we use Temurin 21)
- Maven 3.9 or newer (the backend also ships a Maven wrapper, so
./mvnwworks without a global Maven) - Node 22 or newer (this machine runs Node 24)
- PostgreSQL 14 or newer (this machine runs PostgreSQL 18)
- Git
- GnuCOBOL, only if you want to run verification. The engine compiles and runs the old COBOL
with it to check the new Java matches. The rest of the app runs fine without it. See
docs/runbook.mdfor the setup.
From Git Bash, in the repo root:
cd backend
# Make your own local settings file from the example, then fill in real values.
cp application-example.properties application-local.properties
# Open application-local.properties and set your database password (and the url
# and username too if your local setup is different).
./mvnw spring-boot:runCheck it is alive:
curl http://localhost:8080/healthYou should see something like:
{"status":"ok","version":"0.0.1-SNAPSHOT"}From Git Bash, in the repo root:
cd frontend
npm install
npm run devThen open the address Vite prints, usually http://localhost:5173. The dev server forwards
/health and /api calls to the backend on port 8080, so run the backend too to see the
status turn green. There is more detail in frontend/README.md.
From Git Bash, in the repo root:
cd website
npm install
npm run devThen open the address Vite prints, usually http://localhost:5174. The public site is fully
separate from the internal tool. There is more detail in website/README.md.
We never commit passwords or API keys. Real settings live in application-local.properties,
which Git ignores, or in environment variables. There is an application-example.properties
with fake values you can copy from.