Site · GitHub

Loro is an Agentic Framework for Brand Experiences

Inspiration

A festival sells a ticket, then goes quiet until the gates open. In between, every ticket holder gets the same email: the dates, the lineup from A to Z, parking and what to pack.

Loro starts with live events, where a ticket sells months before the gates open. The same agent then runs rentals, property and dating.

Theo, a made-up ticket holder in my demo, still has 1,091 miles to drive from Portland. Nothing in that email knows it.

I came to the hackathon with three ideas: a page for buyers on a house listing, a road trip planner for events, and a way for retail brands to market to taste. The more I sketched them, the more they looked like one idea.

Each needed three things: what the brand sells, who the person is, and what that person loves. Brands already have the first two. Qloo has the third, and without it Theo's page is the email again.

What's missing is the work of putting the three together for each person, between the ticket sale and the gates. No festival can pay someone to plan every ticket holder's drive. Loro's agent planned Theo's in 41 seconds.

The hackathon brief asks for something that wouldn't work the same without Qloo. I made that the test for every page Loro builds.

What it does

Loro is an open-source agentic framework for brand experiences. It puts an agent in the middle of a brand's funnel, between the sign-up and the sale. A brand asks its customers what they love, and Loro's agent builds each of them a page about what the brand sells: a road trip to its festival, a weekend at its cottage, a week in the house it's selling.

Every Experience Starts with the Right Context

One Page per Person

Theo signs up on the page for Mirage Valley, a made-up three-day festival in Indio, California, and answers eight questions, from where the drive starts to what's playing in the car. Then Loro's agent takes over. In one run, it:

  • sends Theo's seven favourites to Qloo and gets twenty picks back.
  • runs the route tool, which splits the 1,091 miles from Portland into three days, each ending in a town worth a night.
  • runs the lineup tool, which scores the festival's bill against Theo's taste in one Qloo call and marks four must-sees.
  • writes nine stops in the festival's voice, each with a reason it's there.

Neil Young, Fleetwood Mac and Bon Iver lead to Seven Suns Coffee & Cafe in Mount Shasta. Big Thief, Neil Young and Khruangbin lead to Neil's Lounge in Indio. The page streams in section by section, in Mirage Valley's own look.

Theo's Road to the Desert

Two Ways In

An experience starts one of two ways. Someone signs up on the brand's page and answers its questions. Or the brand's own system calls POST /trigger after a booking, a match or a ticket sale, sends the answers it already has, and gets the page's link back. Either way, Loro's agent takes it from there.

The Loro Experience Funnel

Six Brands, One Agent

The demo has six made-up brands in six industries, starting with a festival and a venue. The same agent runs all of them.

  • Mirage Valley, a music festival, after the ticket sale: the road trip above, and a weekend guide planned set by set.
  • Harbour & Grey, a real estate agency, on the listing page: a buyer's week in the house. Sam's Victrola Coffee in Seattle becomes Storm City Coffee in Kitsilano.
  • Low Tide House, a holiday rental, after the booking: Emma's three nights in Carmel, planned around Juniper, the dog. Sightglass at home becomes Carmel Valley Coffee Roasting Co.
  • Fieldhouse Realty, a buyer's agency, when it finds a buyer a home: its CRM sends a listing link and a few lines about the buyer's week. Loro's agent reads the listing, then swaps Priya's brunch at Portage Bay Cafe for Seattle Biscuit Company near the house.
  • The Wren, a live venue, between shows: the box office sends what Imogen plays and has seen there. Loro ranks the next 24 shows, picks four nights and finds dinner a three-minute walk from the doors.
  • Overlap, a dating app, when two people match: Priyanka's first date with Ben, four stops a walk apart in Mount Pleasant, with Ben's favourites counted three times.

One Agent, Any Funnel

The Loro App

Each brand gets a workspace in the Loro app.

  • Agent: Loro's agent, in a chat for the brand's team. Ask about any profile, segment or experience. It asks before it changes anything.
  • Analytics: views, sign-ups and finished pages per experience, counted without names or emails.
  • Profiles: everyone who signed up, with their answers, taste and pages, grouped into segments.
  • Experiences: an editor for the start page, questions and outcome with a phone preview beside it, and Tests that run the unsaved draft as a real profile.
  • Context: the rules the agent follows on every page (the brand's voice, what it can promise, the words it never uses), plus its photo and video library.
  • Connect: the REST API, an MCP server with 31 tools so other agents can run a workspace, and the keys for both.

A Tour of the Admin

Every example on loro.sh has a link that makes a new page for a made-up person, live, with nothing to type. The admin at app.loro.sh is open to read without an account.

How I built it

Loro is one Cloudflare Worker that a brand deploys to its own account. Hono serves the REST API and the MCP server, React Router v8 renders the admin and the public pages, and the admin is built with shadcn on Base UI and Tailwind v4.

  • D1 holds everything in one database, keyed by workspace: profiles, answers, segments, experiences and every finished page.
  • Workflows and Durable Objects run the agent. Each page is one agent run on a Workflow, saved step by step, and a Durable Object for each run streams every section to the browser as the agent writes it.
  • KV caches the public start pages. Images and Stream serve the brand's photos and video, and R2 holds audio. Analytics Engine counts views and sign-ups with no personal data.
  • AI Gateway routes every model call, made with the AI SDK. Loro's agent runs on two models: GPT-5.4 mini in the funnel and Claude Sonnet 5.5 in the admin chat.

One Worker, on the Brand's Account

How the Agent Builds a Page

Loro's agent works on rails. The brand sets the order and the tools; the agent decides what to look up and what to write. Every run goes the same way:

  1. Taste. The agent reads the person's answers and pulls out their favourites, the kinds of place they'd like and where to look. Loro sends the favourites to Qloo, never a name or an email, and runs the experience's lookups. A lookup says where to search, which kinds of place, popularity, price, which day a place must be open, how many to take and a weight for each favourite. Weighted lookups go through POST /v2/insights. Then the agent writes a short brief on their taste, with an angle for each section.
  2. Tools. Each catalogue gives the agent TypeScript tools that run after taste. The road trip routes the drive with OSRM and asks Qloo for places near each night's town. The festival scores its whole bill against the person in one call with filter.results.entities. The venue does the same with its month of shows, the agency reads a listing from its link with Cloudflare Browser Rendering, and the date plan finds four stops a walk apart.
  3. Writing. The agent writes each section from the brand's skills, the person's answers, its brief and a list of candidates. It can only recommend a candidate by its Qloo entity id, and anything else is dropped before the page shows it. If a banned word slips in, an edit pass rewrites that sentence.

How the Agent Built Theo's Page

Catalogues

  • An experience is a start page, questions and an outcome, built from a catalogue of React components. Each component declares its fields, and each field becomes a control in the admin, so a brand's team can change copy, questions and photos without a developer. The configuration is JSON in D1.
  • The repo ships eight catalogues (festival, road trip, property, agency, stay, venue, date and a basic one) and a theme for each brand.

Built for Coding Agents

I built Loro with Claude Code, and built it so a coding agent can extend it. Every tool opens with a comment that says what it does, in order. The 31 MCP tools call the REST API in-process with the same key, so Claude Code can connect to a workspace, build an experience, test the draft with run_test and fix the prompt.

Challenges I ran into

Pages That Read Like AI

Generated travel copy drifts towards the same words: "hidden gem", "vibrant", "unforgettable". Loro takes those choices away from the agent.

  • Sections can only recommend Qloo entities, by id.
  • Tools hand the agent real facts: the route, the set times, the rooms in the listing.
  • Each brand's voice lives in skills with a list of words it never uses, and an edit pass rewrites any that slip through.
  • Repeat picks within a list are removed, and so are places someone only passes through. A buyer's commute to SeaTac once made a Red Roof Inn one of their favourites.

From Qloo, or Dropped

Learning Qloo's API

I learned Qloo's API by testing small calls before building on them, and the best find was ranking. Give Qloo a fixed list and one call scores every item against a person's taste. That's how 36 acts on Mirage Valley's bill are scored for Theo.

Accomplishments that I'm proud of

  • One agent runs six industries. Nothing in it knows what a festival or a house is. The catalogues and their tools do.
  • The agent shows its working. Every place, act and show on every page is real, and the festival pages end with "How this page was made", a table of every pick with the Qloo match behind it and why it's there.
  • Theo's page plans 1,091 miles, three days and nine stops from eight answers, and each section appears as it's written.
  • Claude Code can build a new experience through the MCP server without opening the admin.
  • It's open source and deploys to a brand's own Cloudflare account, so every answer stays in the brand's own database.

How This Page Was Made

What I learned

  • Qloo does the most when it ranks something the brand already owns. Searching near a festival gives a list of places. Scoring the festival's own bill against one person tells Theo which four sets not to miss.
  • Taste crosses categories. Neil Young, Fleetwood Mac and Bon Iver found Theo a coffee shop in Mount Shasta.
  • Taste doesn't need personal data. Qloo gets favourites, never a name or an email, and still swaps Emma's Sightglass for Carmel Valley Coffee Roasting Co.
  • An agent in front of customers needs fewer choices, not more. Fixing the order and limiting picks to Qloo ids did more for the pages than any prompt.
  • Building a framework for a coding agent to extend changed how I wrote it: fields declared on every component, a header on every tool, and the same tools behind the REST API and the MCP server.

What's next for Loro

  • One real brand. All six brands in the demo are made up. Next is a pilot with one real festival or holiday rental, comparing people who got a Loro page with people who got the usual email: do they open it, come back to it, and turn up?
  • Pages that keep up. Today a page is built once, right after sign-up. A festival keeps changing until the gates open, so next is rebuilding the sections that change when set times drop or the lineup moves, and telling the ticket holder which of their four must-sees moved.
  • Plans for a group. The date plan already blends two people's taste. Next is the car of four driving to the festival together: everyone answers on their own, and the agent plans one road trip that gives each of them a stop they'll love.
  • A catalogue for retail. Ranking a brand's own list against a person's taste worked best of anything I tried with Qloo. Next is a retail catalogue that does the same with a store's products, so a shop can send each customer a page built around what they'd actually pick from it.

Built With

  • ai-sdk
  • claude-code
  • cloudflare-ai-gateway
  • cloudflare-d1
  • cloudflare-workers
  • cloudflare-workflows
  • durable-objects
  • mcp
  • qloo
  • react
  • react-router
  • typescript
Share this project:

Updates

Submission history