Skip to content

WAHID-QANDIL/AttendanceHub

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

96 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

AttendanceHub - Smart Attendance Management System

Modern Android Application for Classroom Attendance Management AttendanceHub.png

Platform Language UI Min SDK


πŸ“– Table of Contents


🎯 Overview

AttendanceHub is a modern, offline-first Android application designed to streamline classroom attendance management. Built with Jetpack Compose and following Material Design 3 guidelines, the app provides a seamless experience for both teachers and students.

The Problem It Solves

Traditional attendance systems often require:

  • Internet connectivity
  • Manual roll calls (time-consuming)
  • Paper-based records (prone to loss)
  • Complex hardware setups

Our Solution

AttendanceHub uses WiFi Direct technology to create a local network where:

  • βœ… No internet required - Works completely offline
  • βœ… Automatic check-in - Students connect, attendance is logged instantly
  • βœ… Real-time tracking - Teachers see students as they connect
  • βœ… Digital records - Export to CSV for permanent storage
  • βœ… QR code convenience - Scan to connect automatically

✨ Key Features

For Teachers πŸ‘¨β€πŸ«

1. Hotspot Management

  • Create WiFi hotspot with one tap
  • Automatic credential generation
  • Custom SSID with random suffix for security
  • Real-time connection monitoring
  • Easy start/stop controls

2. Session Management

  • Create and track attendance sessions
  • Session metadata (start time, duration, SSID)
  • Persistent storage of all sessions
  • Historical session viewing
  • Session statistics

3. QR Code Generation

  • Automatic QR code creation
  • Embedded session information
  • Encrypted WiFi credentials
  • Expiry timestamp for security
  • Large, scannable display

4. Real-Time Student Tracking

  • Live list of connected students
  • Student details (name, ID, device info)
  • Connection timestamps (HH:mm:ss format)
  • Student count display
  • Visual indicators (avatars, status badges)

5. Data Export & Sharing

  • Export attendance to CSV format
  • Share via email, messaging, cloud storage
  • Session metadata included
  • Formatted, readable output
  • Android native share integration

6. Local HTTP Server

  • Runs on port 8080
  • RESTful API endpoints
  • Handles student check-ins
  • Real-time data synchronization
  • Lightweight implementation

For Students πŸ‘©β€πŸŽ“

1. QR Code Scanning

  • Camera-based QR scanner
  • ML Kit barcode detection
  • Automatic WiFi connection
  • Session validation
  • Error handling

2. Automatic Check-In

  • Connect to teacher's hotspot
  • Auto-submit attendance
  • Device information collection
  • Timestamp recording
  • Confirmation feedback

3. Manual Entry (Fallback)

  • Enter session details manually
  • Input SSID, password, server IP
  • Validate and connect
  • Useful when QR scanning fails
  • User-friendly forms

4. Connection Status

  • Real-time connection feedback
  • Session information display
  • Error messages
  • Retry mechanisms
  • Success confirmation

πŸ—οΈ Architecture

Design Pattern: MVVM (Model-View-ViewModel)

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚                    View                      β”‚
β”‚         (Jetpack Compose UI)                 β”‚
β”‚  - HotspotActiveScreen                       β”‚
β”‚  - StudentScannerScreen                      β”‚
β”‚  - SessionHistoryScreen                      β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                   β”‚
                   β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚               ViewModel                      β”‚
β”‚  - TeacherViewModel                          β”‚
β”‚  - StudentViewModel                          β”‚
β”‚  - State Management (StateFlow)              β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                   β”‚
                   β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚           Repository Layer                   β”‚
β”‚  - SessionRepository                         β”‚
β”‚  - NetworkManager                            β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜
                   β”‚
                   β–Ό
β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚             Data Sources                     β”‚
β”‚  - Local Storage (Files)                     β”‚
β”‚  - Network (HTTP Server)                     β”‚
β”‚  - WiFi Direct API                           β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

Key Architectural Principles

  • βœ… Unidirectional Data Flow - Data flows one way through the app
  • βœ… Separation of Concerns - Each layer has a single responsibility
  • βœ… Reactive Programming - StateFlow for reactive state management
  • βœ… Dependency Injection - Manual DI with constructor injection
  • βœ… Immutable State - UI state is immutable and predictable

πŸ› οΈ Technologies Used

Core Technologies

Technology Purpose Version
Kotlin Primary programming language 2.0.21
Jetpack Compose Modern declarative UI toolkit 2024.09.00
Material Design 3 UI components and theming Latest
Coroutines Asynchronous programming Latest
StateFlow Reactive state management Latest

Android Jetpack Components

  • ViewModel - UI state management with lifecycle awareness
  • Navigation Compose - Type-safe navigation between screens
  • Lifecycle - Lifecycle-aware components
  • Activity Compose - Compose integration with activities
  • CameraX - Camera functionality for QR scanning

Networking & Communication

  • ServerSocket - Custom HTTP server implementation
  • WiFi Direct API - Android hotspot management
  • Network Callback API - Network connectivity monitoring
  • JSON Serialization - kotlinx-serialization for data exchange

QR Code & Scanning

  • ZXing - QR code generation (Teacher app)
    • com.journeyapps:zxing-android-embedded:4.3.0
  • ML Kit - Barcode scanning (Student app)
    • com.google.mlkit:barcode-scanning:17.3.0
  • Google Code Scanner - Alternative QR scanner
    • com.google.android.gms:play-services-code-scanner:16.1.0

Data Storage & Export

  • File System - Session storage in app files directory
  • FileProvider - Secure file sharing
  • CSV Export - Manual CSV generation for attendance lists

Build & Development Tools

  • Gradle (Kotlin DSL) - Build automation
  • Android Gradle Plugin - 8.13.1
  • Product Flavors - Multi-variant build system (teacher/student)
  • BuildConfig - Build-time configuration

πŸ“ Project Structure

Module Organization

AttendanceHub/
β”‚
β”œβ”€β”€ πŸ“¦ app/                          # Main application module
β”‚   β”œβ”€β”€ src/
β”‚   β”‚   β”œβ”€β”€ main/                    # Shared code
β”‚   β”‚   β”‚   β”œβ”€β”€ AndroidManifest.xml
β”‚   β”‚   β”‚   β”œβ”€β”€ java/org/wahid/attendancehub/
β”‚   β”‚   β”‚   β”‚   └── MainActivity.kt
β”‚   β”‚   β”‚   └── res/                 # Shared resources
β”‚   β”‚   β”‚
β”‚   β”‚   β”œβ”€β”€ teacher/                 # Teacher variant
β”‚   β”‚   β”‚   β”œβ”€β”€ AndroidManifest.xml
β”‚   β”‚   β”‚   β”œβ”€β”€ java/org/wahid/attendancehub/
β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ ui/
β”‚   β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ screens/
β”‚   β”‚   β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ HotspotActiveScreen.kt
β”‚   β”‚   β”‚   β”‚   β”‚   β”‚   └── SessionHistoryScreen.kt
β”‚   β”‚   β”‚   β”‚   β”‚   └── viewmodel/
β”‚   β”‚   β”‚   β”‚   β”‚       └── TeacherViewModel.kt
β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ net/
β”‚   β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ AttendanceServer.kt
β”‚   β”‚   β”‚   β”‚   β”‚   └── TeacherHotspotManager.kt
β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ data/
β”‚   β”‚   β”‚   β”‚   β”‚   β”œβ”€β”€ SessionRepository.kt
β”‚   β”‚   β”‚   β”‚   β”‚   └── AttendanceSession.kt
β”‚   β”‚   β”‚   β”‚   └── navigation/
β”‚   β”‚   β”‚   β”‚       └── TeacherNavHost.kt
β”‚   β”‚   β”‚   └── res/
β”‚   β”‚   β”‚       β”œβ”€β”€ values/strings.xml
β”‚   β”‚   β”‚       └── xml/file_paths.xml
β”‚   β”‚   β”‚
β”‚   β”‚   └── student/                 # Student variant
β”‚   β”‚       β”œβ”€β”€ AndroidManifest.xml
β”‚   β”‚       β”œβ”€β”€ java/org/wahid/attendancehub/
β”‚   β”‚       β”‚   β”œβ”€β”€ ui/
β”‚   β”‚       β”‚   β”‚   β”œβ”€β”€ screens/
β”‚   β”‚       β”‚   β”‚   β”‚   β”œβ”€β”€ ScannerScreen.kt
β”‚   β”‚       β”‚   β”‚   β”‚   └── ManualEntryScreen.kt
β”‚   β”‚       β”‚   β”‚   └── viewmodel/
β”‚   β”‚       β”‚   β”‚       └── StudentViewModel.kt
β”‚   β”‚       β”‚   β”œβ”€β”€ net/
β”‚   β”‚       β”‚   β”‚   └── AttendanceClient.kt
β”‚   β”‚       β”‚   └── navigation/
β”‚   β”‚       β”‚       └── StudentNavHost.kt
β”‚   β”‚       └── res/
β”‚   β”‚           └── values/strings.xml
β”‚   β”‚
β”‚   └── build.gradle.kts             # App build configuration
β”‚
β”œβ”€β”€ πŸ“¦ core/                         # Shared interfaces module
β”‚   β”œβ”€β”€ src/main/java/com/attendancehub/
β”‚   β”‚   β”œβ”€β”€ net/
β”‚   β”‚   β”‚   β”œβ”€β”€ HotspotManager.kt    # Interface
β”‚   β”‚   β”‚   └── HotspotInfo.kt       # Data class
β”‚   β”‚   └── models/
β”‚   β”‚       └── StudentAttendance.kt
β”‚   └── build.gradle.kts
β”‚
β”œβ”€β”€ πŸ“¦ student/                      # Student feature module
β”‚   β”œβ”€β”€ src/main/java/com/attendancehub/net/
β”‚   β”‚   └── StudentHotspotManager.kt # Implementation
β”‚   └── build.gradle.kts
β”‚
β”œβ”€β”€ πŸ“„ build.gradle.kts              # Root build file
β”œβ”€β”€ πŸ“„ settings.gradle.kts           # Project settings
β”œβ”€β”€ πŸ“„ gradle.properties             # Gradle properties
β”‚
└── πŸ“š Documentation/
    β”œβ”€β”€ PROJECT_README.md            # This file
    β”œβ”€β”€ ARCHITECTURE.md
    β”œβ”€β”€ MODULARIZATION_SUMMARY.md
    β”œβ”€β”€ NAVIGATION_COMPLETE.md
    β”œβ”€β”€ HTTP_SERVER_COMPLETE.md
    β”œβ”€β”€ QR_AND_THEME_COMPLETE.md
    β”œβ”€β”€ STUDENT_QR_SCANNING_COMPLETE.md
    β”œβ”€β”€ DOWNLOAD_STUDENT_LIST_COMPLETE.md
    β”œβ”€β”€ CONNECTED_STUDENTS_LIST_BUG_FIX.md
    └── ... (other documentation files)

Key Directories Explained

Directory Purpose
app/src/main/ Code and resources shared by both variants
app/src/teacher/ Teacher-specific implementation
app/src/student/ Student-specific implementation
core/ Shared interfaces and models
student/ Standalone student module

πŸ”„ How It Works

Teacher Workflow

1. Teacher opens app
   ↓
2. Tap "Start Hotspot"
   ↓
3. System creates WiFi hotspot
   ↓
4. QR code generated with:
   - SSID
   - Password
   - Server IP (192.168.49.1)
   - Session ID
   - Expiry timestamp
   ↓
5. HTTP server starts on port 8080
   ↓
6. Display QR code to students
   ↓
7. Students connect β†’ Server receives check-in
   ↓
8. Real-time UI update with student list
   ↓
9. Teacher taps "Download" to export CSV
   ↓
10. Share attendance via email/cloud
    ↓
11. Tap "End Session" to stop

Student Workflow

1. Student opens app
   ↓
2. Camera opens for QR scanning
   ↓
3. Scan teacher's QR code
   ↓
4. App parses session info
   ↓
5. Connect to WiFi hotspot
   ↓
6. Send POST request to server:
   POST http://192.168.49.1:8080/join
   {
     "studentId": "STU123",
     "name": "John Doe",
     "deviceId": "Samsung-ABC123"
   }
   ↓
7. Server responds with success
   ↓
8. Display confirmation to student

Communication Protocol

Teacher β†’ Student (QR Code)

{
  "ssid": "AndroidShare_3912",
  "password": "y9tm7mjfjm9heds",
  "serverIp": "192.168.49.1",
  "sessionId": "uuid-here",
  "expiryTimestamp": 1764578454446
}

Student β†’ Teacher (HTTP POST)

POST /join HTTP/1.1
Host: 192.168.49.1:8080
Content-Type: application/json

{
  "studentId": "STU123",
  "name": "John Doe",
  "deviceId": "Samsung-ABC123",
  "timestamp": 1733040600000
}

Server Response

HTTP/1.1 200 OK
Content-Type: application/json

{
  "status": "success",
  "message": "Attendance recorded",
  "studentName": "John Doe"
}

πŸ“± Build Variants

Product Flavors

The app uses Gradle product flavors to create two distinct applications:

Teacher Variant

applicationId: "com.attendancehub.teacher"
Features:
  - Hotspot management
  - QR code generation
  - HTTP server
  - Student list display
  - CSV export

Student Variant

applicationId: "com.attendancehub.student"
Features:
  - QR code scanning
  - WiFi connection
  - Attendance submission
  - Status display

Build Types

  • Debug: Development builds with logging enabled
  • Release: Production builds with ProGuard (currently disabled)

Available Build Configurations

Configuration Description
teacherDebug Teacher app for testing
teacherRelease Teacher app for production
studentDebug Student app for testing
studentRelease Student app for production

πŸš€ Installation & Setup

Prerequisites

  • Android Studio Otter (2025.2.1) or later
  • JDK 11 or higher
  • Android SDK 28 or higher
  • Gradle 8.13.1 (wrapper included)

Clone & Build

# Clone the repository
git clone https://github.com/yourusername/AttendanceHub.git
cd AttendanceHub

# Build all variants
./gradlew build

# Build specific variant
./gradlew assembleTeacherDebug
./gradlew assembleStudentDebug

# Install on device
./gradlew installTeacherDebug
./gradlew installStudentDebug

Configuration

Teacher App Configuration

No additional configuration required. The app will:

  • Auto-generate hotspot credentials
  • Use default port 8080
  • Store sessions in app files directory

Student App Configuration

No additional configuration required. The app will:

  • Request camera permissions on first launch
  • Auto-detect session info from QR codes

πŸ“– Usage Guide

Teacher Guide

Starting a Session

  1. Launch the teacher app
  2. Tap "Start Hotspot" on the home screen
  3. Wait for QR code to appear (2-3 seconds)
  4. Display the QR code to students (or share SSID/password manually)
  5. Monitor the student list as students connect
  6. Session is now active

During a Session

  • View connected students in real-time
  • See student count at the top
  • Check connection times for each student
  • Download attendance anytime during the session

Ending a Session

  1. Tap "End Session & Disable Hotspot" button
  2. Session is automatically saved
  3. Students are disconnected
  4. Return to home screen

Exporting Attendance

  1. Tap the download icon (πŸ“₯) next to student count
  2. Choose sharing method (Email, Drive, etc.)
  3. CSV file is shared with session data

Student Guide

Joining a Session

  1. Launch the student app
  2. Point camera at teacher's QR code
  3. Wait for automatic scanning (1-2 seconds)
  4. App connects to WiFi automatically
  5. Attendance is submitted
  6. See confirmation message

Manual Entry (if QR fails)

  1. Tap "Enter Manually" on scanner screen
  2. Enter session details:
    • SSID (from teacher's screen)
    • Password (from teacher's screen)
    • Server IP (usually 192.168.49.1)
  3. Tap "Connect"
  4. Submit attendance

πŸ“Š Data Export

CSV Format

Session Name,Session 2025-12-01 08:30
Session ID,4b977823-cdf3-4ffd-ab15-5440df2f3f32
SSID,AndroidShare_3912
Start Time,2025-12-01 08:30:00
End Time,2025-12-01 10:15:00
Total Students,25

No.,Student ID,Name,Device ID,Connected At,Timestamp
1,STU001,John Doe,Samsung-AB,08:40:54,1733040654000
2,STU002,Jane Smith,Pixel-XYZ,08:41:12,1733040672000
3,STU003,Bob Johnson,OnePlus-99,08:41:45,1733040705000

Export Options

The CSV can be shared via:

  • πŸ“§ Email (Gmail, Outlook, etc.)
  • ☁️ Cloud Storage (Google Drive, Dropbox, OneDrive)
  • πŸ’¬ Messaging Apps (WhatsApp, Telegram, Slack)
  • πŸ’Ύ Local Storage (Downloads folder)
  • πŸ“± Nearby Share (Android's built-in sharing)

File Location

Exported files are saved to:

/Android/data/com.attendancehub.teacher/files/exports/
attendance_2025-12-01_08-30-00.csv

πŸ”’ Security & Privacy

Security Features

βœ… WPA2 Encryption - Hotspot uses WPA2 for WiFi security βœ… Random Credentials - Auto-generated passwords for each session βœ… Session Expiry - QR codes expire after session ends βœ… Local-Only Server - No internet connectivity required βœ… Scoped Storage - Files stored in app-specific directories βœ… FileProvider - Secure file sharing with URI permissions

Privacy Considerations

  • βœ… No cloud storage - All data stays on device
  • βœ… No user accounts - No registration required
  • βœ… No tracking - No analytics or telemetry
  • βœ… No ads - Completely ad-free
  • βœ… Minimal permissions - Only essential permissions requested

Permissions Required

Teacher App

  • ACCESS_WIFI_STATE - Check WiFi status
  • CHANGE_WIFI_STATE - Create hotspot
  • ACCESS_FINE_LOCATION - Required for WiFi APIs (Android 10+)
  • NEARBY_WIFI_DEVICES - WiFi Direct (Android 13+)

Student App

  • CAMERA - QR code scanning
  • ACCESS_WIFI_STATE - Check WiFi status
  • CHANGE_WIFI_STATE - Connect to hotspot
  • ACCESS_FINE_LOCATION - Required for WiFi APIs (Android 10+)
  • INTERNET - HTTP requests to local server

πŸ› Known Issues

Fixed Issues βœ…

Issue Status Date Fixed Solution
Connected students not displaying βœ… Fixed 2025-12-01 Type mismatch in timestamp conversion
Window leak on QR scanner βœ… Fixed 2024 Proper lifecycle management
FileProvider resource not found βœ… Fixed 2025-12-01 IDE cache issue, build successful

Open Issues ⚠️

Issue Priority Status
Date constructor deprecation warning Low Non-critical
Room database migration needed Medium Planned
PDF export support Low Feature request

Bug Reports

For bug reports, please check:

  • CONNECTED_STUDENTS_LIST_BUG_FIX.md
  • WINDOW_LEAK_EXPLANATION.md
  • Other documentation files in the project root

πŸ‘¨β€πŸ’» Development

Code Style

  • Language: Kotlin (prefer idiomatic Kotlin)
  • Formatting: Default Android Studio formatting
  • Naming: camelCase for variables, PascalCase for classes
  • Comments: Clear, concise documentation

Testing

# Run all tests
./gradlew test

# Run specific variant tests
./gradlew testTeacherDebugUnitTest
./gradlew testStudentDebugUnitTest

Debugging

Enable verbose logging:

// In TeacherViewModel or StudentViewModel
private val TAG = "YourTag"
Log.d(TAG, "Your debug message")

Building Release

# Build release APK
./gradlew assembleTeacherRelease
./gradlew assembleStudentRelease

# APKs will be in:
# app/build/outputs/apk/teacher/release/
# app/build/outputs/apk/student/release/

πŸ“š Documentation

Available Documentation Files

File Description
PROJECT_README.md This file - comprehensive overview
ARCHITECTURE.md Detailed architecture documentation
MODULARIZATION_SUMMARY.md Module structure explanation
NAVIGATION_COMPLETE.md Navigation implementation details
HTTP_SERVER_COMPLETE.md Server implementation guide
QR_AND_THEME_COMPLETE.md QR code and theming documentation
STUDENT_QR_SCANNING_COMPLETE.md QR scanning implementation
DOWNLOAD_STUDENT_LIST_COMPLETE.md Export feature documentation
CONNECTED_STUDENTS_LIST_BUG_FIX.md Bug fix documentation
CAMERA_DEBUG_GUIDE.md Camera troubleshooting
QR_DEBUG_GUIDE.md QR code debugging

API Documentation

Teacher App APIs

TeacherViewModel

class TeacherViewModel(application: Application) : AndroidViewModel(application) {
    // State
    val uiState: StateFlow<TeacherUiState>
    
    // Actions
    fun startHotspot()
    fun stopHotspot()
    fun downloadStudentList()
}

AttendanceServer

class AttendanceServer(private val port: Int = 8080) {
    val connectedStudents: StateFlow<List<StudentAttendance>>
    
    fun startServer(): Result<Unit>
    fun stopServer()
    fun clearStudents()
}

Student App APIs

StudentViewModel

class StudentViewModel(application: Application) : AndroidViewModel(application) {
    val uiState: StateFlow<StudentUiState>
    
    fun connectToSession(sessionInfo: SessionInfo)
    fun submitAttendance(studentInfo: StudentInfo)
}

πŸŽ“ Use Cases

Classroom Attendance

  • Primary Use: Daily classroom attendance tracking
  • Benefits: Fast, automated, no manual roll call
  • Capacity: Supports 30+ students per session

Workshop/Training Sessions

  • Use: Track participants in workshops
  • Benefits: Professional attendance records
  • Export: Easy sharing with organizers

Lab Sessions

  • Use: Monitor student presence in labs
  • Benefits: Timestamp-based tracking
  • Records: Permanent digital records

Events & Seminars

  • Use: Attendee check-in at events
  • Benefits: Quick QR-based check-in
  • Analytics: Real-time attendance numbers

🀝 Contributing

Contributions are welcome! Please follow these guidelines:

  1. Fork the repository
  2. Create a feature branch (feature/amazing-feature)
  3. Commit your changes with clear messages
  4. Push to your branch
  5. Open a Pull Request

Development Setup

  1. Clone the repository
  2. Open in Android Studio
  3. Sync Gradle files
  4. Run assembleDebug to ensure everything builds
  5. Make your changes
  6. Test thoroughly on both variants
  7. Submit PR

πŸ“„ License

MIT LICENCE [LICENCE]


πŸ“ž Contact & Support


πŸ™ Acknowledgments

  • Android Team - Jetpack Compose and modern Android development
  • ZXing - QR code generation library
  • Google ML Kit - Barcode scanning capabilities
  • Material Design - UI/UX guidelines and components

πŸ“ˆ Project Status

Aspect Status
Development βœ… Active
Teacher App βœ… Functional
Student App βœ… Functional
CSV Export βœ… Complete
QR Scanning βœ… Complete
Documentation βœ… Comprehensive
Testing ⚠️ In Progress
Release πŸ”„ Pending

πŸ—ΊοΈ Roadmap

Version 1.0 (Current)

  • βœ… Basic hotspot management
  • βœ… QR code generation and scanning
  • βœ… Real-time attendance tracking
  • βœ… CSV export
  • βœ… Material Design 3 UI

Version 1.1 (Planned)

  • πŸ“… PDF export support
  • πŸ“… Session history UI
  • πŸ“… Statistics and analytics
  • πŸ“… Dark mode improvements
  • πŸ“… Multi-language support

Version 2.0 (Future)

  • πŸ“… Room database integration
  • πŸ“… Offline sync
  • πŸ“… Advanced reporting
  • πŸ“… Customizable themes
  • πŸ“… Attendance analytics

Made with ❀️ using Kotlin & Jetpack Compose

Last Updated: December 1, 2025

Version 1.0.0