Show focus.finops.org here (embedded preview)
FinOps Certified FOCUS Analyst badge
Credential

FinOps Certified FOCUS Analyst

Issued

The author of this site holds this credential for working with FOCUS-formatted cost and usage data.

Verify the credential on Credly ↗

The evidence behind this site.

Billing data
The FOCUS 1.0 sample (CC BY 4.0): 100,000 anonymized rows from AWS, Microsoft, Oracle and Google Cloud, stored in Supabase.
Use cases, queries and spec
A FOCUS MCP Server snapshot taken 2026-10-08 UTC. It is not a live feed; the source content belongs to the FinOps Foundation.
Queries
The use-case SQL is translated to Postgres. Browse the query catalog to see which queries run directly, which are adapted and which require newer data.
Read-only access
The site reads the sample through a select-only database role. Default results come from a precomputed snapshot; custom views may use cached database results.

The library crawl recorded 30 errors. This site presents the bundled snapshot; use the source links to check authoritative definitions and current library content.

QR code for https://finops-focus-jwilkes.vercel.app
Scan to open this site on your phone.
Open the public site

Changelog

Unreleased

Added

  • Crawlers, search engines and AI agents can discover every public page: the site serves robots.txt and a sitemap, each page names its own path as canonical (shared query-string views canonicalize to the base page), every page has a description, and the About and spec column pages publish JSON-LD; a local smoke checks all sitemap pages over HTTP.

Fixed

  • The About page changelog shows plain version labels instead of links to private repository compare pages; bundling fails if a private-repository link would reach public content.
  • Links in prose and notices now stay underlined in light and dark themes; a local accessibility smoke checks key pages for serious WCAG violations and horizontal overflow.
  • Snapshot generation now uses consistent read-only transactions, shared source fingerprints and atomic replacement; incomplete or mismatched snapshot pairs and stale catalog defaults stop bundling. Static results have deterministic ordering and serialization, with an explicit read-only drift check.
  • Forecast artifacts now validate dates, uncertainty bands, anomalies, projections, model metrics and recorded snapshot ranges before bundling; malformed or stale data stops development and builds with a specific diagnostic.
  • Failed explorer and catalog queries now keep their inputs and recovery controls, show safe classified messages, and expose query-state markers for semantic monitoring.
  • Explorer and catalog inputs now validate identifiers, calendar dates, UTC timestamps, integer pages and value lengths before SQL; normalized default parameters keep precomputed results.
  • Explorer untagged drills now select missing tag values, keep literal (untagged) values separate, and preserve the missing filter in shared URLs.
  • Live queries now stop waiting when database connections or responses stall, and recover safely from dropped idle connections.

Security

  • Database connections from the app, snapshot tools, forecast and psql scripts now verify the Supabase certificate chain and hostname against a pinned root CA; URL sslmode parameters can no longer disable verification.
  • Responses now carry explicit browser hardening headers (no-sniff, referrer, permissions, framing denial) and an enforced Content Security Policy that limits scripts, styles, images, fonts and connections to the site itself and frames to focus.finops.org; preview deployments also allow the Vercel Toolbar. npm run test:headers checks real responses, zero violations in Chrome and refused framing.

1.3.0 - 2026-10-10

Added

  • A 14-day cost forecast, built offline with Prophet from daily Usage cost:
    • A Forecast panel on the dashboard, featuring the series with the most recent data.
    • A new Forecast page under Data, with Total, AWS, Microsoft and Oracle series, 95% and 80% expected ranges, a projected 14-day total, full-screen charts and data tables.
    • A model card for each series, with the training window, settings and a final-week backtest comparing daily and hourly models.
  • Anomaly flags: any day outside the 95% expected range is marked as a spike or a drop, with its deviation and severity, plus a guide to how the forecast flags anomalies.
  • Forecast tooling (tools/forecast/) and npm run precompute:all, which regenerates the dashboard snapshot and the forecast in one step.

Changed

  • The sample data now reads as recent: charge timestamps move forward 78 weeks (keeping weekdays) and billing periods 18 months (keeping calendar months), so most charges fall in March 2026. A repeatable migration applies the shift, and the sample loader re-applies it.
  • Query defaults, explorer ranges and documentation use the shifted dates.

Fixed

  • Use case capabilities and reference text show "&" and other characters instead of HTML codes such as &.
  • The column profile precompute runs in smaller batches so each query stays within the 5-second read-only limit.

1.2.0 - 2026-10-10

Changed

  • The menu is now grouped into collapsible sections:
    • Data: Dashboard, Explore, Column profile.
    • Use case library: Use cases, Queries.
    • Specification: versions 1.4 and 1.0.
    • About: on its own.
  • The section containing the current page opens automatically, and each section shows how many pages it holds.

1.1.0 - 2026-10-10

Added

  • A full-screen control on every chart:
    • Uses true full screen on desktop, Android and iPad, and a full-viewport view on iPhone.
    • Redraws for portrait or landscape. On Android, it can lock the screen to landscape.
    • In full screen, you can zoom into part of the axis, show or hide series from the legend, and switch to the data table.

Changed

  • New look based on the AI Agent Skills resource library design system:
    • Navy, paper, mint and coral palette, with Georgia headings and square corners.
    • Each page opens with a "data receipt" showing source, data, status, mode and snapshot date.
    • Headline numbers are a ruled ledger.
    • Query results are labelled "Precomputed" or "Live".
  • Accessibility:
    • A contrasting inner focus ring.
    • Tap targets of at least 44px.
    • Scrolling SQL blocks can be reached with the keyboard.
    • Long legend labels wrap.
  • Full-screen charts fit short landscape screens: the legend sits beside the plot and the controls fold away.

1.0.0 - 2026-10-09

The first public release of FOCUS Explorer, live at https://finops-focus-jwilkes.vercel.app.

Added

  • Cost dashboard over the FOCUS 1.0 sample data (100,000 rows from AWS, Microsoft, Oracle and Google Cloud), with:
    • KPIs for effective, billed and list cost, savings versus list, and tag coverage.
    • Charts for daily usage cost by provider, service categories, top services, regions, charge categories and tag keys.
  • Data explorer:
    • Filter by provider, service category, service, region, charge category, sub account, date range, tag and text.
    • Group by any dimension or tag key and pick a measure.
    • Drill into any group.
    • See daily trends and paged charge rows.
    • Share any view by its URL.
  • Column profile showing the fill rate, distinct values and most common values of every column.
  • All 118 FOCUS use case queries, translated to Postgres for the v1.0 sample: 33 run directly, 49 are adapted with documented column substitutions, and 36 are marked unsupported with the reason. Each runnable query has editable parameters, a chart and a result table.
  • Use case library (115 use cases grouped by FinOps capability) and FOCUS spec column pages for v1.4 and v1.0, from a snapshot of the FOCUS MCP Server.
  • About page with:
    • A link to and embedded preview of focus.finops.org.
    • The FinOps Certified FOCUS Analyst credential.
    • A QR code for the public site.
    • This changelog.
  • Menu drawer for navigation on every page and screen size.
  • Precomputed results for the dashboard, column profile, filter lists, explorer landing view and every query's default parameters, so those load instantly. Only custom filters and parameters query the database.
  • Tooling:
    • FOCUS MCP Server crawler.
    • Catalog validator that runs every query.
    • Sample data loader.
    • Precompute script.
    • One-time tailnet form for saving the database connection string.
    • Least-privilege database role setup for Vercel.

Security

  • The app queries Supabase with a dedicated focus_app login. That login can only read, through the select-only focus_reader role, in read-only transactions with a 5 second statement timeout.
  • The sample table lives in a schema that isn't exposed through the Supabase Data API, with row-level security enabled.
  • Explorer column names come only from fixed allowlists, and every user-supplied value is a bound parameter.
  • Deployments upload only the app and its data (a .vercelignore allowlist), never .env files.