Search the portfolio

↑ ↓ to select · Enter to open · Esc to close

Back to the work

GREETLY.

Active project

A local recognition event.
A connected attendance system.

EDGE COMPUTINGCOMPUTER VISIONCLOUD / REALTIME
Exploded device concept artwork from the Greetly repository
REPOSITORY CONCEPT ARTWORK · NOT A PHOTOGRAPH OF THE BUILT HARDWARE
THE SYSTEM CONTEXT

Recognition is only
the beginning.

An attendance system has to connect what happens at a physical device with what an administrator can actually see.

Greetly brings those two sides together: a Raspberry Pi handles camera input and face recognition; Supabase stores attendance records; a Next.js dashboard presents updates and device telemetry.

The public repository supplies the implementation evidence for this case study. It is a project walkthrough, not an independently validated deployment or performance benchmark.

From a face
to a record.

Six steps. One connected system.
Try me — scroll or choose a stage.Try me — tap a stage to follow the event.

AT THE EDGE

Local intelligence.

Frames stay local. Only the recognition event moves onward.

attendance_logs
student
Recognized identity
timestamp
Capture time
status
Awaiting event
ILLUSTRATIVE RECORD
INTERACTIVE SCHEMATIC · NOT A HARDWARE REPLICA
01/06

Camera input

The Pi reads camera frames locally. The frame stays at the edge for the recognition step.

ARCHITECTURE WALKTHROUGH
NOT A LIVE DATA FEED
Read the complete architecture
  1. Capture · Camera input

    The Pi reads camera frames locally. The frame stays at the edge for the recognition step.

  2. Process · Raspberry Pi · OpenCV

    OpenCV prepares grayscale face regions on the Raspberry Pi. Local processing avoids sending a continuous video stream to the dashboard.

  3. Identify · LBPH recognition · cooldown

    The current Python script matches faces with an LBPH recognizer. A per-person cooldown suppresses repeated attendance writes.

  4. Sync · Supabase client

    The edge script sends attendance records through the Supabase client. A local queue in the script supports retrying writes.

  5. Store · PostgreSQL

    An attendance record is stored in attendance_logs, connecting the identified student to a timestamp and attendance status.

  6. Visualize · Next.js · Realtime

    The dashboard subscribes to database updates through Supabase Realtime, bringing the recorded event into the administrator’s view.

ENGINEERING DECISIONS

The details that
keep it connected.

01 / LOCAL PROCESSING

Keep recognition at the edge.

The current Python script uses OpenCV’s LBPH recognizer and grayscale face regions on the Raspberry Pi. The web interface receives records instead of needing a continuous camera feed.

Source distinction: the README mentions face_recognition; the inspected implementation uses OpenCV LBPH.

02 / DUPLICATE EVENTS

One person should not become a hundred records.

The script keeps a per-person timestamp and checks the configured cooldown before another attendance write. Repeat detections can provide local feedback without adding another cloud record.

03 / CONNECTIVITY

Separate recognition from delivery.

A local write queue in the edge code supports retrying attendance submissions. This is evidence of retry handling, not a guarantee of lossless delivery under every failure mode.

04 / OPERATIONS

The device is part of the interface.

Camera state, local display feedback and hardware telemetry belong to the same system. The repository documents a systemd kiosk service so the process can start at boot.

DELIVERY / DOCUMENTED SETUP

From repository
to reachable service.

  1. 01Local changes
  2. 02GitHub
  3. 03Vercel build
  4. 04Deployment
  5. 05Cloudflare DNS

The README documents repository-connected Vercel deployment and Cloudflare DNS for the public domain. Production settings and availability have not been independently audited.

What this project
made me think about.

The useful part is the connection between layers.

A camera event touches local compute, identity, duplicate handling, network delivery, database state and interface updates. A polished dashboard cannot compensate for an unreliable path between those layers.

Next questions include evaluating recognition under varying conditions, failure recovery, tighter device permissions and observability. These are engineering questions to investigate, not completed improvements being claimed.

Read the evidence

Python edge implementationArchitecture and deployment notesCurrent application dependencies

CONTENT REVIEWED / 30 SEP 2026 · SOURCE MAY EVOLVE

MYT / UTC+8