BBS

BBS SG Bank — legacy to modern ledger

SF Enterprise Hackathon 2.0 entry · synthetic demo, no real customers

A fictional bank runs its nightly posting on COBOL: the legacy program re-reads its whole account master file once per operation and rewrites it in full for every row it accepts. The migration keeps the same files and the same validation rules in a 54-line Python engine that indexes the ledger in memory — and the difference is measured, not asserted.

28.6× · 1,200 × 400 115× · 5,000 × 500 parity: byte-identical ledgers 108 tests passing

Demo video

73 seconds. Narration in the Grok (xAI) voice “Eve”, burned-in captions.

What is in the entry

The two engines

legacy/bank.cob — 172 lines of GnuCOBOL, deliberately inefficient:
O(operations × accounts), three full file traversals per accepted row.

modern/bank.py — 54 lines of stdlib Python: accounts in a dict, integer cents, one read and one write per run, O(accounts + operations).

Evidence

Every number on this site comes from a recorded run of the repository's own harness:

Repository

The engines, fixtures, tests, benchmark harness, migration documents and the video project are all in the public repository:

github.com/vasanthsreeram/bbs-sg-bank-modernization

Opsera Forge

The migration ran through Forge: assessment, intent, specification, architecture, user stories and test cases, exported at each step. Those are planning documents — the running engines in this demo are hand-written and covered by the repository's tests.

Read the migration journal and Forge artifacts

Presentation and walkthrough

Running the demo

The two engines, the browser demo and the 1980s operator terminal run locally from the repository: site/run.sh serves the modern ledger demo, and legacy-ui/run.sh serves the operator terminal, which compiles legacy/bank.cob with cobc and runs it as a real subprocess for each job. A live job (1,200 accounts, 400 operations, preset M) reports 400 processed, 3 rejected, 0.915 s of COBOL wall clock, and passes STEP020 VERIFY against modern/bank.py.