All of this was made possible by the generous non-profit, Internet Security Research Group, who created letsencrypt which provides free trusted SSL certificates, Facebook who created ReactNative (enabling platform independent NodeJS mobile app development), Expo (enabling easy iOS and Android app development and releases with their over-the-air (OTA) feature), Raspberry Pi for building a $35 full Linux computer, my high school computer science teacher (now Assistant Professor of Computer Science at Bryn Mawr College), Richard Eisenberg, for teaching, advising, collaborating, and advocating for me throughout my high school (and college) years, my parents for their large property with several cameras unknowingly stress-testing PenniDinh and for answering my late night (timezones can be difficult) phone calls to unplug and plug-back-in their PenniDinh hub, and most of all my wife for designing the UX, drawing the graphics, testing changes, providing feedback, advising me, and, most importantly, supporting my long days and nights put into this project.
My wife and I were making our annual trip back to Massachusetts and wanted a way to record any motion near the entrances to our house. The options out there all involved 1) the cameras recording on some memory stick which an intruder could easily destroy 2) the cameras uploading each and every photo and video to the cloud for some monthly fee dependent on our unusually bad Comcast internet connection or 3) some large and expensive recording box connected to all the cameras. Initially, I bought a $35 Raspberry Pi and had our cameras would upload images and videos to it with their motion-detection-triggered FTP upload feature. Then I installed a basic apache file server and some router configuration would make the files available over the web secured with a self-signed SSL cert and the basic apache authentication using a hardcoded username / password. I had been doing some mobile development at work and built an app that would fetch the names of the available files, fetch and display thumbnails that a watchman daemon would generate upon new files uploaded from the cameras. This solved our problem and became the platform which I would build on over the next year learning a whole lot along the way. The PenniDinh software was a place for me to grow my skills in areas that would be useful at my job; I started with modifications to apache modules so that I could offload the user login and password management to Amazon's "Login with Amazon", used my experience working on the Amazon Alexa's Mobile App's ReactNative codebase to build a supplementary mobile app, learned how to run a NodeJS server on the hub for building quick "smart" APIs into the hub accessible by anywhere in the world, learned about SSH port forwarding and SOCKS proxies to fix my parent's router remotely (thanks Dad for accidentally disabling the WiFi) which solved the hard problem of designing the "shared proxy" feature which lets you access your PenniDinh hub from anywhere in the world without it being a world wide web addressable device.
When we arrived at my parents and I checked up on the security system I helped my dad setup several years prior. It was big, clunky, and energy inefficient; you could access files remotely only from a desktop, and the UI looked like it belonged and should have stayed in the 90s. I wanted a system for him that was easy to use, required no maintenance, and one that I could fix remotely, so I took the code I wrote for my own security camera hub and put it on a Raspberry Pi for him. I wanted my parents to have all of these features in their security camera hub that I was building into mine, so I moved all the security camera hub software components to Docker containers to simplify releases of updates and new components; Docker containers also gave me the peace of mind that new software dependencies and components I added would not cause issues with other PenniDinh hub components. It's taken a bit of work to ensure the PenniDinh cloud components will have a small enough footprint to remain funded out of my pocket as new users set up their hubs; for example, I learned a hard lesson on not keeping AWS Lambda threads open for too long when an infinite loop bug caused over a $1,000 AWS bill (thanks AWS customer service for understanding and the refund).
All I really hope for with this project is that one day the hard work I've done is enjoyed by many other people and of course to make enough money for a house with a huge yard for my dogs to play in all day.
I develop and engineer software for Amazon, but more interestingly below are the dogs my wife and I adopted in 2019, Oreo and Cookie. If you want to see more photos, you can follow them on their instagram @oreo.cookie.woof.