|
2 | 2 |
|
3 | 3 | Enterprise low-code platform mobile runtime built with Expo, React Native, and TypeScript. |
4 | 4 |
|
| 5 | +> **Metadata-driven runtime** — interprets ObjectUI metadata (Views, Forms, Dashboards, Actions) from an ObjectStack server and renders them as native mobile components. No hardcoded business logic. |
| 6 | +
|
5 | 7 | ## Tech Stack |
6 | 8 |
|
7 | | -- **Framework:** Expo SDK 54 (Managed Workflow) |
8 | | -- **Navigation:** Expo Router (file-based routing) |
9 | | -- **Language:** TypeScript (strict mode) |
10 | | -- **Styling:** NativeWind v4 (Tailwind CSS for React Native) |
11 | | -- **UI Components:** shadcn/ui pattern (`components/ui/`) |
12 | | -- **Icons:** lucide-react-native |
13 | | -- **State Management:** Zustand |
14 | | -- **Data Fetching:** TanStack Query (React Query) |
| 9 | +| Category | Technology | |
| 10 | +|----------|-----------| |
| 11 | +| **Framework** | Expo SDK 54 (Managed Workflow) | |
| 12 | +| **Navigation** | Expo Router v6 (file-based routing) | |
| 13 | +| **Language** | TypeScript (strict mode) | |
| 14 | +| **Styling** | NativeWind v4 (Tailwind CSS for React Native) | |
| 15 | +| **UI Components** | shadcn/ui pattern (`components/ui/`) | |
| 16 | +| **Icons** | lucide-react-native | |
| 17 | +| **Client State** | Zustand | |
| 18 | +| **Server State** | @objectstack/client-react (TanStack Query) | |
| 19 | +| **Auth** | better-auth + @better-auth/expo | |
| 20 | +| **Offline Storage** | expo-sqlite | |
| 21 | +| **Metadata Cache** | react-native-mmkv | |
| 22 | + |
| 23 | +## Getting Started |
| 24 | + |
| 25 | +```bash |
| 26 | +# Install dependencies |
| 27 | +npm install --legacy-peer-deps |
| 28 | + |
| 29 | +# Copy environment variables |
| 30 | +cp .env.example .env.local |
| 31 | + |
| 32 | +# Start development server |
| 33 | +npx expo start |
| 34 | +``` |
15 | 35 |
|
16 | 36 | ## Project Structure |
17 | 37 |
|
18 | 38 | ``` |
19 | | -├── app/ # Expo Router pages |
20 | | -│ ├── _layout.tsx # Root layout (providers) |
21 | | -│ └── (tabs)/ # Bottom tab navigation |
22 | | -│ ├── _layout.tsx # Tab bar configuration |
23 | | -│ ├── index.tsx # Home / Dashboard |
24 | | -│ ├── apps.tsx # Apps listing |
25 | | -│ ├── notifications.tsx |
26 | | -│ └── profile.tsx |
| 39 | +├── app/ # Expo Router pages |
| 40 | +│ ├── _layout.tsx # Root layout (providers, auth guard) |
| 41 | +│ ├── (auth)/ # Authentication screens |
| 42 | +│ ├── (tabs)/ # Main tab navigation |
| 43 | +│ └── (app)/ # Dynamic app CRUD screens |
27 | 44 | ├── components/ |
28 | | -│ └── ui/ # Reusable UI components (shadcn pattern) |
29 | | -│ ├── Button.tsx |
30 | | -│ ├── Card.tsx |
31 | | -│ └── Input.tsx |
32 | | -├── lib/ |
33 | | -│ └── utils.ts # cn() utility (clsx + tailwind-merge) |
34 | | -├── global.css # Tailwind base + CSS variables (light/dark) |
35 | | -├── tailwind.config.js # Tailwind configuration |
36 | | -├── babel.config.js # Babel + NativeWind preset |
37 | | -├── metro.config.js # Metro + NativeWind integration |
38 | | -└── nativewind-env.d.ts # NativeWind TypeScript types |
| 45 | +│ ├── ui/ # Design system primitives |
| 46 | +│ ├── renderers/ # ObjectUI rendering engine |
| 47 | +│ ├── actions/ # Action system |
| 48 | +│ ├── common/ # Shared components |
| 49 | +│ ├── query/ # Query builder UI |
| 50 | +│ ├── batch/ # Batch operation UI |
| 51 | +│ ├── views/ # Saved views UI |
| 52 | +│ └── sync/ # Offline sync UI |
| 53 | +├── hooks/ # Custom React hooks |
| 54 | +├── lib/ # Core libraries |
| 55 | +├── stores/ # Zustand state stores |
| 56 | +└── docs/ # Documentation |
39 | 57 | ``` |
40 | 58 |
|
41 | | -## Getting Started |
| 59 | +## Scripts |
42 | 60 |
|
43 | | -```bash |
44 | | -npm install |
45 | | -npx expo start |
46 | | -``` |
| 61 | +| Command | Description | |
| 62 | +|---------|-------------| |
| 63 | +| `npm start` | Start Expo development server | |
| 64 | +| `npm run lint` | TypeScript check + ESLint | |
| 65 | +| `npm test` | Run Jest tests | |
| 66 | +| `npm run format` | Format with Prettier | |
| 67 | + |
| 68 | +## Documentation |
| 69 | + |
| 70 | +Comprehensive project documentation is available in the [`docs/`](./docs/) directory: |
| 71 | + |
| 72 | +| Document | Description | |
| 73 | +|----------|-------------| |
| 74 | +| **[Architecture](./docs/ARCHITECTURE.md)** | System architecture, layer design, provider hierarchy, module dependencies | |
| 75 | +| **[UI/UX Design](./docs/UI-DESIGN.md)** | Design system, view renderers, field types, interaction patterns | |
| 76 | +| **[Data Layer](./docs/DATA-LAYER.md)** | Offline-first architecture, sync queue, conflict resolution, caching | |
| 77 | +| **[API Integration](./docs/API-INTEGRATION.md)** | SDK usage, authentication, hook reference, error handling | |
| 78 | +| **[Security](./docs/SECURITY.md)** | Auth security, data protection, network security, threat model | |
| 79 | +| **[Testing](./docs/TESTING.md)** | Testing strategy, tooling, unit/integration/E2E guidelines | |
| 80 | +| **[Deployment](./docs/DEPLOYMENT.md)** | Build system, EAS Build, OTA updates, CI/CD pipeline | |
| 81 | +| **[Contributing](./docs/CONTRIBUTING.md)** | Development workflow, coding standards, PR process | |
| 82 | +| **[Roadmap](./docs/ROADMAP.md)** | Development phases, SDK dependency matrix, release plan | |
| 83 | +| **[SDK Gap Analysis](./docs/SDK-GAP-ANALYSIS.md)** | Missing SDK APIs, impact analysis, workarounds | |
47 | 84 |
|
48 | 85 | ## Design System |
49 | 86 |
|
50 | | -The app uses a CSS-variable-based design token system with light and dark mode support. Color tokens are defined in `global.css` and consumed via Tailwind classes. |
| 87 | +The app uses a CSS-variable-based design token system with light and dark mode support. Color tokens are defined in `global.css` and consumed via Tailwind classes. See [UI/UX Design](./docs/UI-DESIGN.md) for the full specification. |
0 commit comments