Grounded, private, cloud-native.
A conversational assistant that retrieves a user's own Strobe posts and photos, classifies new media asynchronously, and generates scheduled recaps.
On this page
Strobe Assistant turns an existing social application into a private, conversational experience. A user can ask questions about their own posts and photos, get grounded answers with returned images, and use explicit permission-controlled tools for approved mutations. Around that interactive path, AWS handles media enrichment and scheduled recaps without blocking the web request.
Strobe website screens
A small product walkthrough: sign in, create a moment with an image and caption, then return to the moments feed and surrounding social context.
Image-aware interaction
The client keeps images part of the conversation rather than treating them as a separate upload workflow. It can render returned images inline, attach a current-turn image to a prompt, and surface validation feedback before a request reaches the agent.
Writing tools → Create moments in Strobe
Writing tools keep mutations explicit and user-controlled. The assistant asks for permission before creating a moment, then the resulting moment appears in the user's Strobe story view.
One assistant, several deliberate boundaries
The browser talks to an ACP WebUI deployed on ECS Fargate. Cognito establishes the identity, while the ACP relay validates the token before starting the per-connection agent process. The agent reaches a separate internal MCP service for retrieval and writes; it never queries the data stores directly.
- Grounded retrieval: Amazon Bedrock creates the query embedding, S3 Vectors finds nearby content, and DynamoDB re-checks that every result belongs to the authenticated user.
- Controlled mutation: create-post, comment and moment tools are exposed only after an ACP permission approval, keeping the model out of the final authorisation decision.
- Useful multimodality: the assistant can reason over indexed photo content and return the relevant image inline, rather than only describing a text match.
Architecture
The public path is intentionally small: the ALB targets Caddy, Caddy serves the client and proxies the WebSocket to the colocated ACP relay, and the relay calls the MCP service through an internal ALB. Bedrock, DynamoDB, S3 and S3 Vectors remain behind service boundaries.
Agent session flow chart
The conversational path stays open over a long-lived WebSocket so the client can receive streamed text, tool activity, images and permission requests. The relay forwards ACP JSON-RPC records between the browser and one agent child process; the adapter restores the current session history and dependencies for each prompt.
Asynchronous upload workflow
Photo processing is intentionally off the request path. The upload is stored first, then each downstream stage works independently with durable events and records. That keeps the web experience responsive while the assistant enriches the photo for later grounded retrieval.
-
Photo upload
The client uploads the original photo to object storage. The user does not need to wait for classification or embedding to finish.
Amazon S3 -
EventBridge notification
An S3 object-created event is matched by an EventBridge rule and routed into the media-processing path.
Amazon EventBridge -
Durable queue
SQS buffers the event so bursts, retries and temporary Lambda failures do not lose the upload or block the application.
Amazon SQS -
Lambda classify
A classifier Lambda consumes the message, reads the photo and calls Bedrock to extract useful labels and media metadata.
AWS Lambda + Amazon Bedrock -
Persist classification
The classifier writes the photo metadata to DynamoDB, keeping the result associated with the authenticated user and source object.
Amazon DynamoDB -
DynamoDB Streams
The new or updated DynamoDB item emits a stream record, creating a second asynchronous trigger for indexing without coupling it to classification.
DynamoDB Streams -
Embedding
An embedding worker turns the enriched content into a vector and updates S3 Vectors, so future assistant queries can retrieve the photo as grounded context.
Embedding Lambda + S3 Vectors
Why these choices
Identity first
User identity is derived from a validated Cognito token; it is never taken from model input.
Least exposure
Only Caddy is public. The ACP server is colocated behind it, and MCP is internal-only.
Loose coupling
ALBs keep service endpoints stable as ECS tasks are replaced, while SQS decouples media work.
Managed AI data plane
Bedrock and S3 Vectors provide model and retrieval capabilities without operating those clusters directly.