The face recognition app closes this blog’s current arc at the edge of what I could build, a system with eyes, judgment, and memory, watching two doors on ordinary hardware. It is also the project where honesty about limits mattered most, because nothing invites overselling like technology that feels like science fiction. This finale is the full accounting.
What actually got built
A modular Python desktop system, a recognition module wrapping the face_recognition library over dlib, known faces loaded defensively from named photos, matching through 128-number encodings compared under a consciously chosen tolerance, with the BGR to RGB conversion that guards accuracy. A CameraManager per USB camera, daemon capture threads at 640 by 480, a bounded two-frame queue that drops the stale to stay in the present, and a five-second per-person cooldown so presence becomes one log entry. Edges designed deliberately, unknown faces captured, logged, and alerted with their own cooldown, for human judgment over saved evidence. Memory in SQLite, committed on every write, images as files with paths in rows, parameterised search and date filters, CSV export of the current view, and a retention duty stated out loud. A Tkinter interface in the tabs-by-job shape, and a PyInstaller build double-clickable on a machine with no Python.
What the edge of ability teaches
That libraries move the frontier, this project exists because researchers’ work ships as callable functions, and the builder’s job is everything around the miracle, threads, queues, logs, packaging, the unglamorous majority. That honesty is a technical specification, no liveness detection means logger, not lock, and writing that sentence into the design shaped every feature around human review rather than automated trust. That real-time systems are queue philosophy, the bounded queue dropping stale frames is one line of code carrying the entire difference between live and lagging. And that every prior project attended this one, the shop software’s commits and tabs, the limo build’s threading patience, the cockpit’s packaging, the whole blog’s habit of saying what a thing actually is, compounding is the real story of this arc, and this build is where the compound interest paid out.
A few things people ask me about this
Is it still running? It works as built, within its stated scope, small known set, decent lighting, human review of alerts. Like every real system here, it is stable until the next need, not finished.
What would version two add? Better low-light handling, a retention scheduler running the cleanup automatically, and possibly a liveness experiment, stated as an experiment, because that boundary deserves the same honesty that drew it.
What should someone build first if this seems too big? One camera, one known face, one log table, the whole system at miniature scale. Every hard part of this project appears there in a form small enough to understand completely.
Where this leads
This closes the current arc of Build Journey, desktop tools, shop software, plugins, platforms, data sites, service sites, engines, cockpits, and finally a system with eyes. What continues is the same practice the whole blog documents, building real things, hitting real walls, and writing down what actually happened, because the honest record turned out to be the most reusable thing I ever built.
