Feature description
We'll notify you when we launch.
`, }), }) if (resendResponse.ok) { emailSent = true await supabase .from('waitlist') .update({ email_sent: true, email_sent_at: new Date().toISOString() }) .eq('id', waitlistEntry.id) } } catch (emailError) { console.error('Email sending error:', emailError) } } return new Response( JSON.stringify({ success: true, message: 'Email added to waitlist', email_sent: emailSent }), { status: 200, headers: { ...corsHeaders, 'Content-Type': 'application/json' } } ) } catch (error) { return new Response( JSON.stringify({ error: error.message || 'Internal server error' }), { status: 500, headers: { ...corsHeaders, 'Content-Type': 'application/json' } } ) } }) ``` 6. Deploy the edge function: ```bash theme={null} supabase functions deploy waitlist ``` 7. Set environment secrets in Supabase Dashboard: * Go to **Project Settings** → **Edge Functions** → **Secrets** * Add `RESEND_API_KEY` (your Resend API key) * Add `RESEND_FROM_EMAIL` (optional, e.g., `noreply@yourdomain.com`) * Add `RESEND_WAITLIST_SUBJECT` (optional, custom subject line) * Add `RESEND_WAITLIST_HTML` (optional, custom HTML email template) **Step 3: Configure the Frontend** Set the edge function endpoint in `apps/web/.env`: ```bash theme={null} VITE_WAITLIST_API_ENDPOINT=https://your-project-ref.supabase.co/functions/v1/waitlist ``` Replace `your-project-ref` with your actual Supabase project reference (found in your Supabase dashboard URL). **That's it!** The waitlist form will now: * Save emails to your Supabase database * Send confirmation emails via Resend (if configured) * Keep your Resend API key secure on the server ## Deployment ### Deploy to Vercel (Recommended) 1. Push your code to GitHub 2. Go to [vercel.com](https://vercel.com) 3. Import your repository 4. Set **Root Directory** to `apps/web` 5. Add environment variables from your `.env` file 6. Deploy! The landing page includes a `vercel.json` configuration file for easy deployment. ### Deploy to Netlify 1. Go to [netlify.com](https://netlify.com) 2. Import your repository 3. Set **Base directory** to `apps/web` 4. Set **Build command** to `yarn build` 5. Set **Publish directory** to `apps/web/dist` 6. Add environment variables 7. Deploy! ### Other Platforms The marketing page is a standard Vite app, so it works with: * Cloudflare Pages * GitHub Pages * AWS Amplify * Any static host Build command: `yarn build` (from `apps/web/`) Output directory: `dist/` ## SEO Configuration The landing page includes SEO components that set: * Meta title and description * Open Graph tags (for social sharing) * Twitter cards * Canonical URL Configure these in your `.env`: ```bash theme={null} VITE_APP_NAME=YourApp # Used as page title VITE_APP_DESCRIPTION=Your description # Used in meta description VITE_OG_IMAGE=https://yourapp.com/og-image.jpg # Social share image VITE_APP_URL=https://yourapp.com # Canonical URL ``` **Pro Tip:** Create an Open Graph image (1200x630px) for better social sharing. Place it in `/apps/web/public/og-image.jpg`. ## vs. Main Landing Page Repo You might be wondering: "What's the difference between `apps/web` and the `landing_page` repo?" | Feature | `apps/web` | `landing_page` | | ----------------- | ---------------------------------- | -------------------------------- | | **Purpose** | Your app's marketing page | Shipnative's own marketing | | **Included** | Yes, in the monorepo | Separate repository | | **Customization** | You own it - edit freely | Don't edit (it's for Shipnative) | | **Use case** | Pre-launch waitlist or launch page | Shipnative product marketing | | **Deploy** | Your domain | shipnative.com | **TL;DR:** Use `apps/web` for YOUR app. Ignore `landing_page` (unless you're contributing to Shipnative itself). ## Tips & Best Practices ### Pre-Launch Strategy 1. Start in **waitlist mode** while building 2. Share the link on Twitter, Product Hunt, Reddit 3. Collect 100-1000+ emails before launch 4. Send launch announcement when app goes live ### Launch Day 1. Switch to **launch mode** (`VITE_MODE=launch`) 2. Add your App Store / Play Store URLs 3. Redeploy 4. Email your waitlist! ### A/B Testing Want to test different copy? Create multiple deployments: * `waitlist-v1.yourapp.com` * `waitlist-v2.yourapp.com` Deploy the same code with different env vars and see which converts better. ### Custom Domain 1. Buy a domain (Namecheap, Google Domains, etc.) 2. Point it to your Vercel/Netlify deployment 3. Configure in your hosting dashboard 4. Update `VITE_APP_URL` to match ## TroubleshootingProduction-ready React Native boilerplate with auth, payments, analytics, and more. Build for iOS, Android, and Web from a single codebase.
Get Shipnative →Ready to ship your app?
Get Shipnative →