This is the public-facing platform for the Street Support Network. It helps people find local services, share information, and collaborate across the homelessness sector.
- Next.js 15
- React 18
- TypeScript
- Tailwind CSS 4
- Jest + React Testing Library
- Playwright for end-to-end tests
- PowerShell scripts (for Windows development)
- JSON-based mock data (local only; to be replaced by full CMS/API integration)
Unit and integration tests use Jest and React Testing Library.
Run all unit tests:
npm run test
Run end-to-end tests with Playwright:
npm run test:e2e
Testing Highlights:
- Babel is configured via
babel.config.json
- Module aliases (
@/components/...
) usemoduleNameMapper
injest.config.cjs
- Geolocation and other browser APIs are stubbed or guarded
- Mocks live under
tests/__mocks__/
✅ All tests must pass before merging into staging
or main
.
The admin CMS is a separate repo:
➡️ streetsupport-platform-admin
It manages all partner organisation data and connects to this public platform via API.
Run the project locally with mock JSON data:
npm install
npm run dev
Key local data sources:
src/data/service-providers.json
— mock service provider datasrc/data/locations.json
— fetched location metadatasrc/data/service-categories.json
— fetched category and subcategory metadatasrc/data/client-groups.json
— fetched client group metadata
src/app/
— Next.js App Router structure (pages, dynamic routes, API endpoints)src/components/
— Reusable UI components and layout partialssrc/contexts/
— React context providers (e.g.LocationContext
,FilterContext
)src/content/
— Location-specific or static page content (e.g. prebuilt templates)src/data/
— JSON data for mock services, locations, and categoriessrc/types/
— Shared TypeScript typessrc/utils/
— Utility functions (e.g. DB helpers, formatters)tests/__tests__/
— Unit tests for components, utils, and contextstests/e2e/
— End-to-end tests (Playwright specs)tests/__mocks__/
— Mocks for third-party modules and stubsconfig/
— Config files (Jest, ESLint, Playwright)public/
— Static assets (images, icons)scripts/
— Custom build or data fetch scripts
- Each location page (e.g.
/manchester
) is powered by a single dynamic App Router route using[slug]/page.tsx
. - The pages share a common template and pull their data from
locations.json
or future API calls. - Local banners, news and map pins will come from the CMS or the public API.
- We use
generateStaticParams
for static builds where possible, with aforce-dynamic
fallback for maximum reliability.
For deeper context see:
✅ See the Deployment Workflow for full details.
In short:
- Create a new feature branch from
staging
- Work and commit in that branch
- PR into
streetsupport/streetsupport-platform-web
staging
- Merge once tests pass
- Open a PR from
staging
→main
- Sync your fork’s
staging
with upstream
This repo currently uses a few Next.js App Router workarounds for dynamic param type inference and runtime behaviour:
- Dynamic Param Workarounds — Wiki Home
- Runtime Await Workaround
- Param Inference Issue & Workaround
- Dynamic API Params Explained
See Trello card: Linting Suppression and Deferred Resolution Strategy
— Link
- 📖 Complete Documentation Hub — Start here for all documentation
- 📋 Documentation Index — Complete file directory and navigation
- 🛠️ Development Guide — Local setup and development workflows
- 🧪 Testing Strategy — Comprehensive testing approach and E2E implementation
- 🚀 Deployment Guide — CI/CD pipeline and deployment procedures
- 🛡️ Security Documentation — Comprehensive security measures and procedures
- 🎨 Design System — UI components and design patterns
- 🎯 Project Planning — Strategic planning and API architecture
- 📖 GitHub Wiki — Workarounds and debugging guides
- 🗂️ Project Drive — Additional project resources
We acknowledge the npm audit warnings for esbuild
, path-to-regexp
, and undici
.
These affect dev only, not production security.
✅ Questions? Open an issue or ask for context before making assumptions.