Built for Internee.pk Flutter Internship Task #1
A fully functional cross-platform mobile app to manage intern profiles, track tasks, and handle task submissions with admin review built with Flutter and Firebase.
This project was developed as Task #1 of the Flutter internship at Internee.pk. The goal was to build a centralized platform where admins can manage intern profiles and assign tasks, while interns can track their progress and submit work via GitHub and LinkedIn links.
| Feature | Description |
|---|---|
| Secure Login | Firebase Authentication with email & password |
| Dashboard | Progress ring, task stats, filter by status |
| Task View | Full task details with priority, category, due date |
| Start Task | Mark task as In Progress |
| Submit Links | Paste GitHub repo + LinkedIn post URL as submission |
| Edit Submission | Update note and links before/after review |
| Re-submit | After admin requests revision |
| View Remarks | See admin's feedback in color-coded remark card |
| Feature | Description |
|---|---|
| Register Interns | Create Firebase Auth + Firestore profile in one step |
| Assign Tasks | Set priority, category, due date, assignee |
| Manage Interns | Search, filter, view profiles, update status |
| Review Tab | See all submitted tasks awaiting review |
| Give Remarks | Approve / Request Revision / Reject with written feedback |
| Delete Intern | Removes auth profile and all associated tasks |
| Layer | Technology |
|---|---|
| Frontend | Flutter 3.x (Dart) |
| Authentication | Firebase Auth (Email/Password) |
| Database | Cloud Firestore (real-time streams) |
| State | StreamBuilder (reactive, no extra state management) |
| Link Handling | url_launcher |
| Architecture | Feature-based folder structure |
lib/
├── main.dart # Entry point + AppTheme + Responsive helper
├── firebase_options.dart # Auto-generated by FlutterFire CLI
│
├── models/
│ ├── intern_user.dart # InternUser data model
│ └── task_model.dart # TaskModel + TaskSubmissionLink model
│
├── services/
│ ├── auth_service.dart # Login, register (secondary app fix), logout
│ └── firestore_service.dart # CRUD, submit, review, real-time streams
│
├── screens/
│ ├── auth/
│ │ ├── splash_screen.dart # Auto-routes by role (admin/intern)
│ │ └── login_screen.dart # Responsive login UI
│ │
│ ├── intern/
│ │ ├── intern_dashboard.dart # Task dashboard with stats
│ │ └── task_detail_screen.dart # Submit links, edit, view remarks
│ │
│ └── admin/
│ ├── admin_dashboard.dart # Interns / Tasks / Review tabs
│ ├── add_intern_screen.dart # Register new intern
│ ├── assign_task_screen.dart # Create and assign tasks
│ ├── intern_profile_screen.dart # View intern profile + tasks
│ └── task_review_screen.dart # Review submission + give remark
│
└── widgets/
├── task_card.dart # Task card with status + remark badge
├── intern_list_card.dart # Intern list item with progress bar
└── progress_ring.dart # Animated circular progress widget
- Flutter SDK 3.x
- Android Studio or VS Code
- A Firebase account
git clone https://github.com/YOUR_USERNAME/intern-management-system.git
cd intern-management-system- Go to Firebase Console → Create project:
internee-pk-ims - Enable Authentication → Email/Password
- Create Firestore Database (test mode, region:
asia-south1)
dart pub global activate flutterfire_cli
flutterfire configure --platforms=android,iosThis auto-generates lib/firebase_options.dart
flutter pub getIn Firebase Console → Authentication → Add User:
- Email:
admin@internee.pk - Password:
Admin@123 - Copy the generated UID
In Firestore → Data → Collection users → Document ID = (paste UID) :
{
"name": "Admin",
"email": "admin@internee.pk",
"role": "admin",
"department": "Management",
"batchNo": "Staff",
"phone": "+92-XXX-XXXXXXX",
"joinDate": "2024-01-01T00:00:00.000",
"status": "active",
"completedTasks": 0,
"totalTasks": 0
}Go to Firestore → Rules and paste the contents of firestore.rules, then click Publish.
flutter devices # list connected devices
flutter run -d <device> # run on your deviceAssigned (pending)
↓ Intern taps "Start Task"
In Progress
↓ Intern pastes GitHub + LinkedIn links and submits
Submitted ──────────────► Admin sees it in Review Tab
↓
┌────────────────────────────────────────┐
│ Approved → Completed │
│ Needs Revision → back In Progress │
│ (intern edits links/note & re-submits)│
│ Rejected → back to Pending │
└────────────────────────────────────────┘
{
"name": "Ali Hassan",
"email": "ali@example.com",
"role": "intern",
"department": "Flutter",
"batchNo": "Batch-12",
"phone": "+92-300-1234567",
"joinDate": "2024-06-01T00:00:00.000",
"status": "active",
"completedTasks": 2,
"totalTasks": 5
}{
"title": "Build Login Screen",
"description": "Create a login screen using Flutter with Firebase Auth...",
"assignedTo": "intern_uid",
"assignedToName": "Ali Hassan",
"assignedBy": "admin_uid",
"dueDate": "2024-07-15T00:00:00.000",
"createdAt": "2024-06-10T00:00:00.000",
"status": "submitted",
"priority": "high",
"category": "Flutter",
"submissionNote": "Completed the task. Used Firebase Auth with email/password.",
"links": [
{ "type": "github", "url": "https://github.com/user/repo", "label": "GitHub Repository" },
{ "type": "linkedin", "url": "https://linkedin.com/posts/...", "label": "LinkedIn Post" }
],
"submittedAt": "2024-07-10T00:00:00.000",
"adminRemark": "Great work! Clean code structure.",
"adminReviewStatus": "approved",
"reviewedAt": "2024-07-11T00:00:00.000",
"completedAt": "2024-07-11T00:00:00.000"
}When an admin registers a new intern, Firebase's createUserWithEmailAndPassword() automatically signs in the new user, which would log out the admin. This app solves it by creating a temporary secondary Firebase App instance for registration, keeping the admin session intact.
Task submissions use GitHub repository links + LinkedIn post URLs instead of file uploads. This keeps the app 100% free-tier compatible while encouraging interns to build a public portfolio.
All data uses StreamBuilder with Firestore .snapshots(). Every change reflects immediately without manual refresh — no state management library needed.
[Your Name]
- GitHub: @HamzaAli2002
- LinkedIn: Muhammad Hamza Ali
- Flutter Intern @ Internee.pk
This project is licensed under the MIT License — see the LICENSE file for details.