mobile-starter-architecture
Baseline architecture for Axolotl mobile starter (Expo Router + reusable blocks)
Installation
Follow the repository instructions for this skill and your agent. Review the files and dependencies before adding it to your workflow.
View source ↗GuidesSkill instructions
Mobile Starter Architecture
Goal
Create starter-level, reusable mobile foundations in examples/new/mobile.
Do not implement full product logic here.
Source of truth notes
- Ratio-scaling guidance lives in
mobile/AGENTS.md. - Do not duplicate full ratio policy in this skill; follow the AGENTS summary and apply it where needed.
- Keep guidance additive: reference canonical/OpenCode policy docs instead of restating them here.
QC reporting contract (for this skill)
- Evidence-driven output only: list touched files and file:line proof for key decisions.
- Include validation results as command -> PASS/FAIL.
- Classify violations as baseline vs introduced in every report.
Stack Contract
- Expo SDK 54 + TypeScript
- Expo Router as navigation entry
- React Query for server state
- Zustand for app-local state
- Zeus-generated client for GraphQL contract
- i18next/react-i18next for translations
Required Structure
-
app/for route files and route groups -
src/components/for reusable native primitives -
src/templates/for reusable screen templates -
src/features/for feature hooks/modules -
src/lib/graphql/for Zeus + query wrappers -
src/lib/i18n/for i18n bootstrap and resources -
src/providers/for app providers -
src/stores/for Zustand stores -
src/theme/for tokens and style helpers -
src/zeus/placeholder until generation is wired
Rules
- Build composable blocks, not final business flows.
- Keep route files thin; put logic in hooks/services.
- Add
testIDon all interactive elements. - Keep public text in i18n keys only.
- Keep generated Zeus files isolated from hand-written code.
- Keep quality hardening changes architecture-focused (guardrails/docs/tests), not product feature expansion.
Integral Starter Boundaries
-
Provider chain baseline:
SafeArea -> RuntimeInit -> Keyboard -> Theme -> Suspense -> (optional integrations) -> Query -> Toast(seesrc/providers/AppProviders.tsx). -
Runtime init: app boot uses
runRuntimeInit()(initThemeBase()+initI18n()), fail-safe (must not block first render). -
Template boundary:
templates/**are opt-in blueprints; runtime only fromapp/**+src/**. -
testID contract: all interactive runtime primitives/components must expose and pass
testID. -
State-view pattern: use
useStateViewwithLoadingState/ErrorState/EmptyStatefor loading/error/empty/success rendering.
Done Criteria
- App boots with providers and route groups.
- At least one starter tab and one auth screen exist.
- Reusable primitives/templates are present and wired.
Examples
Read the usage examples in the source repository.
View source ↗Source history
- Indexed on
- 2026-03-11
- Index updated
- 2026-03-11
- Branch
- main
Index and sync dates describe this directory. View the source repository for code history.
GitHub ↗chat Comments (0)
Sign in to join the discussion and leave a comment.
No comments yet. Be the first to share your thoughts!