eKYC identity verification
ID card and passport verification built end to end: data, models, production. Design choice: no database.
Problem, what I built, design decision
Problem
Products with legal weight, such as e-signature, need to verify who the customer is. The company relied on a paid external eKYC service.
What I built
- Datasets and detection models for ID cards and passports, plus MRZ reading.
- Checks for anything that makes a read unreliable: glare, blur, low light, occlusion.
- Checks for card validity: punched-hole detection for expired cards, cut corners.
- An internal Label Studio setup for labelling data.
- Production deployment with rate limiting, monitoring and maintenance.
Replaced a paid third-party eKYC service.
Decision: no database
Each request is processed and answered immediately, and nothing is stored. When something fails I trace it by trace_id in Kibana. I was once asked to add a database to hardcode corrections for people whose names the OCR misread, for example when Vietnamese diacritics collide with printed patterns on the card. I declined. Only a few people a year were affected, and newer cards with a large QR code reduce misreads further. A ConfigMap file handles those cases, so the service stays stateless.
No database in the request path. Simplified overview, no internal names.