The native shell
platformkit-mobile is an Expo application that signs in against
POST /api/v1/auth/login, reads GET /api/v1/admin/resources, and generates a
list, a detail and a form screen for every resource the caller may reach — the
same rule the web shell follows. Custom screens are renderer packs: a plain
object mapping module/entity to components, passed once at the composition
root. Nothing registers itself.
The seam
screens.Describe in the public repository answers with the resources the
caller may read, each with its module, entity, API path, the schema its
screens derive from, the fields a command owns, and whether this caller may
write it. An unreadable resource is not in the document at all. The golden file
ui/screens/testdata/catalog.json
is that document for a fixture entity; the shell carries a byte copy and its
parser test reads it, so a change to the seam the shell cannot parse fails
there. The seam flow draws the path
from the entity struct to both shells, and the
native shell flow the session,
catalog and screen sequence.
The session is the auth module’s cookie. The shell keeps the Set-Cookie value
it was given and sends it back as Cookie; the kernel’s CSRF rule accepts a
caller that presents neither Sec-Fetch-Site nor Origin, because a caller
that is not a browser presents what it presents deliberately.
The shape
| Directory | Holds |
|---|---|
|
The catalog types and a validator that names what is wrong; |
|
Fetch with the kept cookie — login, catalog, list, get, create, patch, delete on the entry’s own path — and the secure store. |
|
Sign-in, home, and the generated list, detail and form as components of props. |
|
The renderer-pack type, the composition root’s context, and the one component every resource route delegates to. |
|
Expo Router files that compose and render nothing of their own. |
Running it
npm ci
npm run check # typecheck, lint, format, unit tests
EXPO_PUBLIC_API_URL=http://platformkit.localhost:8080 npm start
What is and is not proven
npm run check is green and expo export --platform web produces a bundle.
The shell has not yet run on a device or simulator, and cookie handling on iOS
and Android against a live instance is unverified. Those are recorded as
untested rather than assumed; the first device run will say.