Building a smart dog camera from scratch
Series overview — why I built a dog camera and feeding bowl on AWS, and what the next posts will cover.
On this page
This is the first post in a series about building SnootSpotter: a small system of dog cameras and smart feeding bowls, backed by AWS.
Why build it
Placeholder: the itch, what existing products didn’t do, and what “done” looks like.
The shape of the system
Placeholder: cameras and bowls on the edge, MQTT/IoT Core, clips in S3, a serverless backend, a mobile app.
flowchart LR Camera -->|clip| S3[(S3)] S3 --> Ingest[Ingest Lambda] Ingest --> DB[(DynamoDB)] Ingest --> Detect[Detection] Detect --> App[Mobile app] Bowl -->|MQTT| IoT[IoT Core] IoT --> App
Camera firmware
Placeholder: capturing clips, uploading, over-the-air updates.
def upload_clip(path: str, bucket: str) -> None: key = f"clips/{path.name}" client.upload_file(path, bucket, key) # Retry with backoff on flaky Wi-Fi for attempt in range(5): time.sleep(2 ** attempt)The cloud side
Placeholder: ingest pipeline, detection, per-household isolation, infrastructure as code.
Infrastructure as code
Placeholder: why CDK in C#, and how the stacks are split.
Things that broke
Placeholder: the debugging stories this series will tell.
What’s next
Placeholder: list of upcoming posts.