Your AI-powered career companion — find internships, practice interviews, track applications, and grow your career, all in one app.
- Overview
- Features
- Screenshots
- Tech Stack
- Project Structure
- Prerequisites
- Getting Started
- Supabase Configuration
- Running the App
- Environment Variables
- Architecture
- Contributing
- License
CareerAI is a Flutter mobile application designed to help students and early-career professionals find the right internships, prepare for interviews, and track their applications — all powered by AI matching and a modern, intuitive UI.
The app uses Supabase for authentication, Riverpod for state management, and GoRouter for navigation.
- Personalized greeting with user name from Supabase auth
- Career readiness score and XP tracking
- Quick action cards (Mock Interview, Quiz, Discover, Track)
- Upcoming deadlines and interviews
- Top internship matches with AI match percentages
- Notification bell with tappable items
- Search internships by company or role (live filtering)
- Filter by 7 categories: Engineering, Design, Marketing, Data Science, Product, Finance
- 10 sample internships with AI match scores
- Tap any card to view full details (description, requirements, save, apply)
- 3 tabs: Interview, Quizzes, Challenges
- Full quiz system with multiple-choice questions
- Color-coded right/wrong answers with explanations
- Progress bar, score tracking, results screen
- Topics: Behavioral, DSA, System Design, HR, Flutter, JavaScript, UI/UX, SQL, and more
- Try Again / Back to Practice flow
- Add new applications with company, role, URL, and notes
- 5 status categories: Applied, Screening, Interview, Offer, Rejected
- Filter by status with summary cards
- Tap any application to view details & update status
- Edit notes, delete with undo support
- Long-press for quick delete
- User info from Supabase auth (name, email, initial)
- Edit Profile — update display name (saves to Supabase)
- Education — add/remove education entries
- Skills — manage skills with chips + suggested skills
- Resume/CV — CV Tips (6 tips), CV Checklist (9 items with progress)
- Notifications — toggle push, email, deadline reminders
- Appearance — light/dark/system theme selector
- Language — 8 language options
- Help & FAQ — 6 expandable FAQ items
- Send Feedback — emoji rating + text form
- About — app info dialog
- Sign Out — confirmation dialog
- Smart contextual responses (interview, CV, skills, internships)
- Markdown rendering for rich responses
- Auto-scroll, typing indicator
- Quick prompt chips for common questions
- Clear conversation support
- Email/password sign-in and sign-up
- Input validation (empty check, 6-char password minimum)
- Friendly error messages for common Supabase errors
- OAuth buttons (Google, GitHub) with graceful error handling
- Auth state-driven routing (auto redirect)
Add your screenshots here after running the app.
| Home | Discover | Practice |
|---|---|---|
![]() |
![]() |
![]() |
| Tracker | Profile | Chat |
|---|---|---|
![]() |
![]() |
| Technology | Purpose |
|---|---|
| Flutter 3.x | Cross-platform UI framework |
| Dart 3.x | Programming language |
| Supabase | Authentication (email/password, OAuth) |
| flutter_riverpod | State management |
| go_router | Declarative routing with auth guards |
| flutter_markdown | Markdown rendering in chat |
| fl_chart | Charts and data visualization |
| Material 3 | Modern design system |
lib/
├── main.dart # App entry point, Supabase init
├── core/
│ ├── providers/
│ │ └── auth_provider.dart # Auth state, AuthService, user getters
│ ├── router/
│ │ └── app_router.dart # GoRouter config with auth redirect
│ └── theme/
│ └── app_theme.dart # AppColors, light/dark themes, gradients
├── features/
│ ├── auth/
│ │ └── presentation/
│ │ └── auth_screen.dart # Login/signup screen
│ ├── chat/
│ │ └── presentation/
│ │ └── chat_screen.dart # AI career assistant chat
│ ├── discover/
│ │ └── presentation/
│ │ └── discover_screen.dart # Internship search & filtering
│ ├── home/
│ │ └── presentation/
│ │ └── home_screen.dart # Home dashboard
│ ├── practice/
│ │ └── presentation/
│ │ └── practice_screen.dart # Quiz system with 3 tabs
│ ├── profile/
│ │ └── presentation/
│ │ └── profile_screen.dart # User profile & settings
│ └── tracker/
│ └── presentation/
│ └── tracker_screen.dart # Application tracker
└── shared/
└── widgets/
├── deadline_card.dart # Upcoming deadline display
├── internship_card.dart # Internship card with bookmark/apply
├── mobile_shell.dart # Bottom nav bar shell
├── progress_ring.dart # Circular progress indicator
└── quick_action_card.dart # Quick action card with onTap
Before you begin, make sure you have the following installed:
-
Flutter SDK (3.x or later)
# Check your version flutter --version -
Dart SDK (3.x or later — included with Flutter)
-
A code editor — VS Code (recommended) or Android Studio
-
Platform tools:
- Android: Android Studio with Android SDK
- iOS: Xcode (macOS only)
- Web: Chrome browser
- Windows: Visual Studio with C++ desktop workload
-
A Supabase account — https://supabase.com (free tier works)
git clone https://github.com/your-username/internx.git
cd internxflutter pub getflutter runThe app uses Supabase for authentication. Follow these steps to set up your own Supabase project:
- Go to https://supabase.com and create a new project
- Note your Project URL and Anon Key from
Settings > API
Open lib/main.dart and replace the Supabase credentials:
await Supabase.initialize(
url: 'YOUR_SUPABASE_PROJECT_URL', // e.g. https://xxxx.supabase.co
anonKey: 'YOUR_SUPABASE_ANON_KEY', // starts with eyJ...
);- In your Supabase dashboard, go to Authentication > Providers
- Make sure Email provider is enabled
- (Optional) Disable "Confirm email" for faster testing:
- Go to Authentication > Settings
- Toggle off "Enable email confirmations"
- Go to Google Cloud Console
- Create a new project or select existing
- Go to APIs & Services > Credentials
- Create an OAuth 2.0 Client ID (Web application type)
- Add authorized redirect URI:
https://YOUR_PROJECT_REF.supabase.co/auth/v1/callback - Copy the Client ID and Client Secret
- In Supabase dashboard → Authentication > Providers > Google
- Enable Google and paste the Client ID and Client Secret
- Go to GitHub Developer Settings
- Create a new OAuth App
- Set the callback URL to:
https://YOUR_PROJECT_REF.supabase.co/auth/v1/callback - Copy Client ID and Client Secret
- In Supabase dashboard → Authentication > Providers > GitHub
- Enable GitHub and paste the credentials
flutter run -d androidflutter run -d iosflutter run -d chromeflutter run -d windows# List available devices
flutter devices
# Run on a specific device
flutter run -d <device_id>| Variable | Location | Description |
|---|---|---|
SUPABASE_URL |
lib/main.dart |
Your Supabase project URL |
SUPABASE_ANON_KEY |
lib/main.dart |
Your Supabase anonymous/public key |
Note: For production, consider using
--dart-defineor a.envfile with a package likeflutter_dotenvto avoid hardcoding credentials.
Provider Tree:
├── supabaseClientProvider → Supabase client instance
├── authStateProvider (Stream) → Listens to auth state changes
├── currentUserProvider → Current logged-in user
├── authServiceProvider → AuthService with sign in/up/out methods
└── appRouterProvider → GoRouter with auth-gated redirects
Routes:
├── /auth → AuthScreen (login/signup)
├── /chat → ChatScreen (AI assistant)
└── ShellRoute (MobileShell) → Bottom navigation bar
├── / → HomeScreen
├── /discover → DiscoverScreen
├── /practice → PracticeScreen
├── /tracker → TrackerScreen
└── /profile → ProfileScreen
Auth Flow:
refreshListenablepattern withValueNotifier— re-evaluates redirects on auth state changes without recreating the router- If not logged in → redirect to
/auth - If logged in and on
/auth→ redirect to/ - Loading state is handled gracefully (no redirect while loading)
- Material 3 with custom color scheme
- AppColors — Primary (Indigo), Secondary (Coral), Success (Emerald), Warning (Amber)
- Card & Button themes — Rounded corners (14-20px), no elevation, soft borders
- Gradient decorations —
gradientPrimaryandgradientHerofor accent areas
dependencies:
supabase_flutter: ^2.3.0 # Authentication & backend
flutter_riverpod: ^2.4.9 # State management
go_router: ^13.0.0 # Declarative routing
fl_chart: ^0.66.0 # Charts
flutter_markdown: ^0.6.18 # Markdown rendering in chat
http: ^1.2.0 # HTTP requests
intl: ^0.18.1 # Internationalization
cached_network_image: ^3.3.1 # Image caching
flutter_svg: ^2.0.9 # SVG support→ The email/password doesn't exist. Try Sign Up first, then Sign In.
→ Account exists. Switch to Sign In mode.
→ Check your email for a confirmation link, or disable email confirmations in Supabase settings.
→ OAuth is not enabled in your Supabase dashboard. See Supabase Configuration above.
→ The app does not use custom fonts. If you see font-related errors, ensure no font declarations exist in pubspec.yaml.
→ Flutter 3.x renamed CardTheme to CardThemeData. This is already fixed in the codebase.
- Fork the repository
- Create a feature branch:
git checkout -b feature/amazing-feature - Commit your changes:
git commit -m 'Add amazing feature' - Push to the branch:
git push origin feature/amazing-feature - Open a Pull Request
This project is licensed under the MIT License. See the LICENSE file for details.
- Real AI integration (OpenAI / Gemini API) for chat
- Persistent data storage (Supabase database tables)
- Push notifications
- Resume/CV PDF generation
- Dark mode toggle (wired to app state)
- User onboarding flow
- Bookmarked internships page
- Real-time application status updates
Built with ❤️ using Flutter & Supabase




