Skip to content
Headless Platform
GitHubDiscordYouTube

SPA & Static Framework Guide

Introduction

This guide is meant to address deploying a SPA (single-page application) or any statically generated project on our Headless Platform. Some examples are Create React App or Eleventy, or even Astro in static mode.

Deploy Steps

Since there are many possible SPA or static site generators, you should follow the getting started guides relevant to your chosen tools.

Push Initial Commits to Your Repository

To deploy your project to our Headless Platform, it will need to be available on a remote GitHub, Bitbucket or GitLab repository.

Create a new remote repository, and then run the following commands to initalize and configure your local and remote repositories:

# Add remote repository
$ git remote add origin https://<your-git-provider>.com/<username>/<repo>

# Stage all changed files
$ git add -A

# Commit the files to the current branch
$ git commit -m "initial commit"

# Push changes to remote repository
$ git push -u origin main

Build Details

When our Headless Platform deploys your project, it will first run npm install followed by npm run build to build your application. Depending on your framework, this typically produces a directory of static assets like build or dist.

Since our Headless Platform is based on Node.js containers, it does not serve these static assets automatically.

Serving Static Assets

There are multiple ways to accomplish this step, so if you have a Node.js HTTP server you already like, chances are it will work fine on our Headless Platform. The following steps will show and example using Express.

To serve a SPA in a Node.js container we can install the express package and create a server.js file in the root of your project. Next, modify the npm run start command to run node server.js, which should start the express server.

SPA Config

The contents of server.js should look like this for a SPA that uses client-side routing. It will respond with index.html regardless of the path, allowing the client-side app to take over routing. This config is made specifically for a Create React App project:

const express = require('express');
const path = require('path');
const app = express();

app.use(express.static(path.join(__dirname, 'build')));

app.get('/*', function (req, res) {
  res.sendFile(path.join(__dirname, 'build', 'index.html'));
});

app.listen(8080);

Deploy Your Repository

Once your project is in your remote repository, you can follow the directions in our getting started guide to deploy your project to our Headless Platform.