The same Car-Wash tutorial front-end as web-app,
with identical look and feel — but talking to the REST/OpenAPI gateway
api-rest instead of GraphQL/Relay.
Every presentational component is reused unchanged from web-app. Only the data layer
differs: Relay is replaced by a thin REST layer.
This repo is one piece of the imqueue-sandbox tutorial — a complete car-wash booking app built from independent RPC microservices that communicate over a Redis-backed message queue.
| Repo | Role | Store |
|---|---|---|
| user | Customer accounts & their garage | MongoDB |
| auth | Login, JWT issuing & revocation | Redis |
| car | Car catalog (makes / models / types) | in-memory |
| time-table | Washing reservations & schedule | PostgreSQL |
| api | GraphQL gateway orchestrating the fleet | — |
| api-rest | REST/OpenAPI gateway over the same fleet | — |
| web-app | React front-end on api (GraphQL/Relay) |
— |
| web-app-rest | React front-end on api-rest (REST) |
— |
src/rest/client.js— REST client (adds theX-Auth-Usertoken, normalizes errors).src/rest/reactRelayShim.jsx— areact-relaycompatibility shim (aliased invite.config.js) so the reused components keep theirreact-relayimports while data arrives over REST. Fragment containers become transparent pass-throughs; the refetch container reloads reservations over REST.src/rest/bus.js— a tiny invalidation bus that lets the data loader refresh in place after a mutation, reproducing Relay store reactivity.src/relay/queries/*— REST query descriptors + thewithQuerydata-loader HOC.src/relay/mutations/*— the same mutation functions, implemented as REST calls.
Point it at a running api-rest (default http://localhost:8080/, override with
VITE_WEB_API_URL) and run:
npm startThe dev server listens on port 3001 (so it can run alongside the GraphQL web-app on 3000).