Skip to main content

Changelog

What's new on alvo.energy

What we shipped and when — newest first. Each entry describes what changed for the user. Categories help you scan.

AI brief

The daily package now uses your saved strategy

  • If you've saved an active strategy profile (volume, min spread, max trades, fee), the daily package builds the plan from it — not from generic defaults.
  • Until an active profile is saved, the package honestly runs on the built-in defaults.
  • If the profile read fails, that recipient is skipped (we never send a plan built on a guess) rather than silently falling back to defaults.
AI brief

Daily decision package by email (Pro)

  • Once a day in the morning (06:30 Kyiv) — an email with the day's AI brief: summary, action gate, top pairs, and a link to the full package (PDF/XLSX) in the workspace.
  • Real data only: if there's no live priced day, no email goes out — we never dress up a demo curve.
  • Every email carries the AI marking (Art. 50) and the sovereignty receipt (zero data egress).
  • Manage recipients in /admin/recipients (preview + test-send before you flip it live).
Trust

Decision & Outcome Ledger + honest framing

  • Every decision we serve is now logged; the morning reconcile scores it against realized DAM prices and computes hit-rate and captured spread across the recommended pairs.
  • Timing honesty: rows decided AFTER the 12:00 Kyiv gate close are labeled retrospective accounting, not tradeable performance.
  • A "historical simulation" disclaimer sits under the hit-rate KPI so nobody reads it as guaranteed accuracy.
  • The ledger is on /app/ledger and exports to CSV (with a timing-basis column).
Data

Fuel fundamentals card (gas + carbon)

  • New Pro card on /app: gas-storage fullness (GIE AGSI+) with a day-over-day trend, plus grid carbon intensity / CBAM line (Ember).
  • Both sources are CC BY — shown openly with attribution ("Sources: GIE AGSI+ · Ember").
  • Decision background, not a forecast signal — no edge claimed.
Data

Import-availability risk card (neighbour outages)

  • Planned/forced generation outages in neighbours (HU/RO/SK/PL) from ENTSO-E — a proxy for UA import-capacity availability.
  • Refreshes daily; history accrues going forward.
  • Readout only for now — not wired into the forecast, no edge claimed.
Trust

Linked source chips + freshness timestamps

  • Every chip in the AI brief Sources row is clickable — jumps to the data card that fed it (#coupling, #multi-zone, #system-ops, #balancing, #dam).
  • ENTSO-E live cards now show a self-updating "updated N min ago" badge that ticks every 30s.
  • Smooth-scroll on click; scroll-margin honors the sticky topbar.
Polish

Loading skeletons + mobile polish + OG image

  • /app and /account render structural skeletons during SSR fan-out — no more blank wait screen.
  • Mobile polish: AI brief chip row never overflows phone viewport, topbar tighter on narrow screens.
  • Refreshed OG image: proof points (OREE live · ENTSO-E live · AI brief · Audit trail) instead of vague marketing.
Performance

ISR for static pages + a11y skip-link

  • 20 pages (legal, glossary, help, developers, offline) now statically prerender with ISR (6h–24h revalidate) — instant TTFB.
  • Skip-to-content link surfaces on keyboard focus; proper id="main-content" on every top-level page.
  • Source chips converted to semantic <ul>/<li> with aria-labelledby.
Polish

PDF / Excel export polish + day-shape sparkline

  • PDF now carries a branded footer (alvo.energy + contacts + rationale ID), pilot badge, and an inline SVG day-shape curve between the summary and plan tables.
  • Excel gained a dedicated Cover sheet (headline + contacts + disclaimer); data sheets ship with auto-filter + frozen header.
  • Rationale ID from the audit trail now lives in PDF footer + Excel cover — for reconciliation with the event log.
AI brief

AI brief credibility boost

  • Data coverage now credits ENTSO-E EU coupling (+8), regional DAM (+8), UA system context (+3) — these three signals were live on /app but the scorer ignored them.
  • Decision quality: live EU context adds +8 and a "multi-zone benchmark anchor" reason.
  • Decision sensitivity: live EU adds +6 and a "cross-market check" entry.
  • "Sources that fed this brief" chip row with type icons (OREE / ENTSO-E / NEURC / NBU / weather).
Platform

/sla, /aup, /glossary shipped

  • /sla — uptime targets (best-effort 99.5% pilot → 99.9% GA), P1–P4 support tiers, service credits.
  • /aup — Acceptable Use Policy with explicit REMIT manipulation ban, rate limits, escalation policy.
  • /glossary — bilingual term dictionary (DAM/IDM/BM/OREE/UEEX/ENTSO-E) with client-side search and per-term permalinks.
Data

ENTSO-E switched live on prod

  • EU Coupling (A11) — cross-border flows UA↔PL/SK/HU/RO/DE-LU.
  • Multi-zone Regional DAM (A44) — regional EU prices alongside UA.
  • UA Energy System (A65+A75) — total load + generation mix (UA TSO not yet publishing → fixture).
  • Negative-cache on upstream failure (60s TTL) — we don't slam ENTSO-E during rate-limits.
Ops

Legal pack + staging environment

  • Terms / Imprint / DPA / sub-processors registry — full legal foundation.
  • Staging dev.alvo.energy with its own compose stack on the same droplet (cost-efficient).
  • GitHub flow: push to `dev` → auto-deploy stage, push to `main` → auto-deploy prod.
  • Off-site backup framework (DO Spaces / B2 / SFTP, optional GPG).
Platform

RBAC framework + native auth + billing seam

  • RBAC framework defined: owner/trader/analyst/risk/apiClient/auditor roles + 14 permissions; during the public pilot this is launch readiness, with enforcement via `ALVO_RBAC_ENFORCED` enabled only at production GA.
  • Integration test for AuthGuard + Reflector wiring over the HTTP layer — catches the silent-noop regression.
  • Native bilingual /login + register + password reset + MFA — replaces WorkOS hosted UI.
  • Provider-agnostic billing seam: LiqPay (UAH) + Paddle (EUR), inert until ALVO_*_KEY env vars are set.