Enterprise video capture and evidence management at national scale.
VALT is a browser-based video recording and surveillance platform used by 770+ organizations across the United States (law enforcement, medical simulation programs, and child advocacy centers) to live-stream IP cameras, record encrypted evidence, and manage it through a point-and-click interface that needs no training. I spent four years on it as the lead developer, working across the Vue frontend, the Symfony backend, and even the Java streaming layer.

Lead developer on VALT for four years, owning features end to end across the Vue frontend and the Symfony (PHP) backend, not just one side of the wire.
Once the product had piled up a lot of varied functionality, I proposed a cleaner architecture: a DDD-style design split into layers with a hexagonal (ports and adapters) structure. I wrote the core documentation for it, aligned it with the team, and drove the adoption. It also untangled duplication I had spotted between the internal API and the public API that customers built on. Alongside it I established a testing discipline on the frontend, introducing unit tests where there had been none and integration tests as a standard.
Worked directly with the US client's engineering team. Their developers sent their code to me for review, and I assessed it regularly, flagged what to fix and how to do it properly, and authored the conventions the whole project was built to.
Established end-to-end and functional tests across the product, on top of the unit and integration discipline the new architecture introduced.
Drove the full migration in place, moving the codebase off the class-based style (vue-class-component / vue-property-decorator) onto the Composition API, without freezing feature delivery. Optimized runtime performance along the way.
Led the Webpack to Vite migration and simplified the toolchain config, so the whole team shipped faster every day.
Helped rework the interface in a redesign that measurably improved usability.
When real-time streaming broke deep in the media layer, I went into the Java Wowza module myself and fixed it. Not a language I live in, but the problem needed solving and I owned it.
Older IP cameras had no real-time audio protocol (VoIP) for talking back into them, so audio was pushed over HTTP and the delay piled up until it was unusable. I moved audio capture and encoding off the main thread into an AudioWorklet, ran the format conversion right there in that dedicated audio thread on the frontend, then handed the processed stream to the module that sends it to the camera. The drift was gone and audio stayed in sync.
Designed and built it end to end, the Symfony API and the Vue UI, and integrated it cleanly into the existing recording architecture.
Backend aggregation in Symfony plus the Vue dashboards, delivering detailed usage statistics and department reports to administrators.
Used by Law enforcement, Medical simulation (HIPAA), Child advocacy centers.
Up to 9 IP cameras on one screen with pan, tilt, zoom and two-way audio.
AV-synced multi-camera recording over SSL/RTMPS, with clipping and export.
Mark moments in footage, search them, and export reports for review.
Granular permissions and directory integration for enterprise deployments.
Recurring recording schedules and remote camera control with position presets.
Access control, retention policy, and customizable department usage reports.







