Inspiration

Every Halloween, vampires get the spotlight. But behind every dramatic entrance and midnight feast lies a less glamorous question:

Who manages the blood supply?

We imagined a vampire arriving at a blood bank just before sunrise, only to discover that their favorite blood type was out of stock. Somewhere behind the counter, a manager was counting bags by hand. A generous donor had just arrived, but nobody had updated the inventory.

That became the inspiration for Vampire Blood Bank: a Halloween-themed application that brings a little organization to life after dark.

What It Does

Vampire Blood Bank connects three roles in one shared system:

  • Managers watch over the reserve, adjust inventory, and review activity.
  • Vampires browse available blood types, place orders, and view their order history.
  • Donors contribute blood and track their donations.

A donation increases the reserve. An order reduces it. Every change leaves a record.

We kept the first version focused on this simple loop: give, stock, order. No payment system, delivery network, or elaborate game mechanics—just enough to keep the night running.

How We Built It

We built the frontend with React, giving each role its own dashboard and actions. The visual design combines a Gothic private bank with a vintage medical archive: burgundy accents, dark surfaces, classical typography, and a ledger where every bag is accounted for.

The backend uses Python and FastAPI to handle authentication, permissions, inventory changes, and transaction history. Accounts and application data are stored in JSON files, keeping the prototype straightforward to inspect and run. Passwords are stored as salted hashes.

We packaged the application with Docker Compose, with dependencies installed and the frontend built inside Docker. Persistent storage keeps the blood reserve intact when the application container is rebuilt.

We also used Git commits to capture development milestones as the project took shape.

Challenges We Faced

Determining the theme of our project.

Keeping the monster small

Our earliest concept included freshness tracking, sunrise countdowns, special customers, and nightly events. It sounded exciting—but it was too much for a first version.

The hardest product decision was choosing what to leave out. We narrowed the project to three roles and one complete workflow, giving us something usable instead of a collection of unfinished ideas.

Protecting the last bag

What happens when two vampires order the last available bag at the same time?

We needed to prevent both orders from succeeding.

Built With

Share this project:

Updates

Submission history