Inspiration

I built L’Ayalga for a concrete problem: a shared household can receive invitations through several people and channels, but dates are only part of the work. Someone still has to check rooms, children and pets, notice special requests, keep both hosts informed, and ask whether the guests are still coming.

I wanted that coordination to become one explicit, inspectable workflow. I designed L’Ayalga for households that host friends and family, especially when more than one person invites independently. I have not measured adoption or human time saved; my evidence report separates synthetic workflow measurements from my planned participant baseline.

AWS Builder articles

I documented my build journey and implementation choices in three public articles:

What I built

I built a host flow that turns an informal invitation into a private guest journey after the exact agent run completes. The host deliberately copies and sends the guest link through their chosen channel.

I let guests search feasible dates and choose exact rooms. I keep ordinary informational notes attached to the visit without manufacturing an approval task. I pause explicit requests and documented overflow arrangements for a host decision. I enforce capacity, occupancy, and versioned children and pets rules in deterministic code and PostgreSQL, then recheck current state before an approved execution resumes.

I use AgentCore Memory to rank valid room sets when supported ground-floor, upper-floor, separate-bed, or double-bed preferences exist. I show matched and unmatched preferences, preserve manual choice, and fall back clearly when memory is missing or conflicting. I never let a remembered preference become an unrequested policy exception.

I added proactive reconfirmation and escalation. Real guests can opt into verified email reminders, return securely to their visit, and opt out. I keep delivery failure and uncertain provider outcomes separate from a guest who has not replied. I suppress guest email in every synthetic scenario.

I also require explicit human confirmation for cancellation or withdrawal. Natural language can prepare a cancellation review, but it cannot commit one. After confirmation, I release rooms and retire stale decisions, runs, jobs, and queued delivery. I never revive cancelled or revoked access.

How I built it

I used the Strands Agents TypeScript SDK for the agent loop, typed tools, policy hooks, durable interruption and resumption, session storage, and memory integration. I use Amazon Bedrock with Claude Sonnet 4.6, and I deploy the agent on Amazon Bedrock AgentCore Runtime with AgentCore Memory and CloudWatch observability. My Strands implementation guide maps each SDK feature to source and tests.

For the product, I used Next.js and TypeScript to build English and Spanish host and guest journeys. I queue accepted work instead of holding browser requests open. I use PostgreSQL wall time for operational claims, heartbeats, deadlines, and recovery, while a clearly labeled synthetic household clock drives only the visible demo scenario.

I keep Supabase PostgreSQL authoritative for rooms, invitations, bookings, policy versions, decisions, jobs, and capabilities. I separate web delivery authority from agent execution with non-owner database roles. I prevent the agent from reading guest contact addresses or sending guest email; a web-owned SES outbox records authorized delivery attempts.

I also documented the privacy boundary honestly. Raw host text can contain names and is processed by the model. I exclude capture conversations from memory extraction, and I keep guest-submission notes, arrival details, and request prose out of assembled model prompts. My privacy lifecycle records the exact limits.

Challenges and lessons

The hardest part for me was preserving authority across time. A host may approve after availability changes, a guest may cancel while a run is working, and a reminder may be claimed while consent is withdrawn. I used database locking, current-state validation, and explicit delivery receipts to make these races visible and testable.

I also learned to separate language that conveys information from language that asks someone to decide. I keep a thank-you from interrupting a routine stay, and I use remembered preferences to improve recommendations without silently changing the guest’s request.

What I’m proud of

I’m proud that the guided demo begins with a complete routine stay, then shows a fresh human exception, proactive follow-through, and explicit closure. I made decisions and current outcomes prominent for hosts, while keeping recovery paths for stale reviews, expired holds, unavailable memory, and failed delivery.

I’m also proud of the evidence boundary. My synthetic benchmark records real automated operations and database outcomes with its exact revision and configuration. I do not present those measurements as human savings, general model quality, or inbox delivery.

The v1.3.10 release is live. For the broader coordination workflow, my protected production run exercised the exact Vercel and AgentCore candidate through the guided demo and all nine production probes, including memory, host SES acceptance, concurrency, interruption and resume, guest isolation, and cleanup.

What comes next

After the hackathon, my first priority is to expand WebMCP into a larger agent-facing experience so guests do not always have to come to the L’Ayalga website to coordinate. The current project includes bounded WebMCP tools where the browser exposes its API; that is the foundation, not the full feature I plan next. I also plan to activate guest email only after a consenting real-recipient proof and to run the participant protocol before making claims about human coordination time. I want to explore broader channels such as WhatsApp or SMS and per-night room packing for stays that require room changes. I treat those as future work, not as features in this submission.

Review my work

How to test what I built

I made the live demo available in English and Spanish without requiring a Google account. On the sign-in page, use either synthetic host button. Start Vega, search for four guests with both open rooms, add an informational thank-you, and submit. The AgentCore run completes a routine booking. Advance to the next guest reminder, return as Vega, and answer Yes, we are coming.

Then start Parker. This visibly resets the shared synthetic home. Select the Garage Room, submit the preserved explicit request, and approve the resulting host decision. Advance to the next guest reminder without answering, then advance to the next host follow-up. The host sees the unresolved escalation. Finish one scenario before starting another because the demo state is shared. Synthetic guest email is always suppressed.

Eligibility disclosure

I created this repository during the hackathon submission period. I used pre-existing cc-rpi files only as development-process scaffolding. I created all L’Ayalga product code, data design, UI, agent behavior, tests, diagrams, and submission content during the submission period. Jordan Lynn and I are the two real host operators; every guest identity, invitation, visit, and notification in the demonstration is synthetic.

Built With

Share this project:

Updates

Submission history