Quick Start
Build and preview your web app:What Works on Web
Everything! Shipnative’s architecture ensures feature parity across platforms:| Feature | Web Support |
|---|---|
| UI Components | Unistyles 3.0 fully supports web |
| Authentication | Supabase (email/password + OAuth) |
| Social Login | Google & Apple OAuth via browser redirect |
| Payments | RevenueCat Web Billing |
| Analytics | PostHog JavaScript SDK |
| Error Tracking | Sentry Browser SDK |
| Dark Mode | Automatic theme switching |
| Navigation | React Navigation web support |
Deployment Options
Vercel (Recommended)
- Push your code to GitHub
- Import project at vercel.com
- Set Root Directory to
apps/app - Set Build Command to
yarn bundle:web - Set Output Directory to
web-build - Add environment variables (from your
.env) - Deploy!
Netlify
- Import repo at netlify.com
- Set Base directory to
apps/app - Set Build command to
yarn bundle:web - Set Publish directory to
apps/app/web-build - Add environment variables
- Deploy!
Other Platforms
The web build is a static site, so it works anywhere:- Cloudflare Pages
- AWS Amplify
- GitHub Pages
- Firebase Hosting
- Any static host
Environment Variables
Web builds need the sameEXPO_PUBLIC_* variables as mobile:
Social Login on Web
Google and Apple OAuth work on web via browser redirects. See Social Login → Web OAuth Setup for configuration details. Quick checklist:- Add redirect URLs to Supabase:
https://yourapp.com/auth/callback - Add JavaScript origins to Google Cloud Console:
https://yourapp.com - Ensure CORS is configured (see warning above)
RevenueCat Web Billing
RevenueCat supports web subscriptions via their Web Billing feature:- Enable Web Billing in your RevenueCat project
- Connect a payment gateway (Stripe recommended)
- Add
EXPO_PUBLIC_REVENUECAT_WEB_KEYto your environment - Create web-specific products in RevenueCat dashboard
PaywallScreen automatically detects the web platform and uses the web SDK.
Web-Specific Considerations
Responsive Design
Shipnative uses Unistyles breakpoints for responsive layouts:Navigation on Web
React Navigation handles web routing automatically:- Screen names become URL paths
- Back button works with browser history
- Deep linking supported
SEO
For better SEO, consider:- Adding meta tags via
expo-document-pickeror custom HTML - Using semantic HTML elements
- Implementing proper heading hierarchy
Troubleshooting
CORS errors
CORS errors
Add your domain to Supabase’s allowed origins:
- Dashboard → Project Settings → API → Allowed Origins
- Include both development (
localhost:19006) and production URLs
Styles look different on web
Styles look different on web
Some React Native styles don’t translate perfectly to web. Check:
- Shadow properties (use
boxShadowfor web) - Touch feedback (may need web-specific hover states)
- Fonts (ensure web fonts are loaded)
Build fails with 'window is not defined'
Build fails with 'window is not defined'
Some native-only packages reference
window. Fix:- Check if the package supports web
- Use platform-specific imports:
MyComponent.web.tsx/MyComponent.tsx - Add to Metro’s
resolver.resolveRequestif needed
Marketing Page vs App Web Build
Shipnative includes two web experiences:| App Web Build | Marketing Page | |
|---|---|---|
| Location | apps/app (this guide) | apps/web |
| Purpose | Full app running in browser | Landing/waitlist page |
| Framework | Expo Web + react-native-web | Vite + React + Tailwind |
| Styling | Unistyles 3.0 | Tailwind CSS |
| Deploy | Your app domain | Your marketing domain |

