Use this checklist to verify that all core functionality works correctly after setup.
# Check Node.js version (should be 18.17+)
node --version
# Verify dependencies are installed
npm list --depth=0# Test database connection
npm run prisma:studio
# Should open http://localhost:5555 without errors
# Close it after verification (Ctrl+C)npm run devExpected output:
▲ Next.js 16.1.6
- Local: http://localhost:3000
✓ Ready in 2-3s
- Go to http://localhost:3000/signup
- Enter email:
test1@example.com - Enter password:
password123 - Click "Sign up"
- Should redirect to
/(home page) - No error messages
- Click user menu (top right)
- Click "Sign out"
- Should redirect to
/signin
- Go to http://localhost:3000/signin
- Enter email:
test1@example.com - Enter password:
password123 - Click "Sign in"
- Should redirect to
/(home page)
- Sign out
- Go to
/signin - Click "Demo Account" button
- Should instantly sign in with sample data
- Should see jobs, applications, etc. already populated
- Sign out
- Try to access
/jobsdirectly - Should redirect to
/signin?callbackUrl=/jobs - After signing in, should return to
/jobs
- Go to
/jobspage - Page loads without errors
- Shows "Import from Remotive" button
- Shows filters section
- Click "Import from Remotive"
- Wait 3-5 seconds
- Should see success message
- Jobs list should populate with 20+ jobs
- Each job shows: title, company, location, work mode
- In the search box, type "engineer"
- Select "Remote" from work mode dropdown
- Click "Apply" button
- Results should filter to show only remote engineering jobs
- Clear filters (remove search term, select "Any work mode")
- Should show all jobs again
- Find any job in the list
- Click "Track" button
- Should see success message or visual feedback
- Go to
/applicationspage - Job should appear in "Interested" column
- First, go to
/profileand add some skills:- TypeScript, React, Node.js
- Go back to
/jobs - Click "Score" button on a single job
- Wait 2-3 seconds
- Match score should appear (0-100 range)
- Go to
/jobs - Click "Score All Jobs" button (at top)
- Wait 10-30 seconds (depending on number of jobs)
- Refresh page
- All jobs should now show match scores
- Go to
/applicationspage - Should see kanban board with columns:
- Interested
- Applied
- Recruiter Screen
- Interview
- Offer
- Closed
- Each application shows: job title, company name
- Find an application in "Interested" column
- Drag it to "Applied" column
- Application should move
- Refresh page
- Application should still be in "Applied" column
- Click on any application card
- Should navigate to
/applications/[id] - Find "Next follow-up" date field
- Set date to tomorrow
- Save (form should auto-submit on change)
- Go back to
/applications - Check "Follow-up queue" card
- Application should appear in the queue
- Go to
/applications - Click any application card
- Should see full application details:
- Job title and company
- Application stage
- Follow-up date
- Notes section
- Job deep dive panel
- LinkedIn panel
- Go to
/profilepage - Fill in profile fields:
- Headline: "Senior Software Engineer"
- Location: "San Francisco, CA"
- Desired titles: "Senior Engineer, Staff Engineer"
- Salary range: 150000 - 250000
- Click "Save Profile"
- Should see success message
- Refresh page
- Data should persist
- On
/profilepage - In skills section, add a new skill:
- Name: "Python"
- Level: 4 (slider)
- Years: 5
- Core skill: checked
- Click "Add Skill"
- Skill should appear in skills list
- Should persist after page refresh
- Find a skill in the list
- Click delete/remove button
- Skill should be removed
- Should persist after page refresh
- Go to
/networkpage - Page loads without errors
- Shows contacts list (empty if new account)
- Shows import buttons
- On
/networkpage - If there's a form or "Add Contact" button, click it
- Fill in contact details:
- Name: "John Doe"
- Company: "TechCorp"
- Email: "john@techcorp.example.com"
- Save
- Contact should appear in list
- Go to
/outreachpage - Page loads without errors
- Shows email composer interface
- Select an application from dropdown
- Choose email tone (Warm/Neutral/Direct)
- Click "Generate Draft"
- Wait 3-5 seconds
- Email draft should appear in the text area
- Should be customized based on job and profile
Note: If OPENAI_API_KEY is not set, this will show an error. That's expected.
- Go to
/settingspage - Click "Export All Data" button
- Should download a JSON file
- Open the JSON file
- Should contain your jobs, applications, profile, skills, etc.
- On
/settingspage - Click "Import Data"
- Upload the JSON file you just exported
- Should see success message
- Data should be imported (duplicates may be skipped)
Prerequisites: Add OPENAI_API_KEY=sk-... to your .env file and restart dev server.
- Go to
/jobspage - Click "Company Fit" button on any job
- Wait 5-10 seconds
- Should see AI analysis:
- Company summary
- How you can help
- Culture signals
- Interview angles
- Go to
/jobspage - Click "Deep Dive" button on any job
- Wait 5-10 seconds
- Should see detailed analysis:
- Your strengths for this role
- Potential gaps
- Skills to highlight
- Interview preparation tips
- Go to an application detail page:
/applications/[id] - In the LinkedIn panel, click "Generate Message"
- Wait 3-5 seconds
- Should see a customized LinkedIn message draft
- Message should mention specific job and company
Prerequisites: Set up Google OAuth credentials and add to .env:
AUTH_GOOGLE_IDAUTH_GOOGLE_SECRET
- Go to
/settingsor wherever OAuth link is - Click "Connect Google Account"
- Complete Google OAuth flow
- Should return to app with account connected
- Go to
/outreachpage - Compose an email
- Enter recipient email
- Click "Send via Gmail"
- Should send successfully
- Check recipient's inbox to verify
- Sign out
- Go to
/signin - Enter invalid credentials
- Click "Sign in"
- Should show error message
- Should NOT crash or redirect
- Sign out
- Try to call API directly:
curl http://localhost:3000/api/jobs/score
- Should return 401 Unauthorized error
- Try to create an application with invalid data
- Should show validation error
- Should NOT crash the app
- All pages should load in < 3 seconds
- No loading spinners that hang indefinitely
- Images load properly
- Resize browser window to mobile size (375px width)
- All pages should remain usable
- Navigation should work (hamburger menu if applicable)
- Forms should be accessible
- Open browser DevTools (F12)
- Check Console tab
- Should have no critical errors (red messages)
- Warnings are acceptable
After completing all tests, verify:
- All core CRUD operations work (Create, Read, Update, Delete)
- Authentication and authorization work correctly
- Database operations persist correctly
- No critical errors in browser console
- Application remains responsive throughout testing
- Data exports/imports work correctly
Solution:
- Check internet connection
- Verify API endpoint is accessible
- Check browser console for specific error
Solution:
- Ensure profile and skills are filled in
- Check that jobs have descriptions
- Verify no database errors in terminal
Solution:
- Try refreshing the page
- Check browser console for JavaScript errors
- Verify you're using a modern browser (Chrome, Firefox, Safari, Edge)
Solution:
- Verify
OPENAI_API_KEYis set in.env - Restart dev server after adding key
- Check OpenAI API key has sufficient credits
- Verify key hasn't been revoked
After testing, if you want a fresh start:
# Option 1: Reset entire database
npx prisma migrate reset
# Option 2: Delete test user only (via Prisma Studio)
npm run prisma:studio
# Navigate to User table, delete test users manuallyIf any test fails:
- Note which test failed
- Copy error message from browser console
- Copy error message from terminal
- Note the steps to reproduce
- Check
AUDIT_FINDINGS.mdfor known issues - Report to development team or GitHub Issues
Testing Complete! 🎉
If all core tests pass, your Job Tracker installation is working correctly and ready for use.