Skip to content

Repository files navigation

🎓 Intern Management System

Built for Internee.pk Flutter Internship Task #1

Flutter Firebase Dart License

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.


About This Project

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.


Features

Intern Features

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

Admin Features

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

Tech Stack

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

Project 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

Getting Started

Prerequisites

1. Clone the Repository

git clone https://github.com/YOUR_USERNAME/intern-management-system.git
cd intern-management-system

2. Set Up Firebase

  1. Go to Firebase Console → Create project: internee-pk-ims
  2. Enable Authentication → Email/Password
  3. Create Firestore Database (test mode, region: asia-south1)

3. Connect Flutter to Firebase

dart pub global activate flutterfire_cli
flutterfire configure --platforms=android,ios

This auto-generates lib/firebase_options.dart

4. Install Dependencies

flutter pub get

5. Create the Admin Account

In 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
}

6. Deploy Firestore Rules

Go to Firestore → Rules and paste the contents of firestore.rules, then click Publish.

7. Run the App

flutter devices          # list connected devices
flutter run -d <device>  # run on your device

Task Lifecycle

Assigned (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         │
          └────────────────────────────────────────┘

Firestore Schema

users/{uid}

{
  "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
}

tasks/{taskId}

{
  "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"
}

Key Technical Decisions

Secondary Firebase App for Intern Registration

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.

No Firebase Storage (Free Plan Compatible)

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.

Real-time Streams

All data uses StreamBuilder with Firestore .snapshots(). Every change reflects immediately without manual refresh — no state management library needed.


Author

[Your Name]


License

This project is licensed under the MIT License — see the LICENSE file for details.


Made with using Flutter & Firebase | Internee.pk Flutter Internship 2026

About

Flutter + Firebase Intern Management System. Role-based app with Admin panel, task tracking, and real-time reviews. Built for Internee.pk Task #1

Topics

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages