feat: Rebrand from CS2.WTF to teamflash.rip with full pun mode

Complete site rebrand with flash-themed humor throughout:

- Update logo to "team" + "flash.rip" two-color design
- Add flash-themed error pages (404 = "You've Been Full-Blind")
- Revamp homepage hero with "Stop Flashing Your Teammates" tagline
- Update flash statistics page with playful labels ("Friendly Crimes", "Self-Inflicted L")
- Add loading messages store with flash-themed text
- Update all page meta titles and descriptions
- Update sitemap.xml and robots.txt with new domain
- Update package.json name and description

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
2025-12-07 15:30:41 +01:00
parent 49033560fa
commit 3383302225
25 changed files with 208 additions and 112 deletions

View File

@@ -1,7 +1,7 @@
{
"name": "cs2wtf",
"name": "teamflash-rip",
"version": "2.0.0",
"description": "Statistics for CS2 matchmaking matches",
"description": "Stop flashing your teammates. CS2 match statistics and analysis.",
"private": true,
"type": "module",
"scripts": {

View File

@@ -34,10 +34,10 @@
<!-- Brand -->
<div class="md:col-span-1">
<a href="/" class="mb-4 inline-block text-2xl font-bold">
<span class="text-primary">CS2</span><span class="text-secondary">.WTF</span>
<span class="text-primary">team</span><span class="text-secondary">flash.rip</span>
</a>
<p class="mb-4 text-sm text-base-content/60">
Statistics for CS2 matchmaking matches. Free and open source.
Stop flashing your teammates. Free and open source.
</p>
<div class="flex gap-3">
<a
@@ -121,11 +121,11 @@
<!-- Bottom -->
<div class="mt-12 border-t border-base-300 pt-8 text-center text-sm text-base-content/60">
<p>
© {currentYear} CSGOW.TF Team. Licensed under
© {currentYear} teamflash.rip Team. Licensed under
<a href="/license" class="hover:text-primary">GPL-3.0</a>
</p>
<p class="mt-2">
Made with <Heart class="inline h-4 w-4 text-error" /> by the community, for the community.
Made with <Heart class="inline h-4 w-4 text-error" /> by players who are tired of being flashed.
</p>
</div>
</div>

View File

@@ -17,9 +17,9 @@
<div class="container mx-auto px-4">
<div class="flex h-16 items-center justify-between">
<!-- Logo -->
<a href="/" class="transition-transform hover:scale-105" aria-label="CS2.WTF Home">
<a href="/" class="transition-transform hover:scale-105" aria-label="teamflash.rip Home">
<h1 class="text-2xl font-bold">
<span class="text-primary">CS2</span><span class="text-secondary">.WTF</span>
<span class="text-primary">team</span><span class="text-secondary">flash.rip</span>
</h1>
</a>

View File

@@ -0,0 +1,37 @@
/**
* Collection of flash-themed loading messages for the UI
* Because waiting shouldn't be boring when you're exposing flash criminals
*/
export const flashLoadingMessages = [
'Looking through the white screen...',
'Waiting for vision to return...',
'Parsing flashbang trajectories...',
'Counting team flashes (this might take a while)...',
'Reviewing the tape for flash crimes...',
'Loading the wall of shame...',
'Calculating flash guilt percentages...',
'Scanning for pop flash perpetrators...',
'Analyzing who ruined the retake...',
'Determining flash assist eligibility...',
'Cross-referencing teammate blind reports...',
'Compiling evidence for the post-game argument...'
];
/**
* Get a random flash-themed loading message
*/
export function getRandomLoadingMessage(): string {
const index = Math.floor(Math.random() * flashLoadingMessages.length);
return flashLoadingMessages[index] as string;
}
/**
* Flash-themed error messages for various scenarios
*/
export const flashErrorMessages = {
networkError: "Connection got flashed. Can't see the server right now.",
timeout: 'Request timed out. Server is still rubbing its eyes.',
notFound: "Data got pop-flashed out of existence. We can't find it.",
serverError: 'Server caught a flashbang to the face. Please wait.',
parseError: 'Failed to parse the data. Too many flashes, not enough pixels.'
};

View File

@@ -2,47 +2,78 @@
import { page } from '$app/stores';
import Button from '$lib/components/ui/Button.svelte';
import Card from '$lib/components/ui/Card.svelte';
import { Home, ArrowLeft } from 'lucide-svelte';
import { Home, ArrowLeft, Zap } from 'lucide-svelte';
// Get error information
const error = $page.error;
const status = $page.status;
// Determine error message
// Flash-themed error messages
const getErrorMessage = (status: number): string => {
switch (status) {
case 404:
return "We couldn't find the page you're looking for.";
return "This page got pop-flashed out of existence. Even we can't see it.";
case 500:
return 'Something went wrong on our end. Please try again later.';
return "The server got flashbanged. It's currently rubbing its eyes. Please wait.";
case 503:
return 'Service temporarily unavailable. Please check back soon.';
return 'Service temporarily blinded. Someone threw a flash into the server room.';
case 400:
return 'Bad request? More like bad flash lineup. Try again.';
case 401:
return "You need to authenticate. Unlike flashes, you can't just walk through this.";
case 403:
return 'Forbidden. This area is as off-limits as throwing flashes at your own spawn.';
default:
return 'An unexpected error occurred.';
return 'Something went white. Very white. Flash-in-the-face white.';
}
};
const getErrorTitle = (status: number): string => {
switch (status) {
case 404:
return 'Page Not Found';
return "You've Been Full-Blind";
case 500:
return 'Internal Server Error';
return 'Server Got Flashbanged';
case 503:
return 'Service Unavailable';
return 'Temporarily Blinded';
case 400:
return 'Bad Flash Lineup';
case 401:
return 'Flash Authentication Required';
case 403:
return 'Flash Access Denied';
default:
return 'Error';
return 'Unexpected Flash';
}
};
// Rotating flash puns for extra fun
const flashPuns = [
"At least this error didn't team flash you.",
"Error logging: You've been added to the wall of shame.",
'Did you try turning off the flashbang and turning it back on?',
'This error is brighter than your flash lineups.',
'404: Your aim, also not found.',
"The page didn't peek, but got flashed anyway.",
'Server.exe has stopped responding to flash inputs.',
'Have you considered not running into your own flashes?'
];
const randomPun = flashPuns[Math.floor(Math.random() * flashPuns.length)];
</script>
<svelte:head>
<title>{status} - {getErrorTitle(status)} | CS2.WTF</title>
<title>{status} - {getErrorTitle(status)} | teamflash.rip</title>
</svelte:head>
<div class="container mx-auto flex min-h-[60vh] items-center justify-center px-4 py-16">
<Card padding="lg" class="w-full max-w-2xl">
<div class="text-center">
<!-- Flash Icon -->
<div class="mb-4 flex justify-center">
<Zap class="h-16 w-16 animate-pulse text-warning" />
</div>
<!-- Error Code -->
<div class="mb-4 text-8xl font-bold text-primary">
{status}
@@ -54,15 +85,20 @@
</h1>
<!-- Error Message -->
<p class="mb-8 text-lg text-base-content/70">
<p class="mb-4 text-lg text-base-content/70">
{getErrorMessage(status)}
</p>
<!-- Random Flash Pun -->
<p class="mb-8 text-sm italic text-base-content/50">
"{randomPun}"
</p>
<!-- Debug Info (only in development) -->
{#if import.meta.env?.DEV && error}
<div class="mb-8 rounded-lg bg-base-300 p-4 text-left">
<p class="mb-2 font-mono text-sm text-error">
<strong>Debug Info:</strong>
<strong>Flash Report (Debug):</strong>
</p>
<pre class="overflow-x-auto text-xs text-base-content/80">{JSON.stringify(
error,
@@ -76,21 +112,22 @@
<div class="flex flex-col justify-center gap-4 sm:flex-row">
<Button variant="secondary" href="javascript:history.back()">
<ArrowLeft class="mr-2 h-5 w-5" />
Go Back
Peek Again
</Button>
<Button variant="primary" href="/">
<Home class="mr-2 h-5 w-5" />
Go Home
Return to Spawn
</Button>
</div>
<!-- Help Text -->
<p class="mt-8 text-sm text-base-content/50">
If this problem persists, please
If this flash keeps happening, please
<a href="https://somegit.dev/CSGOWTF/csgowtf/issues" class="link-hover link text-primary">
report it on GitHub
</a>
(we won't flash you, we promise)
</p>
</div>
</Card>

View File

@@ -48,9 +48,9 @@
});
const stats = [
{ icon: Users, label: 'Players Tracked', value: '1.2M+' },
{ icon: TrendingUp, label: 'Matches Analyzed', value: '500K+' },
{ icon: Zap, label: 'Demos Parsed', value: '2M+' }
{ icon: Users, label: 'Players Exposed', value: '1.2M+' },
{ icon: TrendingUp, label: 'Flash Crimes Documented', value: '500K+' },
{ icon: Zap, label: 'Flashbangs Analyzed', value: '2M+' }
];
// Carousel state
@@ -147,26 +147,30 @@
<div class="container mx-auto px-4">
<div class="mx-auto max-w-4xl text-center">
<div class="mb-6">
<Badge variant="info" size="md">🎮 Now supporting CS2</Badge>
<Badge variant="warning" size="md">STOP FLASHING YOUR TEAMMATES</Badge>
</div>
<h1 class="mb-6 text-6xl font-bold leading-tight md:text-7xl">
<span class="text-primary">CS2</span><span class="text-secondary">.WTF</span>
<span class="text-primary">team</span><span class="text-secondary">flash.rip</span>
</h1>
<p class="mb-8 text-xl text-base-content/70 md:text-2xl">
Track your performance, analyze matches, and improve your game with
<span class="font-semibold text-primary">detailed statistics</span> and insights.
<p class="mb-4 text-xl text-base-content/70 md:text-2xl">
Track your performance, analyze matches, and finally learn
<span class="font-semibold text-error">who keeps flashing their own team</span>.
</p>
<p class="mb-8 text-lg italic text-base-content/60">
"Where flash stats become flash shaming."
</p>
<div class="mb-12 flex flex-col justify-center gap-4 sm:flex-row">
<Button variant="primary" size="lg" href="/matches">
<Search class="mr-2 h-5 w-5" />
Browse Matches
Find Flash Criminals
</Button>
<Button variant="secondary" size="lg" href="/player/76561198012345678">
<Users class="mr-2 h-5 w-5" />
View Demo Profile
Check Your Shame Stats
</Button>
</div>
@@ -376,8 +380,8 @@
<section class="border-t border-base-300 bg-base-200 py-16">
<div class="container mx-auto px-4">
<div class="mb-12 text-center">
<h2 class="text-3xl font-bold text-base-content">Why CS2.WTF?</h2>
<p class="mt-2 text-base-content/60">Everything you need to analyze your CS2 performance</p>
<h2 class="text-3xl font-bold text-base-content">Why teamflash.rip?</h2>
<p class="mt-2 text-base-content/60">Because someone needs to track these flash crimes</p>
</div>
<div class="grid gap-8 md:grid-cols-2 lg:grid-cols-3">
@@ -385,10 +389,10 @@
<div class="mb-4 inline-flex rounded-lg bg-primary/10 p-3">
<TrendingUp class="h-6 w-6 text-primary" />
</div>
<h3 class="mb-2 text-xl font-semibold">Detailed Statistics</h3>
<h3 class="mb-2 text-xl font-semibold">Flash Forensics</h3>
<p class="text-base-content/60">
Track K/D, ADR, HS%, KAST, and more. Analyze your performance round-by-round with
comprehensive stats.
Track enemies blinded, teammates betrayed, and self-inflicted Ls. We see through the
white.
</p>
</Card>
@@ -396,9 +400,9 @@
<div class="mb-4 inline-flex rounded-lg bg-secondary/10 p-3">
<Zap class="h-6 w-6 text-secondary" />
</div>
<h3 class="mb-2 text-xl font-semibold">Economy Tracking</h3>
<h3 class="mb-2 text-xl font-semibold">Shame Statistics</h3>
<p class="text-base-content/60">
Understand money management with round-by-round economy analysis and spending patterns.
See exactly who threw that flash into your team's face. Evidence-based blame assignment.
</p>
</Card>
@@ -406,10 +410,10 @@
<div class="mb-4 inline-flex rounded-lg bg-info/10 p-3">
<Users class="h-6 w-6 text-info" />
</div>
<h3 class="mb-2 text-xl font-semibold">Player Profiles</h3>
<h3 class="mb-2 text-xl font-semibold">Hall of Shame</h3>
<p class="text-base-content/60">
View comprehensive player profiles with match history, favorite maps, and performance
trends.
View comprehensive player profiles with flash history. Know who to mute before the match
starts.
</p>
</Card>
</div>
@@ -421,12 +425,16 @@
<div class="container mx-auto px-4">
<Card variant="elevated" padding="lg">
<div class="text-center">
<h2 class="mb-4 text-3xl font-bold text-base-content">Ready to improve your game?</h2>
<h2 class="mb-4 text-3xl font-bold text-base-content">
Ready to expose the flash criminals?
</h2>
<p class="mb-8 text-lg text-base-content/70">
Start tracking your CS2 matches and get insights that help you rank up.
Start tracking your CS2 matches and finally have evidence for the post-game arguments.
</p>
<Button variant="primary" size="lg" href="/matches">Get Started - It's Free</Button>
<p class="mt-4 text-sm text-base-content/50">Free and open source. No signup required.</p>
<p class="mt-4 text-sm text-base-content/50">
Free and open source. No signup required. Full flash transparency.
</p>
</div>
</Card>
</div>

View File

@@ -32,9 +32,9 @@ export const load: PageLoad = async ({ parent }) => {
mapStats, // For most played maps pie chart
totalMatchesAnalyzed: allMatches.length,
meta: {
title: 'CS2.WTF - Statistics for CS2 Matchmaking',
title: 'teamflash.rip - Stop Flashing Your Teammates',
description:
'Track your CS2 performance, analyze matches, and improve your game with detailed statistics and insights.'
'Track your CS2 performance, analyze matches, and finally learn to stop team flashing. Detailed flash statistics, blinding insights, and more.'
}
};
} catch (error) {
@@ -50,9 +50,9 @@ export const load: PageLoad = async ({ parent }) => {
mapStats: [],
totalMatchesAnalyzed: 0,
meta: {
title: 'CS2.WTF - Statistics for CS2 Matchmaking',
title: 'teamflash.rip - Stop Flashing Your Teammates',
description:
'Track your CS2 performance, analyze matches, and improve your game with detailed statistics and insights.'
'Track your CS2 performance, analyze matches, and finally learn to stop team flashing. Detailed flash statistics, blinding insights, and more.'
}
};
}

View File

@@ -1,26 +1,26 @@
<script lang="ts">
import { Github, Heart, Code } from 'lucide-svelte';
import { Github, Heart, Code, Zap } from 'lucide-svelte';
import Card from '$lib/components/ui/Card.svelte';
import Button from '$lib/components/ui/Button.svelte';
</script>
<svelte:head>
<title>About - CS2.WTF</title>
<title>About - teamflash.rip</title>
</svelte:head>
<div class="container mx-auto max-w-4xl px-4 py-12">
<h1 class="mb-8 text-4xl font-bold">About CS2.WTF</h1>
<h1 class="mb-8 text-4xl font-bold">About teamflash.rip</h1>
<Card padding="lg" class="mb-8">
<h2 class="mb-4 text-2xl font-semibold">Our Mission</h2>
<p class="mb-4 text-base-content/80">
CS2.WTF is a free and open-source platform for analyzing Counter-Strike 2 matchmaking matches.
We provide detailed statistics, performance insights, and tools to help players improve their
game.
teamflash.rip is a free and open-source platform for analyzing Counter-Strike 2 matchmaking
matches. We're on a mission to expose every teammate who ever threw a flashbang backwards.
</p>
<p class="text-base-content/80">
Originally created for CS:GO, we've completely rewritten the platform to support CS2 with
modern technologies and enhanced features.
modern technologies and the ability to track exactly who ruined your retake with a poorly
timed flash.
</p>
</Card>
@@ -37,15 +37,15 @@
<Heart class="mb-3 h-8 w-8 text-error" />
<h3 class="mb-2 text-xl font-semibold">Free Forever</h3>
<p class="text-sm text-base-content/70">
No paywalls, no premium features. Everyone gets full access to all statistics.
No paywalls, no premium features. Everyone gets full access to all flash crime statistics.
</p>
</Card>
<Card padding="lg">
<Github class="mb-3 h-8 w-8 text-info" />
<Zap class="mb-3 h-8 w-8 text-warning" />
<h3 class="mb-2 text-xl font-semibold">Community Driven</h3>
<p class="text-sm text-base-content/70">
Contributions welcome! Help us make CS2.WTF better for everyone.
Contributions welcome! Help us shame more team-flashers together.
</p>
</Card>
</div>
@@ -68,7 +68,7 @@
<li>• Go + Gin Framework</li>
<li>• PostgreSQL Database</li>
<li>• Redis Cache</li>
<li>• Demo Parser</li>
<li>• Demo Parser (flash crime evidence collector)</li>
</ul>
</div>
</div>

View File

@@ -6,9 +6,9 @@ import type { PageLoad } from './$types';
export const load: PageLoad = async () => {
return {
meta: {
title: 'About CS2.WTF',
title: 'About teamflash.rip - We See Through the White',
description:
'Learn about CS2.WTF, an open-source platform for analyzing Counter-Strike 2 matchmaking matches.'
'Learn about teamflash.rip, an open-source platform for exposing flashbang crimes in Counter-Strike 2.'
}
};
};

View File

@@ -38,7 +38,7 @@ export const GET: RequestHandler = async ({ params, url, request }) => {
headers: {
// Forward relevant headers
Accept: request.headers.get('Accept') || 'application/json',
'User-Agent': 'CS2.WTF Frontend'
'User-Agent': 'teamflash.rip Frontend'
}
});
@@ -87,7 +87,7 @@ export const POST: RequestHandler = async ({ params, url, request }) => {
headers: {
'Content-Type': request.headers.get('Content-Type') || 'application/json',
Accept: request.headers.get('Accept') || 'application/json',
'User-Agent': 'CS2.WTF Frontend'
'User-Agent': 'teamflash.rip Frontend'
},
body
});
@@ -133,7 +133,7 @@ export const DELETE: RequestHandler = async ({ params, url, request }) => {
method: 'DELETE',
headers: {
Accept: request.headers.get('Accept') || 'application/json',
'User-Agent': 'CS2.WTF Frontend'
'User-Agent': 'teamflash.rip Frontend'
}
});

View File

@@ -8,7 +8,7 @@ export const load: PageLoad = async ({ parent }) => {
match,
chatData: chat,
meta: {
title: `${match.map || 'Match'} Chat - Match ${match.match_id} - CS2.WTF`
title: `${match.map || 'Match'} Chat - Match ${match.match_id} - teamflash.rip`
}
};
};

View File

@@ -152,7 +152,7 @@
</script>
<svelte:head>
<title>Damage Analysis - CS2.WTF</title>
<title>Damage Analysis - teamflash.rip</title>
</svelte:head>
{#if !hasPlayerData}

View File

@@ -258,7 +258,7 @@
</script>
<svelte:head>
<title>Match Details - CS2.WTF</title>
<title>Match Details - teamflash.rip</title>
</svelte:head>
{#if !hasPlayerData}

View File

@@ -8,7 +8,7 @@ export const load: PageLoad = async ({ parent }) => {
match,
weaponsData: weapons,
meta: {
title: `${match.map || 'Match'} Details - Match ${match.match_id} - CS2.WTF`
title: `${match.map || 'Match'} Details - Match ${match.match_id} - teamflash.rip`
}
};
};

View File

@@ -8,7 +8,7 @@ export const load: PageLoad = async ({ parent }) => {
match,
roundsData: rounds,
meta: {
title: `${match.map || 'Match'} Economy - Match ${match.match_id} - CS2.WTF`
title: `${match.map || 'Match'} Economy - Match ${match.match_id} - teamflash.rip`
}
};
};

View File

@@ -64,17 +64,17 @@
}
const columns = [
{ key: 'name' as const, label: 'Player', sortable: true, width: '200px' },
{ key: 'name' as const, label: 'Flashbang Criminal', sortable: true, width: '200px' },
{
key: 'enemies_blinded' as const,
label: 'Enemies Blinded',
label: 'Victims (Correct)',
sortable: true,
align: 'center' as const,
width: '150px'
},
{
key: 'avg_blind_duration' as const,
label: 'Avg Duration (s)',
label: 'Avg Suffering (s)',
sortable: true,
align: 'center' as const,
format: (value: string | number | boolean, _row: FlashStat) => `${value as string}s`,
@@ -82,21 +82,21 @@
},
{
key: 'flash_assists' as const,
label: 'Flash Assists',
label: 'Actually Useful',
sortable: true,
align: 'center' as const,
width: '130px'
},
{
key: 'teammates_blinded' as const,
label: 'Team Flashed',
label: 'Friendly Crimes',
sortable: true,
align: 'center' as const,
width: '130px'
},
{
key: 'self_blinded' as const,
label: 'Self Flashed',
label: 'Self-Inflicted L',
sortable: true,
align: 'center' as const,
width: '130px'
@@ -112,7 +112,8 @@
<div class="text-3xl font-bold text-base-content">
{teamATotals.total_enemies_blinded + teamBTotals.total_enemies_blinded}
</div>
<div class="text-sm text-base-content/60">Total Enemies Blinded</div>
<div class="text-sm text-base-content/60">Enemies Successfully Blinded</div>
<div class="mt-1 text-xs text-success">The correct way to use flashes</div>
</Card>
<Card padding="lg">
@@ -120,17 +121,17 @@
<div class="text-3xl font-bold text-base-content">
{teamATotals.total_flash_assists + teamBTotals.total_flash_assists}
</div>
<div class="text-sm text-base-content/60">Total Flash Assists</div>
<div class="text-sm text-base-content/60">Flash Assists</div>
<div class="mt-1 text-xs text-success">Teamwork makes the dream work</div>
</Card>
<Card padding="lg">
<Users class="mb-2 h-8 w-8 text-info" />
<Users class="mb-2 h-8 w-8 text-error" />
<div class="text-3xl font-bold text-base-content">
{((teamATotals.total_enemy_blind_time + teamBTotals.total_enemy_blind_time) / 1000).toFixed(
1
)}s
{flashStats.reduce((sum, p) => sum + p.teammates_blinded, 0)}
</div>
<div class="text-sm text-base-content/60">Total Enemy Blind Time</div>
<div class="text-sm text-base-content/60">Teammates Betrayed</div>
<div class="mt-1 text-xs text-error">These players owe apologies</div>
</Card>
</div>
@@ -176,9 +177,9 @@
<!-- Flash Effectiveness Leaderboard -->
<Card padding="none">
<div class="p-6">
<h2 class="text-2xl font-bold text-base-content">Flash Effectiveness Leaderboard</h2>
<h2 class="text-2xl font-bold text-base-content">Flash Hall of Fame (and Shame)</h2>
<p class="mt-1 text-sm text-base-content/60">
Ranked by total enemies blinded during the match
Ranked by enemies blinded. Teammates blinded is tracked for... scientific purposes.
</p>
</div>
@@ -204,18 +205,28 @@
<!-- Info Box -->
<Card padding="lg" variant="elevated">
<div class="text-sm text-base-content/60">
<p class="mb-2 font-semibold">Understanding Flash Stats:</p>
<p class="mb-2 font-semibold">Flash Stats Explained (For the Visually Challenged):</p>
<ul class="list-inside list-disc space-y-1">
<li><strong>Enemies Blinded:</strong> Total number of enemy players flashed</li>
<li><strong>Victims (Correct):</strong> Enemies you blinded - the RIGHT people to flash</li>
<li>
<strong>Avg Duration:</strong> Average time enemies were blinded per flash (in seconds)
<strong>Avg Suffering:</strong> Average time enemies spent regretting their peek
</li>
<li>
<strong>Flash Assists:</strong> Enemies killed by teammates while blinded by your flash
<strong>Actually Useful:</strong> Enemies killed by teammates while your flash was doing its
job
</li>
<li>
<strong>Friendly Crimes:</strong> Number of times you betrayed your own team - shame counter
</li>
<li>
<strong>Self-Inflicted L:</strong> Times you stared at your own flashbang like a moth to a
flame
</li>
<li><strong>Team Flashed:</strong> Number of times you accidentally flashed teammates</li>
<li><strong>Self Flashed:</strong> Number of times you flashed yourself</li>
</ul>
<p class="mt-4 text-xs italic">
Remember: If your "Friendly Crimes" is higher than "Victims (Correct)", you might want to
reconsider your flash lineups.
</p>
</div>
</Card>
</div>

View File

@@ -189,7 +189,7 @@
</script>
<svelte:head>
<title>Match Weapons - CS2.WTF</title>
<title>Match Weapons - teamflash.rip</title>
</svelte:head>
{#if !hasWeaponsData}

View File

@@ -434,7 +434,7 @@
</script>
<svelte:head>
<title>Matches - CS2.WTF</title>
<title>Matches - teamflash.rip</title>
</svelte:head>
<!-- Export Toast Notification -->

View File

@@ -27,8 +27,9 @@ export const load: PageLoad = async ({ url }) => {
playerId
},
meta: {
title: 'Browse Matches - CS2.WTF',
description: 'Browse and search through CS2 matchmaking games with detailed filters.'
title: 'Browse Matches - teamflash.rip',
description:
'Browse CS2 matches and see who is blinding the competition (and their teammates).'
}
};
} catch (error) {
@@ -44,8 +45,9 @@ export const load: PageLoad = async ({ url }) => {
nextPageTime: undefined,
filters: { map, playerId },
meta: {
title: 'Browse Matches - CS2.WTF',
description: 'Browse and search through CS2 matchmaking games with detailed filters.'
title: 'Browse Matches - teamflash.rip',
description:
'Browse CS2 matches and see who is blinding the competition (and their teammates).'
}
};
}

View File

@@ -53,8 +53,8 @@ export const load: PageLoad = async ({ params }) => {
recentMatches: matchesData.matches.slice(0, 4), // Show 4 in recent matches section
playerStats, // Full stats for charts
meta: {
title: `${profile.name} - Player Profile | CS2.WTF`,
description: `View ${profile.name}'s CS2 statistics, match history, and performance metrics.`
title: `${profile.name} - Player Profile | teamflash.rip`,
description: `View ${profile.name}'s CS2 statistics, flash history, and how often they blind their own team.`
}
};
} catch (err) {

View File

@@ -5,7 +5,7 @@
</script>
<svelte:head>
<title>Players - CS2.WTF</title>
<title>Players - teamflash.rip</title>
</svelte:head>
<div class="container mx-auto px-4 py-8">

View File

@@ -7,8 +7,9 @@ import type { PageLoad } from './$types';
export const load: PageLoad = async () => {
return {
meta: {
title: 'Search Players - CS2.WTF',
description: 'Search and browse CS2 player profiles with detailed statistics.'
title: 'Search Players - teamflash.rip',
description:
'Search CS2 players and expose their flash crime history. Know who to mute before the match.'
}
};
};

View File

@@ -4,10 +4,10 @@
</script>
<svelte:head>
<title>Privacy Policy | CS2.WTF</title>
<title>Privacy Policy | teamflash.rip</title>
<meta
name="description"
content="Privacy policy for CS2.WTF - Learn how we collect, use, and protect your data."
content="Privacy policy for teamflash.rip - Learn how we collect, use, and protect your data."
/>
</svelte:head>
@@ -31,9 +31,9 @@
<Card padding="lg">
<h2 class="mb-4 text-2xl font-bold text-base-content">Introduction</h2>
<p class="text-base-content/80">
CS2.WTF ("we", "our", or "us") is committed to protecting your privacy. This Privacy Policy
explains how we collect, use, and safeguard your information when you use our CS2 match
statistics and analysis platform.
teamflash.rip ("we", "our", or "us") is committed to protecting your privacy. This Privacy
Policy explains how we collect, use, and safeguard your information when you use our CS2 match
statistics and flash crime analysis platform.
</p>
</Card>
@@ -210,7 +210,7 @@
<!-- Footer Note -->
<div class="text-center text-sm text-base-content/60">
<p>
CS2.WTF is not affiliated with Valve Corporation or Counter-Strike. All trademarks are
teamflash.rip is not affiliated with Valve Corporation or Counter-Strike. All trademarks are
property of their respective owners.
</p>
</div>

View File

@@ -1,6 +1,6 @@
import type { RequestHandler } from './$types';
const SITE_URL = 'https://cs2.wtf'; // Update with actual production URL
const SITE_URL = 'https://teamflash.rip'; // Production URL
/**
* Generate robots.txt for search engine crawlers

View File

@@ -1,7 +1,7 @@
import type { RequestHandler } from './$types';
import { matchesAPI } from '$lib/api/matches';
const SITE_URL = 'https://cs2.wtf'; // Update with actual production URL
const SITE_URL = 'https://teamflash.rip'; // Production URL
/**
* Generate XML sitemap for SEO