Skip to main content
Bloom is Exygy’s open-source affordable housing platform. Its goal is to serve as a single entry point for affordable housing seekers and to provide application management tools for housing developers, property managers, and city/county jurisdictions. You can learn more at bloomhousing.com.

What is Bloom?

Bloom is a full-stack monorepo built on Next.js, NestJS, Prisma, and PostgreSQL, all written in TypeScript. It ships two user-facing portals and a shared backend API, along with a shared component library used across the portals.

Public Portal

The applicant-facing site. Housing seekers browse available listings, submit applications via the Common Application or external links, and manage their accounts. Runs on port 3000.

Partners Portal

The admin dashboard for housing partners. Create, edit, and publish listings; view, edit, and export applications; and manage lottery workflows. Requires a login. Runs on port 3001.

Backend API

A NestJS REST API backed by Prisma and PostgreSQL. Serves data to both portals over HTTPS. Auto-generates OpenAPI/Swagger documentation at /api. Runs on port 3100.

Shared Helpers

A shared package (shared-helpers) containing TypeScript types, utility functions, and components used by both the Public and Partners portals.

Who is Bloom for?

AudienceHow they use Bloom
Housing seekersBrowse affordable housing listings, submit applications, track application status
Housing developersCreate and publish listings, manage incoming applications
Property managersEdit listings, export applicant data, run lottery workflows
City / county jurisdictionsConfigure jurisdiction-level settings, oversee multiple listings and partners

Repository structure

Bloom uses a monorepo layout managed with Yarn workspaces. The core packages are:
bloom/
├── api/                  # NestJS backend (port 3100)
├── sites/
│   ├── public/           # Applicant-facing Next.js app (port 3000)
│   └── partners/         # Admin Next.js app (port 3001)
└── shared-helpers/       # Shared types, functions, and components
The UI layer also depends on two external Bloom packages:
  • @bloom-housing/ui-seeds — Seeds design system: React components and design tokens. Storybook
  • @bloom-housing/ui-components — Legacy component library being incrementally replaced by ui-seeds. Storybook

Key technologies

LayerTechnology
FrontendNext.js, React 19, TypeScript, SASS
BackendNestJS, Prisma ORM, TypeScript
DatabasePostgreSQL 15
TestingJest, Cypress, Testing Library
CI/CDGitHub Actions, GitLeaks, Dependabot
API docsOpenAPI / Swagger (auto-generated)
Bloom is licensed under Apache-2.0 and is open for contributions. See the contributing guidelines in the repository for commit conventions, pull request templates, and issue tracking.

Build docs developers (and LLMs) love