CLIENT: Tomillar Energía🇪🇸Spain

Veleta - Power Trading and Risk Console with Human Approval

Trading Console for a Spanish Renewable Generator

Designed and built a clickable trading and risk console for a Madrid renewable generator selling wind, solar and battery output on the Iberian power market: a quarter-hour position grid, day-ahead and intraday auction bids with approval before submission, and an intraday blotter where orders over a trader's mandate wait for a second person.

Scope of Work
Product design, UI build and clickable demo
Industry
Energy / Power Trading
EnergyEnterprise
Compliance & Certifications
REMITMiFID IIGDPRLOPDGDD

Most of our work is under NDA. Per agreement, we can share the work but not the company details - all names and identifying information shown here have been changed.

Impact

5 Screens
Clickable end to end

Desk dashboard, position grid, bids, bid review and approval, and the intraday blotter. Every one of the 16 demo bids opens its own review page.

96 Periods
Net position per quarter-hour

Each 15-minute delivery period nets day-ahead, intraday auctions, continuous trades, PPAs and battery schedules against the P10 to P90 forecast, with periods over the 40 MW open position limit outlined red.

4-Eyes
On bids and orders over mandate

The preparer cannot approve their own bid. An order above the trader's mandate, such as 32 MW against 25 MW per order, or one that takes a limit past 80%, waits in an approval tray.

16 Bids
Realistic demo data

Day-ahead and intraday auction bids across 6 statuses, 13 intraday orders, 14 fills, 9 wind, solar and battery assets in 6 programming units, 5 risk limits and 7 staff users.

The Problem

Tomillar's six-person desk ran on a spreadsheet per market, the market operator's own terminal, a weather vendor's website and a shared inbox for confirmations. Traders rebuilt the day-ahead bid by hand every morning, nobody could see the net position for a quarter-hour across day-ahead, intraday, PPAs and batteries without adding it up, imbalance costs surfaced a month later at settlement, and risk limits lived in a policy PDF.

Our Solution

Veleta brings the desk into one console: the net position for every delivery period, day-ahead and intraday auction bids checked against market rules, limits and outages before a named person approves them, and an intraday blotter with a pending approval tray. It never trades on its own; every bid and order is prepared and approved by people.

The Challenge: Trading Renewables Quarter-Hour by Quarter-Hour

Tomillar sells wind, solar and battery output from Aragón, Castilla y León, Extremadura and Castilla-La Mancha on the Iberian day-ahead and intraday markets and through PPAs. Output depends on the weather, markets close on fixed gates, and EU market integrity rules apply to every order.

No Single View of the Position

The day-ahead market has used 15-minute products since delivery day 1 October 2025. A position for one quarter-hour is spread across day-ahead results, intraday auctions, continuous trades, two kinds of PPA and battery schedules, and the forecast behind it keeps moving.

A Bid Rebuilt by Hand Every Morning

The day-ahead bid for six programming units had to be built from a forecast file, priced in steps, checked against market rules and approved before an internal cut-off ahead of the market gate closure around midday CET.

Limits Lived in a PDF

Open position, daily volume, value-at-risk style, counterparty and stop-loss limits were policy, not software. Traders had no way to see whether an order would breach one, or whether it exceeded their own mandate, before it reached the market.

REMIT on Every Order

REMIT requires wholesale energy transactions and orders to be reported to ACER through a registered reporting mechanism, and inside information such as unplanned outages to be disclosed promptly. The compliance officer was chasing traders for trade details to check reporting was complete.

Our Approach: From Market Rules to a Clickable Trading Console

01

Spec and Rules Research

Mapped 9 user roles, 36 staff screens with 5 slide-over panels and about 14 modals, and the data model for assets, programming units, forecasts, outages, prices, bids, orders, trades, confirmations, battery schedules, limits and REMIT reports. Wrote down the rules the design follows: the MIBEL market run by OMIE and coupled through SDAC and SIDC, REE as system operator, CNMC and ACER oversight, REMIT, MiFID II for financial power derivatives, and GDPR with the LOPDGDD for staff data. Market rules such as gate closures and price limits come from configuration, not code.

02

Clickable Demo on a Production UI Kit

Built 5 key screens on a production dashboard kit: the desk dashboard with 5 KPI cards, the 96 quarter-hour position strip, batteries now and a role-based action list; the position grid for yesterday, today and tomorrow; the bids list with a builder sheet; bid review with the bid against its forecast band, checks re-run at open time and the approval history; and the intraday blotter with the next 12 delivery periods, a pending approval tray and a new order check. A market clock counts down to the cut-off. All actions run on local state.

03

What a Production Build Adds

Integration with OMIE through the client's exchange connectivity, REE ESIOS data, the ENTSO-E Transparency Platform, OMIP and EEX forward curves, weather forecasts from Meteomatics or Solcast, the SCADA historian, the battery sites' EMS, a REMIT registered reporting mechanism, an inside information platform and EFET confirmation matching. Microsoft Entra ID sign-on with role-based mandates, an append-only audit trail, and the remaining 31 screens, from imbalance, PPAs and P&L to risk limits, REMIT reporting and settings.

Why It Works: People Decide, Veleta Checks

The Gap Is the Open Position

The dashboard stacks sold volume by market against forecast generation plus battery schedule for all 96 quarter-hours, with the current period marked. In the grid, long and short positions are coloured by size, settled periods turn grey and any period over the limit is outlined.

The Approver Sees What Will Be Sent

Bid review shows each programming unit's bid against its P10 to P90 forecast and the price forecast, highlights what changed since the last approved version, and re-runs every check when it opens, with warnings and failures first. Approve is blocked for the preparer and while a check fails.

Mandates and Limits Before the Market

Each user carries a mandate in MW per period and per order. A new order shows its limit effect before sending, and any order over mandate or pushing a limit past 80% goes to the approval tray with the reason. There is no automatic re-pricing.

Undisclosed Outages Block Trading

Bid checks list the outages on each programming unit and whether they were published. An outage still awaiting the compliance assessment fails the check, so a bid on that unit stays blocked until compliance confirms.

Related case studies

View all: Energy & utilities
Logo
Oceanlab

Enterprise Software Engineering - Human + AI

Languages

Locations

Global Headquarters

21 Merchant Road, 3rd Floor, Singapore 058267

Main corporate office and leadership operations

North America Office

548 Market Street, PMB 12345, San Francisco, CA 94104

Client operations and business development

India Office

402 Shivalik Shilp II, SG Highway, Ahmedabad 380015

Engineering and delivery center

© 2026 - Copyright. All Rights reserved Oceanlab