64 Commits

Author SHA1 Message Date
be89c68f89 Add TODO document for CS2.WTF rewrite 2025-11-04 18:35:57 +01:00
9ab7ee91ea refactor!: Clear out legacy code for rewrite. 2025-11-04 18:35:46 +01:00
408ee9df1e switched to woodpecker
All checks were successful
ci/someci/push/woodpecker Pipeline was successful
2023-03-15 18:31:57 +01:00
36fbe8a685 updated source links
All checks were successful
CSGOWTF/csgowtf/pipeline/pr-master This commit looks good
CSGOWTF/csgowtf/pipeline/head This commit looks good
2023-03-01 21:55:06 +01:00
110586942d updated yarn & deps
All checks were successful
CSGOWTF/csgowtf/pipeline/head This commit looks good
2023-03-01 21:49:45 +01:00
515de7f747 updated deps
All checks were successful
CSGOWTF/csgowtf/pipeline/pr-master This commit looks good
CSGOWTF/csgowtf/pipeline/head This commit looks good
2022-12-07 07:14:08 +01:00
2a541196a4 switched to cookieless tracking
All checks were successful
CSGOWTF/csgowtf/pipeline/head This commit looks good
2022-12-07 06:50:03 +01:00
78da0877c7 cleanup anubis logo
Some checks are pending
CSGOWTF/csgowtf/pipeline/pr-master Build queued...
CSGOWTF/csgowtf/pipeline/head This commit looks good
2022-11-24 20:29:12 +01:00
0739d3bf7b fixed OpenSans Variable usage in other pages
All checks were successful
CSGOWTF/csgowtf/pipeline/pr-master This commit looks good
CSGOWTF/csgowtf/pipeline/head This commit looks good
2022-11-22 17:14:09 +01:00
5279267c8e fixed variable font not displaying correctly
All checks were successful
CSGOWTF/csgowtf/pipeline/pr-master This commit looks good
CSGOWTF/csgowtf/pipeline/head This commit looks good
2022-11-19 16:17:56 +01:00
b3dc4c3d73 new map icons
All checks were successful
CSGOWTF/csgowtf/pipeline/pr-master This commit looks good
CSGOWTF/csgowtf/pipeline/head This commit looks good
2022-11-19 02:54:22 +01:00
f65fc0a0ea fixed fonts; fixed relative url paths
All checks were successful
CSGOWTF/csgowtf/pipeline/pr-master This commit looks good
CSGOWTF/csgowtf/pipeline/head This commit looks good
2022-11-14 01:28:57 +01:00
befc14d894 updated core-js 2022-11-14 01:27:49 +01:00
e33614862e updated deps
All checks were successful
CSGOWTF/csgowtf/pipeline/pr-master This commit looks good
CSGOWTF/csgowtf/pipeline/head This commit looks good
2022-11-06 00:23:05 +01:00
3ca1dfe310 Version 1.0.8 (#72)
All checks were successful
CSGOWTF/csgowtf/pipeline/head This commit looks good
Reviewed-on: https://git.harting.dev/CSGOWTF/csgowtf/pulls/72
2022-08-17 12:44:15 +02:00
2b188b089c added discard old builds
Some checks are pending
CSGOWTF/csgowtf/pipeline/pr-master Build queued...
CSGOWTF/csgowtf/pipeline/head This commit looks good
2022-06-23 00:28:48 +02:00
0ccb76345e added new map screenshots
All checks were successful
CSGOWTF/csgowtf/pipeline/pr-master This commit looks good
CSGOWTF/csgowtf/pipeline/head This commit looks good
2022-02-22 12:22:38 +01:00
33c11dd391 version 1.0.7
All checks were successful
CSGOWTF/csgowtf/pipeline/head This commit looks good
CSGOWTF/csgowtf/pipeline/pr-master This commit looks good
2022-02-22 12:06:16 +01:00
420f4b141e new map icons
All checks were successful
CSGOWTF/csgowtf/pipeline/head This commit looks good
2022-02-22 12:05:30 +01:00
9c7834f443 set expiredate for cookies to infinity
All checks were successful
CSGOWTF/csgowtf/pipeline/head This commit looks good
2022-02-21 05:29:42 +01:00
800e45fe96 updated readme and added new badges 2022-02-21 05:23:13 +01:00
3963f6decf fixed #69
All checks were successful
CSGOWTF/csgowtf/pipeline/head This commit looks good
2022-02-13 01:33:43 +01:00
9ff510a9f6 update to version 1.0.6 (package updates + translate function for match-chat)
All checks were successful
CSGOWTF/csgowtf/pipeline/pr-master This commit looks good
CSGOWTF/csgowtf/pipeline/head This commit looks good
2022-02-12 03:35:10 +01:00
3c43788494 some minor bugfixes with the background
All checks were successful
CSGOWTF/csgowtf/pipeline/head This commit looks good
2022-02-11 21:34:23 +01:00
8d07256c57 update to 1.0.5
All checks were successful
CSGOWTF/csgowtf/pipeline/pr-master This commit looks good
CSGOWTF/csgowtf/pipeline/head This commit looks good
2022-02-09 03:04:47 +01:00
fb0cdf5d8e fixed stuff on player match table
All checks were successful
CSGOWTF/csgowtf/pipeline/head This commit looks good
2022-02-04 19:38:04 +01:00
11a30e2dba updated meta tags
All checks were successful
CSGOWTF/csgowtf/pipeline/head This commit looks good
2022-02-04 19:35:13 +01:00
1369660e64 fixed bug with favicons not loading
All checks were successful
CSGOWTF/csgowtf/pipeline/head This commit looks good
2022-02-04 19:26:01 +01:00
d9e4891510 fixed #65
All checks were successful
CSGOWTF/csgowtf/pipeline/head This commit looks good
2022-02-04 16:30:01 +01:00
e2cb8e20fa bumped version to 1.0.4 & updated deps
All checks were successful
CSGOWTF/csgowtf/pipeline/pr-master This commit looks good
CSGOWTF/csgowtf/pipeline/head This commit looks good
2022-02-04 15:11:58 +01:00
f64844c132 adjusted width of text on home
All checks were successful
CSGOWTF/csgowtf/pipeline/head This commit looks good
2022-02-03 21:26:45 +01:00
79b3c9a2f7 updated info-table on home
All checks were successful
CSGOWTF/csgowtf/pipeline/head This commit looks good
2022-02-03 20:20:18 +01:00
ceaad77b35 updated nav-brand
All checks were successful
CSGOWTF/csgowtf/pipeline/head This commit looks good
2022-02-03 19:27:54 +01:00
979edda905 fixed bug with background image
All checks were successful
CSGOWTF/csgowtf/pipeline/head This commit looks good
2022-02-03 18:20:31 +01:00
18f9796365 updated css
All checks were successful
CSGOWTF/csgowtf/pipeline/head This commit looks good
2022-02-03 17:49:43 +01:00
ededd0b292 updated chat display
All checks were successful
CSGOWTF/csgowtf/pipeline/head This commit looks good
2022-02-03 17:24:30 +01:00
100b447633 updated cheater-display on chat
All checks were successful
CSGOWTF/csgowtf/pipeline/head This commit looks good
2022-02-03 16:59:22 +01:00
45ab9887cf added tick_rate + condition to display chat
All checks were successful
CSGOWTF/csgowtf/pipeline/head This commit looks good
2022-02-03 16:37:42 +01:00
4f27e8dd16 added vac icon to chat + changed chat url
All checks were successful
CSGOWTF/csgowtf/pipeline/head This commit looks good
2022-02-03 16:15:58 +01:00
38d4b7d961 updated broken icon in chat history 4
All checks were successful
CSGOWTF/csgowtf/pipeline/head This commit looks good
2022-02-03 15:39:05 +01:00
30f394c116 updated broken icon in chat history 3
All checks were successful
CSGOWTF/csgowtf/pipeline/head This commit looks good
2022-02-03 15:34:48 +01:00
f26324c866 updated broken icon in chat history 2
All checks were successful
CSGOWTF/csgowtf/pipeline/head This commit looks good
2022-02-03 15:32:56 +01:00
1c3ca5013a updated broken icon in chat history
All checks were successful
CSGOWTF/csgowtf/pipeline/head This commit looks good
2022-02-03 15:20:03 +01:00
d134d03fb7 fixed #41
All checks were successful
CSGOWTF/csgowtf/pipeline/head This commit looks good
2022-02-03 15:15:14 +01:00
7114ca2479 added Chat-History to matches
All checks were successful
CSGOWTF/csgowtf/pipeline/head This commit looks good
2022-02-03 14:55:22 +01:00
2b4b0d082c fixed match-route over-complication 2022-02-03 13:36:36 +01:00
378a5f807c fixed #59
All checks were successful
CSGOWTF/csgowtf/pipeline/head This commit looks good
2022-02-03 13:13:59 +01:00
9c2331846b fix-attempt 4 on issue 59
All checks were successful
CSGOWTF/csgowtf/pipeline/head This commit looks good
2022-02-03 13:10:36 +01:00
92fbe53008 fix-attempt 3 on issue 59
All checks were successful
CSGOWTF/csgowtf/pipeline/head This commit looks good
2022-02-03 13:03:35 +01:00
6c2da805f0 fix-attempt 2 on issue 59
All checks were successful
CSGOWTF/csgowtf/pipeline/head This commit looks good
2022-02-03 12:57:48 +01:00
6b0dceeac0 fix-attempt on issue 59
All checks were successful
CSGOWTF/csgowtf/pipeline/head This commit looks good
2022-02-03 12:53:35 +01:00
3bcb2d6090 fixed #58
All checks were successful
CSGOWTF/csgowtf/pipeline/head This commit looks good
2022-02-03 12:29:20 +01:00
28d31a865c updated api-call error-handling 2022-02-03 12:26:18 +01:00
c5d64fd196 added toUppercase for authcode
All checks were successful
CSGOWTF/csgowtf/pipeline/head This commit looks good
2022-02-02 22:23:41 +01:00
8a8a58fe88 updated info-modal
All checks were successful
CSGOWTF/csgowtf/pipeline/head This commit looks good
2022-02-02 22:11:57 +01:00
23bc01d46f fixed tracking api 2022-02-02 22:02:28 +01:00
b6369e56c0 updated match page to highlight winner green (even if match was surrendered)
All checks were successful
CSGOWTF/csgowtf/pipeline/head This commit looks good
2022-02-02 19:59:24 +01:00
12ea324367 moved images from assets to public
All checks were successful
CSGOWTF/csgowtf/pipeline/head This commit looks good
2022-02-02 19:48:07 +01:00
25b05e9b31 added info-modal + updated error handling
All checks were successful
CSGOWTF/csgowtf/pipeline/head This commit looks good
2022-02-02 19:18:00 +01:00
7fc45c1bb5 updated average team ranks 2022-02-02 12:31:09 +01:00
1916168ba1 updated cookie consent + fixed #57
All checks were successful
CSGOWTF/csgowtf/pipeline/head This commit looks good
2022-02-02 11:55:23 +01:00
4b040fa87b updated prefetch links
All checks were successful
CSGOWTF/csgowtf/pipeline/head This commit looks good
2022-02-02 02:32:48 +01:00
f3ef7b65a8 updated api requests from try/catch to axios handling
All checks were successful
CSGOWTF/csgowtf/pipeline/head This commit looks good
2022-02-02 02:23:42 +01:00
85828dd983 fixed bug on player side-bar 2022-02-01 23:49:17 +01:00
625 changed files with 102776 additions and 105032 deletions

View File

@@ -1,3 +0,0 @@
> 1%
last 2 versions
not dead

View File

@@ -1,10 +0,0 @@
root = true
[*]
end_of_line = lf
insert_final_newline = true
[*.{js,json,yml}]
charset = utf-8
indent_style = space
indent_size = 2

View File

@@ -1,17 +0,0 @@
module.exports = {
root: true,
env: {
node: true
},
'extends': [
'plugin:vue/vue3-essential',
'eslint:recommended'
],
parserOptions: {
parser: 'babel-eslint'
},
rules: {
'no-console': process.env.NODE_ENV === 'production' ? 'warn' : 'off',
'no-debugger': process.env.NODE_ENV === 'production' ? 'warn' : 'off',
}
}

286
.gitignore vendored
View File

@@ -1,286 +0,0 @@
# Created by https://www.toptal.com/developers/gitignore/api/webstorm+all,yarn,windows,linux,node,vuejs
# Edit at https://www.toptal.com/developers/gitignore?templates=webstorm+all,yarn,windows,linux,node,vuejs
### Linux ###
*~
# temporary files which can be created if a process still has a handle open of a deleted file
.fuse_hidden*
# KDE directory preferences
.directory
# Linux trash folder which might appear on any partition or disk
.Trash-*
# .nfs files are created when an open file is removed but is still being accessed
.nfs*
### Node ###
# Logs
logs
*.log
npm-debug.log*
yarn-debug.log*
yarn-error.log*
lerna-debug.log*
.pnpm-debug.log*
# Diagnostic reports (https://nodejs.org/api/report.html)
report.[0-9]*.[0-9]*.[0-9]*.[0-9]*.json
# Runtime data
pids
*.pid
*.seed
*.pid.lock
# Directory for instrumented libs generated by jscoverage/JSCover
lib-cov
# Coverage directory used by tools like istanbul
coverage
*.lcov
# nyc test coverage
.nyc_output
# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files)
.grunt
# Bower dependency directory (https://bower.io/)
bower_components
# node-waf configuration
.lock-wscript
# Compiled binary addons (https://nodejs.org/api/addons.html)
build/Release
# Dependency directories
node_modules/
jspm_packages/
# Snowpack dependency directory (https://snowpack.dev/)
web_modules/
# TypeScript cache
*.tsbuildinfo
# Optional npm cache directory
.npm
# Optional eslint cache
.eslintcache
# Microbundle cache
.rpt2_cache/
.rts2_cache_cjs/
.rts2_cache_es/
.rts2_cache_umd/
# Optional REPL history
.node_repl_history
# Output of 'npm pack'
*.tgz
# Yarn Integrity file
.yarn-integrity
# dotenv environment variables file
.env
.env.test
.env.production
# parcel-bundler cache (https://parceljs.org/)
.cache
.parcel-cache
# Next.js build output
.next
out
# Nuxt.js build / generate output
.nuxt
dist
# Gatsby files
.cache/
# Comment in the public line in if your project uses Gatsby and not Next.js
# https://nextjs.org/blog/next-9-1#public-directory-support
# public
# vuepress build output
.vuepress/dist
# Serverless directories
.serverless/
# FuseBox cache
.fusebox/
# DynamoDB Local files
.dynamodb/
# TernJS port file
.tern-port
# Stores VSCode versions used for testing VSCode extensions
.vscode-test
# yarn v2
.yarn/cache
.yarn/unplugged
.yarn/build-state.yml
.yarn/install-state.gz
.pnp.*
### Node Patch ###
# Serverless Webpack directories
.webpack/
### Vuejs ###
# Recommended template: Node.gitignore
dist/
npm-debug.log
yarn-error.log
### WebStorm+all ###
# Covers JetBrains IDEs: IntelliJ, RubyMine, PhpStorm, AppCode, PyCharm, CLion, Android Studio, WebStorm and Rider
# Reference: https://intellij-support.jetbrains.com/hc/en-us/articles/206544839
# User-specific stuff
.idea/**/workspace.xml
.idea/**/tasks.xml
.idea/**/usage.statistics.xml
.idea/**/dictionaries
.idea/**/shelf
# AWS User-specific
.idea/**/aws.xml
# Generated files
.idea/**/contentModel.xml
# Sensitive or high-churn files
.idea/**/dataSources/
.idea/**/dataSources.ids
.idea/**/dataSources.local.xml
.idea/**/sqlDataSources.xml
.idea/**/dynamic.xml
.idea/**/uiDesigner.xml
.idea/**/dbnavigator.xml
# Gradle
.idea/**/gradle.xml
.idea/**/libraries
# Gradle and Maven with auto-import
# When using Gradle or Maven with auto-import, you should exclude module files,
# since they will be recreated, and may cause churn. Uncomment if using
# auto-import.
# .idea/artifacts
# .idea/compiler.xml
# .idea/jarRepositories.xml
# .idea/modules.xml
# .idea/*.iml
# .idea/modules
# *.iml
# *.ipr
# CMake
cmake-build-*/
# Mongo Explorer plugin
.idea/**/mongoSettings.xml
# File-based project format
*.iws
# IntelliJ
out/
# mpeltonen/sbt-idea plugin
.idea_modules/
# JIRA plugin
atlassian-ide-plugin.xml
# Cursive Clojure plugin
.idea/replstate.xml
# Crashlytics plugin (for Android Studio and IntelliJ)
com_crashlytics_export_strings.xml
crashlytics.properties
crashlytics-build.properties
fabric.properties
# Editor-based Rest Client
.idea/httpRequests
# Android studio 3.1+ serialized cache file
.idea/caches/build_file_checksums.ser
### WebStorm+all Patch ###
# Ignores the whole .idea folder and all .iml files
# See https://github.com/joeblau/gitignore.io/issues/186 and https://github.com/joeblau/gitignore.io/issues/360
.idea/
# Reason: https://github.com/joeblau/gitignore.io/issues/186#issuecomment-249601023
*.iml
modules.xml
.idea/misc.xml
*.ipr
# Sonarlint plugin
.idea/sonarlint
### Windows ###
# Windows thumbnail cache files
Thumbs.db
Thumbs.db:encryptable
ehthumbs.db
ehthumbs_vista.db
# Dump file
*.stackdump
# Folder config file
[Dd]esktop.ini
# Recycle Bin used on file shares
$RECYCLE.BIN/
# Windows Installer files
*.cab
*.msi
*.msix
*.msm
*.msp
# Windows shortcuts
*.lnk
### yarn ###
# https://yarnpkg.com/advanced/qa#which-files-should-be-gitignored
.yarn/*
!.yarn/releases
!.yarn/plugins
!.yarn/sdks
!.yarn/versions
# if you are NOT using Zero-installs, then:
# comment the following lines
#!.yarn/cache
# and uncomment the following lines
.pnp.*
# End of https://www.toptal.com/developers/gitignore/api/webstorm+all,yarn,windows,linux,node,vuejs

43
.woodpecker.yml Normal file
View File

@@ -0,0 +1,43 @@
pipeline:
install dependencies:
image: node:19
commands:
- yarn install --immutable
pull: true
build:
image: node:19
commands:
- yarn build
secrets: [ vue_app_api_url, vue_app_track_url, vue_app_track_id, vue_app_tracking ]
pull: true
deploy:
image: cschlosser/drone-ftps
settings:
hostname:
from_secret: ftp_host
src_dir: "/dist/"
clean_dir: true
secrets: [ ftp_username, ftp_password ]
when:
branch: master
event: [ push, tag ]
status: success
deploy (dev):
image: cschlosser/drone-ftps
settings:
hostname:
from_secret: ftp_host
src_dir: "/dist/"
clean_dir: true
secrets:
- source: ftp_username_dev
target: ftp_username
- source: ftp_password_dev
target: ftp_password
when:
branch: dev
event: [push, tag]
status: success

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -1,7 +0,0 @@
nodeLinker: node-modules
plugins:
- path: .yarn/plugins/@yarnpkg/plugin-interactive-tools.cjs
spec: "@yarnpkg/plugin-interactive-tools"
yarnPath: .yarn/releases/yarn-3.0.2.cjs

60
Jenkinsfile vendored
View File

@@ -1,60 +0,0 @@
pipeline {
agent any
environment {
FTP_HOST = credentials('csgowtf-deploy-host')
LFTP_PASSWORD = credentials('csgowtf-deploy-password')
API_HOST = credentials('csgowtf-api-host')
TRACK_HOST = credentials('csgowtf-track-host')
TRACK_ID = credentials('csgowtf-track-id')
TRACK_DOMAINS = credentials('csgowtf-track-domains')
TRACK = credentials('csgowtf-track')
}
stages {
stage('Prepare') {
steps {
writeFile file: '.env.production', text: 'VUE_APP_API_URL=$API_HOST\nVUE_APP_TRACK_URL=$TRACK_HOST\nVUE_APP_TRACK_ID=$TRACK_ID\nVUE_APP_TRACK_DOMAINS=$TRACK_DOMAINS\nVUE_APP_TRACKING=$TRACK'
}
}
stage('Install Dependencies') {
steps {
sh 'yarn install'
}
}
stage('Build') {
steps {
sh 'yarn build'
archiveArtifacts artifacts: '**/dist/**', excludes: '**/node_modules/**'
}
}
stage('Deploy') {
when {
branch 'master'
expression {
currentBuild.result == null || currentBuild.result == 'SUCCESS'
}
}
environment {
FTP_USERNAME = credentials('csgowtf-deploy-user')
}
steps {
sh 'lftp -u $FTP_USERNAME --env-password -e \'mirror --reverse --verbose --delete --recursion=always dist/ /\' $FTP_HOST'
}
}
stage('Deploy Dev') {
when {
branch 'dev'
expression {
currentBuild.result == null || currentBuild.result == 'SUCCESS'
}
}
environment {
FTP_USERNAME = credentials('csgowtf-deploy-user-dev')
}
steps {
sh 'lftp -u $FTP_USERNAME --env-password -e \'mirror --reverse --verbose --delete --recursion=always dist/ /\' $FTP_HOST'
}
}
}
}

View File

@@ -1,7 +1,17 @@
# CSGOW.TF # CSGOW.TF
[![](https://img.shields.io/badge/license-GPL3-blue)](https://git.harting.dev/CSGOWTF/csgowtf/src/branch/master/LICENSE) [![](https://img.shields.io/liberapay/patrons/CSGOWTF.svg?logo=liberapay)](https://liberapay.com/CSGOWTF/)
Statistics for CS:GO matchmaking matches. [![Vue3](https://img.shields.io/badge/created%20with-Vue3-%2342b883?style=flat-square)](https://vuejs.org/)
[![Go](https://img.shields.io/badge/created%20with-Go-%2379d4fd?style=flat-square)](https://go.dev/)
[![GPL3](https://img.shields.io/badge/licence-GPL3-%23007ec6?style=flat-square)](https://git.harting.dev/CSGOWTF/csgowtf/src/branch/master/LICENSE)
[![Liberapay](https://img.shields.io/badge/donate%20on-LiberaPay-%23f6c915?style=flat-square)](https://liberapay.com/CSGOWTF/)
[![Liberapay patrons](https://img.shields.io/liberapay/patrons/csgowtf?style=flat-square)](https://liberapay.com/CSGOWTF/)
[![Website](https://img.shields.io/website?down_message=down&label=csgow.tf&style=flat-square&up_message=up&url=https%3A%2F%2Fcsgow.tf)](https://csgow.tf/)
<!--[![Typescript](https://img.shields.io/badge/created%20with-typescript-%233178c6?style=flat-square)](https://www.typescriptlang.org/)-->
[![status-badge](https://ci.somegit.dev/api/badges/CSGOWTF/csgowtf/status.svg?branch=master)](https://ci.somegit.dev/CSGOWTF/csgowtf)
### Statistics for CS:GO matchmaking matches.
---
## Backend ## Backend
This is the frontend to the [csgowtfd](https://git.harting.dev/CSGOWTF/csgowtfd) backend. This is the frontend to the [csgowtfd](https://git.harting.dev/CSGOWTF/csgowtfd) backend.

93
TODO.md Normal file
View File

@@ -0,0 +1,93 @@
# CS2.WTF Rewrite TODO
## Phase 0 Kickoff & Research
- [ ] Create and push the `cs2-port` branch from the current default branch.
- [ ] Capture the legacy stack (Vue 3 SPA + Go backend) and existing route map (`/`, `/matches`, `/player/[id]`, `/match/[id]/{economy|details|flashes|damage|chat}`) for reference.
- [ ] Host workshops with stakeholders, shoutcasters, and data consumers to gather CS2-specific requirements (new stats, volumetric smokes, MR12 changes).
- [ ] Audit the `csgowtfd` backend APIs and data models; decide whether to extend or replace services for CS2 telemetry.
- [ ] Document CS2 demo parsing pipeline expectations, storage strategy, and data freshness SLAs.
## Phase 1 Technical Foundations
- [ ] Standardize on Node.js ≥ 18 (add `.nvmrc` / `.tool-versions`) and npm or yarn (lock the choice in documentation).
- [ ] Scaffold a new SvelteKit project with TypeScript in strict mode and commit the baseline to `cs2-port`.
- [ ] Integrate Tailwind CSS with DaisyUI; configure theme tokens, base styles, and dark/light mode support.
- [ ] Add project tooling: ESLint (with Svelte + TypeScript rules), Prettier, `svelte-check`, Stylelint (for Tailwind), and git hooks via Husky + lint-staged.
- [ ] Configure Vitest for unit/component tests and Playwright for E2E smoke tests (headless + CI modes).
- [ ] Set up Vite aliases, environment variable handling, and TypeScript path mappings for domain-driven organization.
- [ ] Update Woodpecker (or preferred CI) pipelines to run install, lint, type-check, test, and build jobs on every push.
## Phase 2 Design System & UX Direction
- [ ] Produce a Figma (or Penpot) design system: typography scale, spacing, color ramps, iconography inspired by modern Counter-Strike 2 visuals.
- [ ] Define DaisyUI themes aligned with CS2 branding, including semantic color tokens for teams, utility types, and economy states.
- [ ] Establish responsive layout grids (mobile-first up to ultrawide) and interaction patterns (hover, focus, press states).
- [ ] Design core components: global navigation, search, tabs, data tables, filters, cards, charts, modals, toasts, and timeline elements.
- [ ] Create motion guidelines (micro-interactions, transitions) that reinforce hierarchy without compromising performance.
- [ ] Run accessibility review on mockups (contrast, color blindness variants, keyboard flows).
## Phase 3 Domain Modeling & Data Layer
- [ ] Define TypeScript interfaces and Zod schemas for CS2 entities: matches, rounds, players, utility events, economy states, chat logs, and metadata.
- [ ] Decide on data access strategy (REST, GraphQL, WebSocket) and outline API contracts with backend engineers.
- [ ] Build a typed API client module with error boundaries, retry/backoff, caching, and cancellation support.
- [ ] Prepare mocked fixtures and MSW handlers for offline development and automated tests.
- [ ] Explore real-time update requirements (live match polling or push) and capture API changes needed on the backend.
## Phase 4 Application Architecture & Routing
- [ ] Plan a route hierarchy using SvelteKit layouts (`src/routes/+layout.svelte`, `routes/matches/+page.svelte`, nested `routes/match/[id]/+page.svelte`, etc.).
- [ ] Implement the global shell: header, footer, persistent search, language switcher, theme toggle, and notification area.
- [ ] Configure `load` functions, universal load guards, and error/skeleton states per route for resilient UX.
- [ ] Introduce cross-route state management (Svelte stores) for filters, user preferences, and shared data caches.
- [ ] Establish analytics and consent handling architecture compatible with SSR.
## Phase 5 Feature Delivery (Parity + Enhancements)
- [ ] Home/Dashboard: featured matches, live queue, top performers, and quick filters with real-time indicators.
- [ ] Matches Index: searchable, filterable list with virtualized tables, map/side filters, rank tiers, and date range pickers.
- [ ] Player Profile (`/player/[id]`): career summary, map win rates, weapon performance, clutch stats, and timeline cards.
- [ ] Match Overview (`/match/[id]`): scoreboard, round-by-round timeline, win probability graph, and MR12 adjustments.
- [ ] Economy View: spend/equipment charts, save rounds, utility purchases, and loss-bonus visualization.
- [ ] Utility/Flashes View: breakdown of utility effectiveness, pop flash timings, volumetric smoke coverage (heatmap/webgl overlays).
- [ ] Damage View: per-round damage charts, headshot percentages, spatial heatmaps using Canvas/WebGL.
- [ ] Chat View: chronological chat feed with role badges, highlight detection, and translation toggle.
- [ ] Introduce CS2-exclusive insights (sky smoke bloom, loadout value changes, new grenade types) and align labels accordingly.
- [ ] Add sharing/export features (downloadable stats, social cards) respecting privacy constraints.
## Phase 6 Localization & Personalization
- [ ] Integrate `sveltekit-i18n` (or equivalent) for multi-language support, starting with English plus priority locales.
- [ ] Externalize all copy into translation files, including validation messages and chart labels.
- [ ] Persist language preference (cookie/localStorage) and sync with SSR.
- [ ] Localize formatting (dates, currency, ranks) using `Intl` APIs and server-aware utilities.
- [ ] Provide user preference storage for theme, metric units, and favorite players/teams.
## Phase 7 Performance, Accessibility & Observability
- [ ] Define and enforce performance budgets (LCP ≤ 2.5s, CLS ≤ 0.1, TTI ≤ 4s) with automated Lighthouse checks.
- [ ] Optimize assets: code splitting, prefetching strategies, image/CDN pipeline, and font loading.
- [ ] Implement progressive enhancement for charts/tables and graceful degradation when JS is disabled.
- [ ] Add runtime error monitoring (e.g., Sentry), structured logging, and privacy-aware analytics.
- [ ] Conduct comprehensive accessibility audits with axe, manual keyboard testing, and screen reader passes.
## Phase 8 Testing & Quality Assurance
- [ ] Write unit tests for components, stores, and utilities (Vitest + Testing Library).
- [ ] Develop integration/E2E scenarios (Playwright) covering match search, player view, and match detail tabs.
- [ ] Set up visual regression snapshots for critical pages via Playwright or Loki.
- [ ] Build load-testing scripts for APIs powering live dashboards (k6 or artillery).
- [ ] Coordinate QA playbook: test matrices, release checklists, and bug triage workflow.
## Phase 9 Deployment & Release Strategy
- [ ] Choose hosting strategy (Node SSR on Fly.io/Vercel/Render or self-hosted) and provision staging/production environments.
- [ ] Configure CI/CD deployment pipelines with environment promotion gates and feature flag toggles.
- [ ] Establish secrets management (e.g., Doppler, Vault, SSM) for API keys and telemetry tokens.
- [ ] Plan data migration/backfill from CS:GO to CS2, including schema evolution and archive policies.
- [ ] Organize beta program, feedback channels, and phased rollout (legacy vs CS2 opt-in).
## Phase 10 Documentation & Handover
- [ ] Update `README.md` with setup, development, testing, and deployment instructions for CS2.WTF.
- [ ] Create architecture decision records (ADRs) for key choices (SvelteKit adoption, data strategy, hosting).
- [ ] Document API contracts, rate limits, and error semantics in an accessible format (OpenAPI + human-readable docs).
- [ ] Prepare contributor guidelines, coding standards, and project board workflow.
- [ ] Schedule knowledge transfer sessions and record walkthrough videos for onboarding.
## Stretch Goals
- [ ] Add authenticated user features: saved searches, match alerts, personalized dashboards.
- [ ] Offer real-time live match viewer with timeline scrubbing and auto-updating stats.
- [ ] Deliver PWA enhancements (offline read-only cache, push notifications when favorites go live).
- [ ] Explore integrations with tournament APIs (Valve, HLTV, FACEIT) to enrich match context.

View File

@@ -1,5 +0,0 @@
module.exports = {
presets: [
'@vue/cli-plugin-babel/preset'
]
}

View File

@@ -1,41 +0,0 @@
{
"name": "csgowtf",
"version": "1.0.3",
"private": true,
"scripts": {
"serve": "vue-cli-service serve",
"build": "vue-cli-service build --mode production",
"lint": "vue-cli-service lint"
},
"dependencies": {
"@popperjs/core": "^2.11.2",
"axios": "^0.25.0",
"bootstrap": "^5.1.3",
"core-js": "^3.20.3",
"dotenv-webpack": "^7.1.0",
"echarts": "^5.3.0",
"fork-awesome": "^1.2.0",
"jquery": "^3.6.0",
"luxon": "^2.3.0",
"string-sanitizer": "^2.0.2",
"vue": "^3.2.29",
"vue-matomo": "^4.1.0",
"vue-router": "^4.0.12",
"vue3-cookies": "^1.0.6",
"vuex": "^4.0.2"
},
"devDependencies": {
"@vue/cli-plugin-babel": "~4.5.15",
"@vue/cli-plugin-eslint": "~4.5.15",
"@vue/cli-plugin-router": "~4.5.15",
"@vue/cli-plugin-vuex": "~4.5.15",
"@vue/cli-service": "~4.5.15",
"@vue/compiler-sfc": "^3.2.29",
"babel-eslint": "^10.1.0",
"eslint": "^6.8.0",
"eslint-plugin-vue": "^7.20.0",
"sass": "^1.49.0",
"sass-loader": "^10.2.1"
},
"packageManager": "yarn@3.0.2"
}

View File

Before

Width:  |  Height:  |  Size: 7.0 KiB

After

Width:  |  Height:  |  Size: 7.0 KiB

View File

Before

Width:  |  Height:  |  Size: 15 KiB

After

Width:  |  Height:  |  Size: 15 KiB

View File

Before

Width:  |  Height:  |  Size: 6.2 KiB

After

Width:  |  Height:  |  Size: 6.2 KiB

View File

Before

Width:  |  Height:  |  Size: 504 B

After

Width:  |  Height:  |  Size: 504 B

View File

Before

Width:  |  Height:  |  Size: 1.0 KiB

After

Width:  |  Height:  |  Size: 1.0 KiB

View File

Before

Width:  |  Height:  |  Size: 1.5 MiB

After

Width:  |  Height:  |  Size: 1.5 MiB

View File

Before

Width:  |  Height:  |  Size: 8.0 KiB

After

Width:  |  Height:  |  Size: 7.9 KiB

View File

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 12 KiB

View File

Before

Width:  |  Height:  |  Size: 3.8 KiB

After

Width:  |  Height:  |  Size: 3.8 KiB

View File

Before

Width:  |  Height:  |  Size: 13 KiB

After

Width:  |  Height:  |  Size: 13 KiB

View File

Before

Width:  |  Height:  |  Size: 6.3 KiB

After

Width:  |  Height:  |  Size: 6.3 KiB

View File

Before

Width:  |  Height:  |  Size: 5.9 KiB

After

Width:  |  Height:  |  Size: 5.9 KiB

View File

Before

Width:  |  Height:  |  Size: 6.2 KiB

After

Width:  |  Height:  |  Size: 6.2 KiB

View File

Before

Width:  |  Height:  |  Size: 1.7 KiB

After

Width:  |  Height:  |  Size: 1.7 KiB

View File

Before

Width:  |  Height:  |  Size: 1.4 KiB

After

Width:  |  Height:  |  Size: 1.4 KiB

View File

Before

Width:  |  Height:  |  Size: 1.4 KiB

After

Width:  |  Height:  |  Size: 1.4 KiB

View File

Before

Width:  |  Height:  |  Size: 3.7 KiB

After

Width:  |  Height:  |  Size: 3.7 KiB

View File

Before

Width:  |  Height:  |  Size: 6.1 KiB

After

Width:  |  Height:  |  Size: 6.1 KiB

BIN
public/images/logo.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 9.5 KiB

View File

@@ -2,14 +2,14 @@
<!-- Created with Inkscape (http://www.inkscape.org/) --> <!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg <svg
width="490.6875" width="495.6875"
height="249.58194" height="254.58194"
viewBox="0 0 490.6875 249.58193" viewBox="0 0 495.6875 254.58193"
version="1.1" version="1.1"
id="svg5" id="svg5"
inkscape:version="1.1.1 (3bf5ae0d25, 2021-09-20)" inkscape:version="1.1.1 (3bf5ae0d25, 2021-09-20, custom)"
sodipodi:docname="csgo-wtf_alt.svg" sodipodi:docname="logo.svg"
inkscape:export-filename="/home/harting/csgo-wtf.png" inkscape:export-filename="/home/cnachtigall/git/WebStorm/csgowtf/public/logo.png"
inkscape:export-xdpi="127.88531" inkscape:export-xdpi="127.88531"
inkscape:export-ydpi="127.88531" inkscape:export-ydpi="127.88531"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
@@ -31,14 +31,14 @@
fit-margin-right="0" fit-margin-right="0"
fit-margin-bottom="0" fit-margin-bottom="0"
inkscape:zoom="1.2304688" inkscape:zoom="1.2304688"
inkscape:cx="337.67618" inkscape:cx="274.2857"
inkscape:cy="221.05396" inkscape:cy="223.8984"
inkscape:window-width="1916" inkscape:window-width="1916"
inkscape:window-height="1142" inkscape:window-height="1026"
inkscape:window-x="320" inkscape:window-x="1920"
inkscape:window-y="18" inkscape:window-y="52"
inkscape:window-maximized="1" inkscape:window-maximized="1"
inkscape:current-layer="text2740" /> inkscape:current-layer="layer1" />
<defs <defs
id="defs2"> id="defs2">
<rect <rect
@@ -52,27 +52,26 @@
inkscape:label="Layer 1" inkscape:label="Layer 1"
inkscape:groupmode="layer" inkscape:groupmode="layer"
id="layer1" id="layer1"
transform="translate(-13.465942,-34.701904)"> transform="translate(-10.965942,-32.201904)">
<g <g
aria-label="CSGO aria-label="CSGO "
"
id="text2740" id="text2740"
style="font-size:192px;line-height:0;letter-spacing:0px;word-spacing:0px"> style="font-size:192px;line-height:0;letter-spacing:0px;word-spacing:0px;stroke:#000000;stroke-width:5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:markers stroke fill">
<path <path
d="m 124.74719,127.60815 q -1.59375,22.03125 -16.3125,34.6875 -14.624998,12.65625 -38.624998,12.65625 -26.25,0 -41.34375,-17.625 -15,-17.71875 -15,-48.5625 v -8.34375 q 0,-19.687496 6.9375,-34.687496 6.9375,-15 19.78125,-22.96875 12.9375,-8.0625 30,-8.0625 23.625,0 38.062498,12.65625 14.4375,12.65625 16.6875,35.53125 H 96.809692 q -1.03125,-13.21875 -7.40625,-19.125 -6.28125,-6 -19.21875,-6 -14.0625,0 -21.09375,10.125 -6.9375,10.03125 -7.125,31.21875 v 10.312496 q 0,22.125 6.65625,32.34375 6.75,10.21875 21.1875,10.21875 13.03125,0 19.40625,-5.90625 6.46875,-6 7.40625,-18.46875 z" d="m 124.74719,127.60815 q -1.59375,22.03125 -16.3125,34.6875 -14.624998,12.65625 -38.624998,12.65625 -26.25,0 -41.34375,-17.625 -15,-17.71875 -15,-48.5625 v -8.34375 q 0,-19.687496 6.9375,-34.687496 6.9375,-15 19.78125,-22.96875 12.9375,-8.0625 30,-8.0625 23.625,0 38.062498,12.65625 14.4375,12.65625 16.6875,35.53125 H 96.809692 q -1.03125,-13.21875 -7.40625,-19.125 -6.28125,-6 -19.21875,-6 -14.0625,0 -21.09375,10.125 -6.9375,10.03125 -7.125,31.21875 v 10.312496 q 0,22.125 6.65625,32.34375 6.75,10.21875 21.1875,10.21875 13.03125,0 19.40625,-5.90625 6.46875,-6 7.40625,-18.46875 z"
style="font-weight:bold;line-height:1.25;font-family:Roboto;-inkscape-font-specification:'Roboto Bold';text-align:end;baseline-shift:baseline;text-anchor:end;fill:#c3a235" style="font-weight:bold;line-height:1.25;font-family:Roboto;-inkscape-font-specification:'Roboto Bold';text-align:end;baseline-shift:baseline;text-anchor:end;fill:#c3a235;stroke:#000000;stroke-width:5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:markers stroke fill"
id="path3650" /> id="path3650" />
<path <path
d="m 213.99719,137.2644 q 0,-7.96875 -5.625,-12.1875 -5.625,-4.3125 -20.25,-9 -14.625,-4.78125 -23.15625,-9.375 -23.25,-12.562496 -23.25,-33.843746 0,-11.0625 6.1875,-19.6875 6.28125,-8.71875 17.90625,-13.59375 11.71875,-4.875 26.25,-4.875 14.625,0 26.0625,5.34375 11.4375,5.25 17.71875,14.90625 6.375,9.65625 6.375,21.9375 h -28.125 q 0,-9.375 -5.90625,-14.53125 -5.90625,-5.25 -16.59375,-5.25 -10.3125,0 -16.03125,4.40625 -5.71875,4.3125 -5.71875,11.4375 0,6.65625 6.65625,11.15625 6.75,4.5 19.78125,8.4375 24,7.21875 34.96875,17.906246 10.96875,10.6875 10.96875,26.625 0,17.71875 -13.40625,27.84375 -13.40625,10.03125 -36.09375,10.03125 -15.75,0 -28.6875,-5.71875 -12.9375,-5.8125 -19.78125,-15.84375 -6.75,-10.03125 -6.75,-23.25 h 28.21875 q 0,22.59375 27,22.59375 10.03125,0 15.65625,-4.03125 5.625,-4.125 5.625,-11.4375 z" d="m 213.99719,137.2644 q 0,-7.96875 -5.625,-12.1875 -5.625,-4.3125 -20.25,-9 -14.625,-4.78125 -23.15625,-9.375 -23.25,-12.562496 -23.25,-33.843746 0,-11.0625 6.1875,-19.6875 6.28125,-8.71875 17.90625,-13.59375 11.71875,-4.875 26.25,-4.875 14.625,0 26.0625,5.34375 11.4375,5.25 17.71875,14.90625 6.375,9.65625 6.375,21.9375 h -28.125 q 0,-9.375 -5.90625,-14.53125 -5.90625,-5.25 -16.59375,-5.25 -10.3125,0 -16.03125,4.40625 -5.71875,4.3125 -5.71875,11.4375 0,6.65625 6.65625,11.15625 6.75,4.5 19.78125,8.4375 24,7.21875 34.96875,17.906246 10.96875,10.6875 10.96875,26.625 0,17.71875 -13.40625,27.84375 -13.40625,10.03125 -36.09375,10.03125 -15.75,0 -28.6875,-5.71875 -12.9375,-5.8125 -19.78125,-15.84375 -6.75,-10.03125 -6.75,-23.25 h 28.21875 q 0,22.59375 27,22.59375 10.03125,0 15.65625,-4.03125 5.625,-4.125 5.625,-11.4375 z"
style="font-weight:bold;line-height:1.25;font-family:Roboto;-inkscape-font-specification:'Roboto Bold';text-align:end;baseline-shift:baseline;text-anchor:end;fill:#c3a235" style="font-weight:bold;line-height:1.25;font-family:Roboto;-inkscape-font-specification:'Roboto Bold';text-align:end;baseline-shift:baseline;text-anchor:end;fill:#c3a235;stroke:#000000;stroke-width:5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:markers stroke fill"
id="path3652" /> id="path3652" />
<path <path
d="m 369.24719,155.8269 q -7.59375,9.09375 -21.46875,14.15625 -13.875,4.96875 -30.75,4.96875 -17.71875,0 -31.125,-7.6875 -13.3125,-7.78125 -20.625,-22.5 -7.21875,-14.71875 -7.40625,-34.59375 v -9.28125 q 0,-20.437496 6.84375,-35.343746 6.9375,-15 19.875,-22.875 13.03125,-7.96875 30.46875,-7.96875 24.28125,0 37.96875,11.625 13.6875,11.53125 16.21875,33.65625 h -27.375 q -1.875,-11.71875 -8.34375,-17.15625 -6.375,-5.4375 -17.625,-5.4375 -14.34375,0 -21.84375,10.78125 -7.5,10.78125 -7.59375,32.062496 v 8.71875 q 0,21.46875 8.15625,32.4375 8.15625,10.96875 23.90625,10.96875 15.84375,0 22.59375,-6.75 V 122.0769 h -25.59375 v -20.71875 h 53.71875 z" d="m 369.24719,155.8269 q -7.59375,9.09375 -21.46875,14.15625 -13.875,4.96875 -30.75,4.96875 -17.71875,0 -31.125,-7.6875 -13.3125,-7.78125 -20.625,-22.5 -7.21875,-14.71875 -7.40625,-34.59375 v -9.28125 q 0,-20.437496 6.84375,-35.343746 6.9375,-15 19.875,-22.875 13.03125,-7.96875 30.46875,-7.96875 24.28125,0 37.96875,11.625 13.6875,11.53125 16.21875,33.65625 h -27.375 q -1.875,-11.71875 -8.34375,-17.15625 -6.375,-5.4375 -17.625,-5.4375 -14.34375,0 -21.84375,10.78125 -7.5,10.78125 -7.59375,32.062496 v 8.71875 q 0,21.46875 8.15625,32.4375 8.15625,10.96875 23.90625,10.96875 15.84375,0 22.59375,-6.75 V 122.0769 h -25.59375 v -20.71875 h 53.71875 z"
style="font-weight:bold;line-height:1.25;font-family:Roboto;-inkscape-font-specification:'Roboto Bold';text-align:end;baseline-shift:baseline;text-anchor:end;fill:#c3a235" style="font-weight:bold;line-height:1.25;font-family:Roboto;-inkscape-font-specification:'Roboto Bold';text-align:end;baseline-shift:baseline;text-anchor:end;fill:#c3a235;stroke:#000000;stroke-width:5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:markers stroke fill"
id="path3654" /> id="path3654" />
<path <path
d="m 504.15344,107.92065 q 0,20.15625 -7.125,35.34375 -7.125,15.1875 -20.4375,23.4375 -13.21875,8.25 -30.375,8.25 -16.96875,0 -30.28125,-8.15625 -13.3125,-8.15625 -20.625,-23.25 -7.3125,-15.1875 -7.40625,-34.875 v -6.75 q 0,-20.156246 7.21875,-35.437496 7.3125,-15.375 20.53125,-23.53125 13.3125,-8.25 30.375,-8.25 17.0625,0 30.28125,8.25 13.3125,8.15625 20.53125,23.53125 7.3125,15.28125 7.3125,35.343746 z m -28.5,-6.1875 q 0,-21.468746 -7.6875,-32.624996 -7.6875,-11.15625 -21.9375,-11.15625 -14.15625,0 -21.84375,11.0625 -7.6875,10.96875 -7.78125,32.249996 v 6.65625 q 0,20.90625 7.6875,32.4375 7.6875,11.53125 22.125,11.53125 14.15625,0 21.75,-11.0625 7.59375,-11.15625 7.6875,-32.4375 z" d="m 504.15344,107.92065 q 0,20.15625 -7.125,35.34375 -7.125,15.1875 -20.4375,23.4375 -13.21875,8.25 -30.375,8.25 -16.96875,0 -30.28125,-8.15625 -13.3125,-8.15625 -20.625,-23.25 -7.3125,-15.1875 -7.40625,-34.875 v -6.75 q 0,-20.156246 7.21875,-35.437496 7.3125,-15.375 20.53125,-23.53125 13.3125,-8.25 30.375,-8.25 17.0625,0 30.28125,8.25 13.3125,8.15625 20.53125,23.53125 7.3125,15.28125 7.3125,35.343746 z m -28.5,-6.1875 q 0,-21.468746 -7.6875,-32.624996 -7.6875,-11.15625 -21.9375,-11.15625 -14.15625,0 -21.84375,11.0625 -7.6875,10.96875 -7.78125,32.249996 v 6.65625 q 0,20.90625 7.6875,32.4375 7.6875,11.53125 22.125,11.53125 14.15625,0 21.75,-11.0625 7.59375,-11.15625 7.6875,-32.4375 z"
style="font-weight:bold;line-height:1.25;font-family:Roboto;-inkscape-font-specification:'Roboto Bold';text-align:end;baseline-shift:baseline;text-anchor:end;fill:#c3a235" style="font-weight:bold;line-height:1.25;font-family:Roboto;-inkscape-font-specification:'Roboto Bold';text-align:end;baseline-shift:baseline;text-anchor:end;fill:#c3a235;stroke:#000000;stroke-width:5;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:markers stroke fill"
id="path3656" /> id="path3656" />
</g> </g>
<text <text
@@ -82,18 +81,18 @@
<g <g
aria-label="WTF" aria-label="WTF"
id="text36805" id="text36805"
style="font-size:133.333px;line-height:1.25;letter-spacing:0px;word-spacing:0px"> style="font-size:133.333px;line-height:1.25;letter-spacing:0px;word-spacing:0px;stroke:#000000;stroke-width:5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:markers stroke fill">
<path <path
d="m 204.87102,256.94016 12.76039,-67.44774 h 19.46609 l -21.02859,94.79142 H 196.4075 l -15.42964,-63.41129 -15.42965,63.41129 H 145.8868 l -21.02859,-94.79142 h 19.46609 l 12.82549,67.31754 15.62496,-67.31754 h 16.53642 z" d="m 204.87102,256.94016 12.76039,-67.44774 h 19.46609 l -21.02859,94.79142 H 196.4075 l -15.42964,-63.41129 -15.42965,63.41129 H 145.8868 l -21.02859,-94.79142 h 19.46609 l 12.82549,67.31754 15.62496,-67.31754 h 16.53642 z"
style="font-weight:bold;font-family:Roboto;-inkscape-font-specification:'Roboto Bold';fill:#ffffff" style="font-weight:bold;font-family:Roboto;-inkscape-font-specification:'Roboto Bold';fill:#ffffff;stroke:#000000;stroke-width:5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:markers stroke fill"
id="path3643" /> id="path3643" />
<path <path
d="m 319.90979,205.31269 h -29.03638 v 78.97115 h -19.5312 v -78.97115 h -28.64576 v -15.82027 h 77.21334 z" d="m 319.90979,205.31269 h -29.03638 v 78.97115 h -19.5312 v -78.97115 h -28.64576 v -15.82027 h 77.21334 z"
style="font-weight:bold;font-family:Roboto;-inkscape-font-specification:'Roboto Bold';fill:#ffffff" style="font-weight:bold;font-family:Roboto;-inkscape-font-specification:'Roboto Bold';fill:#ffffff;stroke:#000000;stroke-width:5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:markers stroke fill"
id="path3645" /> id="path3645" />
<path <path
d="m 388.07367,245.54696 h -37.4999 v 38.73688 h -19.5312 v -94.79142 h 61.71859 v 15.82027 h -42.18739 v 24.47911 h 37.4999 z" d="m 388.07367,245.54696 h -37.4999 v 38.73688 h -19.5312 v -94.79142 h 61.71859 v 15.82027 h -42.18739 v 24.47911 h 37.4999 z"
style="font-weight:bold;font-family:Roboto;-inkscape-font-specification:'Roboto Bold';fill:#ffffff" style="font-weight:bold;font-family:Roboto;-inkscape-font-specification:'Roboto Bold';fill:#ffffff;stroke:#000000;stroke-width:5;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;paint-order:markers stroke fill"
id="path3647" /> id="path3647" />
</g> </g>
</g> </g>

Before

Width:  |  Height:  |  Size: 6.7 KiB

After

Width:  |  Height:  |  Size: 8.0 KiB

View File

Before

Width:  |  Height:  |  Size: 20 KiB

After

Width:  |  Height:  |  Size: 20 KiB

View File

Before

Width:  |  Height:  |  Size: 52 KiB

After

Width:  |  Height:  |  Size: 52 KiB

View File

Before

Width:  |  Height:  |  Size: 70 KiB

After

Width:  |  Height:  |  Size: 71 KiB

View File

Before

Width:  |  Height:  |  Size: 28 KiB

After

Width:  |  Height:  |  Size: 28 KiB

View File

Before

Width:  |  Height:  |  Size: 23 KiB

After

Width:  |  Height:  |  Size: 24 KiB

View File

Before

Width:  |  Height:  |  Size: 18 KiB

After

Width:  |  Height:  |  Size: 18 KiB

View File

Before

Width:  |  Height:  |  Size: 24 KiB

After

Width:  |  Height:  |  Size: 24 KiB

View File

Before

Width:  |  Height:  |  Size: 214 KiB

After

Width:  |  Height:  |  Size: 216 KiB

View File

Before

Width:  |  Height:  |  Size: 210 KiB

After

Width:  |  Height:  |  Size: 212 KiB

View File

Before

Width:  |  Height:  |  Size: 25 KiB

After

Width:  |  Height:  |  Size: 26 KiB

File diff suppressed because it is too large Load Diff

After

Width:  |  Height:  |  Size: 214 KiB

View File

Before

Width:  |  Height:  |  Size: 217 KiB

After

Width:  |  Height:  |  Size: 219 KiB

View File

Before

Width:  |  Height:  |  Size: 214 KiB

After

Width:  |  Height:  |  Size: 216 KiB

View File

Before

Width:  |  Height:  |  Size: 27 KiB

After

Width:  |  Height:  |  Size: 28 KiB

View File

Before

Width:  |  Height:  |  Size: 5.5 KiB

After

Width:  |  Height:  |  Size: 5.5 KiB

View File

Before

Width:  |  Height:  |  Size: 18 KiB

After

Width:  |  Height:  |  Size: 19 KiB

View File

Before

Width:  |  Height:  |  Size: 209 KiB

After

Width:  |  Height:  |  Size: 211 KiB

View File

Before

Width:  |  Height:  |  Size: 212 KiB

After

Width:  |  Height:  |  Size: 214 KiB

View File

Before

Width:  |  Height:  |  Size: 43 KiB

After

Width:  |  Height:  |  Size: 44 KiB

File diff suppressed because one or more lines are too long

After

Width:  |  Height:  |  Size: 74 KiB

View File

Before

Width:  |  Height:  |  Size: 214 KiB

After

Width:  |  Height:  |  Size: 216 KiB

View File

Before

Width:  |  Height:  |  Size: 27 KiB

After

Width:  |  Height:  |  Size: 27 KiB

View File

Before

Width:  |  Height:  |  Size: 11 KiB

After

Width:  |  Height:  |  Size: 11 KiB

View File

Before

Width:  |  Height:  |  Size: 211 KiB

After

Width:  |  Height:  |  Size: 213 KiB

View File

Before

Width:  |  Height:  |  Size: 208 KiB

After

Width:  |  Height:  |  Size: 210 KiB

File diff suppressed because it is too large Load Diff

After

Width:  |  Height:  |  Size: 213 KiB

View File

Before

Width:  |  Height:  |  Size: 212 KiB

After

Width:  |  Height:  |  Size: 214 KiB

View File

Before

Width:  |  Height:  |  Size: 17 KiB

After

Width:  |  Height:  |  Size: 17 KiB

View File

Before

Width:  |  Height:  |  Size: 213 KiB

After

Width:  |  Height:  |  Size: 215 KiB

View File

Before

Width:  |  Height:  |  Size: 278 KiB

After

Width:  |  Height:  |  Size: 281 KiB

View File

Before

Width:  |  Height:  |  Size: 61 KiB

After

Width:  |  Height:  |  Size: 61 KiB

View File

Before

Width:  |  Height:  |  Size: 213 KiB

After

Width:  |  Height:  |  Size: 215 KiB

File diff suppressed because it is too large Load Diff

After

Width:  |  Height:  |  Size: 214 KiB

View File

Before

Width:  |  Height:  |  Size: 27 KiB

After

Width:  |  Height:  |  Size: 28 KiB

View File

Before

Width:  |  Height:  |  Size: 231 KiB

After

Width:  |  Height:  |  Size: 234 KiB

View File

Before

Width:  |  Height:  |  Size: 212 KiB

After

Width:  |  Height:  |  Size: 214 KiB

View File

Before

Width:  |  Height:  |  Size: 212 KiB

After

Width:  |  Height:  |  Size: 214 KiB

View File

Before

Width:  |  Height:  |  Size: 214 KiB

After

Width:  |  Height:  |  Size: 216 KiB

View File

Before

Width:  |  Height:  |  Size: 210 KiB

After

Width:  |  Height:  |  Size: 213 KiB

View File

Before

Width:  |  Height:  |  Size: 211 KiB

After

Width:  |  Height:  |  Size: 213 KiB

File diff suppressed because it is too large Load Diff

After

Width:  |  Height:  |  Size: 214 KiB

View File

Before

Width:  |  Height:  |  Size: 87 KiB

After

Width:  |  Height:  |  Size: 88 KiB

File diff suppressed because it is too large Load Diff

Before

Width:  |  Height:  |  Size: 211 KiB

After

Width:  |  Height:  |  Size: 214 KiB

View File

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 12 KiB

View File

Before

Width:  |  Height:  |  Size: 16 KiB

After

Width:  |  Height:  |  Size: 16 KiB

View File

Before

Width:  |  Height:  |  Size: 211 KiB

After

Width:  |  Height:  |  Size: 213 KiB

View File

Before

Width:  |  Height:  |  Size: 211 KiB

After

Width:  |  Height:  |  Size: 213 KiB

View File

Before

Width:  |  Height:  |  Size: 69 KiB

After

Width:  |  Height:  |  Size: 70 KiB

View File

Before

Width:  |  Height:  |  Size: 26 KiB

After

Width:  |  Height:  |  Size: 27 KiB

View File

Before

Width:  |  Height:  |  Size: 211 KiB

After

Width:  |  Height:  |  Size: 213 KiB

File diff suppressed because it is too large Load Diff

After

Width:  |  Height:  |  Size: 214 KiB

View File

Before

Width:  |  Height:  |  Size: 211 KiB

After

Width:  |  Height:  |  Size: 213 KiB

View File

Before

Width:  |  Height:  |  Size: 208 KiB

After

Width:  |  Height:  |  Size: 210 KiB

View File

Before

Width:  |  Height:  |  Size: 16 KiB

After

Width:  |  Height:  |  Size: 16 KiB

View File

Before

Width:  |  Height:  |  Size: 212 KiB

After

Width:  |  Height:  |  Size: 214 KiB

View File

Before

Width:  |  Height:  |  Size: 214 KiB

After

Width:  |  Height:  |  Size: 216 KiB

View File

Before

Width:  |  Height:  |  Size: 27 KiB

After

Width:  |  Height:  |  Size: 28 KiB

View File

Before

Width:  |  Height:  |  Size: 69 KiB

After

Width:  |  Height:  |  Size: 70 KiB

View File

Before

Width:  |  Height:  |  Size: 30 KiB

After

Width:  |  Height:  |  Size: 30 KiB

View File

Before

Width:  |  Height:  |  Size: 208 KiB

After

Width:  |  Height:  |  Size: 210 KiB

View File

Before

Width:  |  Height:  |  Size: 210 KiB

After

Width:  |  Height:  |  Size: 212 KiB

View File

Before

Width:  |  Height:  |  Size: 44 KiB

After

Width:  |  Height:  |  Size: 44 KiB

View File

Before

Width:  |  Height:  |  Size: 208 KiB

After

Width:  |  Height:  |  Size: 210 KiB

View File

Before

Width:  |  Height:  |  Size: 9.8 KiB

After

Width:  |  Height:  |  Size: 10 KiB

File diff suppressed because it is too large Load Diff

After

Width:  |  Height:  |  Size: 213 KiB

Some files were not shown because too many files have changed in this diff Show More