Skip to content

Hubble-Community-Cafe/community-cafe-web

Repository files navigation

Community Café Web

Self-maintained rebuild of hubble.cafe and meteor.cafe: two distinct public websites that share a single staff/board CMS, replacing the legacy WordPress sites. Content (menu, opening hours, events, board, vacancies) is entered once in the admin and published to the right site(s), so it no longer has to be maintained in two places.

Reservations (harry.hubble.cafe) and the food trackers (food.*.cafe) are not part of this project. The sites link out to those existing apps.

Repository layout

Path What it is
public-hubble/ Vite + React SPA, Hubble's own design and identity
public-meteor/ Vite + React SPA, Meteor's own design and identity
shared-web/ Shared API client, TS types, theme tokens, build config (no page layouts)
admin/ React admin (Azure AD) for staff/board to manage both bars
backend/ Spring Boot + JPA + MariaDB; content scoped by BarLocation (Hubble/Meteor)
e2e/ Playwright tests (desktop + mobile), page objects, coverage map

What staff/board can edit (the CMS modules)

Menu (incl. TU/e dual pricing), daily dinner dish, opening hours (plus the Meteor closed-banner), events (both bars), board (current shared, previous per-bar, supervisory), vacancies, and associations. All other page copy (forms, static pages, the plaza screen) is part of each site's code.

Tech stack

React 19 + TypeScript + Vite + Tailwind (frontends), Spring Boot + Java 21 + JPA (backend), MariaDB, Azure AD / Entra auth, Sentry, Docker / Portainer. Cookieless, no third-party tracking.

Getting started

The frontends are one npm workspace, so install once at the repo root.

npm install

Full local stack (MariaDB + backend + both sites + admin)

cp .env.example .env   # fill in Entra ids for admin login (see below)
docker compose up --build
App URL
Admin http://localhost:5173
Hubble http://localhost:5174
Meteor http://localhost:5175
Backend (Swagger) http://localhost:8080/swagger-ui.html

Real Microsoft (Entra) login works locally once AZURE_TENANT_ID, AZURE_CLIENT_ID, AZURE_CLIENT_SECRET, INITIAL_ADMIN_OID, and VITE_ALLOWED_GROUP_ID are set in .env. The admin is served on http://localhost:5173, which is registered as an Entra redirect URI; your first sign-in is provisioned as ADMIN (via INITIAL_ADMIN_OID). For Portainer/test deployment, copy docker-compose.portainer.template.yml and fill it in.

Single app (hot reload)

npm run dev --workspace @cafe/public-hubble
npm run dev --workspace @cafe/public-meteor
npm run dev --workspace @cafe/admin     # needs VITE_AZURE_* in .env for Microsoft login
cd backend && ./mvnw spring-boot:run

See e2e/README.md for the end-to-end test suite and coverage map.

Status

Feature-complete and running at test.hubble.cafe and test.meteor.cafe: all CMS modules, the on-site forms, the static pages, the admin, and the full e2e suite are in place. Remaining before the apex DNS cutover is the production configuration (point the stack at the live domains) and a final content-parity check against the current sites.

Contributing

Conventional Commits, branch off main, every PR requires owner approval (see .github/pull_request_template.md).

About

Self-maintained rebuild of hubble.cafe and meteor.cafe with a shared staff/board CMS

Resources

License

Security policy

Stars

1 star

Watchers

0 watching

Forks

Packages

 
 
 

Contributors