Each subdirectory corresponds to a different website:
website– My website, including a portfolio (Jekyll, not part of the pnpm workspace)boobtree– Pass the Pic / boobtree.comcombinators– Untitled combinators gamecrosswords– Crosswords appknight-spiral– knight-spiral.joeym.orglok-solver– lok-solver.joeym.orgquickerpass– Something I'm trying for blood donationswordsearch– wordsearch.joeym.org
From the repo root, pnpm install sets up every project except website, which
is a separate Ruby/Jekyll site:
cd website
gem install bundler
bundle install
| project | command |
|---|---|
| website | cd website && bundle exec jekyll serve |
| boobtree | cd boobtree && pnpm dev |
| combinators | cd combinators && pnpm start |
| crosswords | cd crosswords && pnpm start |
| knight-spiral | cd knight-spiral && pnpm start |
| lok-solver | cd lok-solver && pnpm start |
| quickerpass | cd quickerpass && pnpm dev |
| wordsearch | cd wordsearch && pnpm start |
boobtree builds two brands from one codebase and can serve them separately:
pnpm dev-boobtree / pnpm dev-passthepic. Add -- --host 192.xxx.xxx.xxx to
any dev/start command to serve on the local network.
Run from the repo root, these fan out across every pnpm workspace project:
pnpm build– build everythingpnpm lint– lint everythingpnpm test– run tests where definedpnpm check– run svelte-check where defined
scripts/deploy.sh builds and deploys to GCS, then invalidates the shared CDN
cache (see terraform/gcp.tf). With no arguments it deploys everything; pass
one or more project names to deploy only those:
scripts/deploy.sh # deploy everything
scripts/deploy.sh boobtree # deploy just boobtree
scripts/deploy.sh wordsearch lok-solver # deploy a couple
database.rules.json at the repo root holds the security rules for the
Realtime Database shared by crosswords, boobtree, and passthepic. It is
symlinked into crosswords/ and boobtree/ so each project's emulator
(and therefore pnpm test:e2e) enforces the same rules as production.
Production rules deploy through Terraform (terraform/firebase.tf), which
pushes the file whenever its hash changes.