SnootSpotter Build Log
Smart dog camera · Part 1

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.

1 min read
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.

upload.py
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.