2025 · Backend / Cloud Developer

Push Notification Service

A serverless push-notification microservice for a fiber ISP's mobile app — a containerized FastAPI service on AWS Lambda that registers devices, manages subscriptions, and fans out individual and broadcast push notifications through Amazon SNS. Other backend systems call it to reach customers. I built the service end to end, on the platform's existing API Gateway and database cluster.

Python FastAPI AWS Lambda Docker Amazon SNS Database Beanie AWS CDK Mangum Serverless
Push Notification Service — serverless push delivery

Overview

The shared push-notification service for a fiber-optic ISP — the single path every other backend uses to reach customers on their phones. Rather than make each system learn the mechanics of Amazon SNS, this service exposes one authenticated API: register a device, subscribe it to broadcasts, or fire a targeted or broadcast push, with a history of everything sent. It runs as a containerized FastAPI app on AWS Lambda, and I built all of it — API, data model, SNS integration, and the service’s infrastructure as code — connecting into the platform’s existing API Gateway and database cluster (a new database inside the shared one) rather than standing those up myself.

The problem

The ISP needed a single, reusable service to talk to customers through push notifications — both targeted messages to one customer and general announcements to everyone — without every other system having to learn the details of AWS SNS. SNS identifies devices and subscriptions by opaque resource identifiers, and the platform’s clients shouldn’t have to store or manage those. The service had to hide all of that behind a simple API and keep a durable record of what was sent for an admin panel.

What I built

  • Containerized FastAPI on Lambda — a FastAPI app shipped as a Docker image on Amazon ECR and run on Lambda via Mangum, so the same code runs locally and in production.
  • Device registration — an endpoint that takes a device token + customer + platform (Android/iOS), creates the corresponding SNS platform endpoint, and binds it to the customer so notifications follow the logged-in session even if a different customer signs in on the same phone.
  • Subscriptions to broadcasts — subscribe/unsubscribe a device to a general SNS topic, so a single publish reaches every subscribed device.
  • Individual push — fan a targeted notification out to all of a customer’s registered devices, building the proper payload and reporting a per-device success/failure summary.
  • Broadcast push — publish a single message to the general topic to reach the whole audience at once.
  • Notification history — every notification is persisted in a database and exposed through REST endpoints for an admin panel.

Architecture

Push Notification Service — architecture

The deliberate design decision was to keep every SNS resource identifier inside the service’s own database, keyed by the identifiers clients already have — so a client only ever sends a device token, customer, and platform, and never has to know or store anything about AWS. The backend resolves the SNS resources internally, which meant clients needed the minimum possible changes to adopt the service. Operations are also made resilient — e.g. if persisting a token fails after SNS created an endpoint, the service rolls back by deleting the orphaned endpoint.

Impact

The ISP got a push-notification service its app and internal tools can call with a simple authenticated request — no AWS knowledge required on the client side. It became the one delivery path for push across the platform: the mobile app, the admin panel, and other backend services all reach customers through it — including the prepaid-expiration reminder pipeline, which hands its due reminders to this service for the actual send. Targeted and broadcast notifications run through the same service, every message is recorded for the admin panel, and the whole thing deploys itself serverlessly through CI/CD, scaling to zero when idle. The service itself is specific to this platform, but the architecture generalizes — the same pattern could back push delivery for any product without rework.

More work

Keep exploring.

Distributor Coverage Zones Pipeline 2026
Python

Distributor Coverage Zones Pipeline

A serverless, event-driven pipeline for a fiber ISP: KML map files describing distributor coverage zones land in Amazon S3, an AWS Lambda parses each one into structured zone records on upload, and a FastAPI service exposes them for lookup. I built the processing side — from the S3 event onward — and the same shape was later reused for other file processes.

Platform REST APIs 2026
Python

Platform REST APIs

The REST API layer behind a fiber ISP's platform — CRUD endpoints across several FastAPI services running serverlessly on AWS Lambda behind API Gateway, backed by Amazon DocumentDB, organized in a clean, consistent layered structure.

Contacts & VoIP Notifications Backend 2025
Python

Contacts & VoIP Notifications Backend

A serverless backend I built for a mobile app at a fiber-optic ISP: a FastAPI service that manages contacts (CRUD) and delivers push and VoIP notifications to the app (APNs + Firebase), with Cognito authentication and a per-user security model — running on AWS Lambda and connected into the platform's existing API Gateway and database cluster.

Language · Idioma

English Español