COBOL Modernization
CARDDEMO — a credit-card mainframe, without the mainframe
AWS's open-source CardDemo is 60,000 lines of COBOL running on CICS/VSAM. VForce360 dispatched the full modernization: the business logic is now Java + Spring Boot, the data is PostgreSQL, and the operator-facing 3270 terminal is pixel-for-pixel the same. Tab still works. F3 still exits. Nothing retrained.
Click into the terminal and type. Tab, Enter, and F3 all work.
Tab=Next Field · Enter=Submit · F3=Exit · F1=Help · Esc=Back
Also live in production
Autonomously deployed at dev.card.vforce360.ai
The VForce360 deployment pipeline — trigger → build → helm → warranty — installed CARD to its own namespace on the cluster. The terminal above and the live deployment share the same ScreenDefinition JSON.
The config that built MAINMENU
Every screen is data — fields, menus, REST endpoints, function keys. Zero per-screen code. Navigate the terminal above and this panel follows along, showing the JSON that produced whichever screen you're looking at.
{
"screenId": "MAINMENU",
"title": "CARDDEMO - MAIN MENU",
"fields": [
{
"row": 3,
"col": 10,
"label": "Welcome to CardDemo System",
"name": "_welcome",
"type": "output",
"length": 0,
"bright": true
},
{
"row": 5,
"col": 10,
"label": "1. ",
"name": "_opt1",
"type": "output",
"length": 0
},
{
"row": 5,
"col": 13,
"label": "Account Inquiry",
"name": "_lbl1",
"type": "output",
"length": 0
},
{
"row": 6,
"col": 10,
"label": "2. ",
"name": "_opt2",
"type": "output",
"length": 0
},
{
"row": 6,
"col": 13,
"label": "Account Update",
"name": "_lbl2",
"type": "output",
"length": 0
},
{
"row": 7,
"col": 10,
"label": "3. ",
"name": "_opt3",
"type": "output",
"length": 0
},
{
"row": 7,
"col": 13,
"label": "Transaction List",
"name": "_lbl3",
"type": "output",
"length": 0
},
{
"row": 8,
"col": 10,
"label": "4. ",
"name": "_opt4",
"type": "output",
"length": 0
},
{
"row": 8,
"col": 13,
"label": "Transaction Detail",
"name": "_lbl4",
"type": "output",
"length": 0
},
{
"row": 10,
"col": 10,
"label": "Option: ",
"name": "option",
"type": "input",
"length": 1
}
],
"menu": {
"field": "option",
"targets": {
"1": "ACCTINQ",
"2": "ACCTUPD",
"3": "TRXLIST"
}
},
"functionKeys": {
"F1": {
"action": "help",
"label": "Help"
},
"F3": {
"action": "exit",
"label": "Exit"
}
},
"statusLine": "Enter option number and press Enter"
}The original COBOL
CARDDEMO is open source — AWS published it as the canonical sample for mainframe modernization. 60,000 lines of COBOL, CICS transactions, VSAM files, BMS maps, JCL. Every screen you interact with above has a direct COBOL+BMS counterpart in the original codebase.
What the operator sees
Same 80×24 green screen. Same BMS field layout. Same PF-key conventions that every 3270 user already has memorized. The UI is effectively frozen — that's the point.
What we actually replaced
COBOL business logic became Spring Boot services. VSAM files became PostgreSQL tables with proper foreign keys. CICS transactions became REST endpoints. The glue is a thin BMS-to-JSON mapping layer.
How it shipped
Dispatched end-to-end through the orchestration platform: the Product Manager drove discovery, the Lead Engineer designed the cutover, engineers wrote the code with failing tests first, and QA ran a parity suite against the original CARDDEMO.
Why show the terminal?
Mainframe modernization fails when the operators can't keep working. A million bank tellers, state DMV agents, and insurance adjusters have 3270 muscle memory — Tab, F3, Enter is faster than any mouse-driven form. We modernize what's underneath and leave the green screen intact. That's the bet.