I love my job. I get to take messy data and turn it into something a business can actually use.

Coding agents have honestly changed how I work. I can go from an idea to a working MVP in an afternoon, so lately I’ve been running workshops with customers and building the thing in the room with them. I want to start sharing that work. Everything here is anonymized, but it’s a real picture of what you can build in a few hours when you point a coding agent like Cortex Code at your own data.

You already know you can spin up an app from a prompt. That part is easy now. What makes an app worth putting in front of a customer is when it runs on their data. The stuff in their operational database, in Salesforce, spread across every CRM they own, sitting on a pipeline that stays fresh. That’s the harder part, and it’s the part that matters.

So that’s what I built here: a guest 360 for a hotel group. It takes one guest and stitches them together across every property they’ve stayed at, anywhere in the world, and it hands the front desk the two things they actually want to know. Does this guest take upgrades, and what do we need to get right before they arrive?

I started with two exports, one from Salesforce and one from MongoDB, and finished with a React app the front desk can open on their phone. Here’s what I started with, what I built, and the Snowflake features it took.

Where I started

The CRM lived in Salesforce: one row per guest, one row per stay. Names, tiers, folio totals, the stays on record.

GUEST_ID   FULL_NAME        TIER   LIFETIME_GBP  STAYS  LAST_STAY
G-1002     Elena Marchetti  VIC          61400     14   2026-05-02
G-1044     David Okonkwo    Gold         38150     11   2026-06-18

The concierge notes lived in MongoDB, as free text documents, one per interaction.

{
  "guest_id": "G-1002",
  "property": "Meridian Lac Léman",
  "note": "Ruhiges Zimmer, obere Etage, federfreies Kissen. Frühstück 7 Uhr.",
  "author": "Henri B.",
  "logged_at": "2025-12-24"
}

Two systems, two shapes. Neither agrees on what a guest is, and the note is in German.

The pipeline, and I made it automatic

I clean and join the two sources in layers, raw to staging to gold, so when a number looks wrong I know which layer to check. The part that matters is that every layer is a dynamic table. I write the query once, set a target lag, and Snowflake keeps it fresh. When Salesforce syncs a new stay, or a new note lands from MongoDB, the 360 updates itself. No schedule to babysit, no orchestration to write.

create or replace dynamic table gld_guest_360
    target_lag = '1 hour'
    warehouse = concierge_wh
as
select
    g.guest_id,
    g.full_name,
    sum(s.folio_total_gbp)         as lifetime_spend_gbp,
    count(distinct s.stay_id)      as total_stays,
    count(distinct s.property_id)  as properties_visited,
    sum(s.nights)                  as total_nights
from stg_salesforce_guests g
left join stg_salesforce_stays s on g.guest_id = s.guest_id
group by 1, 2;

Every table downstream is the same idea, and I didn’t write them by hand. I described what I wanted to Cortex Code, Snowflake’s coding agent, and it wrote the SQL with me. I still read every line. One of those tables reads the notes.

Reading the text with AI

The notes are the useful part, and they’re messy. Snowflake has AI functions you call inside a SELECT, so I never move the data. AI_TRANSLATE puts the German note into English. AI_SENTIMENT scores how it feels. AI_COMPLETE reads a guest’s notes and returns their preferences as clean fields.

create or replace dynamic table gld_guest_preferences
    target_lag = '1 hour'
    warehouse = concierge_wh
as
select
    guest_id,
    ai_complete('mistral-large2',
        'Return room, bed, dining, do_not and allergies from these notes: ' ||
        listagg(ai_translate(note, '', 'en'), ' | ')
    ) as preferences
from raw_mongodb_notes
group by 1;

The app

The same agent built the front end. I gave it the gold tables and told it what I wanted, and it built the React app that reads them. The Guest Portrait shows one guest across every property, whether they take an upgrade, and what to get right before they arrive.

Where they stay: Elena's stays unified across the Meridian properties in London, Geneva and Zermatt, with her upgrade responsiveness above.

Know before arrival: preferences structured from the notes by AI, and recent service notes scored for sentiment and intent.

That is it

One afternoon, two sources, one app. The Snowflake features it took:

  • Dynamic tables, for a pipeline that refreshes itself as new data lands
  • AI_TRANSLATE, AI_SENTIMENT, AI_CLASSIFY and AI_COMPLETE, to read and structure the notes in SQL
  • Cortex Code, to write the SQL and build the React app

All of it sits on data that refreshes itself, so this isn’t a one off demo. It keeps working as new stays and notes arrive. This is the kind of thing I build with customers in a workshop, from their idea to a working MVP on their own data, in an afternoon.