A modern Flutter job-board app that connects recruiters and job seekers. Recruiters post jobs and manage applicants; job seekers browse jobs and apply with a resume and cover letter. Built with Firebase (Auth + Firestore) and Cloudinary for resume storage.
- Post jobs — Title, company, location, type, salary range, description
- Manage jobs — Edit, delete, and view your listings
- View applicants — See all applications per job with cover letter and contact info
- View resumes — One tap opens the applicant’s PDF in your browser or default PDF app
- Update application status — Mark applicants as Reviewed, Accepted, or Rejected
- Dashboard — Quick stats (posted jobs, total applicants)
- Browse jobs — Search and filter by location, job type, salary
- Job details — Full description and apply in one tap
- Apply with resume — Upload PDF/DOC/DOCX (stored on Cloudinary) and add a cover letter
- My applications — Track status of all your applications
- Role-based auth — Sign up as Recruiter or Job Seeker; separate flows after login
- Firebase Authentication — Email/password sign-in and registration
- Firestore — Jobs, applications, and user data in real time
- Responsive UI — Animations, shimmer, and consistent theming
| Area | Technology |
|---|---|
| Framework | Flutter (Dart 3.x) |
| State management | Provider |
| Routing | go_router |
| Backend / Auth | Firebase (Core, Auth, Firestore) |
| File storage | Cloudinary (raw upload for resumes) |
| Networking | Dio, http |
| UI | Material 3, flutter_animate, Lottie, google_fonts |
- Flutter SDK (e.g. 3.22+) — Install Flutter
- Firebase project — Console
- Cloudinary account — Cloudinary (for resume uploads)
git clone https://github.com/YOUR_USERNAME/career_connect.git
cd career_connect
flutter pub get-
Create a Firebase project and enable Authentication (Email/Password) and Cloud Firestore.
-
Register your app (Android / iOS / Web) in the Firebase console and download config files if needed.
-
Install FlutterFire CLI and generate/configure options:
dart pub global activate flutterfire_cli flutterfire configure
-
Ensure
lib/firebase_options.dartis generated and thatmain.dartusesDefaultFirebaseOptions.currentPlatformwhen callingFirebase.initializeApp().
-
Create a Cloudinary account and get your Cloud name.
-
Create an unsigned upload preset (e.g.
career_connect_resumes) and set Resource type to Raw (for PDFs). -
In the project, set your config in
lib/core/constants/cloudinary_config.dart:cloudName— your cloud nameuploadPreset— your unsigned preset name
-
Optional: adjust
maxFileSizeandallowedExtensions(default: PDF, DOC, DOCX; max 3MB).
flutter runUse a device or emulator; for web, ensure Firebase and Cloudinary are allowed for your origins.
lib/
├── main.dart # Entry: Firebase init, providers, MaterialApp.router
├── firebase_options.dart # Generated by FlutterFire (do not commit secrets)
├── core/
│ ├── constants/ # Colors, strings, Cloudinary config
│ ├── routes/ # go_router routes
│ ├── theme/ # App theme
│ ├── screens/ # All screens
│ │ ├── auth/ # Role selection, login, signup
│ │ ├── recruiter/ # Recruiter home, add/manage jobs, applicants
│ │ └── jobseeker/ # Job seeker home, job details, apply, my applications
│ └── utils/ # Helpers, validators
├── models/ # User, Job, Application
├── providers/ # Auth, Job, Application (Provider)
└── services/ # Auth, Firestore, Cloudinary
When a recruiter taps View Resume on an applicant:
- The app uses the preview Cloudinary URL (raw, no
fl_attachment) so the PDF opens correctly. - The resume opens in the device browser or default PDF app for reliable viewing.
- If it can’t open automatically, a dialog offers Copy link and Open in browser so the recruiter can still access the PDF easily.
| Config file / env | Purpose |
|---|---|
firebase_options.dart |
API keys and project IDs (FlutterFire) |
cloudinary_config.dart |
Cloud name, upload preset, file size/type |
Do not commit real API keys or secrets to the repo; use environment variables or CI secrets for production.
This project is provided as-is. Use it for learning or as a base for your own job-board app.
- Fork the repo.
- Create a branch (
git checkout -b feature/your-feature). - Commit changes (
git commit -m 'Add some feature'). - Push to the branch (
git push origin feature/your-feature). - Open a Pull Request.
CareerConnect — Connect talent with opportunity.