Skip to content
Technology leadership · Enterprise architecture · Commercialization Founder-led · Majority woman-owned

The paved road

What you don’t have to build.

Every business runs on the same four outer layers. Here’s how they usually get built, and what’s already here.

  1. Edge · Surface

    Everyone you serve can reach what they came for.

    Usually built from scratch

    A website from one agency, customer pages from another and partner connections from a contractor, each with its own look, login and copy of the data.

    Already built

    Pages built on the server from shared components, so everything you put in front of customers loads quickly and reads clearly on any device, and to the search and AI tools that read for your buyers.

  2. Edge · Runtime

    No order, request or record is lost or counted twice.

    Usually built from scratch

    Integrations written one at a time. Orders get doubled, uploads go missing and partner feeds fail quietly, and you hear about it from a customer.

    Already built

    Every request is signed, recorded before anything else happens and handled once. Large files are saved as they arrive and checked when they finish, and messages to your other systems go out in a registered format, only where you approved.

    boilerplate-jvm reqreply kafka · twilio adapters
  3. Rules · Build

    A small change can’t quietly break the business.

    Usually built from scratch

    Business rules that live in a few people’s heads, releases saved for a quiet weekend, and a vendor change that means starting over.

    Already built

    Your core is kept apart from everything around it, so a channel, a vendor or a cloud can change without rewriting the business. Your rules are written as plain-language tests that gate every release, and a release that fails a check doesn’t go out.

    magicroot-sbt CI versioning & publish acceptance gate
  4. Outside · Ship & run

    It runs in your name, and what you tell customers and auditors holds up.

    Usually built from scratch

    Servers in someone else’s account, settings nobody wrote down, and a scramble every time a security questionnaire or an audit arrives.

    Already built

    Infrastructure, networks, DNS, email and identity live as reviewed code in accounts you own, on Google Cloud or AWS, with the history to answer questionnaires and audits and to rebuild an environment when you need to.

What’s left to build: your core.

The part that makes your business different: your products, your rules, the way you serve customers. It’s the only part that should start from scratch. On this site the core is small: how we take in and answer inquiries.

Tell us what yours is

How we build

Every system we build has the same shape.

From a website to a platform with many services and data pipelines, the work lands in the same set of repositories, in your accounts. It starts with the map.

your-enterprise-architecture

The map comes first.

Every engagement gets an architecture repository: your north star, the constraints everyone agreed to, the principles behind each choice, what must be possible and how it’s structured, with every decision on record.

Plain Markdown, versioned like code, and published where your team, your auditors and your AI tools can read it.

  • your-schemasTyped contracts every service agrees on, versioned so a change never breaks what reads it.
  • your-acceptancePlain-language tests for every service, run before each deploy.
  • your-infrastructureClouds, networks, DNS, email and identity as reviewed code, for each environment.
  • your-…-serverYour core services, each with one clear job, built on the outer layers.
  • your-siteYour website on the Paste Stack, like this one.

From a contact form to a data platform, the rules don’t change: recorded first, handled once, and nothing dropped without a word.

How this site is built

This site runs on it.

Tested in plain language, honest when something fails, and released only when every check passes, here and in client systems that answer to auditors. Three things you can check for yourself.

Rules · Acceptance gate

Tests the business can read.

Written before the code, in words anyone can check, including what happens when something goes wrong. They run in real browsers on desktop and mobile, and nothing deploys until they pass.

contact.featureGherkin
Feature: Contact requests
  Every request is answered once, and every failure is told plainly.

  Scenario: A visitor sends a request
    Given the contact page is open
    When they send their name, company, email, phone and need
    Then they read "Tomshley has your request and will be in touch."
    And exactly one request is recorded

  Scenario: The send fails, and the visitor is told plainly
    Given the contact service is unreachable
    When they send the contact form
    Then they read that their request could not be confirmed
    And everything they typed is still in the form
    And no request is recorded or sent

Edge · Runtime

A form with eight honest answers.

  • Ready200
  • Field errors400
  • Sendingin flight
  • Couldn’t confirm503
  • Form expired400
  • Already sending409
  • Server error5xx
  • Received200

Most forms have two outcomes: sent, or an error nobody wrote. Ours answers every case plainly, including the ones where it can’t be sure, and never records a request twice.

Try the contact form

Outside · Ship & run

Releases that check themselves.

  • The release tag matches the version in the code.
  • Each package and container image matches its release.
  • The acceptance run passed on desktop and mobile.

If any check fails, nothing publishes. Every release leaves a record of what changed and when.

Yours to keep

No lock-in, by design.

The usual worry with anything custom is being stuck with it. Here’s why you won’t be.

Mainstream underneath.

Pekko, Kafka, PostgreSQL, Kubernetes, Terraform and OpenTofu, on Google Cloud or AWS, through GitLab or Bitbucket. Any experienced team can run it.

Thin and replaceable.

Each Tomshley layer is a library or a template. Lift one out and replace it, and your core doesn’t change.

In your accounts.

Your copy lives in your repositories and your cloud accounts, in your name.

Open source.

Everything around your core is open source under the Apache 2.0 license, with no license fee. Use it, change it and run it in your own accounts.

Every open-source repository

On GitHub: PasteStack · Tomshley · Apache 2.0

  • paste-surface-scalaServer-built pages: Twirl layouts and shared components, served with Pekko HTTP.Scala
  • paste-surface-specThe contract every page renderer follows, written as plain-language tests.Gherkin
  • paste-elementsInterface components: sticky navigation, scroll spy, forms that send in the background.JavaScript · SCSS
  • paste-assetgraphBuilds asset bundles and a manifest, so each page asks only for what it uses.Rust
  • pasteThe dependency-free JavaScript toolkit underneath, first written in 2011.JavaScript
  • boilerplate-jvmHexagonal building blocks for JVM services, including reqreply and the kafka and twilio adapters.Scala
  • magicroot-sbtBuild plugins that keep the core apart from the outer layers.sbt
  • cicd-pipelinesCI templates, runner images and release checks for GitLab and Bitbucket.CI
  • base-containersSmall, layered Alpine images for pipelines and services.Containers
  • workload-templates-k8sKubernetes templates for services and workers.Kubernetes
  • root-modules-tfTerraform and OpenTofu modules for the edge, clusters, networks and data.Terraform

Contributing

Opinionated, and open to good changes.

Each repository says what it’s for and what’s out of scope. Bug fixes, security, accessibility and documentation improvements are especially welcome.

  1. Open an issue that describes the change.
  2. Fork the repository.
  3. Send a focused pull request with clean, scoped commits.
  4. Found a vulnerability? Report it privately, as the security policy describes, never in a public issue.

Want this foundation under your product?

Your core is the only part that should start from scratch. Tell us what it is, and we’ll tell you plainly whether we’re the right people to help.

Tell us where you’re stuck or write to [email protected]