Building on Tape - Projection Tables and Tape-First Architecture

:bangbang: This is a fairly technical and advanced post.

I have been meaning to make some videos showing this approach in practice, but as that has not happened yet, I thought I would write up some of the principles behind how we build Tape-first systems.

Tape as the Operational Source of Truth

In my view, Tape is still incredibly difficult to beat as an operational platform.

It excels at:

  • Entering and manipulating operational data
  • Automating workflows
  • Receiving and distributing information
  • Scaling with both technical and non-technical users
  • Rapidly adapting to changing business processes

The key principle behind everything we build is this:

Tape remains the operational source of truth.

All updates, operational actions and workflow logic happen in Tape first.

However, operational systems and high-performance public-facing systems are not always the same thing.

Sometimes you need:

  • Public web pages
  • Client portals
  • Role-based dashboards
  • Search-heavy interfaces
  • Real-time map displays
  • Large-scale read access
  • Complex aggregated views

These are all things Tape can power, but they are not necessarily things that should rely entirely on live API reads for every request.

Examples of Systems We Have Built on Tape

Some examples from recent projects:

  • Client portals
  • Client onboarding systems
  • Association management system (clubs, members, roles, uploads, CMS-driven website)
  • Location plotting systems
  • Email systems linked to CRM records
  • Link shorteners
  • Secure document portals
  • Training platforms
  • Secure ordering systems with client-specific product access
  • Holiday approval systems
  • Expense approval systems

What these systems all have in common:

:point_right: External web front ends
:point_right: Tape as the source of truth
:point_right: Dynamic behaviour driven by Tape data

Our own internal platform, Aurora Gate, is heavily built around this principle.

For example, notes relating to projects or clients are editable directly inside Tape, but are also viewable and editable inside Aurora Gate. This allows them to be securely shared with external systems and users while still keeping Tape as the operational source of truth.


Editing a note inside Aurora Gate


The same note inside Tape


A bonus is Mobile

In this example, I can edit a note in Tape, mark it as public and immediately generate a share link. The public version updates almost instantly.
Making a note in Tape public

The Problem With Live API Reads

Tape has a very capable API and it is fast.

However, imagine a visitor opening a public note page.

If every request queried Tape directly, the application would need to:

  1. Query Tape
  2. Locate the record
  3. Validate that the record is public
  4. Transform the content for display
  5. Render the final page

That may sound perfectly reasonable, but this process happens on every request.

Now multiply that across:

  • Multiple records
  • Related applications
  • Complex views
  • External systems
  • Large numbers of users

Performance quickly becomes a problem.

When we are aiming for highly optimised web experiences, even relatively small delays become noticeable.


100% Lighthouse score

And that is for a relatively simple page.

What happens when you start building more complex interfaces pulling data from multiple applications and systems?


A complex Page

In Aurora Gate, pages like this still achieve extremely high performance scores.

That simply would not be possible if every piece of data required live API calls back to Tape during page rendering.

So How Do We Solve This?

Simply put:

We cheat.

We use Projection Tables.

A Projection Table is effectively a read-optimised copy of selected Tape data that stays synchronised in near real time.

If you come from a traditional software architecture background, these are essentially read models or projection views.

Instead of querying Tape directly for every page request, our applications query the Projection Tables instead.

This gives us:

  • Extremely fast reads
  • Predictable performance
  • Reduced API load
  • Better scalability
  • Easier aggregation across systems

The important point is this:

Tape is still the source of truth.

Projection Tables are only optimised read models.

All writes still happen in Tape.

Delta Node

As we built more systems, we realised we were repeatedly building similar synchronisation logic and duplicating API calls.

So we built a system to automate Projection Table provisioning and synchronisation.

We call it Delta Node.

Delta Node allows us to:

  • Create Projection Tables automatically
  • Keep them synchronised with Tape
  • Reuse the same projections across multiple systems
  • Minimise API usage
  • Provision infrastructure quickly

For example, Aurora Gate and our client portal both use the same client Projection Tables while presenting the data differently.

How Delta Node Works

Inside Delta Node you can:

  1. Select a Tape organisation
  2. Select a workspace
  3. Select an application
  4. Choose which fields should be included in the Projection Table

All of this metadata is pulled live from Tape via the API.


Application selection


Field selection

Once configured, pressing Provision Projection will:

  1. Create a new database table
  2. Create synchronisation endpoints
  3. Configure Tape webhooks
  4. Optionally backfill existing records
  5. Keep the Projection Table synchronised in real time


Webhook provisioning


Real-time synchronisation

Backfills and Scaling

Backfills are one of the areas where systems can go wrong very quickly.

Synchronising a handful of records is easy.

Synchronising thousands of records while staying within API limits is a very different problem.

Because of this, Delta Node offloads backfills into separate background workflows which process records safely and incrementally.

This keeps the system responsive while avoiding spikes in API usage.

A Small Bonus

Sharp-eyed readers may notice an additional webhook:

App Updated

The Tape team quietly added this at some point. Last time I checked it was not yet documented in the API documentation, but it is actually extremely useful when building synchronisation systems.

Final Thoughts

Projection Tables have fundamentally changed how we build on Tape.

They allow us to:

  • Keep Tape as the operational source of truth
  • Deliver extremely fast web experiences
  • Scale to more complex systems
  • Reduce API overhead
  • Share consistent data across multiple applications

The important mindset shift is this:

Tape is the operational layer.

Projection Tables are the delivery layer.

Or more simply:

Write to Tape. Read from Projection Tables.

2 Likes