You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: README.md
+37-11Lines changed: 37 additions & 11 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -9,6 +9,7 @@ This guide assumes you have not used React Native, Expo, or a mobile emulator be
9
9
-**React Native** lets the project build Android and iOS interfaces from one codebase.
10
10
-**Expo** supplies the development server and mobile tooling around React Native.
11
11
-**Expo Go** is a phone app that can open Ruffl during early development without creating an app-store build.
12
+
-**Expo development builds** contain Ruffl's own native libraries, including Sentry, and are the recommended production-like test path.
12
13
-**Expo Router** turns files under `app/` into screens and navigation routes.
13
14
-**TypeScript** is JavaScript with additional checks that catch many mistakes before the app runs.
14
15
-**npm** downloads the libraries listed in `package.json` and runs the commands under `scripts`.
@@ -26,6 +27,7 @@ Ruffl-Frontend/
26
27
|-- src/theme.ts Colours and shared visual values
27
28
|-- test/ Automated tests
28
29
|-- app.json Expo application configuration
30
+
|-- eas.json Development, preview, and production cloud-build profiles
29
31
|-- .env.example Example local settings
30
32
`-- package.json Libraries and development commands
31
33
```
@@ -76,6 +78,16 @@ The `.env` file is ignored by Git. Do not commit it.
76
78
77
79
Open `.env` and set `EXPO_PUBLIC_API_URL`.
78
80
81
+
The complete local file is:
82
+
83
+
```dotenv
84
+
EXPO_PUBLIC_API_URL=http://localhost:3000
85
+
EXPO_PUBLIC_SENTRY_DSN=
86
+
EXPO_PUBLIC_SENTRY_ENVIRONMENT=development
87
+
```
88
+
89
+
`EXPO_PUBLIC_*` values are compiled into the app and are not secret. Never put a Sentry auth token, database password, R2 secret, JWT secret, or Expo access token in them.
90
+
79
91
### Physical phone
80
92
81
93
`localhost` on a phone means the phone itself, not the development computer. Use the computer's local network address instead.
@@ -179,6 +191,7 @@ If `.env` changes, stop Expo with `Ctrl+C` and start it again. A normal hot relo
179
191
|`npm run android`| Starts Expo and attempts to open an Android emulator/device |
180
192
|`npm run ios`| Starts Expo and attempts to open the iOS Simulator |
181
193
|`npm run web`| Runs the web-compatible version for quick layout checks |
194
+
|`npm run export:web`| Creates a production static web bundle in `dist`|
182
195
|`npm run typecheck`| Checks TypeScript without creating a build |
183
196
|`npm run lint`| Checks code style and common programming mistakes |
184
197
|`npm test`| Runs the automated tests once |
@@ -192,6 +205,7 @@ Run these before committing:
192
205
npm run typecheck
193
206
npm run lint
194
207
npm test
208
+
npm run export:web
195
209
```
196
210
197
211
The mobile tests cover calculations, progress display, API errors, rate-limit messages, and account restriction propagation. Backend permissions and commission lifecycle tests live in `Ruffl-Backend`.
@@ -219,8 +233,11 @@ The interface update is not literally instantaneous. Its normal maximum delay is
219
233
- Shipping and receipt confirmation
220
234
- Reviews and dispute entry points
221
235
- Commission, direct, dispute, and support conversation types
236
+
- Direct “message maker” and “contact Ruffl support” actions with polling conversation screens
237
+
- Activity notifications that can be acknowledged as read
222
238
- Maker price and payout calculator
223
239
- Warning, suspension, and deletion handling
240
+
- Sentry JavaScript/native crash reporting when a mobile project DSN is configured
224
241
225
242
No real payment is taken. Every payment-related action is symbolic.
226
243
@@ -287,19 +304,16 @@ Use `npx expo install <package-name>` for Expo-native packages because Expo choo
287
304
288
305
## Expo Go versus a development build
289
306
290
-
Expo Go is the easiest first development environment, but it only contains a fixed set of native libraries. A **development build**is a custom version of the Ruffl app containing its own native libraries. Use development builds before adding full native push notifications, monitoring, or app-store testing.
307
+
Expo Go is useful for quick JavaScript/layout checks, but it contains a fixed native runtime and only supports the current Expo Go SDK. Ruffl is currently on supported Expo SDK 54, while the newest SDK is 57. Expo recommends incremental one-version-at-a-time upgrades and development builds for production apps. SDK 54 continues receiving critical fixes until the next Expo SDK release, expected in September or October 2026.
291
308
292
-
Install the development client:
309
+
`expo-dev-client` and `eas.json` are already installed/configured. Link the repository to your Expo account once:
293
310
294
311
```powershell
295
-
npx expo install expo-dev-client
312
+
npx eas-cli@latest login
313
+
npx eas-cli@latest init
296
314
```
297
315
298
-
Configure Expo Application Services:
299
-
300
-
```powershell
301
-
npx eas-cli@latest build:configure
302
-
```
316
+
`eas init` adds the real Expo project ID to app configuration. Review that change before committing it.
npx eas-cli@latest build --profile production --platform all
334
+
```
335
+
336
+
Create a separate Sentry React Native project first, then add its DSN as `EXPO_PUBLIC_SENTRY_DSN` in preview/production. Configure `SENTRY_AUTH_TOKEN`, `SENTRY_ORG`, and `SENTRY_PROJECT` as protected EAS build secrets for source-map upload; those three are not `EXPO_PUBLIC_*` values.
337
+
313
338
## Security and current limitations
314
339
315
340
- Authentication tokens are stored through Expo SecureStore.
316
341
- Never place private server keys in `EXPO_PUBLIC_*` variables. Anything beginning with `EXPO_PUBLIC_` is included in the client application.
317
-
- Media selection/upload UI, Expo Push registration, and Sentry initialisation still require production service integration.
318
-
- The backend currently stores development data in memory, so restarting it resets accounts and commissions.
342
+
- Media selection/upload UI and Expo Push registration still require production integration. Backend R2 upload signing is implemented.
343
+
- Sentry is initialized, but the `ruffl-frontend` Sentry project/DSN and protected source-map credentials still need to be created.
344
+
- Production backend data uses PostgreSQL. Local development without `DATABASE_URL` intentionally uses memory and resets on restart.
319
345
- No payment processor is integrated.
320
346
321
-
As of 26 July 2026, `npm audit --omit=dev`reports high-severity advisories in transitive Expo/React Native build-tool dependencies (`brace-expansion` and `postcss`) with no compatible fix published for the SDK 54 dependency tree. Do not run `npm audit fix --force` blindly because that can move native packages outside Expo's supported versions.
347
+
As of 29 July 2026, npm still reports high-severity advisories in transitive Expo/React Native tooling (`brace-expansion` and `postcss`) with no compatible fix in the SDK 54 tree, plus an indirect `uuid` advisory. Do not run `npm audit fix --force` blindly because that can move native packages outside Expo's supported versions. Recheck after each Expo patch and perform the SDK 54 → 55 → 56 → 57 upgrade incrementally in a dedicated change with native development builds on both platforms.
0 commit comments