Real Project Checkpoint

Four Things to Find in a Strange Repo

Reasoning Checkpoint

A design challenge, worked through in writing — no auto-grading, just a real attempt.

20–25 min

The Challenge

Before Sale Day, John gives Anna one more unfamiliar repository: venue-check-in, the small app that door staff use to scan tickets. Nobody has documented it either. Here is what she sees:

Top level: app/, migrations/, tests/, requirements.txt, Dockerfile, .env.example, .github/workflows/test.yml. Inside app/: __init__.py, main.py, config.py, db.py, routes/scan.py, routes/health.py, services/tickets.py. requirements.txt includes flask, psycopg, pyjwt and pytest. The Dockerfile ends with CMD ["gunicorn", "app.main:app", "--bind", "0.0.0.0:8080"].

app/config.py contains lines like DATABASE_URL = os.environ["DATABASE_URL"] and SCANNER_API_KEY = os.environ.get("SCANNER_API_KEY"). app/routes/scan.py contains @bp.route("/scan", methods=["POST"]) above a function scan_ticket() that reads ticket_code from the JSON body and calls tickets.check_in(ticket_code, gate_id). app/services/tickets.py calls db.execute("UPDATE tickets SET checked_in_at = now() WHERE code = %s AND checked_in_at IS NULL", (ticket_code,)).

What Your Answer Needs

  • Name the language and framework, and explain how you know.
  • Find the entry point, and explain the two clues that point to it.
  • Find the configuration: where it lives and two settings the app needs.
  • Find one API endpoint: its method, path and the function that handles it.
  • Find the database access for that endpoint, and explain in plain English what the query does — including why checked_in_at IS NULL matters.
  • List the first three commands you'd run to get it working locally, and one thing you'd add to the repo before you leave.
Stuck? A Few Hints
  • The dependency file and the Dockerfile's last line are your best friends.
  • Trace the path: route → service → database.
  • Think about what happens if the same ticket is scanned twice at two different gates.

Before You Move On

Notice that you didn't need to know Flask well to answer this. The same method works in any language: dependencies tell you the stack, the start command tells you the entry point, environment reads tell you the config, and following one route to the database tells you how it works. That method is the real skill.

Next