Skip to content

mattdennewitz/synthtime

Repository files navigation

synthtime

Turborepo monorepo containing three musical web apps, deployed as static sites behind Nginx on Dokku.

App Path Description
game-of-life /life/ Musical cellular automaton
two-strike-approach /2sa/ Polyrhythmic pattern sequencer
in-tempo /tempo/ Minimalist ensemble performance

Structure

apps/
  game-of-life/         React + Vite app
  two-strike-approach/  React + Vite app
  in-tempo/             React + Vite app
packages/
  ui/                   Shared shadcn/ui components (source-only, no build step)
  tsconfig/             Shared TypeScript configs
  eslint-config-custom/ Shared ESLint flat config

Development

npm install
npm run dev                        # all apps
npx turbo dev --filter=game-of-life  # single app

Build

npm run build       # turbo build — produces dist/ in each app
npm run deploy-prep # build + assemble public/ directory

deploy-prep runs scripts/deploy-prep.sh, which:

  1. Runs turbo build (Vite builds each app to apps/<name>/dist/)
  2. Copies each app's dist/ into public/life/, public/2sa/, public/tempo/
  3. Generates a landing page at public/index.html

The result is a flat public/ directory of static files ready to serve.

Deploy

Deployment targets Dokku with two buildpacks (configured in .buildpacks):

  1. heroku-buildpack-nodejs — installs dependencies, runs heroku-postbuild (which calls deploy-prep.sh)
  2. heroku-buildpack-nginx — serves public/ as static files
git push dokku main

Nginx routing is configured in app-nginx.conf.sigil with try_files fallback for SPA support on each subpath.

Other commands

npm test    # vitest across apps
npm run lint
make clean  # remove node_modules, dist, .turbo, public

About

Novel MIDI tools based on minimalist performance techniques

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages