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:
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"name": "cs2wtf",
|
"name": "teamflash-rip",
|
||||||
"version": "2.0.0",
|
"version": "2.0.0",
|
||||||
"description": "Statistics for CS2 matchmaking matches",
|
"description": "Stop flashing your teammates. CS2 match statistics and analysis.",
|
||||||
"private": true,
|
"private": true,
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
|
|||||||
@@ -34,10 +34,10 @@
|
|||||||
<!-- Brand -->
|
<!-- Brand -->
|
||||||
<div class="md:col-span-1">
|
<div class="md:col-span-1">
|
||||||
<a href="/" class="mb-4 inline-block text-2xl font-bold">
|
<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>
|
</a>
|
||||||
<p class="mb-4 text-sm text-base-content/60">
|
<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>
|
</p>
|
||||||
<div class="flex gap-3">
|
<div class="flex gap-3">
|
||||||
<a
|
<a
|
||||||
@@ -121,11 +121,11 @@
|
|||||||
<!-- Bottom -->
|
<!-- Bottom -->
|
||||||
<div class="mt-12 border-t border-base-300 pt-8 text-center text-sm text-base-content/60">
|
<div class="mt-12 border-t border-base-300 pt-8 text-center text-sm text-base-content/60">
|
||||||
<p>
|
<p>
|
||||||
© {currentYear} CSGOW.TF Team. Licensed under
|
© {currentYear} teamflash.rip Team. Licensed under
|
||||||
<a href="/license" class="hover:text-primary">GPL-3.0</a>
|
<a href="/license" class="hover:text-primary">GPL-3.0</a>
|
||||||
</p>
|
</p>
|
||||||
<p class="mt-2">
|
<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>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -17,9 +17,9 @@
|
|||||||
<div class="container mx-auto px-4">
|
<div class="container mx-auto px-4">
|
||||||
<div class="flex h-16 items-center justify-between">
|
<div class="flex h-16 items-center justify-between">
|
||||||
<!-- Logo -->
|
<!-- 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">
|
<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>
|
</h1>
|
||||||
</a>
|
</a>
|
||||||
|
|
||||||
|
|||||||
37
src/lib/stores/loadingMessages.ts
Normal file
37
src/lib/stores/loadingMessages.ts
Normal 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.'
|
||||||
|
};
|
||||||
@@ -2,47 +2,78 @@
|
|||||||
import { page } from '$app/stores';
|
import { page } from '$app/stores';
|
||||||
import Button from '$lib/components/ui/Button.svelte';
|
import Button from '$lib/components/ui/Button.svelte';
|
||||||
import Card from '$lib/components/ui/Card.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
|
// Get error information
|
||||||
const error = $page.error;
|
const error = $page.error;
|
||||||
const status = $page.status;
|
const status = $page.status;
|
||||||
|
|
||||||
// Determine error message
|
// Flash-themed error messages
|
||||||
const getErrorMessage = (status: number): string => {
|
const getErrorMessage = (status: number): string => {
|
||||||
switch (status) {
|
switch (status) {
|
||||||
case 404:
|
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:
|
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:
|
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:
|
default:
|
||||||
return 'An unexpected error occurred.';
|
return 'Something went white. Very white. Flash-in-the-face white.';
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
const getErrorTitle = (status: number): string => {
|
const getErrorTitle = (status: number): string => {
|
||||||
switch (status) {
|
switch (status) {
|
||||||
case 404:
|
case 404:
|
||||||
return 'Page Not Found';
|
return "You've Been Full-Blind";
|
||||||
case 500:
|
case 500:
|
||||||
return 'Internal Server Error';
|
return 'Server Got Flashbanged';
|
||||||
case 503:
|
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:
|
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>
|
</script>
|
||||||
|
|
||||||
<svelte:head>
|
<svelte:head>
|
||||||
<title>{status} - {getErrorTitle(status)} | CS2.WTF</title>
|
<title>{status} - {getErrorTitle(status)} | teamflash.rip</title>
|
||||||
</svelte:head>
|
</svelte:head>
|
||||||
|
|
||||||
<div class="container mx-auto flex min-h-[60vh] items-center justify-center px-4 py-16">
|
<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">
|
<Card padding="lg" class="w-full max-w-2xl">
|
||||||
<div class="text-center">
|
<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 -->
|
<!-- Error Code -->
|
||||||
<div class="mb-4 text-8xl font-bold text-primary">
|
<div class="mb-4 text-8xl font-bold text-primary">
|
||||||
{status}
|
{status}
|
||||||
@@ -54,15 +85,20 @@
|
|||||||
</h1>
|
</h1>
|
||||||
|
|
||||||
<!-- Error Message -->
|
<!-- Error Message -->
|
||||||
<p class="mb-8 text-lg text-base-content/70">
|
<p class="mb-4 text-lg text-base-content/70">
|
||||||
{getErrorMessage(status)}
|
{getErrorMessage(status)}
|
||||||
</p>
|
</p>
|
||||||
|
|
||||||
|
<!-- Random Flash Pun -->
|
||||||
|
<p class="mb-8 text-sm italic text-base-content/50">
|
||||||
|
"{randomPun}"
|
||||||
|
</p>
|
||||||
|
|
||||||
<!-- Debug Info (only in development) -->
|
<!-- Debug Info (only in development) -->
|
||||||
{#if import.meta.env?.DEV && error}
|
{#if import.meta.env?.DEV && error}
|
||||||
<div class="mb-8 rounded-lg bg-base-300 p-4 text-left">
|
<div class="mb-8 rounded-lg bg-base-300 p-4 text-left">
|
||||||
<p class="mb-2 font-mono text-sm text-error">
|
<p class="mb-2 font-mono text-sm text-error">
|
||||||
<strong>Debug Info:</strong>
|
<strong>Flash Report (Debug):</strong>
|
||||||
</p>
|
</p>
|
||||||
<pre class="overflow-x-auto text-xs text-base-content/80">{JSON.stringify(
|
<pre class="overflow-x-auto text-xs text-base-content/80">{JSON.stringify(
|
||||||
error,
|
error,
|
||||||
@@ -76,21 +112,22 @@
|
|||||||
<div class="flex flex-col justify-center gap-4 sm:flex-row">
|
<div class="flex flex-col justify-center gap-4 sm:flex-row">
|
||||||
<Button variant="secondary" href="javascript:history.back()">
|
<Button variant="secondary" href="javascript:history.back()">
|
||||||
<ArrowLeft class="mr-2 h-5 w-5" />
|
<ArrowLeft class="mr-2 h-5 w-5" />
|
||||||
Go Back
|
Peek Again
|
||||||
</Button>
|
</Button>
|
||||||
|
|
||||||
<Button variant="primary" href="/">
|
<Button variant="primary" href="/">
|
||||||
<Home class="mr-2 h-5 w-5" />
|
<Home class="mr-2 h-5 w-5" />
|
||||||
Go Home
|
Return to Spawn
|
||||||
</Button>
|
</Button>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<!-- Help Text -->
|
<!-- Help Text -->
|
||||||
<p class="mt-8 text-sm text-base-content/50">
|
<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">
|
<a href="https://somegit.dev/CSGOWTF/csgowtf/issues" class="link-hover link text-primary">
|
||||||
report it on GitHub
|
report it on GitHub
|
||||||
</a>
|
</a>
|
||||||
|
(we won't flash you, we promise)
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
</Card>
|
</Card>
|
||||||
|
|||||||
@@ -48,9 +48,9 @@
|
|||||||
});
|
});
|
||||||
|
|
||||||
const stats = [
|
const stats = [
|
||||||
{ icon: Users, label: 'Players Tracked', value: '1.2M+' },
|
{ icon: Users, label: 'Players Exposed', value: '1.2M+' },
|
||||||
{ icon: TrendingUp, label: 'Matches Analyzed', value: '500K+' },
|
{ icon: TrendingUp, label: 'Flash Crimes Documented', value: '500K+' },
|
||||||
{ icon: Zap, label: 'Demos Parsed', value: '2M+' }
|
{ icon: Zap, label: 'Flashbangs Analyzed', value: '2M+' }
|
||||||
];
|
];
|
||||||
|
|
||||||
// Carousel state
|
// Carousel state
|
||||||
@@ -147,26 +147,30 @@
|
|||||||
<div class="container mx-auto px-4">
|
<div class="container mx-auto px-4">
|
||||||
<div class="mx-auto max-w-4xl text-center">
|
<div class="mx-auto max-w-4xl text-center">
|
||||||
<div class="mb-6">
|
<div class="mb-6">
|
||||||
<Badge variant="info" size="md">🎮 Now supporting CS2</Badge>
|
<Badge variant="warning" size="md">STOP FLASHING YOUR TEAMMATES</Badge>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<h1 class="mb-6 text-6xl font-bold leading-tight md:text-7xl">
|
<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>
|
</h1>
|
||||||
|
|
||||||
<p class="mb-8 text-xl text-base-content/70 md:text-2xl">
|
<p class="mb-4 text-xl text-base-content/70 md:text-2xl">
|
||||||
Track your performance, analyze matches, and improve your game with
|
Track your performance, analyze matches, and finally learn
|
||||||
<span class="font-semibold text-primary">detailed statistics</span> and insights.
|
<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>
|
</p>
|
||||||
|
|
||||||
<div class="mb-12 flex flex-col justify-center gap-4 sm:flex-row">
|
<div class="mb-12 flex flex-col justify-center gap-4 sm:flex-row">
|
||||||
<Button variant="primary" size="lg" href="/matches">
|
<Button variant="primary" size="lg" href="/matches">
|
||||||
<Search class="mr-2 h-5 w-5" />
|
<Search class="mr-2 h-5 w-5" />
|
||||||
Browse Matches
|
Find Flash Criminals
|
||||||
</Button>
|
</Button>
|
||||||
<Button variant="secondary" size="lg" href="/player/76561198012345678">
|
<Button variant="secondary" size="lg" href="/player/76561198012345678">
|
||||||
<Users class="mr-2 h-5 w-5" />
|
<Users class="mr-2 h-5 w-5" />
|
||||||
View Demo Profile
|
Check Your Shame Stats
|
||||||
</Button>
|
</Button>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -376,8 +380,8 @@
|
|||||||
<section class="border-t border-base-300 bg-base-200 py-16">
|
<section class="border-t border-base-300 bg-base-200 py-16">
|
||||||
<div class="container mx-auto px-4">
|
<div class="container mx-auto px-4">
|
||||||
<div class="mb-12 text-center">
|
<div class="mb-12 text-center">
|
||||||
<h2 class="text-3xl font-bold text-base-content">Why CS2.WTF?</h2>
|
<h2 class="text-3xl font-bold text-base-content">Why teamflash.rip?</h2>
|
||||||
<p class="mt-2 text-base-content/60">Everything you need to analyze your CS2 performance</p>
|
<p class="mt-2 text-base-content/60">Because someone needs to track these flash crimes</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
<div class="grid gap-8 md:grid-cols-2 lg:grid-cols-3">
|
<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">
|
<div class="mb-4 inline-flex rounded-lg bg-primary/10 p-3">
|
||||||
<TrendingUp class="h-6 w-6 text-primary" />
|
<TrendingUp class="h-6 w-6 text-primary" />
|
||||||
</div>
|
</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">
|
<p class="text-base-content/60">
|
||||||
Track K/D, ADR, HS%, KAST, and more. Analyze your performance round-by-round with
|
Track enemies blinded, teammates betrayed, and self-inflicted Ls. We see through the
|
||||||
comprehensive stats.
|
white.
|
||||||
</p>
|
</p>
|
||||||
</Card>
|
</Card>
|
||||||
|
|
||||||
@@ -396,9 +400,9 @@
|
|||||||
<div class="mb-4 inline-flex rounded-lg bg-secondary/10 p-3">
|
<div class="mb-4 inline-flex rounded-lg bg-secondary/10 p-3">
|
||||||
<Zap class="h-6 w-6 text-secondary" />
|
<Zap class="h-6 w-6 text-secondary" />
|
||||||
</div>
|
</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">
|
<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>
|
</p>
|
||||||
</Card>
|
</Card>
|
||||||
|
|
||||||
@@ -406,10 +410,10 @@
|
|||||||
<div class="mb-4 inline-flex rounded-lg bg-info/10 p-3">
|
<div class="mb-4 inline-flex rounded-lg bg-info/10 p-3">
|
||||||
<Users class="h-6 w-6 text-info" />
|
<Users class="h-6 w-6 text-info" />
|
||||||
</div>
|
</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">
|
<p class="text-base-content/60">
|
||||||
View comprehensive player profiles with match history, favorite maps, and performance
|
View comprehensive player profiles with flash history. Know who to mute before the match
|
||||||
trends.
|
starts.
|
||||||
</p>
|
</p>
|
||||||
</Card>
|
</Card>
|
||||||
</div>
|
</div>
|
||||||
@@ -421,12 +425,16 @@
|
|||||||
<div class="container mx-auto px-4">
|
<div class="container mx-auto px-4">
|
||||||
<Card variant="elevated" padding="lg">
|
<Card variant="elevated" padding="lg">
|
||||||
<div class="text-center">
|
<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">
|
<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>
|
</p>
|
||||||
<Button variant="primary" size="lg" href="/matches">Get Started - It's Free</Button>
|
<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>
|
</div>
|
||||||
</Card>
|
</Card>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -32,9 +32,9 @@ export const load: PageLoad = async ({ parent }) => {
|
|||||||
mapStats, // For most played maps pie chart
|
mapStats, // For most played maps pie chart
|
||||||
totalMatchesAnalyzed: allMatches.length,
|
totalMatchesAnalyzed: allMatches.length,
|
||||||
meta: {
|
meta: {
|
||||||
title: 'CS2.WTF - Statistics for CS2 Matchmaking',
|
title: 'teamflash.rip - Stop Flashing Your Teammates',
|
||||||
description:
|
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) {
|
} catch (error) {
|
||||||
@@ -50,9 +50,9 @@ export const load: PageLoad = async ({ parent }) => {
|
|||||||
mapStats: [],
|
mapStats: [],
|
||||||
totalMatchesAnalyzed: 0,
|
totalMatchesAnalyzed: 0,
|
||||||
meta: {
|
meta: {
|
||||||
title: 'CS2.WTF - Statistics for CS2 Matchmaking',
|
title: 'teamflash.rip - Stop Flashing Your Teammates',
|
||||||
description:
|
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.'
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,26 +1,26 @@
|
|||||||
<script lang="ts">
|
<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 Card from '$lib/components/ui/Card.svelte';
|
||||||
import Button from '$lib/components/ui/Button.svelte';
|
import Button from '$lib/components/ui/Button.svelte';
|
||||||
</script>
|
</script>
|
||||||
|
|
||||||
<svelte:head>
|
<svelte:head>
|
||||||
<title>About - CS2.WTF</title>
|
<title>About - teamflash.rip</title>
|
||||||
</svelte:head>
|
</svelte:head>
|
||||||
|
|
||||||
<div class="container mx-auto max-w-4xl px-4 py-12">
|
<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">
|
<Card padding="lg" class="mb-8">
|
||||||
<h2 class="mb-4 text-2xl font-semibold">Our Mission</h2>
|
<h2 class="mb-4 text-2xl font-semibold">Our Mission</h2>
|
||||||
<p class="mb-4 text-base-content/80">
|
<p class="mb-4 text-base-content/80">
|
||||||
CS2.WTF is a free and open-source platform for analyzing Counter-Strike 2 matchmaking matches.
|
teamflash.rip is a free and open-source platform for analyzing Counter-Strike 2 matchmaking
|
||||||
We provide detailed statistics, performance insights, and tools to help players improve their
|
matches. We're on a mission to expose every teammate who ever threw a flashbang backwards.
|
||||||
game.
|
|
||||||
</p>
|
</p>
|
||||||
<p class="text-base-content/80">
|
<p class="text-base-content/80">
|
||||||
Originally created for CS:GO, we've completely rewritten the platform to support CS2 with
|
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>
|
</p>
|
||||||
</Card>
|
</Card>
|
||||||
|
|
||||||
@@ -37,15 +37,15 @@
|
|||||||
<Heart class="mb-3 h-8 w-8 text-error" />
|
<Heart class="mb-3 h-8 w-8 text-error" />
|
||||||
<h3 class="mb-2 text-xl font-semibold">Free Forever</h3>
|
<h3 class="mb-2 text-xl font-semibold">Free Forever</h3>
|
||||||
<p class="text-sm text-base-content/70">
|
<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>
|
</p>
|
||||||
</Card>
|
</Card>
|
||||||
|
|
||||||
<Card padding="lg">
|
<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>
|
<h3 class="mb-2 text-xl font-semibold">Community Driven</h3>
|
||||||
<p class="text-sm text-base-content/70">
|
<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>
|
</p>
|
||||||
</Card>
|
</Card>
|
||||||
</div>
|
</div>
|
||||||
@@ -68,7 +68,7 @@
|
|||||||
<li>• Go + Gin Framework</li>
|
<li>• Go + Gin Framework</li>
|
||||||
<li>• PostgreSQL Database</li>
|
<li>• PostgreSQL Database</li>
|
||||||
<li>• Redis Cache</li>
|
<li>• Redis Cache</li>
|
||||||
<li>• Demo Parser</li>
|
<li>• Demo Parser (flash crime evidence collector)</li>
|
||||||
</ul>
|
</ul>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -6,9 +6,9 @@ import type { PageLoad } from './$types';
|
|||||||
export const load: PageLoad = async () => {
|
export const load: PageLoad = async () => {
|
||||||
return {
|
return {
|
||||||
meta: {
|
meta: {
|
||||||
title: 'About CS2.WTF',
|
title: 'About teamflash.rip - We See Through the White',
|
||||||
description:
|
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.'
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -38,7 +38,7 @@ export const GET: RequestHandler = async ({ params, url, request }) => {
|
|||||||
headers: {
|
headers: {
|
||||||
// Forward relevant headers
|
// Forward relevant headers
|
||||||
Accept: request.headers.get('Accept') || 'application/json',
|
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: {
|
headers: {
|
||||||
'Content-Type': request.headers.get('Content-Type') || 'application/json',
|
'Content-Type': request.headers.get('Content-Type') || 'application/json',
|
||||||
Accept: request.headers.get('Accept') || 'application/json',
|
Accept: request.headers.get('Accept') || 'application/json',
|
||||||
'User-Agent': 'CS2.WTF Frontend'
|
'User-Agent': 'teamflash.rip Frontend'
|
||||||
},
|
},
|
||||||
body
|
body
|
||||||
});
|
});
|
||||||
@@ -133,7 +133,7 @@ export const DELETE: RequestHandler = async ({ params, url, request }) => {
|
|||||||
method: 'DELETE',
|
method: 'DELETE',
|
||||||
headers: {
|
headers: {
|
||||||
Accept: request.headers.get('Accept') || 'application/json',
|
Accept: request.headers.get('Accept') || 'application/json',
|
||||||
'User-Agent': 'CS2.WTF Frontend'
|
'User-Agent': 'teamflash.rip Frontend'
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ export const load: PageLoad = async ({ parent }) => {
|
|||||||
match,
|
match,
|
||||||
chatData: chat,
|
chatData: chat,
|
||||||
meta: {
|
meta: {
|
||||||
title: `${match.map || 'Match'} Chat - Match ${match.match_id} - CS2.WTF`
|
title: `${match.map || 'Match'} Chat - Match ${match.match_id} - teamflash.rip`
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -152,7 +152,7 @@
|
|||||||
</script>
|
</script>
|
||||||
|
|
||||||
<svelte:head>
|
<svelte:head>
|
||||||
<title>Damage Analysis - CS2.WTF</title>
|
<title>Damage Analysis - teamflash.rip</title>
|
||||||
</svelte:head>
|
</svelte:head>
|
||||||
|
|
||||||
{#if !hasPlayerData}
|
{#if !hasPlayerData}
|
||||||
|
|||||||
@@ -258,7 +258,7 @@
|
|||||||
</script>
|
</script>
|
||||||
|
|
||||||
<svelte:head>
|
<svelte:head>
|
||||||
<title>Match Details - CS2.WTF</title>
|
<title>Match Details - teamflash.rip</title>
|
||||||
</svelte:head>
|
</svelte:head>
|
||||||
|
|
||||||
{#if !hasPlayerData}
|
{#if !hasPlayerData}
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ export const load: PageLoad = async ({ parent }) => {
|
|||||||
match,
|
match,
|
||||||
weaponsData: weapons,
|
weaponsData: weapons,
|
||||||
meta: {
|
meta: {
|
||||||
title: `${match.map || 'Match'} Details - Match ${match.match_id} - CS2.WTF`
|
title: `${match.map || 'Match'} Details - Match ${match.match_id} - teamflash.rip`
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -8,7 +8,7 @@ export const load: PageLoad = async ({ parent }) => {
|
|||||||
match,
|
match,
|
||||||
roundsData: rounds,
|
roundsData: rounds,
|
||||||
meta: {
|
meta: {
|
||||||
title: `${match.map || 'Match'} Economy - Match ${match.match_id} - CS2.WTF`
|
title: `${match.map || 'Match'} Economy - Match ${match.match_id} - teamflash.rip`
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -64,17 +64,17 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
const columns = [
|
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,
|
key: 'enemies_blinded' as const,
|
||||||
label: 'Enemies Blinded',
|
label: 'Victims (Correct)',
|
||||||
sortable: true,
|
sortable: true,
|
||||||
align: 'center' as const,
|
align: 'center' as const,
|
||||||
width: '150px'
|
width: '150px'
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
key: 'avg_blind_duration' as const,
|
key: 'avg_blind_duration' as const,
|
||||||
label: 'Avg Duration (s)',
|
label: 'Avg Suffering (s)',
|
||||||
sortable: true,
|
sortable: true,
|
||||||
align: 'center' as const,
|
align: 'center' as const,
|
||||||
format: (value: string | number | boolean, _row: FlashStat) => `${value as string}s`,
|
format: (value: string | number | boolean, _row: FlashStat) => `${value as string}s`,
|
||||||
@@ -82,21 +82,21 @@
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
key: 'flash_assists' as const,
|
key: 'flash_assists' as const,
|
||||||
label: 'Flash Assists',
|
label: 'Actually Useful',
|
||||||
sortable: true,
|
sortable: true,
|
||||||
align: 'center' as const,
|
align: 'center' as const,
|
||||||
width: '130px'
|
width: '130px'
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
key: 'teammates_blinded' as const,
|
key: 'teammates_blinded' as const,
|
||||||
label: 'Team Flashed',
|
label: 'Friendly Crimes',
|
||||||
sortable: true,
|
sortable: true,
|
||||||
align: 'center' as const,
|
align: 'center' as const,
|
||||||
width: '130px'
|
width: '130px'
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
key: 'self_blinded' as const,
|
key: 'self_blinded' as const,
|
||||||
label: 'Self Flashed',
|
label: 'Self-Inflicted L',
|
||||||
sortable: true,
|
sortable: true,
|
||||||
align: 'center' as const,
|
align: 'center' as const,
|
||||||
width: '130px'
|
width: '130px'
|
||||||
@@ -112,7 +112,8 @@
|
|||||||
<div class="text-3xl font-bold text-base-content">
|
<div class="text-3xl font-bold text-base-content">
|
||||||
{teamATotals.total_enemies_blinded + teamBTotals.total_enemies_blinded}
|
{teamATotals.total_enemies_blinded + teamBTotals.total_enemies_blinded}
|
||||||
</div>
|
</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>
|
||||||
|
|
||||||
<Card padding="lg">
|
<Card padding="lg">
|
||||||
@@ -120,17 +121,17 @@
|
|||||||
<div class="text-3xl font-bold text-base-content">
|
<div class="text-3xl font-bold text-base-content">
|
||||||
{teamATotals.total_flash_assists + teamBTotals.total_flash_assists}
|
{teamATotals.total_flash_assists + teamBTotals.total_flash_assists}
|
||||||
</div>
|
</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>
|
||||||
|
|
||||||
<Card padding="lg">
|
<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">
|
<div class="text-3xl font-bold text-base-content">
|
||||||
{((teamATotals.total_enemy_blind_time + teamBTotals.total_enemy_blind_time) / 1000).toFixed(
|
{flashStats.reduce((sum, p) => sum + p.teammates_blinded, 0)}
|
||||||
1
|
|
||||||
)}s
|
|
||||||
</div>
|
</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>
|
</Card>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -176,9 +177,9 @@
|
|||||||
<!-- Flash Effectiveness Leaderboard -->
|
<!-- Flash Effectiveness Leaderboard -->
|
||||||
<Card padding="none">
|
<Card padding="none">
|
||||||
<div class="p-6">
|
<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">
|
<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>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -204,18 +205,28 @@
|
|||||||
<!-- Info Box -->
|
<!-- Info Box -->
|
||||||
<Card padding="lg" variant="elevated">
|
<Card padding="lg" variant="elevated">
|
||||||
<div class="text-sm text-base-content/60">
|
<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">
|
<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>
|
<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>
|
||||||
<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>
|
||||||
<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>
|
</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>
|
</div>
|
||||||
</Card>
|
</Card>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -189,7 +189,7 @@
|
|||||||
</script>
|
</script>
|
||||||
|
|
||||||
<svelte:head>
|
<svelte:head>
|
||||||
<title>Match Weapons - CS2.WTF</title>
|
<title>Match Weapons - teamflash.rip</title>
|
||||||
</svelte:head>
|
</svelte:head>
|
||||||
|
|
||||||
{#if !hasWeaponsData}
|
{#if !hasWeaponsData}
|
||||||
|
|||||||
@@ -434,7 +434,7 @@
|
|||||||
</script>
|
</script>
|
||||||
|
|
||||||
<svelte:head>
|
<svelte:head>
|
||||||
<title>Matches - CS2.WTF</title>
|
<title>Matches - teamflash.rip</title>
|
||||||
</svelte:head>
|
</svelte:head>
|
||||||
|
|
||||||
<!-- Export Toast Notification -->
|
<!-- Export Toast Notification -->
|
||||||
|
|||||||
@@ -27,8 +27,9 @@ export const load: PageLoad = async ({ url }) => {
|
|||||||
playerId
|
playerId
|
||||||
},
|
},
|
||||||
meta: {
|
meta: {
|
||||||
title: 'Browse Matches - CS2.WTF',
|
title: 'Browse Matches - teamflash.rip',
|
||||||
description: 'Browse and search through CS2 matchmaking games with detailed filters.'
|
description:
|
||||||
|
'Browse CS2 matches and see who is blinding the competition (and their teammates).'
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
} catch (error) {
|
} catch (error) {
|
||||||
@@ -44,8 +45,9 @@ export const load: PageLoad = async ({ url }) => {
|
|||||||
nextPageTime: undefined,
|
nextPageTime: undefined,
|
||||||
filters: { map, playerId },
|
filters: { map, playerId },
|
||||||
meta: {
|
meta: {
|
||||||
title: 'Browse Matches - CS2.WTF',
|
title: 'Browse Matches - teamflash.rip',
|
||||||
description: 'Browse and search through CS2 matchmaking games with detailed filters.'
|
description:
|
||||||
|
'Browse CS2 matches and see who is blinding the competition (and their teammates).'
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -53,8 +53,8 @@ export const load: PageLoad = async ({ params }) => {
|
|||||||
recentMatches: matchesData.matches.slice(0, 4), // Show 4 in recent matches section
|
recentMatches: matchesData.matches.slice(0, 4), // Show 4 in recent matches section
|
||||||
playerStats, // Full stats for charts
|
playerStats, // Full stats for charts
|
||||||
meta: {
|
meta: {
|
||||||
title: `${profile.name} - Player Profile | CS2.WTF`,
|
title: `${profile.name} - Player Profile | teamflash.rip`,
|
||||||
description: `View ${profile.name}'s CS2 statistics, match history, and performance metrics.`
|
description: `View ${profile.name}'s CS2 statistics, flash history, and how often they blind their own team.`
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
} catch (err) {
|
} catch (err) {
|
||||||
|
|||||||
@@ -5,7 +5,7 @@
|
|||||||
</script>
|
</script>
|
||||||
|
|
||||||
<svelte:head>
|
<svelte:head>
|
||||||
<title>Players - CS2.WTF</title>
|
<title>Players - teamflash.rip</title>
|
||||||
</svelte:head>
|
</svelte:head>
|
||||||
|
|
||||||
<div class="container mx-auto px-4 py-8">
|
<div class="container mx-auto px-4 py-8">
|
||||||
|
|||||||
@@ -7,8 +7,9 @@ import type { PageLoad } from './$types';
|
|||||||
export const load: PageLoad = async () => {
|
export const load: PageLoad = async () => {
|
||||||
return {
|
return {
|
||||||
meta: {
|
meta: {
|
||||||
title: 'Search Players - CS2.WTF',
|
title: 'Search Players - teamflash.rip',
|
||||||
description: 'Search and browse CS2 player profiles with detailed statistics.'
|
description:
|
||||||
|
'Search CS2 players and expose their flash crime history. Know who to mute before the match.'
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -4,10 +4,10 @@
|
|||||||
</script>
|
</script>
|
||||||
|
|
||||||
<svelte:head>
|
<svelte:head>
|
||||||
<title>Privacy Policy | CS2.WTF</title>
|
<title>Privacy Policy | teamflash.rip</title>
|
||||||
<meta
|
<meta
|
||||||
name="description"
|
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>
|
</svelte:head>
|
||||||
|
|
||||||
@@ -31,9 +31,9 @@
|
|||||||
<Card padding="lg">
|
<Card padding="lg">
|
||||||
<h2 class="mb-4 text-2xl font-bold text-base-content">Introduction</h2>
|
<h2 class="mb-4 text-2xl font-bold text-base-content">Introduction</h2>
|
||||||
<p class="text-base-content/80">
|
<p class="text-base-content/80">
|
||||||
CS2.WTF ("we", "our", or "us") is committed to protecting your privacy. This Privacy Policy
|
teamflash.rip ("we", "our", or "us") is committed to protecting your privacy. This Privacy
|
||||||
explains how we collect, use, and safeguard your information when you use our CS2 match
|
Policy explains how we collect, use, and safeguard your information when you use our CS2 match
|
||||||
statistics and analysis platform.
|
statistics and flash crime analysis platform.
|
||||||
</p>
|
</p>
|
||||||
</Card>
|
</Card>
|
||||||
|
|
||||||
@@ -210,7 +210,7 @@
|
|||||||
<!-- Footer Note -->
|
<!-- Footer Note -->
|
||||||
<div class="text-center text-sm text-base-content/60">
|
<div class="text-center text-sm text-base-content/60">
|
||||||
<p>
|
<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.
|
property of their respective owners.
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
import type { RequestHandler } from './$types';
|
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
|
* Generate robots.txt for search engine crawlers
|
||||||
|
|||||||
@@ -1,7 +1,7 @@
|
|||||||
import type { RequestHandler } from './$types';
|
import type { RequestHandler } from './$types';
|
||||||
import { matchesAPI } from '$lib/api/matches';
|
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
|
* Generate XML sitemap for SEO
|
||||||
|
|||||||
Reference in New Issue
Block a user