Overview
The hub's identity (name, logo, brand color, support contacts) is hardcoded across the frontend and email templates (COMPANY_NAME/SUPPORT_EMAIL env vars in backend/.env.example). A settings API makes ManageHub deployable for any hub without code changes — the first step toward white-labeling.
Proposed Design
New module backend/src/hub-settings/:
- Single-row
HubSettings entity (enforce singleton in the service): hubName, logoUrl (Cloudinary — reuse backend/src/cloudinary/), faviconUrl (nullable), primaryColor (hex, validated), supportEmail, supportPhone, address, socialLinks (JSONB: twitter/instagram/linkedin), openingHours (JSONB per weekday, nullable).
Endpoints
| Method |
Path |
Access |
| GET |
/hub-settings |
Public — everything above is public-safe |
| PATCH |
/hub-settings |
ADMIN/SUPER_ADMIN |
| POST |
/hub-settings/logo |
ADMIN — multipart upload via Cloudinary |
Tasks
Acceptance Criteria
Dependencies
Blocks [FE-29].
Notes for Contributors
Good first issue. Comment below to be assigned.
Overview
The hub's identity (name, logo, brand color, support contacts) is hardcoded across the frontend and email templates (
COMPANY_NAME/SUPPORT_EMAILenv vars inbackend/.env.example). A settings API makes ManageHub deployable for any hub without code changes — the first step toward white-labeling.Proposed Design
New module
backend/src/hub-settings/:HubSettingsentity (enforce singleton in the service):hubName,logoUrl(Cloudinary — reusebackend/src/cloudinary/),faviconUrl(nullable),primaryColor(hex, validated),supportEmail,supportPhone,address,socialLinks(JSONB: twitter/instagram/linkedin),openingHours(JSONB per weekday, nullable).Endpoints
Tasks
backend/src/email/.Acceptance Criteria
GET /hub-settingsworks unauthenticated and returns defaults on a fresh install.Dependencies
Blocks [FE-29].
Notes for Contributors
Good first issue. Comment below to be assigned.