[Epic] Split frontend/backend — universal Expo client + OpenAPI-contracted API #176
Labels
No labels
area:auth
area:ci
area:db
area:infra
area:native
area:pwa
area:service
epic
feature
foundation
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
james/carol#176
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Carol's frontend and backend become totally separate from now on. The Next.js app stops rendering UI and becomes a pure API server. A single universal client built on Expo Router + React Native Web takes over the PWA, the Android app, and the Linux Flatpak build. The contract between the two is an OpenAPI 3.1 spec — generated from the API's zod schemas, served at
/api/openapi.json, and the only sanctioned way for the client to learn about endpoints, shapes, and errors.This supersedes #6 (the React Native native-app epic) and reshapes the back half of #3 (PWA shell): the PWA becomes the Expo Web build, not the Next.js render.
Decisions baked in
importfromapps/apiinapps/client— ever./loginand/register, so SSR earns nothing.Linked tickets
/api/openapi.json+ CI drift gateapps/api,apps/client,packages/api-client)app/(app)/*,app/login,app/register,app/page.tsx)Cross-epic dependencies
messages/*.jsoncatalog stays, the runtime swaps.Exit criteria
GET /api/openapi.jsonreturns a valid OpenAPI 3.1 document covering every authenticated route. CI fails if a route is missing or the spec disagrees with its zod schema.CLAUDE.md"Shape of the system" andidea.mdare updated; the old "PWA = same Next.js app" wording is gone./api/openapi.json+ CI drift gate #178apps/api,apps/client,packages/api-client#181packages/api-client) #182apps/clientwith runtime-configurable API URL #187