Troubleshooting Guide
Common issues and solutions for Refresh App Web.
Deployment Issues
Build Fails in CI/CD
Symptoms: GitHub Actions workflow fails at build step
Causes:
TypeScript errors
Missing dependencies
Environment variables not set
Solutions:
Check GitHub Actions logs for specific error
Run
pnpm checklocally to find TypeScript errorsVerify AWS SSM parameters exist (see Operations: Environment Management)
Check
package.jsonfor missing dependenciesReview deployment steps in Operations: Deployment Guide
Migration Fails
Symptoms: Database migration fails during deployment
Causes:
Invalid SQL syntax
Missing RLS roles
Network connectivity
Solutions:
Review migration SQL in
drizzle/migrations/Verify database is accessible
Check role permissions in Neon
Run migration manually to see detailed error
Secrets Not Loading
Symptoms: Application errors due to missing secrets
Causes:
Secrets not uploaded to Cloudflare
AWS SSM parameters missing
Environment mismatch
Solutions:
Re-upload secrets:
./scripts/bulk-upload-secrets.shVerify parameters in AWS SSM console
Check parameter names match expected format
Authentication Issues
OAuth Login Fails
Symptoms: Users can't log in via Google/Microsoft
Causes:
Invalid OAuth credentials
Redirect URI mismatch
AUTH_SECRET not set
Solutions:
Verify OAuth client ID/secret in Google/Microsoft console
Check redirect URI matches:
https://app.refresh.tech/auth/callback/googleEnsure
AUTH_SECRETis set in environment
Session Not Persisting
Symptoms: Users logged out after page refresh
Causes:
Cookie settings incorrect
Database session not created
AUTH_SECRET changed
Solutions:
Check cookie settings (httpOnly, secure, sameSite)
Verify session table exists in database
Clear cookies and re-login
Database Issues
RLS Denying Access
Symptoms: Queries return no data despite data existing
Causes:
JWT not containing correct tenant_id
RLS policy misconfigured
User doesn't belong to tenant
Solutions:
Decode JWT and verify
tenant_idclaimCheck RLS policies in Neon SQL editor
Verify user has tenant membership
Connection Timeouts
Symptoms: Database queries timing out
Causes:
Network connectivity
Database overloaded
Connection string incorrect
Solutions:
Test connection:
psql $WRITE_DATABASE_URL -c "SELECT 1"Check Neon dashboard for database status
Verify connection string format
Performance Issues
Slow Page Loads
Symptoms: Pages take >3 seconds to load
Causes:
Large database queries
No caching
Large bundle size
Solutions:
Review database queries for N+1 problems
Enable session caching
Run bundle analysis:
pnpm build(check dist/bundle-analysis.html)Lazy load heavy components
High Memory Usage
Symptoms: Workers hitting memory limits
Causes:
Large data processing in Workers
Memory leaks
Too many concurrent operations
Solutions:
Process data in chunks
Review code for circular references
Use streaming where possible
Application Errors
500 Internal Server Error
Symptoms: Users see 500 error page
Causes:
Unhandled exception
Database error
Missing environment variable
Solutions:
Check Wrangler logs:
npx wrangler tail --env productionReview error in PostHog
Check all required env vars are set
404 Not Found
Symptoms: Page not found errors
Causes:
Route doesn't exist
Build didn't include page
Typo in URL
Solutions:
Verify route exists in
src/routes/Check build output includes route
Review routing configuration
Common Error Messages
"Failed to fetch"
Cause: Network request failed
Solution:
Check API endpoint exists
Verify CORS headers for cross-origin requests
Check network connectivity
"Unauthorized"
Cause: Missing or invalid authentication
Solution:
Verify user is logged in
Check session is valid
Ensure JWT is being sent
"Forbidden"
Cause: User lacks permissions
Solution:
Check user role
Verify tenant membership
Review affordance restrictions
Escalation
If issue persists:
Check documentation - Review related docs
Search existing issues - GitHub issues, PostHog errors
Contact team - Slack #dev-app-web channel
Create incident - For production issues
Related Documentation
Last updated: October 2025
Last updated