13 Commits

Author SHA1 Message Date
Julien Valverdé 32283c117a Merge branch 'master' into next
Lint / lint (push) Failing after 12s
2026-05-17 19:31:50 +02:00
Thilawyn d5191d6838 Pazisme Mod loading screen (#85)
Build / build (push) Successful in 58s
Lint / lint (push) Failing after 13s
Co-authored-by: Julien Valverdé <julien.valverde@mailo.com>
Co-authored-by: Renovate Bot <renovate-bot@valverde.cloud>
Reviewed-on: #85
2026-05-17 19:31:28 +02:00
Julien Valverdé f802998a90 Fix
Lint / lint (push) Failing after 12s
Build / build (pull_request) Successful in 30s
2026-05-17 19:29:46 +02:00
Julien Valverdé 2a6f14e3d3 Disable Biome check from build
Lint / lint (push) Failing after 12s
Build / build (pull_request) Failing after 27s
2026-05-17 19:26:31 +02:00
Julien Valverdé 68a3feab30 Fix dependencies
Lint / lint (push) Failing after 12s
Build / build (pull_request) Failing after 32s
2026-05-17 19:23:58 +02:00
Julien Valverdé 8db3214f61 Fix
Lint / lint (push) Failing after 7s
2026-05-17 19:22:34 +02:00
Julien Valverdé acd91e466d Work
Lint / lint (push) Failing after 7s
2026-05-17 19:20:00 +02:00
Julien Valverdé 3608123388 Work
Lint / lint (push) Failing after 7s
2026-05-17 19:06:43 +02:00
Julien Valverdé fba9b847af Work
Lint / lint (push) Failing after 7s
2026-05-17 19:01:00 +02:00
Julien Valverdé 5b706de173 Work
Lint / lint (push) Failing after 7s
2026-05-17 18:53:50 +02:00
Julien Valverdé ecb985c042 Work
Lint / lint (push) Failing after 38s
2026-05-17 18:30:21 +02:00
Julien Valverdé eb11506de7 Change routes
Lint / lint (push) Failing after 6s
2026-05-16 01:17:52 +02:00
Julien Valverdé 94709cc1ad Change layout
Lint / lint (push) Failing after 6s
2026-05-16 01:14:03 +02:00
17 changed files with 643 additions and 592 deletions
+1 -1
View File
@@ -26,7 +26,7 @@ jobs:
- name: Generate Docker metadata
id: meta
uses: docker/metadata-action@v6
uses: docker/metadata-action@v5
with:
images: |
docker.valverde.cloud/${{ gitea.repository }}
+1 -1
View File
@@ -7,7 +7,7 @@ WORKDIR /app
COPY ./ ./
RUN bun install --frozen-lockfile && \
bun lint:tsc && \
bun lint:biome && \
# bun lint:biome && \
bun run build && \
bun clean:cache && \
bun clean:modules && \
+326 -488
View File
File diff suppressed because it is too large Load Diff
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
+83 -15
View File
@@ -9,50 +9,118 @@
// Additionally, you should also exclude this file from your linter and/or formatter to prevent it from being checked or modified.
import { Route as rootRouteImport } from './routes/__root'
import { Route as IndexRouteImport } from './routes/index'
import { Route as MainRouteImport } from './routes/_main'
import { Route as PazismemodRouteRouteImport } from './routes/pazismemod/route'
import { Route as PazismemodIndexRouteImport } from './routes/pazismemod/index'
import { Route as MainIndexRouteImport } from './routes/_main.index'
const IndexRoute = IndexRouteImport.update({
const MainRoute = MainRouteImport.update({
id: '/_main',
getParentRoute: () => rootRouteImport,
} as any)
const PazismemodRouteRoute = PazismemodRouteRouteImport.update({
id: '/pazismemod',
path: '/pazismemod',
getParentRoute: () => rootRouteImport,
} as any)
const PazismemodIndexRoute = PazismemodIndexRouteImport.update({
id: '/',
path: '/',
getParentRoute: () => rootRouteImport,
getParentRoute: () => PazismemodRouteRoute,
} as any)
const MainIndexRoute = MainIndexRouteImport.update({
id: '/',
path: '/',
getParentRoute: () => MainRoute,
} as any)
export interface FileRoutesByFullPath {
'/': typeof IndexRoute
'/pazismemod': typeof PazismemodRouteRouteWithChildren
'/': typeof MainIndexRoute
'/pazismemod/': typeof PazismemodIndexRoute
}
export interface FileRoutesByTo {
'/': typeof IndexRoute
'/': typeof MainIndexRoute
'/pazismemod': typeof PazismemodIndexRoute
}
export interface FileRoutesById {
__root__: typeof rootRouteImport
'/': typeof IndexRoute
'/pazismemod': typeof PazismemodRouteRouteWithChildren
'/_main': typeof MainRouteWithChildren
'/_main/': typeof MainIndexRoute
'/pazismemod/': typeof PazismemodIndexRoute
}
export interface FileRouteTypes {
fileRoutesByFullPath: FileRoutesByFullPath
fullPaths: '/'
fullPaths: '/pazismemod' | '/' | '/pazismemod/'
fileRoutesByTo: FileRoutesByTo
to: '/'
id: '__root__' | '/'
to: '/' | '/pazismemod'
id: '__root__' | '/pazismemod' | '/_main' | '/_main/' | '/pazismemod/'
fileRoutesById: FileRoutesById
}
export interface RootRouteChildren {
IndexRoute: typeof IndexRoute
PazismemodRouteRoute: typeof PazismemodRouteRouteWithChildren
MainRoute: typeof MainRouteWithChildren
}
declare module '@tanstack/react-router' {
interface FileRoutesByPath {
'/': {
id: '/'
'/_main': {
id: '/_main'
path: ''
fullPath: '/'
preLoaderRoute: typeof MainRouteImport
parentRoute: typeof rootRouteImport
}
'/pazismemod': {
id: '/pazismemod'
path: '/pazismemod'
fullPath: '/pazismemod'
preLoaderRoute: typeof PazismemodRouteRouteImport
parentRoute: typeof rootRouteImport
}
'/pazismemod/': {
id: '/pazismemod/'
path: '/'
fullPath: '/pazismemod/'
preLoaderRoute: typeof PazismemodIndexRouteImport
parentRoute: typeof PazismemodRouteRoute
}
'/_main/': {
id: '/_main/'
path: '/'
fullPath: '/'
preLoaderRoute: typeof IndexRouteImport
parentRoute: typeof rootRouteImport
preLoaderRoute: typeof MainIndexRouteImport
parentRoute: typeof MainRoute
}
}
}
interface PazismemodRouteRouteChildren {
PazismemodIndexRoute: typeof PazismemodIndexRoute
}
const PazismemodRouteRouteChildren: PazismemodRouteRouteChildren = {
PazismemodIndexRoute: PazismemodIndexRoute,
}
const PazismemodRouteRouteWithChildren = PazismemodRouteRoute._addFileChildren(
PazismemodRouteRouteChildren,
)
interface MainRouteChildren {
MainIndexRoute: typeof MainIndexRoute
}
const MainRouteChildren: MainRouteChildren = {
MainIndexRoute: MainIndexRoute,
}
const MainRouteWithChildren = MainRoute._addFileChildren(MainRouteChildren)
const rootRouteChildren: RootRouteChildren = {
IndexRoute: IndexRoute,
PazismemodRouteRoute: PazismemodRouteRouteWithChildren,
MainRoute: MainRouteWithChildren,
}
export const routeTree = rootRouteImport
._addFileChildren(rootRouteChildren)
+1 -86
View File
@@ -1,12 +1,5 @@
import { createRootRoute, Outlet } from "@tanstack/react-router"
import { TanStackRouterDevtools } from "@tanstack/react-router-devtools"
import { useTranslation } from "react-i18next"
import { DiGit } from "react-icons/di"
import { FaCode } from "react-icons/fa"
import root from "react-shadow"
import { Button } from "@/components/ui/button"
import { Card, CardContent } from "@/components/ui/card"
import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from "@/components/ui/tooltip"
export const Route = createRootRoute({
@@ -14,86 +7,8 @@ export const Route = createRootRoute({
})
function RootComponent() {
const { t, i18n } = useTranslation()
return <>
<div className="flex flex-row items-center justify-center gap-2 p-2">
<Button
variant={i18n.language !== "en" ? "default" : "noShadow"}
onClick={() => i18n.changeLanguage("en")}
>
🇬🇧 English
</Button>
<Button
variant={i18n.language !== "fr" ? "default" : "noShadow"}
onClick={() => i18n.changeLanguage("fr")}
>
🇫🇷 Français
</Button>
</div>
<div className="container mt-20 mr-auto ml-auto">
<div className="mr-auto ml-auto flex w-fit flex-row items-start justify-around gap-10">
<root.div>
<link rel="stylesheet" href="/98.css/dist/98.css" />
<div className="window" style={{ width: 300 }}>
<div className="title-bar">
<div className="title-bar-text">Julien Valverde</div>
</div>
<div className="window-body">
<p>There's so much room for activities!</p>
</div>
</div>
</root.div>
<div>
<h1>Ingénieur Full Stack &bull; Entrepreneur</h1>
<p className="mt-2">
I am passionate about integrating functionality and design in applications to create intuitive, user-friendly experiences.
</p>
<div className="flex w-fit flex-row items-center justify-center gap-2 mt-4">
<TooltipProvider>
<Tooltip>
<TooltipTrigger asChild>
<Button asChild>
<a href="https://git.valverde.cloud"><DiGit /> {t($ => $.gitRepos.title, { ns: "nav" })}</a>
</Button>
</TooltipTrigger>
<TooltipContent><p>{t($ => $.gitRepos.tooltip, { ns: "nav" })}</p></TooltipContent>
</Tooltip>
</TooltipProvider>
<TooltipProvider>
<Tooltip>
<TooltipTrigger asChild>
<Button asChild>
<a href="https://git.valverde.cloud/thilawyn/website"><FaCode /> {t($ => $.sourceCode.title, { ns: "nav" })}</a>
</Button>
</TooltipTrigger>
<TooltipContent><p>{t($ => $.sourceCode.tooltip, { ns: "nav" })}</p></TooltipContent>
</Tooltip>
</TooltipProvider>
<Button>Resumé</Button>
</div>
</div>
</div>
</div>
<div className="mx-auto w-[750px] max-w-full px-5 pt-28 pb-10 text-foreground">
<Card>
<CardContent>
<Outlet />
</CardContent>
</Card>
</div>
<Outlet />
<TanStackRouterDevtools />
</>
}
@@ -1,7 +1,7 @@
import { createFileRoute } from "@tanstack/react-router"
export const Route = createFileRoute("/")({
export const Route = createFileRoute("/_main/")({
component: RouteComponent,
})
+109
View File
@@ -0,0 +1,109 @@
import { createFileRoute, Outlet } from "@tanstack/react-router"
import { useTranslation } from "react-i18next"
import { DiGit } from "react-icons/di"
import { FaCode } from "react-icons/fa"
import root from "react-shadow"
import { Button } from "@/components/ui/button"
import { Card, CardContent } from "@/components/ui/card"
import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from "@/components/ui/tooltip"
export const Route = createFileRoute("/_main")({
component: WIPLayout,
})
function WIPLayout() {
return (
<div className="mx-auto w-[750px] max-w-full px-5 pt-28 pb-10 text-foreground">
<Card>
<CardContent>
<Outlet />
</CardContent>
</Card>
</div>
)
}
// @ts-ignore
function SharedLayout() {
const { t, i18n } = useTranslation()
return <>
<div className="flex flex-row items-center justify-center gap-2 p-2">
<Button
variant={i18n.language !== "en" ? "default" : "noShadow"}
onClick={() => i18n.changeLanguage("en")}
>
🇬🇧 English
</Button>
<Button
variant={i18n.language !== "fr" ? "default" : "noShadow"}
onClick={() => i18n.changeLanguage("fr")}
>
🇫🇷 Français
</Button>
</div>
<div className="container mt-20 mr-auto ml-auto">
<div className="mr-auto ml-auto flex w-fit flex-row items-start justify-around gap-10">
<root.div>
<link rel="stylesheet" href="/98.css/dist/98.css" />
<div className="window" style={{ width: 300 }}>
<div className="title-bar">
<div className="title-bar-text">Julien Valverde</div>
</div>
<div className="window-body">
<p>There's so much room for activities!</p>
</div>
</div>
</root.div>
<div>
<h1>Ingénieur Full Stack &bull; Entrepreneur</h1>
<p className="mt-2">
I am passionate about integrating functionality and design in applications to create intuitive, user-friendly experiences.
</p>
<div className="mt-4 flex w-fit flex-row items-center justify-center gap-2">
<TooltipProvider>
<Tooltip>
<TooltipTrigger asChild>
<Button asChild>
<a href="https://git.valverde.cloud"><DiGit /> {t($ => $.gitRepos.title, { ns: "nav" })}</a>
</Button>
</TooltipTrigger>
<TooltipContent><p>{t($ => $.gitRepos.tooltip, { ns: "nav" })}</p></TooltipContent>
</Tooltip>
</TooltipProvider>
<TooltipProvider>
<Tooltip>
<TooltipTrigger asChild>
<Button asChild>
<a href="https://git.valverde.cloud/thilawyn/website"><FaCode /> {t($ => $.sourceCode.title, { ns: "nav" })}</a>
</Button>
</TooltipTrigger>
<TooltipContent><p>{t($ => $.sourceCode.tooltip, { ns: "nav" })}</p></TooltipContent>
</Tooltip>
</TooltipProvider>
<Button>Resumé</Button>
</div>
</div>
</div>
</div>
<div className="mx-auto w-[750px] max-w-full px-5 pt-28 pb-10 text-foreground">
<Card>
<CardContent>
<Outlet />
</CardContent>
</Card>
</div>
</>
}
Binary file not shown.
@@ -0,0 +1,7 @@
@font-face {
font-family: "Coolvetica";
src: url("/public/fonts/Coolvetica Rg.otf") format("opentype");
font-style: normal;
font-weight: 400;
font-display: swap;
}
@@ -0,0 +1,104 @@
import { createFileRoute } from "@tanstack/react-router"
import { useEffect, useRef } from "react"
import "./index.css"
import screen1 from "./screen1.png"
import song from "./We Are Charlie Kirk.mp3"
export const Route = createFileRoute("/pazismemod/")({
component: RouteComponent,
})
const SONG_START_TIME = 46
function RouteComponent() {
const audioRef = useRef<HTMLAudioElement>(null)
useEffect(() => {
const audio = audioRef.current
if (!audio) {
return
}
const syncStartTime = () => {
if (Number.isFinite(audio.duration) && audio.duration > SONG_START_TIME) {
audio.currentTime = SONG_START_TIME
}
}
const loopFromOffset = async () => {
syncStartTime()
try {
await audio.play()
}
catch {
// Ignore autoplay failures. Some embedded browsers require user interaction.
}
}
const tryAutoplay = async () => {
syncStartTime()
try {
await audio.play()
}
catch {
// Ignore autoplay failures. Some embedded browsers require user interaction.
}
}
const gameDetails = (
_servername: string,
_serverurl: string,
_mapname: string,
_maxplayers: string,
_steamid: string,
_gamemode: string,
volume: number | string,
) => {
const parsedVolume = Number(volume)
if (Number.isFinite(parsedVolume)) {
audio.volume = Math.min(1, Math.max(0, parsedVolume))
}
}
audio.addEventListener("loadedmetadata", syncStartTime)
audio.addEventListener("ended", loopFromOffset)
void tryAutoplay()
;(window as Window & { GameDetails?: typeof gameDetails }).GameDetails = gameDetails
return () => {
audio.removeEventListener("loadedmetadata", syncStartTime)
audio.removeEventListener("ended", loopFromOffset)
if ((window as Window & { GameDetails?: typeof gameDetails }).GameDetails === gameDetails) {
delete (window as Window & { GameDetails?: typeof gameDetails }).GameDetails
}
}
}, [])
return (
<div className="relative h-screen w-screen overflow-hidden bg-black">
<audio ref={audioRef} src={song} preload="auto" hidden />
<img
src={screen1}
alt="Pazismemod screenshot"
className="h-full w-full object-contain"
/>
<h1
className="absolute bottom-12 left-6 leading-none text-white"
style={{
fontFamily: "\"Coolvetica\", sans-serif",
fontSize: "92px",
}}
>
pazisme mod
</h1>
</div>
)
}
@@ -0,0 +1,10 @@
import { createFileRoute, Outlet } from "@tanstack/react-router"
export const Route = createFileRoute("/pazismemod")({
component: PazismemodLayout,
})
function PazismemodLayout() {
return <Outlet />
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 2.1 MiB