Step 4 of 4
Add Products & Go Live
Create your admin account, add products, test a purchase, and launch your store.
You'll need your deployed store URL, your product details (names, prices, images), and access to your Supabase dashboard. No real credit card required — you'll test with Stripe's test card · Estimated time: 30–45 min
1. Create Your Admin Account
Nobody is an administrator yet — your store has no users at all. There are two ways to create the first admin. Pick A if you have the code checked out on your computer, B if you deployed straight from the browser and never cloned anything.
Route A — from a local clone
In your local copy of the store, make sure .env.local contains the NEXT_PUBLIC_SUPABASE_URL and SUPABASE_SERVICE_ROLE_KEY of your production Supabase project, then run:
npm run seedThat creates one administrator with these credentials:
Email: admin@demo.com
Password: Demo1234!The command is safe to run more than once. It creates the admin user only — your store still starts with no products. Setting up a local clone is covered in Local Development.
These are published default credentials. admin@demo.com / Demo1234! appear in this guide and in the product README, so every ShipCommerce owner — and anyone who reads the docs — knows them. Anyone who reaches your admin login can walk in. Change the password before you share your store URL with anyone. Section 2 shows you where.
Route B — no local clone
Create a normal customer account through your own storefront, then promote it in Supabase:
- Open your live store and sign up with the email address you want to use as the administrator. Choose a strong password now — this one is yours, not a shared default.
- Go to your Supabase dashboard → Table Editor → the
profilestable - Find the row whose
emailmatches the account you just created - Set
is_admintotrueand save the row - Sign out and sign back in so the change takes effect
This route needs no terminal at all, and it never puts a shared password on your store. Use the same steps later if you want to promote a colleague to administrator.
2. Log In and Change Your Password
- Go to
yourstore.com/admin. If you are not signed in, you'll be sent to the admin login page at/login. - Sign in with the account from section 1.
- If you used Route A, change the password immediately: open
yourstore.com/profile/settingsand use the Password tab.
Locked out? If /admin bounces you back to the login page even after signing in successfully, the account is authenticated but not an administrator. Check that its row in the profiles table really has is_admin = true.
3. Add Your Products
- In the admin panel, go to Products
- Click Add Product
- Fill in the product details: name, description, price, images
- Add variants if needed (size, color, etc.)
- Set the product as Active to make it visible in your store
- Repeat for all your products
Tip: Add 2–3 products first and run the test purchase in section 5 with them. It is much less painful to discover a checkout problem with three products in the catalogue than with three hundred.
4. Set Up Categories
- Go to Categories in the admin panel
- Create your product categories
- Assign products to their categories
5. Test a Purchase
Test before you take real money. If you set up Stripe in Step 3, do it in test mode first — no real charges, nothing to refund, and a failed test costs you nothing.
Testing with Stripe test mode
- In the Stripe dashboard, switch Test mode on and copy the test keys (they start with
pk_test_andsk_test_). - In Vercel → Settings → Environment Variables, set
NEXT_PUBLIC_STRIPE_PUBLISHABLE_KEYandSTRIPE_SECRET_KEYto the test keys, andSTRIPE_WEBHOOK_SECRETto the signing secret of a test-mode webhook endpoint (see Step 3 — test mode and live mode have separate endpoints and separate secrets). - Redeploy so the new values take effect.
- Open your store in a private browser window and create a customer account.
- Add a product to the cart and go through checkout.
- Pay with Stripe's test card:
Card number: 4242 4242 4242 4242 Expiry: any future date CVC: any 3 digits - Confirm that:
- The order appears in your admin panel under Orders
- The confirmation email arrives
- The payment shows in your Stripe test payments
Payment succeeded but no order appeared? That is the classic sign that your webhook is not reaching the store — the payment lives in Stripe but your database never hears about it. Re-check the endpoint URL and the subscribed events in Step 2 before going live, or see Troubleshooting.
Testing without Stripe
Cash on delivery and bank transfer work out of the box, with no Stripe account and no keys. If that is how you're selling, place a test order with one of those methods and check it lands in Orders in the admin panel. It will sit there as unpaid until you mark it paid — which is exactly what it should do.
You can launch this way and add Stripe later; nothing in the store has to be rebuilt for it.
Switching to live payments
Once the test order behaves, swap test mode out:
- Turn Test mode off in Stripe and copy the live keys (
pk_live_/sk_live_). - Update the three Stripe variables in Vercel, including the signing secret of your live webhook endpoint.
- Redeploy.
- Optionally place one real, cheap order with your own card to confirm the live path, then refund it from the Stripe dashboard.
No confirmation email? Check your Resend dashboard to see whether the email was sent. If RESEND_API_KEY is not set, no emails are sent at all. If it is set, make sure your sending domain's DNS records are verified in Resend.
6. Customize Your Store
- Update the store logo and branding
- Edit the homepage content
- Rewrite the Privacy Policy and Terms of Service pages — the shipped versions are placeholders, not legal advice for your business
- Set the contact email your customers will see
7. Pre-Launch Checks
Two checks catch most of what goes wrong quietly after launch.
Run the health check
From a local clone whose .env.local matches your production values:
npm run post-deployIt verifies the critical environment variables, checks that Supabase is reachable with its schema and storage bucket in place, and warns you if a production URL is still running on Stripe test keys. If you are not using Stripe, the missing Stripe variables it reports are expected.
Confirm the cleanup cron is scheduled
Unpaid cash-on-delivery and bank-transfer orders hold their stock in reserve. /api/cron/cleanup-abandoned-orders cancels the ones nobody completed (after 72 hours by default) and returns that stock to your inventory. If it is never called, those orders pile up and the reserved stock is never released — items look sold out when they are sitting on your shelf.
In Vercel, open your project → Settings → Cron Jobs and confirm the job is listed. If it isn't, add the vercel.json from Step 3 and redeploy. You can also call the route by hand to prove it works:
curl -H "Authorization: Bearer $CRON_SECRET" \
https://yourstore.com/api/cron/cleanup-abandoned-orders8. Submit to Google (Optional)
- Go to Google Search Console
- Add your domain and verify it
- Submit your sitemap:
yourstore.com/sitemap.xml
9. Google Shopping Feed (Optional)
Your store generates a Google Shopping product feed automatically. Submit it to Google Merchant Center to list your products on Google Shopping.
- Go to Google Merchant Center and sign up
- Add your store URL and verify your domain
- Go to Products → Feeds → Add feed
- Choose Scheduled fetch and enter your feed URL:
https://yourstore.com/feed/google-shoppingReplace "yourstore.com" with your actual domain.
Launch Checklist
- ☐Admin password changed from the default
- ☐Products added with images and prices
- ☐Categories created
- ☐Test purchase completed and the order appeared in the admin panel
- ☐Live Stripe keys in place (if you take card payments)
- ☐Confirmation email received
- ☐
npm run post-deploypasses - ☐Cleanup cron scheduled and reachable
- ☐Store branding updated
- ☐Legal pages customized
- ☐Site looks good on mobile
🎉
You're live!
Your store is ready for customers. Share your link and start selling.
Need Help?
Professional plan customers get email support for six months from purchase; Lifetime plan customers get priority email support for twelve months. The exact scope of each plan is on the plan details page. Either way, write to us at hello@shipcommerce.io
Was this step clear?