Skip to content
Swift IdeasStart a build
Swift Ideas
Start a build

Real-time dashboards & data products

Live data that tells you when it is stale.

We build dashboards and data products on top of feeds that change by the minute: scheduled imports, settlement runs, analytics and live grids of thousands of rows that stay responsive. Every figure carries its source and its age, so nobody acts on a number that stopped updating an hour ago.

What clients arrive with

  • Our dashboard freezes when the dataset gets large.
  • We cannot tell whether the number on screen is five seconds or five hours old.
  • Our data vendors disagree and someone reconciles them by hand.
  • The Monday report is rebuilt manually every week.
  • Jobs fail overnight and we find out from a customer.

What you get

Ingestion and scheduled jobs
Pulls, syncs, backfills and settlement jobs on a cadence that matches the source. Holdrate refreshes subscribed workspaces every hour in bounded batches, from a cron pinned beside its London database.
Grids that stay fast at scale
Virtualised tables painted imperatively where React re-renders would be too slow, so thousands of live rows keep filter, sort and keyboard search responsive.
Freshness you can see
Per-source health shown as age and coverage. A row turns amber when it is older than 1.5 times its source's refresh interval and red past three times.
Reconciliation across sources
One identity per entity across vendors, and a confidence level on each value that says whether sources agreed, only one answered, or the figure is a shadow value kept for comparison only.
Analytics products for end users
Analytics users pay for: Holdrate shows which paying members went quiet for 7 or 14 days and the monthly plan value exposed, from rules a creator can check.
Reporting loops
Daily pulls from Search Console and GA4 or PostHog into Postgres, with equal-window comparisons instead of hand-built weekly reports. Each pull is checked for completeness before it is compared.
Operational checks
Validation jobs, webhook health checks and alerts that fire when a scheduled job stops producing, before a customer notices.

How the work runs

  1. Inventory the sources

    Cadence, latency, reliability, licence terms and failure behaviour for every feed, written down before any code.

  2. Normalise identity

    A common key for each entity across vendors, with tests for the awkward matches: renamed items, duplicates and late corrections.

  3. Build the surface

    Rendering chosen for the data volume, keyboard-first controls for people who use the screen all day, and freshness shown on every figure.

  4. Operate it

    Health checks, backfills and validation jobs go live with the dashboard, with a runbook for the day a source changes its format.

How engagements start

  • Data audit first: sources, cadences and failure modes mapped, with a working prototype on live data.
  • Prototype to production in 4–8 weeks for one dashboard or data product with its jobs and health checks.
  • Retained operations for teams who want someone watching the pipelines after launch.

Built with

  • Next.js
  • TypeScript
  • Supabase (Postgres, Realtime)
  • Vercel Cron
  • Python with uv
  • Google Search Console API
  • GA4 Data API
  • PostHog
  • Sentry
  • Playwright
  • Vitest

Where each number comes from

Each figure names where it comes from.

members in the largest verified import, 25 pages
2,500
Source: Holdrate: our recorded test results, 22 September 2026
server functions for purchases, sign-in, usage data and settings
14
Source: Astro Golf: counted in the project's backend code, latest development version

The work behind it

Questions, answered

Something else on your mind? hello@swiftideas.com

Do we need a streaming platform or a data warehouse?

Often not at first. Postgres with scheduled jobs and Realtime channels covers a lot of live products. We recommend a warehouse or streaming stack when volume or query patterns genuinely need it, and we show you the numbers that say so.

How live is live?

As live as the source and the decision require. Some of our jobs run every minute, some every hour, some daily. We set the cadence per source and show its age on screen.

What happens when a data source goes down?

The dashboard says so. Stale values change colour, the source health panel shows the gap, and an alert fires. We never fill a gap with estimated or sample data without marking it.

Can you work with our existing database?

Yes. We can read from your current systems and build the product layer on top, or move the data into Postgres where that makes the product faster and simpler.

Who looks after it once it is live?

You can, with the runbook we write. We also offer retained operations, where we watch the job health checks and handle source changes for you.

Bring the idea. We’ll build all of it.

Tell us what you want to exist and who it is for. The two people who reply are the two people who will build it.