![]() Mr. Fresh, the orange "side-eye cat" popularized by Hello-Street-Cat feeder livestream clips, went viral for staring down the camera until fresh food dropped. |
People on campus often want to help stray animals, but the support system is usually fragmented. Feeding depends on whoever is available, donations can be hard to coordinate, and supporters rarely directy see what happens after giving.
Pakamew turns individual effort into a campus-wide platform for animal welfare transparency. It combines donations, livestream access, connected feeders, and admin tools for oversight in one system. Supporters can contribute with clear expectations on where donations go. Organizers get the infrastructure to operate their program. The result is a more organized, accountable, and sustainable way to care for campus strays.
View docs/technology.md for a detailed breakdown of the individual components of the system.
Environment:
- Preferred Runtime:
NodeJS v24 - Preferred Package Manager:
pnpm v10
After cloning the repository, run the following command to initialize the repo.
pnpm installCreate local environment files for the workspace packages:
cp ./packages/app-server/.env.example ./packages/app-server/.env
cp ./packages/app-web/.env.example ./packages/app-web/.env
cp ./packages/livestream-node/.env.example ./packages/livestream-node/.envStart dependency services from the docker/ compose files:
# Base app infrastructure
docker compose -f docker/docker-compose.app.yml up -d
# E2E livestream
docker compose \
-f docker/docker-compose.app.yml \
-f docker/docker-compose.ovenmediaengine.yml \
up -d
# Lightweight observability
docker compose \
-f docker/docker-compose.app.yml \
-f docker/docker-compose.otel-openobserve.yml \
up -d
# Full local observability
docker compose \
-f docker/docker-compose.app.yml \
-f docker/docker-compose.otel-lgtm.yml \
up -dGenerate Prisma client and apply schema changes to the local database:
cd ./packages/app-server
pnpm exec prisma generate
pnpm exec prisma migrate devThe following is a list of the primary scripts for the project.
# Global Scripts
pnpm run eslint # lint with ESLint
pnpm run eslint:fix # fix lint errors with ESLint
pnpm run prettier # check formatting with Prettier
pnpm run prettier:write # format with Prettier
pnpm run tsc:check # typecheck with Typescript
pnpm run tsgo:check # typecheck with native Typescript (experimental / faster)
pnpm run test # run vitest
# Server App
cd ./packages/app-server
pnpm run dev # start development server
pnpm run build # bundle server for production
pnpm run preview # preview server for prod
# Web App
cd ./packages/app-web
pnpm run dev # start development server
pnpm run build # build web app
pnpm run preview # preview web for prodThe repository ships with workflow-specific devcontainer variants under .devcontainer/:
app: base cloud-friendly workspace for frontend and backend work.design: frontend design-time workspace, no extra container services.livestream: app workspace plus OvenMediaEngine for E2E livestream work.observability: app workspace plus OpenObserve.full: app, livestream, and lightweight observability combined.
See CONTRIBUTING.md for more information.
This project uses the following tools to enforce consistent coding conventions, formatting, and automated workflows:
- Vitest: Framework for unit and integration testing.
- Vite: HMR dev server and bundler for web applications.
- Prettier: Enforces consistent code formatting.
- ESLint: Enforces best practices on coding conventions.
- Typescript: Provides static typing and checks.
- CommitLint: Standardizes commit messages based on Conventional Commits.
- GitHub Actions: Automates CI workflows, including formatting, linting, and typechecking.
In alphabetical order:
- Geila Rigayen (@geilala)
- Janille Maeh Benito (@LoisDub)
- Lois Concepcion (@LoisDub)
- Theone Eclarin (@daawaan4x)
