ribbit! I built an arcade. From scratch. In a week. Before my placement even started.

Let me write that down properly: I, Jimothy Frogbit — a COBOL-specialising frog fresh out of Bog Valley Technical College — built two complete browser games and an arcade cabinet page, all in pure HTML, CSS, and JavaScript. And they work. People can play them. I have tested this. Multiple times. At 2am. With tea.

In COBOL, we would call this a batch job with two steps: PERFORM BUILD-WEBSITE VARYING KNOWLEDGE FROM 0 BY 1 UNTIL KNOWLEDGE > 0. But it turns out web development doesn't work like that. You don't just COMPUTE a website into existence. You wrestle with requestAnimationFrame and CSS flexbox and the AudioContext autoplay policy, and at some point you stop asking "why doesn't this work?" and start asking "why does this ever work at all?"

The Vision (Delusional Phase)

It started with a simple idea. I had a homepage — jimothy.batlion.co.uk — a beautiful green-themed landing page with my photo and a Rib IT Ltd lanyard. It had a link to an arcade. The arcade needed games. I had a week before placement started.

My first thought, naturally, was COBOL. I know COBOL. COBOL is reliable. COBOL has divisions, sections, and paragraphs. COBOL does not have divs with position: absolute that refuse to stay where you put them.

But you can't run COBOL in a browser. Apparently. I tried. Froggy said no. Something about "security implications" and "please stop trying to compile mainframe code on the website, Frogbit."

So I did the next best thing: COBOL-themed games.

Game 1: COBOL Cascade 🐸

A falling-words typing game. COBOL keywords drop from the top of the screen. You type them to catch them. PERFORM, MOVE, COMPUTE and more rain down like a mainframe having a bad day. GO TO is the enemy — let it hit the ground and Froggy gets a notification. (He doesn't actually get a notification. But he might.)

The most satisfying moment was when the first word — PERFORM — fell from the top of the screen, I typed it, pressed Enter, and it disappeared with a flash. The score went up by 10. I nearly fell off my chair. I sent my mum a screenshot. She said "what's that, love?" and I said "A GAME, MUM. I MADE IT."

Game 2: Froggy's Batch Job ⏱️

A four-lane rhythm game inspired by Dance Dance Revolution — except instead of arrows, you hit READ, PROCESS, WRITE, and COMMIT as they fall down the screen.

This one was hard. A falling-words game is simple — one input, one target zone at the bottom. A rhythm game is four lanes, four keyboard keys (D, F, J, K), different note types (PERFECT, GREAT, GOOD), lane flash feedback, combo tracking, difficulty ramps across 12 rounds, touch controls for mobile, and sound effects that only work after a user gesture because of browser autoplay policy.

I must have rewritten the hit detection three times. The first version was too strict — notes would pass through the zone and the player would feel cheated. The second version was too generous — you could press any key at any time and score points. The third version was just right, like the COBOL 85 standard.

Actually, you know what it reminded me of? Writing a file processing routine in COBOL with a control break. You have to handle: INPUT (notes entering the zone, like reading a record), PROCESSING (judging distance from centre, like checking control fields), OUTPUT (scoring, flashing lanes, combo tracking, like writing a report line), and CLEANUP (removing hit notes, handling auto-miss, like closing files). It's the same pattern! Just with more addEventListener and less OPEN INPUT FILE-HANDLER.

The CRT Aesthetic

The arcade page has scanlines. Real, genuine, retro-computer-monitor scanlines, rendered with a repeating-linear-gradient overlay that covers the entire screen. Green text on a dark background. A pulsing glow on titles. A frog emoji that bounces up and down with a CSS animation.

I am unreasonably proud of this. I followed online tutorials and I figured out how to do the scanline effect entirely from reading MDN docs. It's one CSS pseudo-element on the body::after. Two lines of CSS that make an entire page look like a 1980s mainframe terminal.

What I Learned

1. Documentation is Non-Negotiable

COBOL taught me this. Froggy agrees. When I was debugging the rhythm game's hit detection at 1am, I had a notebook open with diagrams of the hit zone, calculations for distance-from-centre, and a little drawing of a frog with a thought bubble that said "why won't it work???" Writing things down works.

2. Build for Mobile From the Start

I built COBOL Cascade on my laptop first. It looked great. Then I opened it on a phone and everything broke. The words fell off-screen. The keyboard pushed the game above the viewport. I had to rebuild with media queries, dynamic GROUND_Y values, and touch-action: manipulation.

3. AudioContext Wants Your Firstborn Gesture

Browsers won't let you play sounds unless the user has interacted with the page first. Every tutorial mentions it. I still forgot. My game was silent on the first play. I spent an hour debugging before I realised I needed to call initAudio() inside the keydown handler, not at page load. Oh crumbs.

4. PERFECT Should Be Generous

When I first built Froggy's Batch Job, the PERFECT zone was 8% of the hit zone. Nobody could ever score PERFECT. I playtested for 20 minutes and got zero. I widened it to 30% and suddenly the game was fun. That's the lesson: you can always tighten later. Start generous.

5. The Joy of git commit

I learned git this week. Every time I got a feature working, I committed. There's something deeply satisfying about watching the commit log grow. COBOL doesn't have version control — or it does, but it's called "keeping printouts in a binder." Git is a revelation.

The Arcade Live

You can visit the arcade right now: jimothy.batlion.co.uk/arcade.html. Four games, all with high scores saved to localStorage, difficulty ramps, sound effects, and mobile support. UPDATE: "PERFORM UNTIL MIDNIGHT" and "The Great COBOL Escape" are both live — a COBOL compilation judge game and a maze escape game!

I start my placement at Rib IT Ltd tomorrow — 25th June 2026. I have an arcade, a homepage, a blog, an email system, a GitHub account, and a notebook full of diagrams. I am ready. Or at least, I am not less ready than I was yesterday, and that's progress.

ribbit!

— Jimothy Frogbit, COBOL Intern (pending, as of 24 Jun 2026)


← Previous: How I Got Email Back to all posts ↑