anêmona
PTEN
case study 01_

A talent agency's entire operation, with AI inside.

We built the whole platform: a web admin panel for the team, an app for the artist, four backend services, the AI engines and the infrastructure. From 2020 to date.

Client
KOZMOS
Period
2020 to date
Scope
Platform

kozmos.com.br (in Portuguese)

4,000+
artists on file
65.9%
of availability checks get an answer
42 min
is the median time to an answer

KOZMOS connects artists with opportunities in the audiovisual market. We wrote the system where that happens: it is where the agent creates the casting, finds the profiles, checks the artists' availability, receives the test video, tracks approval and closes the payment. The artist does their part through the app we published in both stores. And an assistant, Gaia, works in the admin panel and on WhatsApp.

KOZMOS (in Portuguese)
back to top01The problem

Casting lived in a shared folder

The market organizes talent with composites in a shared drive folder. A PDF with three photos picked two years ago is an archive. Today productions ask for live material: a current photo, an intro video, a skills video, an acting video.

Keeping that in a drive is not hard work, it is unworkable. Every update is a conversation, a heavy file per message, a folder rename, a link that expires. Times a thousand people, again every six months.

Availability checks were worse. An ordinary campaign reaches dozens of artists, and the checks went out from the agent's personal WhatsApp, one by one. At five minutes per person, fifty artists cost more than four hours of someone's time.

The problem with the spreadsheet was not slowness. It was that it did not know what it had lost.

Who did not reply, who replied maybe, who sent material nobody logged: none of that existed anywhere. An artist would say they would be away for six months, or that they do not do campaigns in a certain segment. The information was clear and had nowhere to be stored. It went into one agent's memory and died there.

back to top02The sequence

AI came in 2025

It took us four years between putting the process into a system and turning on the AI. It was not a delay, it was a precondition.

  1. 2020artist registration30 registrations
  2. 2021casting moves onto the platform65 castings
  3. 2025Gaia, similarity search and open registration324 castings
  4. 2026the artist appiOS and Android

Similarity search could not exist in 2021, because there was nothing to vectorize.

When similarity search arrived, the base already held tens of thousands of photos and more than ten thousand videos, accumulated over five years of registrations. Two thirds of today's artists joined before 2025.

Over the same period, volume rose from 65 castings in 2021 to 324 in 2025.

back to top03What we did

One system, with the whole process inside it

We delivered a TypeScript monorepo with a web admin panel for the team, a Flutter app for the artist, four groups of serverless functions (API, AI, media and asynchronous tasks) and the infrastructure described in Terraform. All in a single region, in Brazil, with mandatory origin attestation on every call.

back to top04The mechanisms

Six mechanisms

It is not “we use AI”. It is the path the data takes, and where we interrupt it on purpose.

1 The artist app

We published the app on iOS and Android, in Flutter, with more than thirty screens. Seven-step registration, a photo and video gallery, replies to availability checks, test material submission, a calendar, test fees (the pay owed to an artist for taking part in a test) and the work history.

Knowing whether the job came through no longer means calling someone.

In the market, finding out the status of a test means messaging the agent and waiting. In the app the status is on screen: what they were asked about, what was answered, what is pending, what was approved, what has already been paid.

Seven-step registration, the home screen with what needs attention, and the availability check seen from the other side: the artist reads the job terms, fee and exclusivity included, and answers in seven questions.

Media upload is where the engineering is. The artist records on their own phone, on a mobile network, often in 4K. The raw file is too big for the web, and the squeezed file costs the job: a test that arrives blurry loses the role.

That is why compression has a floor, not a ceiling. The target is 1080p, and a smaller source is not upscaled. Only files above 600 MB come down, and they come down to 720p, never lower. Upload is resumable, in 8 MB chunks: if the connection drops in the middle of a two-hundred-megabyte video, it resumes from where it stopped, and the session survives the app being closed for about a week.

Notifications arrive by two paths, on purpose. Push in the app and WhatsApp through Twilio. Whoever does not see the app sees the message, and it is the two together that sustain the reply rate on availability checks.

Biometric sign-in, a second factor, and a consent gate that does not let anyone through without accepting the terms. Artist data is personal data of people who work with their own image.

2 The availability check that goes out in one click

We took availability checks out of the agent's personal WhatsApp and turned them into a single send. The agent picks the artists and sends; each person gets their own link, by WhatsApp or email, and replies from inside it. The reply lands in the casting already organized, with time and channel.

The send before it goes out: the type of check, the fallback channel for those who do not reply on WhatsApp, the message preview and how many artists will be notified.

More than 20,000 availability checks have gone out, and 65.9% of them were answered. Half the replies arrive within 42 minutes, three quarters within four hours. An ordinary check goes to about 50 artists, and the largest one so far went to 581.

The number the manual process never had is a different one: more than two thousand people opened the link and did not finish. It is a named list of who deserves a second message, and on WhatsApp that group is invisible.

The send checks for duplicates before going out, and the channel downgrades itself: an artist with a poor WhatsApp reply history starts receiving by email. There are 34 message types across 8 contexts, each with a versioned template and its own queue.

3 Gaia, who stops halfway to ask

The brief arrives as a PDF, almost always long. We built Gaia to read the file and return the 14 required fields of the casting plus the list of profiles. The agent checks it in seconds. Before, that took at least half an hour of reading and typing.

It is not the time she saves. It is the 14 fields that always come out.

Half of them are not operational data, they are contract terms: exclusivity, airing period, territory, fee. Forgetting exclusivity is not a blank field, it is the difference between the artist being free or not to shoot the competitor's commercial the following year. And a human reading a long PDF at six in the evening does not extract the same way as that same human the next morning.

The same extraction serves TVT requests: same fields, same format, and the delivery comes out consistent on both paths.

When information is missing, she does not leave it blank. She interrupts the conversation, asks for what is missing, confirms, and only then saves. The interruption belongs to the state graph itself, so the conversation can stop halfway and resume where it left off.

Gaia receives a loose request and interrupts to ask for the client, casting producer, fee, media, exclusivity and dates. Only then does she generate the preview.

She also answers artists' questions, including about the SATED collective agreement, and including from people who have not registered yet. When she does not know, she escalates to a person. There are about ninety escalations a month, and nine of them are questions she could not answer. An assistant that solves everything on its own is easier to sell and worse to use, because the price of not escalating is answering wrong with confidence.

She works in the admin panel and on WhatsApp, which is where the artist already is, and it is the same Gaia in both. The KOZMOS number is open: anyone who wants to see it working can send a message.

Talk to Gaia · +55 11 95003-5760 (in Portuguese)

Every run carries a token count and cost, with a daily ceiling. When the ceiling is reached, the system alerts the administrator instead of continuing to spend. AI in production needs a brake.

She does not decide casting and does not talk to the end client. Neither is a flaw to fix: it is where automation was interrupted on purpose.

4 Searching by similarity

Find people with freckles. Find videos of people dancing passinho.

Both sentences work in the engine we built, and they are the same search: one looks through tens of thousands of photos, the other through more than ten thousand videos. The request comes in as a reference photo or in Portuguese, becomes a structured filter plus a vector query and runs across four indexes. It records where each candidate came from, so whoever operates it can audit why a profile showed up.

The engine returns whoever resembles what has already worked, and that is why we kept it out of the choice. Casting selection remains handcrafted, because casting involves a bet, and a bet is what lies outside statistics. That is why the platform measures, every day, the concentration of its own showcase. It is a fairness metric, not a performance one: an agency lives off its entire roster, not off the ten people the algorithm learned to prefer.

5 The test fee, with the collective agreement's deadline built in

A test fee is the amount owed to an artist for taking part in a test, and it is an old drama in the market. The artist filled out a form, generated a PDF, signed it and sent it to the agency for every test, with ID and professional registration attached. And nobody could track whether it had been paid.

We put the receipt inside the system: it comes out prefilled and the artist signs it in the app, with a six-digit code sent by email. There are already more than 300 test fees under control, with a signed receipt in more than half of them.

The part that had no solution at all became a date field. The collective agreement gives 15 days for payment on self-tapes, and a routine sweeps the overdue ones every day, changes their status and notifies the artist. Each overdue fee becomes a named case to collect, instead of an amount nobody knew was outstanding.

The one who confirms the fee came in is the artist, in the app.

6 Tools KOZMOS opens to the market

Outside the platform, an open calculator applies the add-ons of the SATED agreement and writes the calculation into the URL itself. The link is not a shortcut to the tool, it is the whole calculation: whoever receives it opens it and sees the same numbers. Productions send that link as proof at closing, and an agency tool became the referee accepted by the other side of the table.

Open the calculator with a sample calculation (in Portuguese)

back to top05Technology

What runs underneath

application
  • React
  • TypeScript
  • Flutter
AI
  • Vertex AI and Gemini
  • LangGraph
cloud
  • Firestore
  • Cloud Functions
  • Cloud Tasks
  • Cloud Armor
messaging
  • Twilio
  • Resend
delivery
  • Terraform
  • GitHub Actions
back to top06The result

What changed in the operation

What we delivered erased the roles that existed because there was no system: assembling composites, organizing folders, sending messages one at a time, keeping spreadsheets. None of them was talking to artists.

Today the team is smaller, runs about five times as many castings as in 2021, and has more time than it had.

Artists' questions are almost always the same. Is my material good? Should I take this project? How do you make an intro video that works? They never stopped being asked. What was missing was time to answer them properly.

It is not that the team did not do it. It is that today it does it well, and answers the same day.