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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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.
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 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.
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.
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.
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.
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.
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.
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.
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.

Designed and built a clickable operator console for a Bratislava charge point operator running about 1,200 public chargers in Slovakia and Czechia: live network health, every charger and its OCPP state, audited remote commands, and session detail with signed meter values, the full price calculation and refunds within each user's limit.

Designed and built a clickable staff service console for a Lusaka water and electricity utility: one queue for faults, leaks and billing queries with live SLA status, a customer 360 for every account, and disconnection batches that check every safeguard before a crew is sent.
Enterprise Software Engineering - Human + AI
Contact Us
© 2026 - Copyright. All Rights reserved Oceanlab
Location
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
Enterprise Software Engineering - Human + AI
Contact Us
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