Maerge Commits from release to staging #139

Merged
PxlLoewe merged 25 commits from release into staging 2025-11-08 09:40:40 +00:00
10 changed files with 101 additions and 85 deletions
Showing only changes of commit 616d3d3a61 - Show all commits

View File

@@ -34,7 +34,7 @@ jobs:
export NVM_DIR="$HOME/.nvm"
source "$NVM_DIR/nvm.sh"
cd ~/docker/var-monorepo/packages/database
pnpm exec prisma migrate deploy
pnpm run deploy
- name: Build and start containers
uses: appleboy/ssh-action@v1
with:

View File

@@ -23,7 +23,6 @@ export const handleTrackSubscribed = (
track.on("unmuted", () => {
useAudioStore.getState().addSpeakingParticipant(participant);
console.log(useAudioStore.getState().settings.radioVolume);
element.volume = useAudioStore.getState().settings.radioVolume;
});
track.on("unmuted", () => {

View File

@@ -0,0 +1,75 @@
import Image from "next/image";
import { DiscordLogoIcon, InstagramLogoIcon, ReaderIcon } from "@radix-ui/react-icons";
import YoutubeSvg from "./youtube_wider.svg";
import FacebookSvg from "./facebook.svg";
export const Footer = () => {
return (
<footer className="footer flex justify-between items-center p-4 bg-base-200 mt-4 rounded-lg shadow-md">
{/* Left: Impressum & Datenschutz */}
<div className="flex gap-4 text-sm">
<a href="https://virtualairrescue.com/impressum/" className="hover:text-primary">
Impressum
</a>
<a href="https://virtualairrescue.com/datenschutz/" className="hover:text-primary">
Datenschutzerklärung
</a>
</div>
{/* Center: Copyright */}
<p className="text-sm">Copyright © {new Date().getFullYear()} - Virtual Air Rescue</p>
{/* Right: Social Icons */}
<div className="flex gap-4">
<div className="tooltip tooltip-top" data-tip="Discord">
<a
href="https://discord.gg/yn7uXmmNnG"
target="_blank"
rel="noopener noreferrer"
className="hover:text-primary"
>
<DiscordLogoIcon className="w-5 h-5" />
</a>
</div>
<div className="tooltip tooltip-top" data-tip="YouTube">
<a
href="https://www.youtube.com/@VirtualAirRescue"
target="_blank"
rel="noopener noreferrer"
className="hover:text-primary text-white"
>
<Image src={YoutubeSvg} className="invert w-5 h5" alt="Youtube Icon" />
</a>
</div>
<div className="tooltip tooltip-top" data-tip="Facebook">
<a
href="https://www.facebook.com/people/Virtual-Air-Rescue/100090867294041/#"
target="_blank"
rel="noopener noreferrer"
className="hover:text-primary text-white"
>
<Image src={FacebookSvg} className="invert w-5 h5" alt="Youtube Icon" />
</a>
</div>
<div className="tooltip tooltip-top" data-tip="Instagram">
<a
href="https://www.instagram.com/virtualairrescue/"
target="_blank"
rel="noopener noreferrer"
className="hover:text-primary"
>
<InstagramLogoIcon className="w-5 h-5" />
</a>
</div>
<div className="tooltip tooltip-top" data-tip="Knowledgebase">
<a href="https://docs.virtualairrescue.com/" className="hover:text-primary">
<ReaderIcon className="w-5 h-5" />
</a>
</div>
</div>
</footer>
);
};

View File

Before

Width:  |  Height:  |  Size: 667 B

After

Width:  |  Height:  |  Size: 667 B

View File

Before

Width:  |  Height:  |  Size: 1.0 KiB

After

Width:  |  Height:  |  Size: 1.0 KiB

View File

@@ -1,14 +1,12 @@
import type { Metadata } from "next";
import { DiscordLogoIcon, InstagramLogoIcon, ReaderIcon } from "@radix-ui/react-icons";
import { HorizontalNav, VerticalNav } from "../_components/Nav";
import { redirect } from "next/navigation";
import { getServerSession } from "../api/auth/[...nextauth]/auth";
import { EmailVerification } from "_components/EmailVerification";
import { FirstPath } from "./_components/FirstPath";
import { Penalty } from "_components/Penalty";
import YoutubeSvg from "./resources/_components/youtube_wider.svg";
import FacebookSvg from "./resources/_components/facebook.svg";
import Image from "next/image";
import { Footer } from "(app)/_components/Footer";
export const metadata: Metadata = {
title: "VAR: Hub",
@@ -56,73 +54,7 @@ export default async function RootLayout({
</div>
</div>
{/* Footer */}
<footer className="footer flex justify-between items-center p-4 bg-base-200 mt-4 rounded-lg shadow-md">
{/* Left: Impressum & Datenschutz */}
<div className="flex gap-4 text-sm">
<a href="https://virtualairrescue.com/impressum/" className="hover:text-primary">
Impressum
</a>
<a href="https://virtualairrescue.com/datenschutz/" className="hover:text-primary">
Datenschutzerklärung
</a>
</div>
{/* Center: Copyright */}
<p className="text-sm">Copyright © {new Date().getFullYear()} - Virtual Air Rescue</p>
{/* Right: Social Icons */}
<div className="flex gap-4">
<div className="tooltip tooltip-top" data-tip="Discord">
<a
href="https://discord.gg/yn7uXmmNnG"
target="_blank"
rel="noopener noreferrer"
className="hover:text-primary"
>
<DiscordLogoIcon className="w-5 h-5" />
</a>
</div>
<div className="tooltip tooltip-top" data-tip="YouTube">
<a
href="https://www.youtube.com/@VirtualAirRescue"
target="_blank"
rel="noopener noreferrer"
className="hover:text-primary text-white"
>
<Image src={YoutubeSvg} className="invert w-5 h5" alt="Youtube Icon" />
</a>
</div>
<div className="tooltip tooltip-top" data-tip="Facebook">
<a
href="https://www.facebook.com/people/Virtual-Air-Rescue/100090867294041/#"
target="_blank"
rel="noopener noreferrer"
className="hover:text-primary text-white"
>
<Image src={FacebookSvg} className="invert w-5 h5" alt="Youtube Icon" />
</a>
</div>
<div className="tooltip tooltip-top" data-tip="Instagram">
<a
href="https://www.instagram.com/virtualairrescue/"
target="_blank"
rel="noopener noreferrer"
className="hover:text-primary"
>
<InstagramLogoIcon className="w-5 h-5" />
</a>
</div>
<div className="tooltip tooltip-top" data-tip="Knowledgebase">
<a href="https://docs.virtualairrescue.com/" className="hover:text-primary">
<ReaderIcon className="w-5 h-5" />
</a>
</div>
</div>
</footer>
<Footer />
</div>
</div>
</div>

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

View File

@@ -1,10 +1,20 @@
import ResourceCard from "(app)/resources/_components/Card";
import { Download } from "lucide-react";
import Desktop from "./_components/desktop-client.png";
import Discord from "./_components/Discord-logo.png";
import { DiscordLogoIcon } from "@radix-ui/react-icons";
export default function () {
return (
<div>
<div className="space-y-8">
<ResourceCard
image={Discord}
title="Discord Server"
BtnIcon={<DiscordLogoIcon />}
btnHref="https://discord.com/invite/x6FAMY7DW6"
btnLabel="Beitreten"
description="Tritt unserem Discord-Server bei, um mit der Community in Kontakt zu bleiben, Unterstützung zu erhalten und über die neuesten Updates informiert zu werden. Wenn du beigetreten bist kannst du in deinen Einstellugnen dein VAR-Konto mit deinem Discord-Konto verknüpfen umd eine Rolle zu erhalten."
/>
<ResourceCard
image={Desktop}
title="Desktop client"

View File

@@ -48,7 +48,7 @@ export const VerticalNav = async () => {
<li>
<Link href="/resources">
<DownloadIcon />
Downloads
Downloads / Links
</Link>
</li>
{viewAdminMenu && (

View File

@@ -78,10 +78,10 @@ services:
replicas: 2
labels:
- "traefik.enable=true"
- "traefik.http.routers.dispatch.rule=Host(`dispatch.virtualairrescue.com`)"
- "traefik.http.routers.dispatch.entrypoints=websecure"
- "traefik.http.routers.dispatch.tls.certresolver=le"
- "traefik.http.services.dispatch.loadbalancer.server.port=3000"
- "traefik.http.routers.ops.rule=Host(`ops.virtualairrescue.com`)"
- "traefik.http.routers.ops.entrypoints=websecure"
- "traefik.http.routers.ops.tls.certresolver=le"
- "traefik.http.services.ops.loadbalancer.server.port=3000"
environment:
- NEXTAUTH_URL=${AUTH_DISPATCH_URL}
@@ -101,12 +101,12 @@ services:
replicas: 3
labels:
- "traefik.enable=true"
- "traefik.http.routers.dispatch-server.rule=Host(`api.dispatch.virtualairrescue.com`)"
- "traefik.http.routers.dispatch-server.entrypoints=websecure"
- "traefik.http.routers.dispatch-server.tls.certresolver=le"
- "traefik.http.services.dispatch-server.loadBalancer.sticky.cookie.name=server_id"
- "traefik.http.services.dispatch-server.loadBalancer.sticky.cookie.httpOnly=true"
- "traefik.http.services.dispatch-server.loadbalancer.server.port=3000"
- "traefik.http.routers.ops-server.rule=Host(`api.ops.virtualairrescue.com`)"
- "traefik.http.routers.ops-server.entrypoints=websecure"
- "traefik.http.routers.ops-server.tls.certresolver=le"
- "traefik.http.services.ops-server.loadBalancer.sticky.cookie.name=server_id"
- "traefik.http.services.ops-server.loadBalancer.sticky.cookie.httpOnly=true"
- "traefik.http.services.ops-server.loadbalancer.server.port=3000"
networks:
- core_network
- postgres_network