From 6c9cfa5d39f6ce97ceb50ca14b7e10996dbe9926 Mon Sep 17 00:00:00 2001 From: CalderLund Date: Sat, 21 Feb 2026 11:09:46 -0800 Subject: [PATCH 1/3] feat: add deploy-prod Claude command for SSH deploy workflow Co-Authored-By: Claude Opus 4.6 --- .claude/commands/deploy-prod.md | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 .claude/commands/deploy-prod.md diff --git a/.claude/commands/deploy-prod.md b/.claude/commands/deploy-prod.md new file mode 100644 index 0000000..251308b --- /dev/null +++ b/.claude/commands/deploy-prod.md @@ -0,0 +1,31 @@ +# Deploy to Production + +Deploy the latest main branch to the production server. + +## Server + +- **SSH**: `ssh root@167.235.133.87` +- **App directory**: `/opt/pseuno` + +## Steps + +1. SSH into the server +2. Pull the latest code from main +3. Rebuild and restart containers +4. Verify the deploy succeeded + +Run these commands over SSH: + +```bash +ssh root@167.235.133.87 "cd /opt/pseuno && git pull && docker compose -f docker-compose.prod.yml up -d --build && docker compose -f docker-compose.prod.yml ps && sleep 5 && curl -s localhost:8000/health" +``` + +If only the backend changed, you can rebuild just that service: +```bash +ssh root@167.235.133.87 "cd /opt/pseuno && git pull && docker compose -f docker-compose.prod.yml up -d --build backend && sleep 5 && curl -s localhost:8000/health" +``` + +If only the frontend changed, rebuild just frontend: +```bash +ssh root@167.235.133.87 "cd /opt/pseuno && git pull && docker compose -f docker-compose.prod.yml up -d --build frontend" +``` From 8d21678139b96abb1d30daa590fd6beb805d13ea Mon Sep 17 00:00:00 2001 From: CalderLund Date: Sat, 21 Feb 2026 11:14:44 -0800 Subject: [PATCH 2/3] fix: rebuild apple-touch-icon from scratch to remove rounded-rect halo Previous flood-fill approach left anti-aliased artifacts from the old rounded-rect edge. This version extracts the logo via hard-thresholded alpha, applies a slight blur for smooth edges, and composites onto a clean solid purple background. Co-Authored-By: Claude Opus 4.6 --- frontend/public/apple-touch-icon.png | Bin 6568 -> 9021 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/frontend/public/apple-touch-icon.png b/frontend/public/apple-touch-icon.png index 05d689054afbf453bf08f8bec24cec5dcce0fe31..0f1640faade525207fea9ecae5f38c62a0679fa0 100644 GIT binary patch literal 9021 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 S6H9|_05TGa;+3LC!T$@C3*V&x literal 6568 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 Date: Sat, 21 Feb 2026 11:21:43 -0800 Subject: [PATCH 3/3] fix: add sizes attribute to apple-touch-icon link Apple recommends specifying sizes="180x180" to help iOS select the correct icon and avoid caching issues. Co-Authored-By: Claude Opus 4.6 --- frontend/index.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/frontend/index.html b/frontend/index.html index 57a02e3..edd9d55 100644 --- a/frontend/index.html +++ b/frontend/index.html @@ -3,7 +3,7 @@ - + Pseuno AI - Personalized Music Prompts