Use this checklist before deploying to ensure everything works correctly.
# Copy and fill in your values
cp .env.example .env.localRequired variables:
- [ ] NEXT_PUBLIC_SOROBAN_NETWORK_TYPE=testnet
- [ ] NEXT_PUBLIC_HUNTY_CORE_ADDRESS_TESTNET=CA...
- [ ] NEXT_PUBLIC_REWARD_MANAGER_ADDRESS_TESTNET=CA...
- [ ] NEXT_PUBLIC_NFT_REWARD_ADDRESS_TESTNET=CA...
- [ ] NEXT_PUBLIC_HUNTY_CORE_ADDRESS_MAINNET=CA...
- [ ] NEXT_PUBLIC_REWARD_MANAGER_ADDRESS_MAINNET=CA...
- [ ] NEXT_PUBLIC_NFT_REWARD_ADDRESS_MAINNET=CA...Verify:
grep "NEXT_PUBLIC_HUNTY_CORE_ADDRESS_TESTNET" .env.local
grep "NEXT_PUBLIC_HUNTY_CORE_ADDRESS_MAINNET" .env.local- [ ] pnpm install # or npm install
- [ ] Check for any peer dependency warnings
- [ ] Verify no installation errors- [ ] pnpm build
- [ ] Check build output for errors
- [ ] Verify no TypeScript errors
- [ ] Check bundle size is acceptableExpected output:
✓ Compiled successfully
✓ Collecting page data
✓ Generating static pages
pnpm dev- Server starts without errors
- No console errors on page load
- Navigate to http://localhost:3000
- Page loads successfully
- No 404 errors in Network tab
- Yellow "TESTNET" badge visible in header
- Yellow testnet warning banner appears at top
- "Settings" link visible in navigation
- "Settings" link in wallet dropdown (if wallet connected)
Visit: http://localhost:3000/settings
- Settings page loads without errors
- "Network Settings" card visible
- Current network shown (Testnet)
- Both network options (Testnet/Mainnet) displayed
- Testnet option has checkmark
- Testnet option has yellow styling
- Mainnet option is clickable
- Developer info section shows environment
On settings page:
-
Click Mainnet option
- Confirmation modal appears
- Modal shows warning text
- "Cancel" button visible
- "Switch & Reload" button visible
-
Click "Switch & Reload"
- Page reloads automatically
- Green "MAINNET" badge now in header
- No testnet warning banner
- Settings shows Mainnet as active
- Mainnet has checkmark and green styling
-
Verify Persistence
- Refresh page manually (Cmd/Ctrl + R)
- Still shows Mainnet
- Open new tab to same URL
- New tab also shows Mainnet
-
Switch Back to Testnet
- Click Testnet option
- Confirm switch
- Page reloads
- Yellow "TESTNET" badge returns
- Warning banner reappears
Open browser console (F12):
// Check network preference
console.log(localStorage.getItem("stellar_network_preference"))
// Should output: "testnet" or "mainnet"
// Check no errors
// Console should be clean (no red errors)- No JavaScript errors
- No import errors
- No "undefined" errors
- No 404 network requests
- localStorage working
In browser console:
// This requires adding a debug helper - check manually in code instead
// Or verify by attempting a transaction (if safe)Manual verification:
- Check
lib/contracts/config.tsexportsgetContracts() - Testnet contracts returned when on testnet
- Mainnet contracts returned when on mainnet
If you have Freighter installed:
-
Connect Wallet
- Click "Connect Wallet" in header
- Freighter popup appears
- Approve connection
- Wallet connects successfully
-
Network Mismatch Test
- Set app to testnet
- Set Freighter to mainnet
- Orange warning banner should appear
- Warning says "Network mismatch detected"
- "Go to Settings" button works
- "Dismiss" button closes warning
-
Fix Mismatch
- Switch app to mainnet (or wallet to testnet)
- Warning disappears
- No errors in console
Test on mobile or narrow browser window:
- Network badge visible and readable
- Settings page responsive
- Network switcher buttons adequate size
- Confirmation modal fits screen
- All text readable
- Touch targets big enough (44x44px min)
Toggle dark mode:
- Network badge readable in dark mode
- Testnet warning readable in dark mode
- Settings page readable in dark mode
- Network switcher styled correctly in dark mode
- Confirmation modal readable in dark mode
- Good contrast throughout
Test in multiple browsers:
- Chrome/Edge - Works
- Firefox - Works
- Safari - Works
- Mobile Safari (iOS) - Works
- Mobile Chrome (Android) - Works
Keyboard navigation:
- Tab to network badge (if focusable)
- Tab to Settings link
- Tab through network switcher options
- Space/Enter activates buttons
- Esc closes confirmation modal
- Focus visible throughout
Screen reader (optional):
- Network indicator announces current network
- Testnet warning is announced
- Button labels are clear
- Modal has proper ARIA labels
Verify all docs are present:
-
NETWORK_SWITCHING_GUIDE.mdexists -
NETWORK_MIGRATION.mdexists -
NETWORK_SWITCHING_IMPLEMENTATION_SUMMARY.mdexists -
TEST_NETWORK_SWITCHING.mdexists -
NETWORK_QUICK_REFERENCE.mdexists -
BUGS_FIXED.mdexists -
DEPLOYMENT_CHECKLIST.mdexists (this file)
pnpm build
pnpm start- Production build succeeds
- Production server starts
- Visit http://localhost:3000
- All features work in production build
- No errors in browser console
- Performance is good
Before deploying to production:
- Add all env vars in dashboard
- Set mainnet contract addresses
- Set
NEXT_PUBLIC_SOROBAN_NETWORK_TYPE=mainnet(for production) - Test deploy to staging first
- Update Dockerfile with env vars
- Build Docker image successfully
- Run container and test
- Verify env vars accessible in container
- Update GitHub Actions / GitLab CI
- Add secrets for contract addresses
- Test CI/CD pipeline
- Verify automated deployment works
After deploying to production:
- Production site loads
- No 500 errors
- No console errors
- Network badge displays
- Settings page accessible
- Network switching works
- Check error logs
- Monitor user reports
- Verify analytics tracking
- Check transaction success rate
- Monitor network switch events
- Collect user feedback
- Monitor support tickets
- Check for confusion about networks
- Verify no unintended mainnet usage
- Track feature adoption
If issues occur:
git revert <commit-hash>
git push- Remove network-specific env vars
- Keep legacy env vars as fallback
- App will use testnet by default
- Set
NEXT_PUBLIC_ENABLE_NETWORK_SWITCHING=false - Hide NetworkSwitcher component
- Users stay on default network
If you find issues during testing:
-
Document the issue:
- What were you doing?
- What did you expect?
- What actually happened?
- Browser/device info
- Screenshots if applicable
-
Check console:
- Any errors?
- Any warnings?
- Network requests failing?
-
Check localStorage:
console.log(localStorage.getItem("stellar_network_preference"))
-
Report in:
- GitHub issues
- Team Slack/Discord
- Email to dev team
Before marking as complete:
Developer Sign-Off:
- All checklist items completed
- No critical bugs found
- Documentation reviewed
- Code reviewed by peer
- Ready for production
QA Sign-Off:
- All test cases passed
- Regression testing complete
- Performance acceptable
- Security review passed
- Ready for deployment
Product Sign-Off:
- Feature meets requirements
- UX acceptable
- Documentation adequate
- Stakeholders informed
- Approved for release
✅ Deployment is successful if:
- All checklist items pass
- No critical bugs found
- Users can switch networks
- Network persists across sessions
- Visual indicators work correctly
- No impact on existing features
- Performance is acceptable
- Documentation is complete
Deployment Date: _____________ Deployed By: _____________ Version: 1.0.0 Status: ⬜ Ready / ⬜ Deployed / ⬜ Verified
- Monitor for 24 hours
- Collect user feedback
- Track analytics
- Plan improvements based on data
- Document lessons learned
Good luck with your deployment! 🚀