Input A
Client Location Signal
Mobile (React Native + ViroReact/ARKit/ARCore) or Web (React PWA) client streams GPS lat/lng, walking-speed-derived radius (200m standing, 400m active walk), and audience mode. AR pin layer polls every 10 seconds or 50 meters of movement, whichever comes first.
10s / 50m poll cadence
Input B
Multi-Source Data Ingestion
Scheduled ingestion from LOC, DPLA, Wikidata, NPS, Smithsonian, Chronicling America, OpenHistoricalMap, and state archives — weekly for most sources, daily for Wikidata — normalized into the event warehouse.
8 external sources
Location Query & Narrative Pipeline — API Gateway + Lambda
Stage 1
Geo Lookup
DynamoDB geo-partitioned read — hot path for the AR pin layer
›
Stage 2
Radius Scoring
RDS PostgreSQL + PostGIS — ST_DWithin, dedup, significance rank
›
Stage 3
Audience Filter
Strip mature-content flags for child profiles; select prompt variant
›
Stage 4
Narrative Gen
Bedrock (Claude Sonnet) — narrative, quiz questions, audio script, AR caption
›
Stage 5
Cache Write
Cached by event_id + audience_mode to cut repeat-query LLM calls
📍
Near-Real-Time Data Strategy — Two Stores, Two Access Patterns
DynamoDB geo-partitioned handles the sub-second, high-read "what's near me right now" AR pin layer. RDS PostGIS handles the heavier spatial scoring — radius queries, dedup of overlapping events at the same coordinates, significance ranking — that the pin layer doesn't need on every poll.
DynamoDB — geo-partitioned readsRDS PostGIS — ST_DWithin scoring9-tile pre-fetch gridAdaptive radius (200–400m)
Output A
AR Pin Overlay
Lightweight pin payload — id, title, coordinates, era, significance score, thumbnail — rendered as billboards anchored via ARKit/ARCore plane detection and world tracking.
Lightweight · polled
Output B
Event Detail Card
Full narrative, source citations, photo/media array, audio narration, and auto-generated comprehension questions (Student/Field Trip modes) — fetched once, on tap.
Full payload · on tap
Known Gap
Multi-User AR Anchors
Phase 2 classroom/field-trip mode calls for shared, persistent anchors. Azure Spatial Anchors has no direct AWS managed equivalent — the honest path is ARCore Cloud Anchors (cross-platform) or a custom anchor-persistence layer on DynamoDB/S3.
No 1:1 AWS service
10s / 50m
AR pin poll cadence
2 stores
DynamoDB + RDS PostGIS
StackAWS LambdaAPI GatewayRDS PostgreSQL + PostGISDynamoDB (geo-partitioned)AWS BedrockClaude SonnetS3CognitoPinpointReact Native + ViroReact
Status note: the live prototype today runs on reused Azure infrastructure (Static Web App, Azure Functions, Cosmos DB, Azure Database for PostgreSQL, Blob Storage, Container Apps Jobs) — chosen specifically to avoid new recurring cost during the prompt-engineering and stakeholder-demo phase, not as a cloud preference. Even that prototype calls AWS Bedrock (Claude Sonnet 4.5, us-east-1) directly for every narrative generation. This page is the AWS-native target from the product design doc; the port begins once a target AWS account is provisioned for the partner business this ships under.