Back to Projects

Presensee

Presensee

Presensee is a smart internal attendance platform from specific institutions that use facial recognition, some verification, and a powerful admin dashboard.


Executive Summary & Role

Me and my friends built Presensee to secure an internal attendance system for a specific institution (sorry, the institution needs to keep some information private, so I can’t provide specific details).

This is my first non-monolithic project, it has backend with Laravel and a Flutter for the frontend, also its uses a Python and Dlib for facial recognition system.


Key Features

  • Face Recognition: The backend runs a Python computer vision pipeline that compares captured image from flutter using camera against data in the database using specific verification.
  • On-Device ML Detection: The Flutter mobile app uses Google ML Kit to detect a face locally before even sending the image to the server, saving bandwidth and preventing spoofing.
  • Powerful Admin Dashboard: The admin dashboard provides a comprehensive view of attendance data, and management tools.

The Problem & The Solution

The Problem:

  • Buddy Punching & Fraud: Traditional methods make it way too easy for employees to clock in for absent colleagues.
  • Hardware Bottlenecks: Physical device (e.g., fingerprint scanners) cause massive queues during peak hours, cost a lot of money, and break down constantly.
  • Admin Overhead: Some head of departments spend too much time managing some administrative tasks also sometimes they have miscommunication each other.

The Solution:

  • Biometric Smartphones: By moving attendance to the employees’ own phones, we eliminated hardware queues and maintenance costs entirely.
  • Strict Verification: The combination of Python-based Facial Recognition and strictly verification algorithms makes faking attendance nearly impossible.
  • Centralized Admin Dashboard: The admin dashboard provides a single source of truth for attendance data, reducing miscommunication and administrative overhead.

Technical Details & Architecture

This is where the tech stack gets really exciting. Here is why I decoupled the architecture:

  • Laravel: Acts as the central brain. It handles the database, business logic, and issues secure API tokens to the mobile app.
  • Python & Dlib: Laravel communicates to a Python script running face recognition and some algorithm to do some verification.
  • Flutter & Google ML Kit (Mobile): Android app that uses native camera integrations, Google ML Kit to detect faces locally before sending the images to the Laravel API.
  • why not monolithic? A mobile app requires a completely different client than a web dashboard. By decoupling them, the Flutter app and Laravel dashboard can evolve independently.
  • why Python for Face Recognition? PHP isn’t built for heavy math and machine learning. Python has tested computer vision libraries that process facial recognition with good accuracy.

Challenges & Learnings

Building a decoupled, AI-powered system brought a whole new set of challenges:

  • Bridging PHP and Python: Figuring out how to efficiently pass images from a Laravel controller to a Python execution script and parse the response without blocking the server was a massive learning curve.
  • Machine Learning: Leraning about the fundamentals of machine learning and how to apply them in a production environment.
  • [some redacted challenges and learnings]

Key Takeaways & Results

Presensee was a massive milestone for me. It forced me to step out of the standard “monolithic web app” comfort zone and dive into the world of distributed systems and mobile development.

  • Mastering Decoupled Architecture: I now fully understand how to build secure, scalable REST APIs that serve multiple distinct clients (web dashboards and mobile apps).
  • ML Integration: Successfully integrating a Python machine-learning pipeline into a standard PHP backend proved that you can combine the best tools for the job.
  • Mobile Dev: Learning Flutter and integrating it with device hardware (cameras, etc) gave me the confidence to build full-stack cross-platform apps.