Skip to content

Commit 3574388

Browse files
JoeMattclaude
andcommitted
fix: replace all icube-app.com references with icube-emu.com (correct domain)
Updates all hardcoded domain references across pages, API routes, workflows, sitemap, robots.txt, and CSP/metadata to use the actual production domain. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
1 parent d88a072 commit 3574388

File tree

16 files changed

+38
-38
lines changed

16 files changed

+38
-38
lines changed

.github/workflows/claude-auto-pr.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,7 @@ jobs:
4848
4949
## Test plan
5050
- [ ] `npm run build` succeeds (static export)
51-
- [ ] Site renders correctly at https://icube-app.com
51+
- [ ] Site renders correctly at https://icube-emu.com
5252
5353
🤖 Auto-created by the Claude Auto PR workflow
5454
run: |

.github/workflows/deploy.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ jobs:
4141
- name: Build with Next.js
4242
run: npm run build
4343
env:
44-
NEXT_PUBLIC_BASE_URL: https://icube-app.com
44+
NEXT_PUBLIC_BASE_URL: https://icube-emu.com
4545

4646
- name: Write build SHA
4747
run: echo "${{ github.sha }}" > ./out/build-sha.txt

.github/workflows/site-audit.yml

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -146,9 +146,9 @@ jobs:
146146
if: github.event_name == 'push'
147147
run: |
148148
EXPECTED="${{ github.sha }}"
149-
echo "Polling https://icube-app.com/build-sha.txt for commit $EXPECTED"
149+
echo "Polling https://icube-emu.com/build-sha.txt for commit $EXPECTED"
150150
for i in $(seq 1 30); do
151-
LIVE=$(curl -sf https://icube-app.com/build-sha.txt 2>/dev/null | tr -d '[:space:]' || echo "")
151+
LIVE=$(curl -sf https://icube-emu.com/build-sha.txt 2>/dev/null | tr -d '[:space:]' || echo "")
152152
if [ "$LIVE" = "$EXPECTED" ]; then
153153
echo "✅ CDN is serving commit $EXPECTED (attempt $i)"
154154
exit 0
@@ -164,9 +164,9 @@ jobs:
164164
uses: treosh/lighthouse-ci-action@v12
165165
with:
166166
urls: |
167-
https://icube-app.com
168-
https://icube-app.com/features/
169-
https://icube-app.com/downloads/
167+
https://icube-emu.com
168+
https://icube-emu.com/features/
169+
https://icube-emu.com/downloads/
170170
configPath: .lighthouserc.yml
171171
temporaryPublicStorage: true
172172

@@ -181,7 +181,7 @@ jobs:
181181
REPORT=""
182182
for f in $(find "$SEARCH_DIR" -maxdepth 6 -name "lhr-*.json" 2>/dev/null); do
183183
URL_IN_LHR=$(jq -r '.requestedUrl // .finalUrl // ""' "$f" 2>/dev/null)
184-
if [[ "$URL_IN_LHR" == "https://icube-app.com" || "$URL_IN_LHR" == "https://icube-app.com/" ]]; then
184+
if [[ "$URL_IN_LHR" == "https://icube-emu.com" || "$URL_IN_LHR" == "https://icube-emu.com/" ]]; then
185185
REPORT="$f"
186186
break
187187
fi
@@ -213,7 +213,7 @@ jobs:
213213
try:
214214
d = json.loads(sys.stdin.read())
215215
for key in d:
216-
if key.rstrip('/') == 'https://icube-app.com':
216+
if key.rstrip('/') == 'https://icube-emu.com':
217217
print(d[key]); sys.exit(0)
218218
print(list(d.values())[0] if d else '')
219219
except: print('')
@@ -254,7 +254,7 @@ jobs:
254254
- name: Mozilla Observatory
255255
id: observatory
256256
run: |
257-
RESULT=$(curl -s -X POST "https://observatory-api.mdn.mozilla.net/api/v2/scan?host=icube-app.com")
257+
RESULT=$(curl -s -X POST "https://observatory-api.mdn.mozilla.net/api/v2/scan?host=icube-emu.com")
258258
GRADE=$(echo "$RESULT" | python3 -c "import json,sys; d=json.load(sys.stdin); print(d.get('grade','N/A'))" 2>/dev/null || echo "N/A")
259259
SCORE=$(echo "$RESULT" | python3 -c "import json,sys; d=json.load(sys.stdin); print(int(d.get('score',0)))" 2>/dev/null || echo "0")
260260
echo "grade=$GRADE" >> $GITHUB_OUTPUT
@@ -264,11 +264,11 @@ jobs:
264264
- name: SSL Labs
265265
id: ssl
266266
run: |
267-
curl -s "https://api.ssllabs.com/api/v3/analyze?host=icube-app.com&startNew=on&publish=off" > /dev/null
267+
curl -s "https://api.ssllabs.com/api/v3/analyze?host=icube-emu.com&startNew=on&publish=off" > /dev/null
268268
GRADE="N/A"
269269
for i in {1..15}; do
270270
sleep 20
271-
RESULT=$(curl -s "https://api.ssllabs.com/api/v3/analyze?host=icube-app.com&publish=off")
271+
RESULT=$(curl -s "https://api.ssllabs.com/api/v3/analyze?host=icube-emu.com&publish=off")
272272
STATUS=$(echo "$RESULT" | python3 -c "import json,sys; d=json.load(sys.stdin); print(d.get('status',''))" 2>/dev/null || echo "")
273273
echo "SSL Labs status: $STATUS (attempt $i)"
274274
if [ "$STATUS" = "READY" ]; then
@@ -477,7 +477,7 @@ jobs:
477477
body: [
478478
'## SSL/TLS Grade Below A',
479479
`Current SSL Labs grade: **${str('SSL_GRADE')}**`,
480-
'[View the full SSL Labs report](https://www.ssllabs.com/ssltest/analyze.html?d=icube-app.com)',
480+
'[View the full SSL Labs report](https://www.ssllabs.com/ssltest/analyze.html?d=icube-emu.com)',
481481
'**Common fixes:**\n- Disable TLS 1.0 / 1.1\n- Add an HSTS header (`Strict-Transport-Security`)\n- Resolve certificate chain issues',
482482
`_Auto-opened by [Site Audit](${runUrl})_`,
483483
].join('\n\n'),
@@ -491,12 +491,12 @@ jobs:
491491
body: [
492492
'## Mozilla Observatory Score Below Grade C',
493493
`Current grade: **${str('OBS_GRADE')}** (${num('OBS_SCORE')}/100)`,
494-
'[View the full Observatory report](https://observatory.mozilla.org/analyze/icube-app.com)',
494+
'[View the full Observatory report](https://observatory.mozilla.org/analyze/icube-emu.com)',
495495
'**Fixable via `<meta>` tag (implemented in `src/app/layout.tsx`):**\n- Content Security Policy\n- Referrer-Policy',
496496
'**Requires HTTP headers (not possible on GitHub Pages without Cloudflare):**\n- `Strict-Transport-Security` (HSTS)\n- `X-Frame-Options`\n- `X-Content-Type-Options`',
497497
`_Auto-opened by [Site Audit](${runUrl})_`,
498498
'> **⚠️ GitHub Pages limitation:** HSTS (`Strict-Transport-Security`) and `X-Frame-Options` require HTTP response headers which GitHub Pages cannot set. The maximum achievable score on GitHub Pages is ~55/100 (grade C). To reach A/B, route traffic through Cloudflare (free plan) and add headers via a Cloudflare Transform Rule.',
499-
`@claude Please check the current Observatory score and investigate what can still be improved. Some headers can be set via \`<meta>\` tags (CSP, referrer-policy). Check \`src/app/layout.tsx\` for the existing CSP meta tag and update it if needed.\n\n**Steps:**\n1. Review [the report](https://observatory.mozilla.org/analyze/icube-app.com) — identify any remaining fixable issues\n2. Create a working branch: \`git checkout -b claude/fix-security-headers\`\n3. Update the CSP in \`src/app/layout.tsx\` if any issues are fixable via meta tag\n4. Push and create a PR: \`git push -u origin HEAD && gh pr create --title "fix: improve security headers" --base main\`\n5. Enable auto-merge: \`gh pr merge --auto --squash\``,
499+
`@claude Please check the current Observatory score and investigate what can still be improved. Some headers can be set via \`<meta>\` tags (CSP, referrer-policy). Check \`src/app/layout.tsx\` for the existing CSP meta tag and update it if needed.\n\n**Steps:**\n1. Review [the report](https://observatory.mozilla.org/analyze/icube-emu.com) — identify any remaining fixable issues\n2. Create a working branch: \`git checkout -b claude/fix-security-headers\`\n3. Update the CSP in \`src/app/layout.tsx\` if any issues are fixable via meta tag\n4. Push and create a PR: \`git push -u origin HEAD && gh pr create --title "fix: improve security headers" --base main\`\n5. Enable auto-merge: \`gh pr merge --auto --squash\``,
500500
].join('\n\n'),
501501
},
502502
];

src/app/about/page.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import SocialButton, { DiscordIcon, XIcon, BmcIcon, PatreonIcon } from '@/compon
55
export const metadata: Metadata = {
66
title: 'About',
77
description: 'Learn about iCube, a GameCube and Wii emulator for iOS and tvOS built on the Dolphin core. Supports iPhone, iPad, and Apple TV.',
8-
alternates: { canonical: 'https://icube-app.com/about/' },
8+
alternates: { canonical: 'https://icube-emu.com/about/' },
99
};
1010

1111
export default function About() {

src/app/api/altstore/route.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ export const revalidate = 3600; // Revalidate every hour
1111
*/
1212
export async function GET() {
1313
try {
14-
const baseURL = process.env.NEXT_PUBLIC_BASE_URL || 'https://icube-app.com';
14+
const baseURL = process.env.NEXT_PUBLIC_BASE_URL || 'https://icube-emu.com';
1515
const buildsDir = path.join(process.cwd(), 'public', 'builds');
1616

1717
const app = generateAltStoreApp(baseURL, buildsDir);
@@ -27,7 +27,7 @@ export async function GET() {
2727
description: 'Official source for iCube - GameCube and Wii emulator for iOS and tvOS.',
2828
iconURL: `${baseURL}/icon-1024.png`,
2929
headerURL: `${baseURL}/header.png`,
30-
website: 'https://icube-app.com',
30+
website: 'https://icube-emu.com',
3131
tintColor: '#3B82F6',
3232
featuredApps: [app.bundleIdentifier],
3333
apps: [app],
@@ -40,7 +40,7 @@ export async function GET() {
4040
tintColor: '#3B82F6',
4141
imageURL: `${baseURL}/news-welcome.png`,
4242
notify: false,
43-
url: 'https://icube-app.com',
43+
url: 'https://icube-emu.com',
4444
},
4545
],
4646
};

src/app/api/sidestore/route.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ export const revalidate = 3600; // Revalidate every hour
1111
*/
1212
export async function GET() {
1313
try {
14-
const baseURL = process.env.NEXT_PUBLIC_BASE_URL || 'https://icube-app.com';
14+
const baseURL = process.env.NEXT_PUBLIC_BASE_URL || 'https://icube-emu.com';
1515
const buildsDir = path.join(process.cwd(), 'public', 'builds');
1616

1717
const app = generateAltStoreApp(baseURL, buildsDir);
@@ -27,7 +27,7 @@ export async function GET() {
2727
description: 'Official source for iCube - GameCube and Wii emulator for iOS and tvOS.',
2828
iconURL: `${baseURL}/icon-1024.png`,
2929
headerURL: `${baseURL}/header.png`,
30-
website: 'https://icube-app.com',
30+
website: 'https://icube-emu.com',
3131
tintColor: '#3B82F6',
3232
featuredApps: [app.bundleIdentifier],
3333
apps: [app],
@@ -40,7 +40,7 @@ export async function GET() {
4040
tintColor: '#3B82F6',
4141
imageURL: `${baseURL}/news-welcome.png`,
4242
notify: false,
43-
url: 'https://icube-app.com',
43+
url: 'https://icube-emu.com',
4444
},
4545
],
4646
};

src/app/donate/page.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import SocialButton, { BmcIcon, PatreonIcon, VenmoIcon, ZelleIcon, OpenCollectiv
44
export const metadata: Metadata = {
55
title: 'Support Development',
66
description: 'Support iCube development via Buy Me a Coffee, Patreon, Venmo, Zelle, or Open Collective. Every contribution helps keep iCube going.',
7-
alternates: { canonical: 'https://icube-app.com/donate/' },
7+
alternates: { canonical: 'https://icube-emu.com/donate/' },
88
};
99

1010
export default function DonatePage() {

src/app/downloads/page.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import { parseBuilds } from '@/lib/buildParser';
44
export const metadata: Metadata = {
55
title: 'Downloads',
66
description: 'Download the latest iCube IPA for iOS and tvOS. Add the AltStore or SideStore source for easy installation and automatic updates.',
7-
alternates: { canonical: 'https://icube-app.com/downloads/' },
7+
alternates: { canonical: 'https://icube-emu.com/downloads/' },
88
};
99
import path from 'path';
1010
import Link from 'next/link';
@@ -13,7 +13,7 @@ export const dynamic = 'force-static';
1313
export const revalidate = 3600;
1414

1515
export default function DownloadsPage() {
16-
const baseURL = process.env.NEXT_PUBLIC_BASE_URL || 'https://icube-app.com';
16+
const baseURL = process.env.NEXT_PUBLIC_BASE_URL || 'https://icube-emu.com';
1717
const buildsDir = path.join(process.cwd(), 'public', 'builds');
1818
const versions = parseBuilds(buildsDir, baseURL);
1919

src/app/features/page.tsx

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import Features from '@/components/Features';
44
export const metadata: Metadata = {
55
title: 'Features',
66
description: 'Explore iCube features: Dolphin-based emulation, MFi controller support, save states, tvOS big-screen gaming, and iOS-specific performance enhancements.',
7-
alternates: { canonical: 'https://icube-app.com/features/' },
7+
alternates: { canonical: 'https://icube-emu.com/features/' },
88
};
99
import Link from 'next/link';
1010
import SocialButton, { DiscordIcon, XIcon } from '@/components/SocialButton';

src/app/layout.tsx

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ import GoogleAnalytics from "@/components/GoogleAnalytics";
77
const GA_ID = "G-R9V4MJ0BR2";
88

99
export const metadata: Metadata = {
10-
metadataBase: new URL("https://icube-app.com"),
10+
metadataBase: new URL("https://icube-emu.com"),
1111
title: {
1212
default: "iCube – GameCube & Wii Emulator for iOS & tvOS",
1313
template: "%s | iCube",
@@ -33,7 +33,7 @@ export const metadata: Metadata = {
3333
title: "iCube – GameCube & Wii Emulator for iOS & tvOS",
3434
description:
3535
"Play classic Nintendo GameCube and Wii games on your iPhone, iPad, and Apple TV. Fast, accurate emulation based on Dolphin with controller support and save states.",
36-
url: "https://icube-app.com",
36+
url: "https://icube-emu.com",
3737
images: [
3838
{
3939
url: "/header.png",
@@ -79,7 +79,7 @@ export const metadata: Metadata = {
7979

8080
// CSP — sets the policy via <meta> since GitHub Pages doesn't support custom HTTP headers.
8181
// HSTS and X-Frame-Options still require HTTP headers and must be set at the CDN layer
82-
// (e.g. Cloudflare). See: https://observatory.mozilla.org/analyze/icube-app.com
82+
// (e.g. Cloudflare). See: https://observatory.mozilla.org/analyze/icube-emu.com
8383
//
8484
// 'unsafe-inline' is required for script-src because Next.js App Router embeds inline
8585
// <script> tags for React Server Component hydration (self.__next_f.push). Without it,
@@ -108,8 +108,8 @@ const jsonLd = {
108108
operatingSystem: "iOS 16+, tvOS 16+",
109109
description:
110110
"A GameCube and Wii emulator for iOS and tvOS based on Dolphin. Play classic Nintendo games on your iPhone, iPad, and Apple TV.",
111-
url: "https://icube-app.com",
112-
image: "https://icube-app.com/icon-1024.png",
111+
url: "https://icube-emu.com",
112+
image: "https://icube-emu.com/icon-1024.png",
113113
author: {
114114
"@type": "Organization",
115115
name: "Provenance Emu",

0 commit comments

Comments
 (0)