Skip to content

Work · IDeaS Revenue Solutions (a SAS company) · 2025–26

Enterprise automation at IDeaS

IDeaS builds revenue-management software for hotels. Around the product sit teams doing a lot of careful, manual, cross-system work. My job has been to turn that work into scheduled, tested automation, and to put LLMs where they genuinely help.

Roles
AI & Automation Developer (Nov 2025 – present); Business Intelligence & Automation Intern (Jul – Oct 2025); Software Developer Intern (Jan – Jun 2025)
Stack
Python, pandas, Playwright, Power Automate, Streamlit, Altair, Java, Spring Boot, Angular, SQL, Docker
Systems
G3 revenue-management platform, Salesforce, Excel/Word/PDF, Microsoft AI Builder
Note
Described at the level of what was built. No internal code, data, names or screenshots.

01

Forecast-review reports with LLM-written commentary

  1. 01
    Data
    Forecasts and projections per property
  2. 02
    Calculations
    Forecast vs. projection analysis
  3. 03
    Charts & tables
    Rendered per section
  4. 04
    Commentary
    LLM-written narrative (Microsoft AI Builder)
  5. 05
    Merge
    PDF, Word and Excel deliverables

A Python pipeline that assembles client forecast reviews. It is split into modular services (data, calculations, charts, document merge) so a new report section is an addition, not a rewrite, and it handles both full-history properties and those with limited history, where the model runs on a synthetic baseline. It is containerised with Docker and went through SIT, UAT and hypercare.

The LLM writes narrative around numbers the pipeline has already computed. The failure mode worth worrying about is a wrong number in that narrative, which is exactly what led me to build Proofline.

02

Configuration checks across three systems, in a browser

  1. 01
    Salesforce
    Client account numbers, integration types
  2. 02
    Product UI
    The same settings in the G3 platform
  3. 03
    Database
    What is actually stored
  4. 04
    Check
    Playwright run in Dockerised test environments

Setting up a client correctly means the same facts have to agree in CRM, in the product, and underneath it. I automated that end-to-end check with Playwright, running in Dockerised test environments, so it runs the same way every time instead of depending on someone clicking through three systems.

03

Analytics and mailbox automation

Pricing analytics in Streamlit

A Streamlit app (pandas, Altair) that takes pricing exports and automates best-available-rate trend analysis, property and chain extraction, date filtering and pricing-decision validation. It is structured as configuration, validation, calculation and chart services, so analyses can be added without touching the UI.

A shared customer-care mailbox that tracks itself

Scheduled Power Automate flows parse incoming client and system emails (chain codes, timestamps) into Excel and reconcile replies from Sent Items, so the team sees what is waiting and what has been answered without maintaining a tracker by hand. It removed ~3 hoursSourceManual tracking effort the service-delivery team no longer does, as estimated when the flows replaced it. of manual tracking.

04

Modernising a legacy dashboard without a big-bang switch

As a Software Developer Intern I migrated the product's “At-a-Glance” control dashboard from JSP and Struts to Angular and Spring Boot: Angular components on top of REST APIs backed by optimised SQL and Java Stream processing. The APIs moved from single-day data to custom date ranges, which meant reworking and tuning the underlying queries.

The new UI shipped behind a database-driven feature toggle, added through a SQL migration, so clients could be moved from the legacy JSP views to Angular in a controlled rollout, and moved back if something went wrong.

PATTERN

What these have in common

  • Start from the workflow: who does it, how often, what breaks, what “done” looks like.
  • Build the smallest reliable automation first; add an LLM only where language is the actual work.
  • Test it where it will run (containers, SIT, UAT) and roll it out so it can be rolled back.
↑↓ to move · ↵ to select⌘K / Ctrl K