Projects

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.

CAB432 Assessment 2 · Strobe Assistant·QUT cloud computing·Python / TypeScript / AWS

On this page
Strobe Assistant ACP Chat returning dog images and a grounded story

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.

Strobe Assistant ACP Chat finding dog images and turning them into a grounded story
Find-dog interaction: the assistant retrieves matching images and turns them into a grounded response.

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.

Strobe Assistant asking the user to allow the create moment action
Permission checkpoint: the create-moment tool requires an explicit user approval before the agent performs the write.
Strobe showing the newly created moment with a dog photo
Created moment: after approval, the new image-backed moment is visible in Strobe.

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.

Strobe Assistant AWS architecture, adapted from the supplied MHTML artifact. Open the original MHTML.
Important state boundary: the ACP session is stateful while its WebSocket remains open, but the conversation history lives in process memory. Reconnects, child-process exits and Fargate task replacement do not recover that session; DynamoDB and S3 still preserve the separate application data.

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.

Static agent session flow chart showing a user prompt moving through the ACP Web UI, Cognito, ALB, relay, agent and Bedrock before the streamed reply, with a scoped MCP tools branch
Static agent session flow: an authenticated WebSocket reaches the relay and agent, Bedrock provides the model response, and scoped MCP tools return through the same session.

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.

  1. 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
  2. EventBridge notification

    An S3 object-created event is matched by an EventBridge rule and routed into the media-processing path.

    Amazon EventBridge
  3. Durable queue

    SQS buffers the event so bursts, retries and temporary Lambda failures do not lose the upload or block the application.

    Amazon SQS
  4. 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
  5. Persist classification

    The classifier writes the photo metadata to DynamoDB, keeping the result associated with the authenticated user and source object.

    Amazon DynamoDB
  6. 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
  7. 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.

Amazon BedrockAmazon CognitoECS FargateALBS3 VectorsDynamoDBS3EventBridgeSQSLambdaMCPACP