34 Commits

Author SHA1 Message Date
Rene Arumetsa
5b2ca21b86 Fienta link fix for mobi;e 2026-04-01 17:54:48 +03:00
Arto Reinik
dbee3d1a82 frontend: HeroSection.tsx: fix mailto address 2026-04-01 10:43:12 +03:00
Rene Arumetsa
69a95e0205 Center footer in mobile view 2026-03-31 23:34:27 +03:00
Rene Arumetsa
c005bc06cc Vertical stack on mobile 2026-03-31 23:13:59 +03:00
Rene Arumetsa
425e093f67 Fix fienta link. 2026-03-31 20:41:44 +03:00
Rene Arumetsa
7cf2f36fb4 Merge branch 'teaser-2026' of github.com:Lapikud/tipilan into teaser-2026 2026-03-31 20:30:17 +03:00
Rene Arumetsa
551feba079 Update fienta link 2026-03-31 20:24:09 +03:00
TFT
ed47a53901 add metadataBase 2026-03-31 18:52:35 +03:00
TFT
46b701dc50 add og stuff 2026-03-31 18:51:39 +03:00
TFT
78950cf19e maybe fix the useCountUp hook 2026-03-31 18:41:48 +03:00
Rene Arumetsa
4b66bb0001 Fix the price counting error 2026-03-31 18:29:52 +03:00
Rene Arumetsa
2178ae523e Make bg images absolute 2026-03-31 18:21:07 +03:00
Arto Reinik
bf21ea0b40 frontend: EndSection.tsx: adjust end section for mobile devices 2026-03-31 09:37:43 +03:00
Arto Reinik
6224190c85 frontend: /translations/: add \n to text for better wrapping 2026-03-31 09:37:30 +03:00
Rene Arumetsa
070d1e83ca Update ticket information 2026-03-31 00:59:17 +03:00
Rene Arumetsa
1036fe1f13 Update footer info 2026-03-31 00:36:40 +03:00
Rene Arumetsa
e04999b664 Change npm to bun 2026-03-29 21:07:47 +03:00
TFT
cc67b8411a adjust estonian Mängi section wording 2026-03-29 20:43:23 +03:00
TFT
9552175793 modify compete section copy text 2026-03-29 20:39:35 +03:00
b02cf57205 Fix sponsorship scaling for really small phones 2026-03-26 19:23:36 +02:00
fd26f02a2f Modify layout for mobile, hide unknown prices 2026-03-26 17:12:52 +02:00
Arto Reinik
e2f3047602 frontend: Footer.tsx: adjust font weights 2026-03-26 13:02:09 +02:00
Arto Reinik
d03dc421e2 frontend: Footer.tsx: replace flex with grid for social links 2026-03-26 12:57:27 +02:00
Arto Reinik
9956e67db6 frontend: Footer.tsx: fix footer gaps 2026-03-26 12:54:53 +02:00
Arto Reinik
0ddca1b751 frontend: Footer.tsx: fix mobile footer 2026-03-26 12:53:12 +02:00
Arto Reinik
a6287a9298 update package-lock 2026-03-26 12:39:57 +02:00
Arto Reinik
1ce8c04b64 frontend: fix hero section for mobile 2026-03-26 12:38:35 +02:00
AlacrisDevs
7f7b82fdc4 Button style changes, created secondary class 2026-03-26 10:58:58 +02:00
AlacrisDevs
90f6bdc300 Small mobile responsiveness changes, few lines in translation changed for better CTA 2026-03-26 10:43:13 +02:00
Katri
8705551269 adjust floating images colorscale 2026-03-24 10:02:19 +02:00
AlacrisDevs
792f14be3e Prod ready, heavily optimized images with automatic scripts 2026-03-23 10:08:41 +02:00
Alacris
b604442c46 Countdown colons added 2026-03-23 00:18:56 +02:00
Alacris
d6950317af Responsiveness changes, new logo 2026-03-23 00:12:34 +02:00
Alacris
47a8a5857f Initial commit 2026-03-22 23:50:21 +02:00
204 changed files with 1282 additions and 24894 deletions

View File

@@ -2,24 +2,21 @@ name: build
on: on:
workflow_call: workflow_call:
inputs:
ref:
description: Branch or tag to checkout
required: false
default: development
type: string
secrets: secrets:
USER_AUTH: USER_AUTH:
required: true required: true
jobs: jobs:
build: build:
runs-on: prox-2 runs-on: prox-1
steps: steps:
- name: Clear .next cache
env:
SUDO_PASSWORD: ${{ secrets.USER_AUTH }}
run: echo "$SUDO_PASSWORD" | sudo -S rm -rf $GITHUB_WORKSPACE/.next
- name: Checkout code - name: Checkout code
uses: actions/checkout@v4 uses: actions/checkout@v4
with:
ref: ${{ inputs.ref }}
- name: Setup Bun - name: Setup Bun
uses: oven-sh/setup-bun@v2 uses: oven-sh/setup-bun@v2
@@ -31,15 +28,13 @@ jobs:
- name: Ensure symlink to database before Drizzle migrations - name: Ensure symlink to database before Drizzle migrations
run: | run: |
rm -rf "$GITHUB_WORKSPACE/data" rm -rf $GITHUB_WORKSPACE/data
ln -s /home/github/data "$GITHUB_WORKSPACE/data" ln -s ~/data $GITHUB_WORKSPACE/data
- name: Generate Drizzle schema - name: Generate Drizzle schema
if: ${{ inputs.ref == 'main' }}
run: bun drizzle-kit generate run: bun drizzle-kit generate
- name: Run Drizzle migrations - name: Run Drizzle migrations
if: ${{ inputs.ref == 'main' }}
run: bun drizzle-kit migrate run: bun drizzle-kit migrate
- name: Build project - name: Build project

View File

@@ -8,7 +8,7 @@ on:
jobs: jobs:
deploy: deploy:
runs-on: prox-2 runs-on: prox-1
steps: steps:
- name: Restart NextJS service - name: Restart NextJS service
env: env:

View File

@@ -3,8 +3,7 @@ name: main
on: on:
push: push:
branches: branches:
- development - main
workflow_dispatch:
jobs: jobs:
build: build:

Binary file not shown.

Before

Width:  |  Height:  |  Size: 135 KiB

105
README.md
View File

@@ -1,46 +1,83 @@
# 🎮 TIPILAN # TipiLAN
**TIPILAN** is the official web platform for the TipiLAN LAN event — built using [Next.js](https://nextjs.org) and powered by the lightning-fast [Bun](https://bun.sh) runtime. Official website for **TipiLAN** — Estonia's largest student-organised LAN event.
> ⚠️ This is a work in progress! Contributions welcome. > Work in progress. Event date: **September 11, 2026**.
--- ---
## 🚀 Features ## Tech Stack
- Event information & schedule - [Next.js 16](https://nextjs.org/) — App Router, SSG, Turbopack
- Stream - [React 19](https://react.dev/)
- Responsive dark-themed UI - [TypeScript 5](https://www.typescriptlang.org/)
- Built with Next.js, styled with Tailwind (if applicable), powered by Bun - [Tailwind CSS 4](https://tailwindcss.com/)
- [next-intl](https://next-intl.dev/) — ET / EN localisation
- [react-icons](https://react-icons.github.io/react-icons/)
Requires **Bun**.
--- ---
## 📦 Tech Stack ## Quickstart
- [Next.js](https://nextjs.org/)
- [Bun](https://bun.sh/)
- [TypeScript](https://www.typescriptlang.org/)
- [React](https://reactjs.org/)
- [Tailwind CSS](https://tailwindcss.com/) *(if used)*
---
## 🛠️ Setup Instructions
📖 See [`docs/SETUP.md`](./docs/SETUP.md) for a full setup guide on:
- ✅ Windows (native)
- 🐧 Windows with WSL
- 🐧 Linux (Ubuntu, Arch, Fedora, etc.)
---
## 🧪 Scripts
```bash ```bash
bun dev # Run development server bun install
bun run build # Build for production bun dev
bun start # Start production server ```
bun test # Run tests (if configured) Open [http://localhost:3000](http://localhost:3000) — redirects to `/et` by default.
bun run lint # Run linter (if configured)
---
## Scripts
```bash
bun dev # Dev server (Turbopack, localhost:3000)
bun run build # Production build (outputs SSG for /et and /en)
bun start # Serve production build
bun lint:fix # ESLint with auto-fix
```
---
## Project Structure
```
src/
app/[locale]/ # Locale-based pages (et, en)
components/teaser/ # HeroSection, CarouselSection, EndSection, Footer
components/ # LanguageSwitcher, TeaserPage
i18n/ # next-intl routing + request config
lib/ # blurPlaceholders.ts (auto-generated)
proxy.ts # next-intl routing middleware
translations/ # et.json, en.json
public/images/
backgrounds/ # Full-viewport background WebPs
heros/ # Character/hero image WebPs
flags/ # Language switcher SVGs
original/ # Original PNG sources (not served)
scripts/ # Image processing utilities
```
---
## Image Utilities
When adding or replacing images, re-run:
```bash
# Convert new PNGs → WebP (quality 85)
bun scripts/convert-images.mjs
# Regenerate blur placeholders for all images
bun scripts/gen-blur-placeholders.mjs
```
---
## Localisation
Translation files live in `translations/et.json` and `translations/en.json`.
Routing is handled by `src/proxy.ts``/` redirects to `/et` (default locale).

View File

@@ -1,21 +0,0 @@
{
"$schema": "https://ui.shadcn.com/schema.json",
"style": "new-york",
"rsc": true,
"tsx": true,
"tailwind": {
"config": "",
"css": "src/app/globals.css",
"baseColor": "neutral",
"cssVariables": true,
"prefix": ""
},
"aliases": {
"components": "@/components",
"utils": "@/lib/utils",
"ui": "@/components/ui",
"lib": "@/lib",
"hooks": "@/hooks"
},
"iconLibrary": "lucide"
}

View File

@@ -1,55 +0,0 @@
# Setup
## Prerequisites
- Git
- Bun
- If on Windows, it's recommended to use WSL (Windows Subsystem for Linux) and do the following steps there.
## Installation
1. Clone the repository:
```bash
git clone https://github.com/Lapikud/tipilan.git
```
2. Install bun:
```bash
curl -fsSL https://bun.sh/install | bash
```
3. Install dependencies:
```bash
cd tipilan
bun install
```
4. Run the application:
```bash
bun --bun run dev
```
(ONLY FOR PRODUCTION!!) Build the application:
```bash
bun --bun run build
```
## Accessing the Application
- The application is now running at `http://localhost:3000`.
## Git branch
- The current production branch is `main`.
- Please make sure you make changes in your branch before creating a pull request.
### Making git branch
- Create a new branch:
```bash
git checkout -b <branch-name>
```
- Commit your changes:
```bash
git add .
git commit -m "<commit-message>"
```
- Push your branch:
```bash
git push origin <branch-name>
```
- Create a pull request:
Go to Github,
open up this project's repository and make a new pull request.
```

View File

@@ -1,10 +0,0 @@
import { defineConfig } from "drizzle-kit";
export default defineConfig({
schema: "./src/db/schema/schema.ts",
out: "./migrations",
dialect: "sqlite",
dbCredentials: {
url: "data/tipilan.db",
},
});

View File

@@ -1,43 +0,0 @@
CREATE TABLE `member` (
`id` text PRIMARY KEY NOT NULL,
`user_id` text NOT NULL,
`team_id` text,
`role` text NOT NULL,
FOREIGN KEY (`user_id`) REFERENCES `user`(`id`) ON UPDATE no action ON DELETE cascade,
FOREIGN KEY (`team_id`) REFERENCES `team`(`id`) ON UPDATE no action ON DELETE cascade
);
--> statement-breakpoint
CREATE UNIQUE INDEX `user_team_unique` ON `member` (`user_id`,`team_id`);--> statement-breakpoint
CREATE TABLE `team` (
`id` text PRIMARY KEY NOT NULL,
`name` text NOT NULL
);
--> statement-breakpoint
CREATE TABLE `tournament_team` (
`id` text PRIMARY KEY NOT NULL,
`tournament_id` text NOT NULL,
`team_id` text NOT NULL,
`registration_date` integer NOT NULL,
FOREIGN KEY (`tournament_id`) REFERENCES `tournament`(`id`) ON UPDATE no action ON DELETE cascade,
FOREIGN KEY (`team_id`) REFERENCES `team`(`id`) ON UPDATE no action ON DELETE cascade
);
--> statement-breakpoint
CREATE UNIQUE INDEX `tournament_team_unique` ON `tournament_team` (`tournament_id`,`team_id`);--> statement-breakpoint
CREATE TABLE `tournament` (
`id` text PRIMARY KEY NOT NULL,
`name` text NOT NULL
);
--> statement-breakpoint
CREATE TABLE `user` (
`id` text PRIMARY KEY NOT NULL,
`email` text NOT NULL,
`steam_id` text,
`first_name` text NOT NULL,
`last_name` text NOT NULL,
`ticket_id` text,
`ticket_type` text
);
--> statement-breakpoint
CREATE UNIQUE INDEX `user_email_unique` ON `user` (`email`);--> statement-breakpoint
CREATE UNIQUE INDEX `user_steam_id_unique` ON `user` (`steam_id`);--> statement-breakpoint
CREATE UNIQUE INDEX `user_ticket_id_unique` ON `user` (`ticket_id`);

View File

@@ -1 +0,0 @@
DROP INDEX `user_email_unique`;

View File

@@ -1 +0,0 @@
DROP INDEX `user_steam_id_unique`;

View File

@@ -1,295 +0,0 @@
{
"version": "6",
"dialect": "sqlite",
"id": "efe4e865-a061-4ab0-8023-5211e6d86e14",
"prevId": "00000000-0000-0000-0000-000000000000",
"tables": {
"member": {
"name": "member",
"columns": {
"id": {
"name": "id",
"type": "text",
"primaryKey": true,
"notNull": true,
"autoincrement": false
},
"user_id": {
"name": "user_id",
"type": "text",
"primaryKey": false,
"notNull": true,
"autoincrement": false
},
"team_id": {
"name": "team_id",
"type": "text",
"primaryKey": false,
"notNull": false,
"autoincrement": false
},
"role": {
"name": "role",
"type": "text",
"primaryKey": false,
"notNull": true,
"autoincrement": false
}
},
"indexes": {
"user_team_unique": {
"name": "user_team_unique",
"columns": [
"user_id",
"team_id"
],
"isUnique": true
}
},
"foreignKeys": {
"member_user_id_user_id_fk": {
"name": "member_user_id_user_id_fk",
"tableFrom": "member",
"tableTo": "user",
"columnsFrom": [
"user_id"
],
"columnsTo": [
"id"
],
"onDelete": "cascade",
"onUpdate": "no action"
},
"member_team_id_team_id_fk": {
"name": "member_team_id_team_id_fk",
"tableFrom": "member",
"tableTo": "team",
"columnsFrom": [
"team_id"
],
"columnsTo": [
"id"
],
"onDelete": "cascade",
"onUpdate": "no action"
}
},
"compositePrimaryKeys": {},
"uniqueConstraints": {},
"checkConstraints": {}
},
"team": {
"name": "team",
"columns": {
"id": {
"name": "id",
"type": "text",
"primaryKey": true,
"notNull": true,
"autoincrement": false
},
"name": {
"name": "name",
"type": "text",
"primaryKey": false,
"notNull": true,
"autoincrement": false
}
},
"indexes": {},
"foreignKeys": {},
"compositePrimaryKeys": {},
"uniqueConstraints": {},
"checkConstraints": {}
},
"tournament_team": {
"name": "tournament_team",
"columns": {
"id": {
"name": "id",
"type": "text",
"primaryKey": true,
"notNull": true,
"autoincrement": false
},
"tournament_id": {
"name": "tournament_id",
"type": "text",
"primaryKey": false,
"notNull": true,
"autoincrement": false
},
"team_id": {
"name": "team_id",
"type": "text",
"primaryKey": false,
"notNull": true,
"autoincrement": false
},
"registration_date": {
"name": "registration_date",
"type": "integer",
"primaryKey": false,
"notNull": true,
"autoincrement": false
}
},
"indexes": {
"tournament_team_unique": {
"name": "tournament_team_unique",
"columns": [
"tournament_id",
"team_id"
],
"isUnique": true
}
},
"foreignKeys": {
"tournament_team_tournament_id_tournament_id_fk": {
"name": "tournament_team_tournament_id_tournament_id_fk",
"tableFrom": "tournament_team",
"tableTo": "tournament",
"columnsFrom": [
"tournament_id"
],
"columnsTo": [
"id"
],
"onDelete": "cascade",
"onUpdate": "no action"
},
"tournament_team_team_id_team_id_fk": {
"name": "tournament_team_team_id_team_id_fk",
"tableFrom": "tournament_team",
"tableTo": "team",
"columnsFrom": [
"team_id"
],
"columnsTo": [
"id"
],
"onDelete": "cascade",
"onUpdate": "no action"
}
},
"compositePrimaryKeys": {},
"uniqueConstraints": {},
"checkConstraints": {}
},
"tournament": {
"name": "tournament",
"columns": {
"id": {
"name": "id",
"type": "text",
"primaryKey": true,
"notNull": true,
"autoincrement": false
},
"name": {
"name": "name",
"type": "text",
"primaryKey": false,
"notNull": true,
"autoincrement": false
}
},
"indexes": {},
"foreignKeys": {},
"compositePrimaryKeys": {},
"uniqueConstraints": {},
"checkConstraints": {}
},
"user": {
"name": "user",
"columns": {
"id": {
"name": "id",
"type": "text",
"primaryKey": true,
"notNull": true,
"autoincrement": false
},
"email": {
"name": "email",
"type": "text",
"primaryKey": false,
"notNull": true,
"autoincrement": false
},
"steam_id": {
"name": "steam_id",
"type": "text",
"primaryKey": false,
"notNull": false,
"autoincrement": false
},
"first_name": {
"name": "first_name",
"type": "text",
"primaryKey": false,
"notNull": true,
"autoincrement": false
},
"last_name": {
"name": "last_name",
"type": "text",
"primaryKey": false,
"notNull": true,
"autoincrement": false
},
"ticket_id": {
"name": "ticket_id",
"type": "text",
"primaryKey": false,
"notNull": false,
"autoincrement": false
},
"ticket_type": {
"name": "ticket_type",
"type": "text",
"primaryKey": false,
"notNull": false,
"autoincrement": false
}
},
"indexes": {
"user_email_unique": {
"name": "user_email_unique",
"columns": [
"email"
],
"isUnique": true
},
"user_steam_id_unique": {
"name": "user_steam_id_unique",
"columns": [
"steam_id"
],
"isUnique": true
},
"user_ticket_id_unique": {
"name": "user_ticket_id_unique",
"columns": [
"ticket_id"
],
"isUnique": true
}
},
"foreignKeys": {},
"compositePrimaryKeys": {},
"uniqueConstraints": {},
"checkConstraints": {}
}
},
"views": {},
"enums": {},
"_meta": {
"schemas": {},
"tables": {},
"columns": {}
},
"internal": {
"indexes": {}
}
}

View File

@@ -1,288 +0,0 @@
{
"version": "6",
"dialect": "sqlite",
"id": "eae7a237-8469-4a6a-acac-1910adfc98ff",
"prevId": "efe4e865-a061-4ab0-8023-5211e6d86e14",
"tables": {
"member": {
"name": "member",
"columns": {
"id": {
"name": "id",
"type": "text",
"primaryKey": true,
"notNull": true,
"autoincrement": false
},
"user_id": {
"name": "user_id",
"type": "text",
"primaryKey": false,
"notNull": true,
"autoincrement": false
},
"team_id": {
"name": "team_id",
"type": "text",
"primaryKey": false,
"notNull": false,
"autoincrement": false
},
"role": {
"name": "role",
"type": "text",
"primaryKey": false,
"notNull": true,
"autoincrement": false
}
},
"indexes": {
"user_team_unique": {
"name": "user_team_unique",
"columns": [
"user_id",
"team_id"
],
"isUnique": true
}
},
"foreignKeys": {
"member_user_id_user_id_fk": {
"name": "member_user_id_user_id_fk",
"tableFrom": "member",
"tableTo": "user",
"columnsFrom": [
"user_id"
],
"columnsTo": [
"id"
],
"onDelete": "cascade",
"onUpdate": "no action"
},
"member_team_id_team_id_fk": {
"name": "member_team_id_team_id_fk",
"tableFrom": "member",
"tableTo": "team",
"columnsFrom": [
"team_id"
],
"columnsTo": [
"id"
],
"onDelete": "cascade",
"onUpdate": "no action"
}
},
"compositePrimaryKeys": {},
"uniqueConstraints": {},
"checkConstraints": {}
},
"team": {
"name": "team",
"columns": {
"id": {
"name": "id",
"type": "text",
"primaryKey": true,
"notNull": true,
"autoincrement": false
},
"name": {
"name": "name",
"type": "text",
"primaryKey": false,
"notNull": true,
"autoincrement": false
}
},
"indexes": {},
"foreignKeys": {},
"compositePrimaryKeys": {},
"uniqueConstraints": {},
"checkConstraints": {}
},
"tournament_team": {
"name": "tournament_team",
"columns": {
"id": {
"name": "id",
"type": "text",
"primaryKey": true,
"notNull": true,
"autoincrement": false
},
"tournament_id": {
"name": "tournament_id",
"type": "text",
"primaryKey": false,
"notNull": true,
"autoincrement": false
},
"team_id": {
"name": "team_id",
"type": "text",
"primaryKey": false,
"notNull": true,
"autoincrement": false
},
"registration_date": {
"name": "registration_date",
"type": "integer",
"primaryKey": false,
"notNull": true,
"autoincrement": false
}
},
"indexes": {
"tournament_team_unique": {
"name": "tournament_team_unique",
"columns": [
"tournament_id",
"team_id"
],
"isUnique": true
}
},
"foreignKeys": {
"tournament_team_tournament_id_tournament_id_fk": {
"name": "tournament_team_tournament_id_tournament_id_fk",
"tableFrom": "tournament_team",
"tableTo": "tournament",
"columnsFrom": [
"tournament_id"
],
"columnsTo": [
"id"
],
"onDelete": "cascade",
"onUpdate": "no action"
},
"tournament_team_team_id_team_id_fk": {
"name": "tournament_team_team_id_team_id_fk",
"tableFrom": "tournament_team",
"tableTo": "team",
"columnsFrom": [
"team_id"
],
"columnsTo": [
"id"
],
"onDelete": "cascade",
"onUpdate": "no action"
}
},
"compositePrimaryKeys": {},
"uniqueConstraints": {},
"checkConstraints": {}
},
"tournament": {
"name": "tournament",
"columns": {
"id": {
"name": "id",
"type": "text",
"primaryKey": true,
"notNull": true,
"autoincrement": false
},
"name": {
"name": "name",
"type": "text",
"primaryKey": false,
"notNull": true,
"autoincrement": false
}
},
"indexes": {},
"foreignKeys": {},
"compositePrimaryKeys": {},
"uniqueConstraints": {},
"checkConstraints": {}
},
"user": {
"name": "user",
"columns": {
"id": {
"name": "id",
"type": "text",
"primaryKey": true,
"notNull": true,
"autoincrement": false
},
"email": {
"name": "email",
"type": "text",
"primaryKey": false,
"notNull": true,
"autoincrement": false
},
"steam_id": {
"name": "steam_id",
"type": "text",
"primaryKey": false,
"notNull": false,
"autoincrement": false
},
"first_name": {
"name": "first_name",
"type": "text",
"primaryKey": false,
"notNull": true,
"autoincrement": false
},
"last_name": {
"name": "last_name",
"type": "text",
"primaryKey": false,
"notNull": true,
"autoincrement": false
},
"ticket_id": {
"name": "ticket_id",
"type": "text",
"primaryKey": false,
"notNull": false,
"autoincrement": false
},
"ticket_type": {
"name": "ticket_type",
"type": "text",
"primaryKey": false,
"notNull": false,
"autoincrement": false
}
},
"indexes": {
"user_steam_id_unique": {
"name": "user_steam_id_unique",
"columns": [
"steam_id"
],
"isUnique": true
},
"user_ticket_id_unique": {
"name": "user_ticket_id_unique",
"columns": [
"ticket_id"
],
"isUnique": true
}
},
"foreignKeys": {},
"compositePrimaryKeys": {},
"uniqueConstraints": {},
"checkConstraints": {}
}
},
"views": {},
"enums": {},
"_meta": {
"schemas": {},
"tables": {},
"columns": {}
},
"internal": {
"indexes": {}
}
}

View File

@@ -1,281 +0,0 @@
{
"version": "6",
"dialect": "sqlite",
"id": "5d600618-0105-4104-b150-c63015ae55c7",
"prevId": "eae7a237-8469-4a6a-acac-1910adfc98ff",
"tables": {
"user": {
"name": "user",
"columns": {
"id": {
"name": "id",
"type": "text",
"primaryKey": true,
"notNull": true,
"autoincrement": false
},
"email": {
"name": "email",
"type": "text",
"primaryKey": false,
"notNull": true,
"autoincrement": false
},
"steam_id": {
"name": "steam_id",
"type": "text",
"primaryKey": false,
"notNull": false,
"autoincrement": false
},
"first_name": {
"name": "first_name",
"type": "text",
"primaryKey": false,
"notNull": true,
"autoincrement": false
},
"last_name": {
"name": "last_name",
"type": "text",
"primaryKey": false,
"notNull": true,
"autoincrement": false
},
"ticket_id": {
"name": "ticket_id",
"type": "text",
"primaryKey": false,
"notNull": false,
"autoincrement": false
},
"ticket_type": {
"name": "ticket_type",
"type": "text",
"primaryKey": false,
"notNull": false,
"autoincrement": false
}
},
"indexes": {
"user_ticket_id_unique": {
"name": "user_ticket_id_unique",
"columns": [
"ticket_id"
],
"isUnique": true
}
},
"foreignKeys": {},
"compositePrimaryKeys": {},
"uniqueConstraints": {},
"checkConstraints": {}
},
"team": {
"name": "team",
"columns": {
"id": {
"name": "id",
"type": "text",
"primaryKey": true,
"notNull": true,
"autoincrement": false
},
"name": {
"name": "name",
"type": "text",
"primaryKey": false,
"notNull": true,
"autoincrement": false
}
},
"indexes": {},
"foreignKeys": {},
"compositePrimaryKeys": {},
"uniqueConstraints": {},
"checkConstraints": {}
},
"member": {
"name": "member",
"columns": {
"id": {
"name": "id",
"type": "text",
"primaryKey": true,
"notNull": true,
"autoincrement": false
},
"user_id": {
"name": "user_id",
"type": "text",
"primaryKey": false,
"notNull": true,
"autoincrement": false
},
"team_id": {
"name": "team_id",
"type": "text",
"primaryKey": false,
"notNull": false,
"autoincrement": false
},
"role": {
"name": "role",
"type": "text",
"primaryKey": false,
"notNull": true,
"autoincrement": false
}
},
"indexes": {
"user_team_unique": {
"name": "user_team_unique",
"columns": [
"user_id",
"team_id"
],
"isUnique": true
}
},
"foreignKeys": {
"member_user_id_user_id_fk": {
"name": "member_user_id_user_id_fk",
"tableFrom": "member",
"tableTo": "user",
"columnsFrom": [
"user_id"
],
"columnsTo": [
"id"
],
"onDelete": "cascade",
"onUpdate": "no action"
},
"member_team_id_team_id_fk": {
"name": "member_team_id_team_id_fk",
"tableFrom": "member",
"tableTo": "team",
"columnsFrom": [
"team_id"
],
"columnsTo": [
"id"
],
"onDelete": "cascade",
"onUpdate": "no action"
}
},
"compositePrimaryKeys": {},
"uniqueConstraints": {},
"checkConstraints": {}
},
"tournament_team": {
"name": "tournament_team",
"columns": {
"id": {
"name": "id",
"type": "text",
"primaryKey": true,
"notNull": true,
"autoincrement": false
},
"tournament_id": {
"name": "tournament_id",
"type": "text",
"primaryKey": false,
"notNull": true,
"autoincrement": false
},
"team_id": {
"name": "team_id",
"type": "text",
"primaryKey": false,
"notNull": true,
"autoincrement": false
},
"registration_date": {
"name": "registration_date",
"type": "integer",
"primaryKey": false,
"notNull": true,
"autoincrement": false
}
},
"indexes": {
"tournament_team_unique": {
"name": "tournament_team_unique",
"columns": [
"tournament_id",
"team_id"
],
"isUnique": true
}
},
"foreignKeys": {
"tournament_team_tournament_id_tournament_id_fk": {
"name": "tournament_team_tournament_id_tournament_id_fk",
"tableFrom": "tournament_team",
"tableTo": "tournament",
"columnsFrom": [
"tournament_id"
],
"columnsTo": [
"id"
],
"onDelete": "cascade",
"onUpdate": "no action"
},
"tournament_team_team_id_team_id_fk": {
"name": "tournament_team_team_id_team_id_fk",
"tableFrom": "tournament_team",
"tableTo": "team",
"columnsFrom": [
"team_id"
],
"columnsTo": [
"id"
],
"onDelete": "cascade",
"onUpdate": "no action"
}
},
"compositePrimaryKeys": {},
"uniqueConstraints": {},
"checkConstraints": {}
},
"tournament": {
"name": "tournament",
"columns": {
"id": {
"name": "id",
"type": "text",
"primaryKey": true,
"notNull": true,
"autoincrement": false
},
"name": {
"name": "name",
"type": "text",
"primaryKey": false,
"notNull": true,
"autoincrement": false
}
},
"indexes": {},
"foreignKeys": {},
"compositePrimaryKeys": {},
"uniqueConstraints": {},
"checkConstraints": {}
}
},
"views": {},
"enums": {},
"_meta": {
"schemas": {},
"tables": {},
"columns": {}
},
"internal": {
"indexes": {}
}
}

View File

@@ -1,27 +0,0 @@
{
"version": "7",
"dialect": "sqlite",
"entries": [
{
"idx": 0,
"version": "6",
"when": 1751642215588,
"tag": "0000_awesome_wendigo",
"breakpoints": true
},
{
"idx": 1,
"version": "6",
"when": 1752632968857,
"tag": "0001_cool_ma_gnuci",
"breakpoints": true
},
{
"idx": 2,
"version": "6",
"when": 1754400044471,
"tag": "0002_real_korath",
"breakpoints": true
}
]
}

View File

@@ -4,23 +4,8 @@ import createNextIntlPlugin from "next-intl/plugin";
const withNextIntl = createNextIntlPlugin("./src/i18n/request.ts"); const withNextIntl = createNextIntlPlugin("./src/i18n/request.ts");
const nextConfig: NextConfig = { const nextConfig: NextConfig = {
async headers() { images: {
return [ qualities: [75, 90],
{
source: "/(.*)",
headers: [
{
key: "Content-Security-Policy",
value:
"frame-src 'self' https://tipilan.ee https://player.twitch.tv https://embed.twitch.tv; frame-ancestors 'self' https://tipilan.ee;",
},
{
key: "X-Frame-Options",
value: "SAMEORIGIN",
},
],
},
];
}, },
}; };

10386
package-lock.json generated

File diff suppressed because it is too large Load Diff

View File

@@ -10,51 +10,25 @@
"build": "next build", "build": "next build",
"start": "next start", "start": "next start",
"lint": "next lint", "lint": "next lint",
"drizzle:generate": "drizzle-kit generate:sqlite", "lint:fix": "next lint --fix"
"drizzle:push": "drizzle-kit push:sqlite",
"drizzle:studio": "drizzle-kit studio"
}, },
"dependencies": { "dependencies": {
"@libsql/client": "^0.15.15", "next": "^16.2.1",
"@paralleldrive/cuid2": "^2.2.2",
"@radix-ui/react-alert-dialog": "^1.1.15",
"@radix-ui/react-dropdown-menu": "^2.1.16",
"@radix-ui/react-select": "^2.2.6",
"@radix-ui/react-slot": "^1.2.3",
"@radix-ui/react-tooltip": "^1.2.8",
"@tanstack/react-table": "^8.21.3",
"@types/three": "^0.178.1",
"class-variance-authority": "^0.7.1",
"clsx": "^2.1.1",
"drizzle-orm": "^0.44.5",
"lucide-react": "^0.522.0",
"material-symbols": "^0.31.9",
"next": "15.3.0",
"next-intl": "^4.3.9", "next-intl": "^4.3.9",
"next-themes": "^0.4.6", "react": "^19.2.4",
"react": "^19.1.1", "react-dom": "^19.2.4",
"react-dom": "^19.1.1", "react-icons": "^5.5.0"
"react-icons": "^5.5.0",
"react-markdown": "^10.1.0",
"tailwind-merge": "^3.3.1",
"three": "^0.178.0",
"tw-animate-css": "^1.4.0"
}, },
"devDependencies": { "devDependencies": {
"@eslint/eslintrc": "^3.3.1", "@eslint/eslintrc": "^3.3.1",
"@tailwindcss/postcss": "^4.1.13", "@tailwindcss/postcss": "^4.1.13",
"@types/bun": "^1.2.22", "@types/node": "^22.15.0",
"@types/node": "^20.19.17",
"@types/react": "^19.1.13", "@types/react": "^19.1.13",
"@types/react-dom": "^19.1.9", "@types/react-dom": "^19.1.9",
"autoprefixer": "^10.4.21",
"dotenv": "^16.6.1",
"drizzle-kit": "^0.31.4",
"eslint": "^9.36.0", "eslint": "^9.36.0",
"eslint-config-next": "15.3.0", "eslint-config-next": "^15.3.3",
"postcss": "^8.5.6", "postcss": "^8.5.6",
"tailwindcss": "^4.1.13", "tailwindcss": "^4.1.13",
"ts-node": "^10.9.2",
"typescript": "^5.9.2" "typescript": "^5.9.2"
} }
} }

5928
pnpm-lock.yaml generated

File diff suppressed because it is too large Load Diff

View File

@@ -1 +0,0 @@
<svg fill="none" viewBox="0 0 16 16" xmlns="http://www.w3.org/2000/svg"><path d="M14.5 13.5V5.41a1 1 0 0 0-.3-.7L9.8.29A1 1 0 0 0 9.08 0H1.5v13.5A2.5 2.5 0 0 0 4 16h8a2.5 2.5 0 0 0 2.5-2.5m-1.5 0v-7H8v-5H3v12a1 1 0 0 0 1 1h8a1 1 0 0 0 1-1M9.5 5V2.12L12.38 5zM5.13 5h-.62v1.25h2.12V5zm-.62 3h7.12v1.25H4.5zm.62 3h-.62v1.25h7.12V11z" clip-rule="evenodd" fill="#666" fill-rule="evenodd"/></svg>

Before

Width:  |  Height:  |  Size: 391 B

View File

@@ -1 +0,0 @@
<svg fill="none" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16"><g clip-path="url(#a)"><path fill-rule="evenodd" clip-rule="evenodd" d="M10.27 14.1a6.5 6.5 0 0 0 3.67-3.45q-1.24.21-2.7.34-.31 1.83-.97 3.1M8 16A8 8 0 1 0 8 0a8 8 0 0 0 0 16m.48-1.52a7 7 0 0 1-.96 0H7.5a4 4 0 0 1-.84-1.32q-.38-.89-.63-2.08a40 40 0 0 0 3.92 0q-.25 1.2-.63 2.08a4 4 0 0 1-.84 1.31zm2.94-4.76q1.66-.15 2.95-.43a7 7 0 0 0 0-2.58q-1.3-.27-2.95-.43a18 18 0 0 1 0 3.44m-1.27-3.54a17 17 0 0 1 0 3.64 39 39 0 0 1-4.3 0 17 17 0 0 1 0-3.64 39 39 0 0 1 4.3 0m1.1-1.17q1.45.13 2.69.34a6.5 6.5 0 0 0-3.67-3.44q.65 1.26.98 3.1M8.48 1.5l.01.02q.41.37.84 1.31.38.89.63 2.08a40 40 0 0 0-3.92 0q.25-1.2.63-2.08a4 4 0 0 1 .85-1.32 7 7 0 0 1 .96 0m-2.75.4a6.5 6.5 0 0 0-3.67 3.44 29 29 0 0 1 2.7-.34q.31-1.83.97-3.1M4.58 6.28q-1.66.16-2.95.43a7 7 0 0 0 0 2.58q1.3.27 2.95.43a18 18 0 0 1 0-3.44m.17 4.71q-1.45-.12-2.69-.34a6.5 6.5 0 0 0 3.67 3.44q-.65-1.27-.98-3.1" fill="#666"/></g><defs><clipPath id="a"><path fill="#fff" d="M0 0h16v16H0z"/></clipPath></defs></svg>

Before

Width:  |  Height:  |  Size: 1.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 126 KiB

View File

@@ -1,50 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<svg id="Layer_1" data-name="Layer 1" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1920 1080">
<defs>
<style>
.cls-1 {
fill: #ff343a;
}
.cls-2 {
fill: #00ff50;
}
.cls-3 {
fill: #ff3398;
}
.cls-4 {
fill: #0284ff;
}
.cls-5 {
fill: #ffc703;
}
</style>
</defs>
<g>
<path class="cls-5" d="M147.26,50.24h-46.56c-29.7,0-53.78,24.08-53.78,53.78v322.66c0,29.7,24.08,53.78,53.78,53.78h46.56c118.61,0,215.11-96.5,215.11-215.11S265.87,50.24,147.26,50.24ZM154.48,372.67v-214.63c55.95,3.73,100.34,50.43,100.34,107.31s-44.38,103.59-100.34,107.31Z"/>
<path class="cls-4" d="M1424.13,50.24c-29.7,0-53.78,24.08-53.78,53.78v218.47c0,27.8-22.62,50.42-50.42,50.42s-50.42-22.62-50.42-50.42V104.02c0-29.7-24.08-53.78-53.78-53.78s-53.78,24.08-53.78,53.78v218.47c0,87.1,70.86,157.97,157.97,157.97s157.97-70.87,157.97-157.97V104.02c0-29.7-24.08-53.78-53.78-53.78Z"/>
<path class="cls-3" d="M666.67,157.8c29.7,0,53.78-24.08,53.78-53.78s-24.08-53.78-53.78-53.78h-174.78c-29.7,0-53.78,24.08-53.78,53.78v322.66c0,29.7,24.08,53.78,53.78,53.78h174.78c29.7,0,53.78-24.08,53.78-53.78s-24.08-53.78-53.78-53.78h-121v-53.78h121c29.7,0,53.78-24.08,53.78-53.78s-24.08-53.78-53.78-53.78h-121v-53.78h121Z"/>
<path class="cls-2" d="M100.71,599.52c-29.7,0-53.78,24.08-53.78,53.78v322.66c0,29.7,24.08,53.78,53.78,53.78s53.78-24.08,53.78-53.78v-322.66c0-29.7-24.08-53.78-53.78-53.78Z"/>
<path class="cls-2" d="M1064.09,372.91h-154.61V104.02c0-29.7-24.08-53.78-53.78-53.78s-53.78,24.08-53.78,53.78v322.66c0,29.7,24.08,53.78,53.78,53.78h208.39c29.7,0,53.78-24.08,53.78-53.78s-24.08-53.78-53.78-53.78Z"/>
<path class="cls-1" d="M1819.29,922.19h-154.61v-268.88c0-29.7-24.08-53.78-53.78-53.78s-53.78,24.08-53.78,53.78v322.66c0,29.7,24.08,53.78,53.78,53.78h208.39c29.7,0,53.78-24.08,53.78-53.78s-24.08-53.78-53.78-53.78Z"/>
<path class="cls-5" d="M1353.21,634.4c-7.86-20.95-27.86-34.84-50.23-34.89h-.12c-22.32,0-42.33,13.79-50.26,34.67l-122.68,322.66c-10.55,27.76,3.39,58.82,31.16,69.38,27.76,10.56,58.82-3.39,69.38-31.15l72.07-189.54,70.99,189.31c8.1,21.59,28.59,34.91,50.36,34.91,6.27,0,12.65-1.11,18.87-3.44,27.81-10.43,41.9-41.43,31.47-69.23l-121-322.66Z"/>
<path class="cls-4" d="M993.75,599.52c-29.7,0-53.78,24.08-53.78,53.78v140.27l-109.43-169.45c-12.94-20.03-37.52-29.15-60.38-22.41-22.87,6.74-38.57,27.74-38.57,51.58v322.66c0,29.7,24.08,53.78,53.78,53.78s53.78-24.08,53.78-53.78v-140.27l109.43,169.45c10.09,15.62,27.26,24.61,45.18,24.61,5.06,0,10.17-.72,15.21-2.2,22.87-6.74,38.57-27.74,38.57-51.58v-322.66c0-29.7-24.08-53.78-53.78-53.78Z"/>
<path class="cls-3" d="M1870.74,208.11c0-87.05-70.82-157.86-157.86-157.86-41.3,0-77.48,10.14-104.63,29.31-34.33,24.25-53.23,62.01-53.23,106.31,0,24.5,7.18,57.43,38.23,85.23-22.12,6.67-38.23,27.2-38.23,51.49,0,87.05,70.82,157.86,157.86,157.86,41.77,0,76.58-9.1,103.46-27.05,35.08-23.42,54.4-60.95,54.4-105.66,0-25.05-7.86-59.2-42.83-86.99,24.45-5.06,42.83-26.71,42.83-52.66ZM1712.88,372.91c-27.74,0-50.31-22.57-50.31-50.31,0-5.01-.69-9.86-1.97-14.46,12.7,4.54,25.66,8.47,38.43,12.34,18.06,5.48,35.12,10.65,48.33,16.68,11.18,5.1,15.06,9.2,15.06,12.77,0,16.85-25.7,22.97-49.55,22.97ZM1730.25,217.55c-22.59-6.85-45.67-14.41-59.79-22.57-5.1-2.95-7.89-7.91-7.89-13.44,0-7.07,3.82-11.37,7.74-14.14,8.64-6.1,24.15-9.6,42.57-9.6,27.74,0,50.31,22.57,50.31,50.31,0,7.62,1.58,14.87,4.44,21.43-12.35-4.39-24.96-8.22-37.38-11.98Z"/>
<path class="cls-1" d="M442.11,599.52c-118.61,0-215.11,96.5-215.11,215.11s96.5,215.11,215.11,215.11,215.11-96.5,215.11-215.11-96.5-215.11-215.11-215.11ZM442.11,922.18c-59.31,0-107.55-48.25-107.55-107.55s48.25-107.55,107.55-107.55,107.55,48.25,107.55,107.55-48.25,107.55-107.55,107.55Z"/>
</g>
<g>
<path d="M147.27,493.9h-46.56c-37.07,0-67.22-30.15-67.22-67.22V104.02c0-37.07,30.15-67.22,67.22-67.22h46.56c126.02,0,228.55,102.53,228.55,228.55s-102.53,228.55-228.55,228.55ZM100.71,63.69c-22.24,0-40.33,18.09-40.33,40.33v322.66c0,22.24,18.09,40.33,40.33,40.33h46.56c111.2,0,201.66-90.47,201.66-201.66S258.46,63.69,147.27,63.69h-46.56ZM141.04,387.04v-243.37l14.34.96c63.3,4.21,112.89,57.24,112.89,120.73s-49.59,116.52-112.89,120.73l-14.34.96ZM167.93,173.53v183.65c42.17-9.48,73.45-47.36,73.45-91.83s-31.27-82.34-73.45-91.82Z"/>
<path d="M1319.94,493.9c-94.52,0-171.41-76.9-171.41-171.42V104.02c0-37.07,30.15-67.22,67.22-67.22s67.22,30.15,67.22,67.22v218.47c0,20.39,16.58,36.97,36.97,36.97s36.97-16.59,36.97-36.97V104.02c0-37.07,30.15-67.22,67.22-67.22s67.22,30.15,67.22,67.22v218.47c0,94.52-76.9,171.42-171.42,171.42ZM1215.75,63.69c-22.24,0-40.33,18.09-40.33,40.33v218.47c0,79.69,64.83,144.53,144.52,144.53s144.53-64.83,144.53-144.53V104.02c0-22.24-18.09-40.33-40.33-40.33s-40.33,18.09-40.33,40.33v218.47c0,35.21-28.65,63.86-63.86,63.86s-63.86-28.65-63.86-63.86V104.02c0-22.24-18.09-40.33-40.33-40.33Z"/>
<path d="M666.67,493.9h-174.78c-37.07,0-67.22-30.15-67.22-67.22V104.02c0-37.07,30.15-67.22,67.22-67.22h174.78c37.07,0,67.22,30.15,67.22,67.22s-30.15,67.22-67.22,67.22h-107.55v26.89h107.55c37.07,0,67.22,30.15,67.22,67.22s-30.15,67.22-67.22,67.22h-107.55v26.89h107.55c37.07,0,67.22,30.15,67.22,67.22s-30.15,67.22-67.22,67.22ZM491.9,63.69c-22.24,0-40.33,18.09-40.33,40.33v322.66c0,22.24,18.09,40.33,40.33,40.33h174.78c22.24,0,40.33-18.09,40.33-40.33s-18.09-40.33-40.33-40.33h-121c-7.42,0-13.44-6.02-13.44-13.44v-53.78c0-7.42,6.02-13.44,13.44-13.44h121c22.24,0,40.33-18.09,40.33-40.33s-18.09-40.33-40.33-40.33h-121c-7.42,0-13.44-6.02-13.44-13.44v-53.78c0-7.42,6.02-13.44,13.44-13.44h121c22.24,0,40.33-18.09,40.33-40.33s-18.09-40.33-40.33-40.33h-174.78Z"/>
<path d="M100.71,1043.17c-37.07,0-67.22-30.15-67.22-67.22v-322.66c0-37.06,30.15-67.22,67.22-67.22s67.22,30.15,67.22,67.22v322.66c0,37.06-30.15,67.22-67.22,67.22ZM100.71,612.96c-22.24,0-40.33,18.09-40.33,40.33v322.66c0,22.24,18.09,40.33,40.33,40.33s40.33-18.09,40.33-40.33v-322.66c0-22.24-18.09-40.33-40.33-40.33Z"/>
<path d="M1064.09,493.9h-208.38c-37.07,0-67.22-30.15-67.22-67.22V104.02c0-37.07,30.16-67.22,67.22-67.22s67.22,30.15,67.22,67.22v255.44h141.16c37.07,0,67.22,30.15,67.22,67.22s-30.15,67.22-67.22,67.22ZM855.71,63.69c-22.24,0-40.33,18.09-40.33,40.33v322.66c0,22.24,18.09,40.33,40.33,40.33h208.38c22.24,0,40.33-18.09,40.33-40.33s-18.09-40.33-40.33-40.33h-168.05V104.02c0-22.24-18.09-40.33-40.33-40.33Z"/>
<path d="M1819.29,1043.18h-208.38c-37.07,0-67.22-30.15-67.22-67.22v-322.66c0-37.06,30.15-67.22,67.22-67.22s67.22,30.15,67.22,67.22v255.44h141.17c37.07,0,67.22,30.15,67.22,67.22s-30.15,67.22-67.22,67.22ZM1610.91,612.97c-22.24,0-40.33,18.09-40.33,40.33v322.66c0,22.24,18.09,40.33,40.33,40.33h208.38c22.24,0,40.33-18.09,40.33-40.33s-18.09-40.33-40.33-40.33h-154.61c-7.43,0-13.44-6.02-13.44-13.44v-268.89c0-22.24-18.09-40.33-40.33-40.33Z"/>
<path d="M1180.2,1043.21c-8.07,0-16.15-1.47-23.91-4.42-16.78-6.38-30.08-18.92-37.43-35.3-7.36-16.38-7.9-34.64-1.51-51.43l122.68-322.66c9.85-25.92,35.1-43.33,62.83-43.33,27.95.07,53.18,17.59,62.94,43.62h0l121,322.66c6.31,16.81,5.69,35.07-1.75,51.42-7.43,16.35-20.78,28.82-37.59,35.13-7.6,2.85-15.54,4.29-23.59,4.29-27.87,0-53.16-17.53-62.95-43.63l-58.49-155.98-59.41,156.26c-6.38,16.78-18.92,30.08-35.3,37.43-8.8,3.95-18.15,5.93-27.51,5.93ZM1302.94,612.95c-16.73,0-31.88,10.45-37.79,26l-122.68,322.66c-3.83,10.07-3.51,21.03.91,30.86,4.42,9.83,12.39,17.35,22.46,21.18,10.06,3.83,21.02,3.51,30.85-.91,9.83-4.41,17.35-12.39,21.18-22.46l72.06-189.54c1.98-5.22,6.98-8.67,12.57-8.67h.03c5.59.01,10.6,3.49,12.56,8.72l70.99,189.32c5.87,15.66,21.06,26.18,37.77,26.18,4.82,0,9.58-.87,14.15-2.58,20.82-7.81,31.41-31.1,23.6-51.93l-120.99-322.66c-5.86-15.62-21-26.13-37.68-26.17Z"/>
<path d="M993.76,1043.18c-22.92,0-44.03-11.5-56.47-30.75l-84.7-131.14v94.67c0,37.06-30.15,67.22-67.22,67.22s-67.22-30.15-67.22-67.22v-322.66c0-29.59,19.83-56.11,48.21-64.48,28.38-8.36,59.42,3.16,75.48,28.01l84.69,131.14v-94.67c0-37.06,30.15-67.22,67.22-67.22s67.22,30.15,67.22,67.22v322.66c0,29.59-19.83,56.11-48.21,64.48-6.18,1.82-12.58,2.74-19.01,2.74ZM839.14,822.24c4.48,0,8.77,2.25,11.29,6.15l109.44,169.45c7.46,11.56,20.13,18.46,33.88,18.46,3.86,0,7.69-.56,11.4-1.65,17.03-5.02,28.93-20.93,28.93-38.68v-322.66c0-22.24-18.09-40.33-40.33-40.33s-40.33,18.09-40.33,40.33v140.27c0,5.96-3.93,11.21-9.64,12.9-5.72,1.67-11.86-.6-15.1-5.6l-109.43-169.45c-9.63-14.92-28.26-21.85-45.29-16.81-17.03,5.02-28.92,20.93-28.92,38.68v322.66c0,22.24,18.09,40.33,40.33,40.33s40.33-18.09,40.33-40.33v-140.27c0-5.96,3.93-11.21,9.64-12.9,1.26-.37,2.54-.55,3.8-.55Z"/>
<path d="M1712.88,493.9c-94.46,0-171.31-76.85-171.31-171.31,0-22.37,11.37-43.03,29.19-55.38-23.75-28.24-29.19-59.06-29.19-81.34,0-48.8,20.92-90.45,58.92-117.3,29.43-20.79,68.29-31.78,112.39-31.78,94.46,0,171.31,76.85,171.31,171.31,0,23.66-12.53,45.08-31.78,57.1,25.83,28.18,31.78,59.59,31.78,82.55,0,49.34-21.45,90.84-60.38,116.84-29.13,19.45-66.45,29.31-110.92,29.31ZM1712.88,63.69c-38.51,0-72.01,9.28-96.87,26.85-30.66,21.66-47.55,55.52-47.55,95.33,0,29.86,11.35,55.16,33.75,75.22,3.62,3.24,5.21,8.19,4.16,12.93s-4.59,8.55-9.24,9.95c-16.88,5.09-28.66,20.97-28.66,38.62,0,79.63,64.79,144.42,144.42,144.42,39.06,0,71.36-8.34,95.99-24.79,31.23-20.85,48.43-54.4,48.43-94.48,0-30.84-12.7-56.56-37.75-76.46-4.08-3.25-5.93-8.56-4.72-13.64,1.21-5.08,5.25-9,10.36-10.06,18.6-3.85,32.11-20.46,32.11-39.49,0-79.63-64.79-144.42-144.42-144.42ZM1712.88,386.35c-35.15,0-63.75-28.6-63.75-63.75,0-3.69-.49-7.34-1.47-10.86-1.35-4.84.11-10.03,3.79-13.45,3.68-3.42,8.96-4.51,13.69-2.82,12.35,4.42,25.23,8.32,37.67,12.1,18.63,5.65,36.1,10.95,50.15,17.36,6.86,3.13,22.92,10.46,22.92,25,0,22.8-23.55,36.42-62.99,36.42ZM1676.35,327.57c2.43,17.99,17.89,31.89,36.53,31.89s30.38-3.96,34.49-7.21c-1.29-.76-3.09-1.72-5.58-2.86-12.41-5.66-29.04-10.71-46.65-16.05-6.21-1.88-12.49-3.79-18.78-5.78ZM1767.62,242.98c-1.51,0-3.03-.25-4.5-.78-12.03-4.28-24.58-8.09-36.71-11.77l3.84-12.88-3.9,12.87c-23.43-7.11-47.24-14.91-62.62-23.8-9.14-5.28-14.6-14.66-14.6-25.08,0-7.13,2.33-17.28,13.42-25.12,11.02-7.78,28.89-12.07,50.33-12.07,35.15,0,63.75,28.6,63.75,63.75,0,5.59,1.12,11,3.33,16.07,2.14,4.91,1.16,10.63-2.5,14.54-2.59,2.77-6.17,4.27-9.83,4.27ZM1712.88,171.24c-18.22,0-29.93,3.69-34.82,7.14-2.05,1.45-2.05,2.24-2.05,3.16,0,.57.09,1.17,1.17,1.8,13.05,7.55,36.12,15.03,56.96,21.35l-3.9,12.87,3.96-12.85c5.12,1.55,10.32,3.13,15.55,4.76,0-.45-.01-.91-.01-1.36,0-20.33-16.53-36.86-36.86-36.86Z"/>
<path d="M442.11,1043.17c-126.02,0-228.55-102.53-228.55-228.55s102.53-228.55,228.55-228.55,228.55,102.53,228.55,228.55-102.53,228.55-228.55,228.55ZM442.11,612.96c-111.2,0-201.66,90.47-201.66,201.66s90.47,201.66,201.66,201.66,201.66-90.47,201.66-201.66-90.47-201.66-201.66-201.66ZM442.11,935.62c-66.72,0-121-54.28-121-121s54.28-121,121-121,121,54.28,121,121-54.28,121-121,121ZM442.11,720.51c-51.89,0-94.11,42.22-94.11,94.11s42.22,94.11,94.11,94.11,94.11-42.22,94.11-94.11-42.22-94.11-94.11-94.11Z"/>
</g>
</svg>

Before

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 816 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 18 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 257 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 71 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 282 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 5.0 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 298 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 335 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 368 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 82 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 29 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.8 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 205 KiB

File diff suppressed because one or more lines are too long

Before

Width:  |  Height:  |  Size: 103 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.2 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 18 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 36 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 75 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 313 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 57 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 132 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 860 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 25 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 23 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 11 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.0 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 642 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 43 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.2 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.0 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 750 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 54 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 52 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 117 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 75 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 34 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 47 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 7.8 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 3.0 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.7 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.6 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 2.9 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.7 MiB

View File

@@ -0,0 +1,6 @@
<svg width="40" height="30" viewBox="0 0 40 30" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M0 4.68346V9.23077H6.25333L0 4.68346ZM5.18222 30H14.4444V23.265L5.18222 30ZM25.5556 23.2662V30H34.8167L25.5556 23.2662ZM0 20.7692V25.3165L6.25556 20.7692H0ZM34.8189 0H25.5556V6.735L34.8189 0ZM40 25.3177V20.7692H33.7433L40 25.3177ZM40 9.23077V4.68346L33.7456 9.23077H40ZM14.4444 0H5.18222L14.4444 6.735V0Z" fill="#00247D"/>
<path d="M27.9332 20.7696L38.7243 28.6169C39.2513 28.0531 39.6301 27.3583 39.8243 26.5989L31.8076 20.7696H27.9332ZM14.4443 20.7696H12.0654L1.27543 28.6158C1.85432 29.2273 2.59654 29.6646 3.42876 29.8677L14.4443 21.8577V20.7696ZM25.5554 9.23118H27.9343L38.7243 1.38503C38.1355 0.764575 37.3891 0.330442 36.5721 0.133104L25.5554 8.1431V9.23118ZM12.0654 9.23118L1.27543 1.38503C0.748709 1.94923 0.369666 2.64392 0.174316 3.4031L8.19098 9.23118H12.0654Z" fill="#C8102E"/>
<path d="M40 18.4615H23.3333V30H25.5556V23.2662L34.8167 30H35.5556C36.1458 30.0001 36.7302 29.8778 37.2744 29.6402C37.8185 29.4026 38.3114 29.055 38.7243 28.6169L27.9332 20.7696H31.8076L39.8243 26.5989C39.9276 26.21 40 25.8069 40 25.3846V25.3177L33.7433 20.7692H40V18.4615ZM0 18.4615V20.7692H6.25556L0 25.3165V25.3846C0 26.6435 0.48765 27.7827 1.27543 28.6158L12.0654 20.7696H14.4443V21.8577L3.42889 29.8662C3.75556 29.9469 4.09333 30 4.44444 30H5.18222L14.4444 23.265V30H16.6667V18.4615H0ZM40 4.61538C40.0007 3.40613 39.5422 2.24574 38.7243 1.38503L27.9343 9.23118H25.5554V8.1431L36.5721 0.133104C36.2393 0.0483274 35.8982 0.00339006 35.5556 4.3659e-07L34.8189 0L25.5556 6.735V0L23.3333 4.3659e-07V11.5385H40V9.23077H33.7456L40 4.68346V4.61538ZM14.4444 0V6.735L5.18222 0L4.44444 4.3659e-07C3.85403 -0.000266737 3.26952 0.122092 2.72531 0.359879C2.1811 0.597666 1.68805 0.946488 1.27543 1.38503L12.0654 9.23118H8.19098L0.174316 3.4031C0.0640721 3.79738 0.00552601 4.20486 0 4.61538V4.68346L6.25333 9.23077H0V11.5385H16.6667V4.3659e-07L14.4444 0Z" fill="white"/>
<path d="M23.3333 11.5385V4.3659e-07H16.6667V11.5385H0V18.4615H16.6667V30H23.3333V18.4615H40V11.5385H23.3333Z" fill="#C8102E"/>
</svg>

After

Width:  |  Height:  |  Size: 2.0 KiB

View File

@@ -0,0 +1,5 @@
<svg width="40" height="30" viewBox="0 0 40 30" fill="none" xmlns="http://www.w3.org/2000/svg">
<path d="M35.5556 0H4.44444C3.2657 0 2.13524 0.468252 1.30175 1.30175C0.468253 2.13524 0 3.2657 0 4.44444V10H40V4.44444C40 3.2657 39.5317 2.13524 38.6983 1.30175C37.8648 0.468252 36.7343 0 35.5556 0Z" fill="#0072CE"/>
<path d="M0 10H40V20H0V10Z" fill="black"/>
<path d="M35.5556 30H4.44444C3.2657 30 2.13524 29.4732 1.30175 28.5355C0.468253 27.5979 0 26.3261 0 25V20H40V25C40 26.3261 39.5317 27.5979 38.6983 28.5355C37.8648 29.4732 36.7343 30 35.5556 30Z" fill="white"/>
</svg>

After

Width:  |  Height:  |  Size: 574 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 135 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 136 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 145 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 4.3 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 6.5 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 8.1 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.7 MiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 235 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 860 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 100 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 842 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 67 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 180 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 157 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 470 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.8 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1015 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.9 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.2 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.0 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 1.2 MiB

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