Corporate expense reimbursement app. Node.js/Express backend, PostgreSQL via Sequelize, server-rendered EJS views.
- Docker + Docker Compose
-
Copy the example env file and fill in real values:
cp .env.example .env -
Build and start the stack:
docker compose up --build -
In a separate terminal, run migrations and seed the database:
docker compose exec app npm run setup -
The app is available at http://localhost:3000. A
/healthendpoint is available for basic liveness checks.
All seeded users share the password Passw0rd!.
- Finance admin:
priya.shah@expenseflow.com - Managers:
david.kim@expenseflow.com(Engineering),sarah.ngata@expenseflow.com(Sales) - ~15 employees across Engineering, Sales, and Marketing
npm install
npm run migrate
npm run seed
npm run dev
Requires a local PostgreSQL instance matching the DB_* values in .env,
and imagemagick + ghostscript installed for receipt conversion.
src/
routes/ Express route handlers
models/ Sequelize models
migrations/ Sequelize migrations
seeders/ Seed data
views/ EJS templates
middleware/ Auth middleware
utils/ JWT, mailer, logger, receipt conversion