Platform Architecture

One ingestion-to-mobile pipeline for EU safety alerts.

Recall Radar is built as a modular NestJS backend with source-aware connectors, canonical normalization, versioned storage, and mobile-first API delivery.

System Design

Architected for heterogenous public-source data.

Protocol-First Ingestion

Parquet, JSON, and RSS connectors run on polling intervals with per-source telemetry.

Canonical Normalization Layer

Source-specific mappers project records into one ProductAlert contract with provenance.

Idempotent Persistence

Raw payload hashes and version hashes reduce duplicates while preserving record history.

Operational Health Controls

Source states, polling outcomes, and errors are exposed through health endpoints.

Public API Surface

Alerts, filter options, dashboard analytics, GTIN lookup, and device registration.

Mobile Delivery Ready

Expo-based app flow supports feed browsing, dashboard views, and push token onboarding.

Configured Sources

Current live integration scope

  • EU Safety Gate historical dataset (Opendatasoft parquet export)
  • EU RASFF general information feed (JSON API)
  • Germany Lebensmittelwarnung (RSS)
  • Italy Ministero della Salute recalls (RSS)

Canonical Data Model

Normalization fields that drive UX

  • Canonical alert identity and stable source linkage
  • Published and ingested timestamps with normalization context
  • Category, risk, country, and source filter dimensions
  • Identifiers such as GTIN / lot / model when available
  • Raw + canonical version records for traceability

Delivery Lifecycle

Practical path from dev to production

Local

NestJS + Prisma + Docker Postgres for rapid development loops.

Development

GitHub Actions pipeline with staging backend and preview landing builds.

Production

Cloud deployment with health checks, migrations, and monitored source ingest.

Quality Monitoring

Source health is a product surface, not only an ops concern.

Dashboard and API layers both use source reliability signals so teams can judge confidence and freshness in real time.