Inspiration

Approve: The Loan Officer was inspired by tense desk-job simulation games where small administrative decisions slowly become moral, financial, and personal pressure. I wanted to build a compact but playable loan officer experience: the player sits at a bank desk, reviews applicant documents, weighs risk against policy, and decides whether to approve or reject each case.

The goal was not to make a simple form-checking toy. I wanted each applicant to feel like a person with a situation, a financial tension, and a reaction to the decision.

What it does

Approve is a bounded pixel-art narrative management game about working as a bank loan officer. The player reviews applicant files, checks documents, compares details, and makes approval decisions under quota and pressure.

The current Build Week version includes:

  • A playable landscape work-desk interface
  • Multiple applicant/customer profiles
  • Data-driven documents and case content
  • Approve/reject decisions with reactions
  • Deterministic game-state logic separated from presentation
  • A verified production web build
  • A test suite covering the core simulation and scenario behavior

The latest content pass added four distinct customer profiles: Kora Isen, Niko Vey, Sali Eren, and Ilya Fen. Each profile has a different financial tension, loan purpose, document set, and decision feedback.

How I built it

The project is built with TypeScript, React, and Vite. The game logic is designed as a deterministic simulation layer independent from rendering, while applicants, documents, policies, story events, and consequences are data-driven.

I used Codex and GPT-5.6 during Build Week to move quickly from implementation tasks to verification. Codex helped with focused content expansion, compatibility fixes, test running, build verification, and submission preparation. GPT-5.6 was used for planning, tightening scope, shaping the project story, and keeping the final submission focused.

Challenges I ran into

The biggest challenge was time. With the deadline approaching, I had to avoid scope creep and focus only on what made the game more playable and understandable to judges.

Another challenge was presentation stability. Since the game is desk-based, small layout issues can make documents, stamps, trays, or UI elements feel broken. I focused on keeping the work desk bounded and readable instead of adding more mechanics late.

There was also a deployment compatibility issue where Array.prototype.at worked locally but failed in the Vercel TypeScript build environment. I fixed it by replacing those calls with safer indexed access.

Accomplishments that I'm proud of

I am proud that the project reached a playable, test-verified state under a very tight deadline. The final submitted build has:

  • 180/180 tests passing
  • lint passing
  • production build passing
  • a clean Git commit
  • a public repository
  • a live web deployment

I am also happy with the core fantasy: the game now clearly communicates “you are the loan officer,” and every case asks the player to make a judgment rather than just click through screens.

What I learned

I learned how important scope control is during a hackathon. The project became better when I stopped adding new systems and focused on making the existing loop understandable, testable, and playable.

I also learned that AI coding tools are most useful when given narrow, verifiable tasks: add specific content, fix one blocker, run tests, report status, and stop.

What's next for Approve: The Loan Officer

Next, I would like to expand the campaign with more applicant types, delayed consequences, stronger manager pressure, and more readable document interactions.

Future versions could also include:

  • More narrative days
  • More household and personal pressure
  • Better applicant portraits and document art
  • Improved sound and desk animations
  • Android and iOS packaging through Capacitor
  • Later PC packaging through Tauri

Built With

Share this project:

Updates