Skip to main content
The Public Portal is the reference implementation of the Bloom Housing applicant-facing site. It runs as a Next.js application on port 3000 and provides housing seekers with everything they need to discover affordable housing opportunities, apply through a multi-step Common Application, and track submitted applications.

Features

Browse listings

View open and closed listings with filtering. Closed listings are capped at a configurable maximum via MAX_BROWSE_LISTINGS.

Common Application

Multi-step application flow covering contact, household, financial, community types, preferences, programs, and review.

Account management

Create an account, sign in, and access a dashboard showing all submitted applications and saved favorites.

Finder tool

Guided questionnaire that matches housing seekers to relevant listings based on their situation.

Get assistance

Connects applicants with local housing counselor services configured via HOUSING_COUNSELOR_SERVICE_URL.

FAQ

Frequently asked questions page, shown when the SHOW_PUBLIC_LOTTERY feature flag is enabled.

Page structure

All pages live under sites/public/src/pages/.
The Common Application is a multi-step flow. Each step is a separate page under applications/:

Running locally

1

Install dependencies

From the monorepo root:
2

Configure environment variables

Copy the template and set values for your local environment:
Edit sites/public/.env as needed. See the environment variables section below for details on each variable.
3

Start the backend and public app

From the monorepo root, this starts the backend on port 3100 and the public portal on port 3000:
Alternatively, start only the public portal from within sites/public:
4

Open the app

Navigate to http://localhost:3000 in your browser.
The backend must be running on port 3100 before starting the public portal. The app will fail to load listings if the API is unreachable.

Environment variables

Copy .env.template to .env inside sites/public/. The following variables control the app’s behavior:

Testing

The public portal has two test suites.
Run the full end-to-end test suite against a running instance of the app:
Run from within sites/public/ with the app already running on port 3000.
Set RUN_ACCESSIBILITY_E2E_TESTS=TRUE in .env to also run axe-based accessibility checks during the Cypress suite.

Styling

The public portal uses Tailwind CSS for utility classes combined with ui-seeds CSS custom properties for design tokens (colors, spacing, typography). SASS is used for component-level styles.
If you use VSCode, install the CSS Variable Autocomplete extension to get autocompletion for all ui-seeds CSS variables. After installing, add the following to your user settings JSON: