kovia
Smart pet adoption platform with an automated 0–100 scoring engine, multi-tenant org access, and Google OAuth.
- ▸Automated 0–100 scoring across housing, experience, motivation, evidence — with red flags
- ▸Multi-tenant: ADOPTER/ORG_ADMIN/PLATFORM_ADMIN with request-scoped tenant context via CLS
- ▸JWT + Google OAuth, S3 presigned uploads, Handlebars emails via BullMQ + Nodemailer
- ▸Full Docker stack: NestJS 11 + Nuxt 4 + Postgres 16 + BullMQ + MinIO + Mailpit
Smart pet adoption platform with an automated scoring engine
Kovia is a full-stack web app that connects rescue organizations with adopters. Orgs publish animal listings; adopters submit applications with housing and lifestyle data; an automated scoring engine grades each application 0–100 across four weighted categories, with red-flag detection and risk-level classification.
Why I built it
A rescue org friend was drowning in adoption applications and reading every one cold — no way to prioritize, no way to flag obvious red flags before a home visit. I wanted to build something that turned the raw application form into a structured signal: housing fit, experience, motivation, supporting evidence. Plus the multi-tenant side (one platform, many rescues) was a fun design challenge — request-scoped organization context, role-based access, audit logs.
What it does
- Three role tiers —
ADOPTER(browse, apply, track),ORG_ADMIN(manage org, animals, review applications),PLATFORM_ADMIN(manage all orgs, users, invites). - Animal listings with photos (S3 presigned uploads), traits, and status management.
- Adoption application lifecycle — from submission to approval, with internal notes for org admins.
- Automated scoring engine — 0–100 across housing/environment, experience/lifestyle, motivation/commitment, and supporting evidence (25 pts each), plus red-flag detection.
- JWT auth + Google OAuth 2.0, email verification, password reset.
- Transactional emails via Handlebars templates, BullMQ-queued through Nodemailer.
- Audit log for admin actions; request-scoped tenant context via CLS.
- Mailpit for dev email inspection; MinIO for local S3-compatible storage.
Stack
NestJS 11 + TypeScript + Prisma 7 + PostgreSQL 16 (backend), Nuxt 4 + Vue 3 + Nuxt UI 4 + Pinia + Zod (frontend), BullMQ + Redis 7, MinIO, Nodemailer + Mailpit, Docker Compose for the whole stack.
Status
Active development. Private repo.