This guide walks you through cloning the repository, wiring up every required service, and sending your first authenticated API request — all in under 10 minutes. By the end you will have the Express server running on port 3000 and the Expo development server ready to connect from a physical device or simulator.Documentation Index
Fetch the complete documentation index at: https://mintlify.com/desarrolladorandres2026-gif/Native-tailwind/llms.txt
Use this file to discover all available pages before exploring further.
Prerequisites
Install and configure the following before proceeding:
| Requirement | Minimum version / notes |
|---|---|
| Node.js | 18 or later — nodejs.org |
| npm | Bundled with Node.js |
| MongoDB | MongoDB Atlas free cluster or a local mongod instance |
| Expo CLI | Install globally: npm install -g expo-cli |
| Cloudinary account | cloudinary.com — free tier is sufficient for development |
| Gmail app password | Required for password-reset emails. Generate one under Google Account → Security → App passwords |
Clone the Repository
mobile/debuta/, backend/, and admin/ directories are independent — each has its own dependencies. The backend is the only component that needs to be running for both the mobile app and the admin panel to work.Configure the Backend
Copy the example environment file and open it in your editor:Fill in every variable. The table below describes each one:
A minimal
| Variable | Description |
|---|---|
PORT | Port the Express server listens on. Defaults to 3000. |
NODE_ENV | Set to development locally; production for deployments. CORS is open in development. |
MONGO_URI | MongoDB Atlas connection string in the format mongodb+srv://<user>:<pass>@<cluster>.mongodb.net/<db>?retryWrites=true&w=majority |
JWT_SECRET | Long, random secret used to sign all JWTs. Use at least 32 characters. |
JWT_EXPIRES_IN | Token lifetime — e.g. 7d, 24h. |
ALLOWED_ORIGINS | Comma-separated list of allowed CORS origins for production mode (e.g. https://your-admin.com,https://your-web.com). Not enforced in development. |
CLOUDINARY_CLOUD_NAME | Your Cloudinary cloud name, found on the Cloudinary dashboard. |
CLOUDINARY_API_KEY | Cloudinary API key. |
CLOUDINARY_API_SECRET | Cloudinary API secret. Keep this private. |
EMAIL_USER | Gmail address used to send password-reset emails (e.g. you@gmail.com). |
EMAIL_PASS | Gmail app password — not your normal Gmail password. |
ADMIN_EMAIL | Email address seeded as the initial admin user. |
ADMIN_USERNAME | Username seeded for the initial admin user. |
GOOGLE_CLIENT_ID | OAuth 2.0 client ID from the Google Cloud Console, used for Google sign-in. |
FACEBOOK_APP_ID | Facebook App ID from the Meta Developer Portal. |
FACEBOOK_APP_SECRET | Facebook App Secret. Keep this private. |
ATLAS_PUBLIC_KEY | (Optional) MongoDB Atlas API public key — only required if you use the auto-IP-whitelist script. |
ATLAS_PRIVATE_KEY | (Optional) MongoDB Atlas API private key. |
ATLAS_PROJECT_ID | (Optional) MongoDB Atlas project ID. |
.env for local development looks like this:Start the Backend
From the Verify the server is healthy:Now send a test login request (replace with credentials you registered via the app or a seeded user):A successful response returns a JWT and the user object:Store the
backend/ directory, install dependencies and start the development server:npm run dev runs nodemon server.js, which:- Connects to MongoDB using the
MONGO_URIyou set. - Starts Express on the port defined by
PORT(default3000). - Attaches the Socket.io server to the same HTTP server instance — no separate port is needed.
- Serves the admin panel as static files at the
/adminpath. - Runs the optional Atlas IP-whitelist script (
predevhook) if Atlas API keys are set.
access_token value — every subsequent request must include it as Authorization: Bearer <token>.Launch the Mobile App
Open a new terminal, navigate to the mobile project, install dependencies, and start the Metro bundler:Expo will print a QR code. Scan it with:This means the mobile app will automatically reach your local backend as long as your phone and dev machine are on the same Wi-Fi network and port 3000 is not firewalled.API URL override for production or tunnelsSet the When this variable is set, the client uses
- iOS — the Camera app (redirects to Expo Go automatically).
- Android — the Expo Go app from the Play Store.
components/services/api.ts client reads the host Metro is serving from at runtime:EXPO_PUBLIC_API_URL environment variable before starting Expo to point the app at any remote server or local tunnel:EXPO_PUBLIC_API_URL + '/api' and ignores the Metro host detection entirely.Expo Go vs. Development BuildExpo Go is the fastest way to start iterating, but it does not include all native modules. Specifically:This compiles the native code on your machine and installs a custom Expo client that includes every module in
- WebRTC (video/audio calls) requires
react-native-webrtc, which needs a development build (expo-dev-clientis already inpackage.json). expo-secure-storeand other native modules also require a dev build for full functionality on some platforms.
package.json.