Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
27 changes: 0 additions & 27 deletions .claude/launch.json

This file was deleted.

72 changes: 72 additions & 0 deletions .github/workflows/deploy.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
name: Deploy

# Builds with the Vercel CLI inside GitHub Actions and uploads the prebuilt output.
# A push to master deploys to production. Each pull request from this repository gets a preview.
# Needs three repository secrets: VERCEL_TOKEN, VERCEL_ORG_ID, VERCEL_PROJECT_ID.

on:
push:
branches: [master]
pull_request:
workflow_dispatch:

permissions:
contents: read

concurrency:
group: deploy-${{ github.ref }}
cancel-in-progress: ${{ github.event_name == 'pull_request' }}

env:
VERCEL_ORG_ID: ${{ secrets.VERCEL_ORG_ID }}
VERCEL_PROJECT_ID: ${{ secrets.VERCEL_PROJECT_ID }}
VERCEL_TOKEN: ${{ secrets.VERCEL_TOKEN }}
TARGET: ${{ github.event_name == 'pull_request' && 'preview' || 'production' }}
# Note: `cond && '' || x` always yields x in Actions, so the empty case must come last.
PROD_FLAG: ${{ github.event_name != 'pull_request' && '--prod' || '' }}

jobs:
deploy:
# Pull requests from forks cannot read secrets, so they are skipped rather than failing.
if: github.event_name != 'pull_request' || github.event.pull_request.head.repo.full_name == github.repository
runs-on: ubuntu-latest
timeout-minutes: 15
environment:
name: ${{ github.event_name == 'pull_request' && 'preview' || 'production' }}
url: ${{ steps.deploy.outputs.url }}
steps:
- name: Check secrets
run: |
for name in VERCEL_TOKEN VERCEL_ORG_ID VERCEL_PROJECT_ID; do
if [ -z "${!name}" ]; then echo "::error::Repository secret $name is not set"; exit 1; fi
done

- uses: actions/checkout@v7

- uses: actions/setup-node@v7
with:
node-version: 22

- name: Install the Vercel CLI
run: npm install --global vercel@63

- name: Pull project settings
run: vercel pull --yes --environment=$TARGET --token=$VERCEL_TOKEN

- name: Build
run: vercel build $PROD_FLAG --token=$VERCEL_TOKEN

# Vercel's Hobby plan blocks deployments whose Git commit author is not a member of the
# Vercel account (TEAM_ACCESS_REQUIRED). The CLI reads the author from .git, so remove it
# before uploading, and attach the commit as plain metadata instead.
- name: Strip Git metadata
run: rm -rf .git

- name: Deploy
id: deploy
run: |
out=$(vercel deploy --prebuilt $PROD_FLAG --meta commit=$GITHUB_SHA --meta ref=$GITHUB_REF_NAME --token=$VERCEL_TOKEN)
echo "$out"
url=$(echo "$out" | grep -oE 'https://[a-zA-Z0-9.-]+\.vercel\.app' | head -1)
echo "url=$url" >> "$GITHUB_OUTPUT"
echo "Deployed ($TARGET): $url" >> "$GITHUB_STEP_SUMMARY"
5 changes: 4 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -38,4 +38,7 @@ next-env.d.ts
.env*
.flaskenv*
!.env.project
!.env.vault.claude/
!.env.vault

# local Claude Code settings
.claude/
13 changes: 13 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -42,8 +42,21 @@ components/
three/
LiquidWord.jsx the hero shader
public/ the ring mark, the Sentient mark, favicon
.github/workflows/
deploy.yml CI/CD to Vercel
vercel.json turns off Vercel's own Git deploys
```

## Deploy

The site is hosted on Vercel under the Existence account. Deploys run from GitHub Actions with the Vercel CLI, not from Vercel's Git integration (`vercel.json` turns that off).

- A push to `master` deploys to production.
- Each pull request from this repository gets a preview deployment. Previews sit behind Vercel's login.
- The workflow is `.github/workflows/deploy.yml` and needs three repository secrets: `VERCEL_TOKEN`, `VERCEL_ORG_ID` and `VERCEL_PROJECT_ID`.

To deploy by hand from your machine, log in to the Existence Vercel account and run `vercel deploy --prod`.

## Contact

- GitHub: [github.com/existence-master](https://github.com/existence-master)
Expand Down
5 changes: 5 additions & 0 deletions vercel.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
{
"$schema": "https://openapi.vercel.sh/vercel.json",
"framework": "nextjs",
"git": { "deploymentEnabled": false }
}
Loading