feat: Vollständiges Rebranding zu MiChess, Copyright Tom Misch

- Alle @chessu/ → @michess/ (Package-Namen und Imports)
- Theme-Namen chessuDark/Light → michessDark/Light
- Alle Display-Texte: chessu/Michess → MiChess
- Autor: dotnize → Tom Misch
- Copyright: Nathaniel Tampus → Tom Misch
- README komplett neu (Deutsch, MiChess-spezifisch)
- CONTRIBUTING.md neu
- FUNDING.yml + CODE_OF_CONDUCT.md entfernt
- Fork-Hinweis auf chessu bleibt im README erhalten (MIT-Pflicht)
- pnpm-lock.yaml entfernt (wird beim Build neu generiert)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Michess
2026-04-13 10:47:16 +02:00
parent 4ab8cd3834
commit 694177c108
39 changed files with 121 additions and 5259 deletions

View File

@@ -18,10 +18,10 @@ export async function generateMetadata({ params }: { params: { code: string } })
return {
description: `Play or watch a game with ${game.host?.name}`,
openGraph: {
title: "chessu",
title: "MiChess",
description: `Play or watch a game with ${game.host?.name}`,
url: `https://ches.su/${game.code}`,
siteName: "chessu",
siteName: "MiChess",
locale: "en_US",
type: "website"
},

View File

@@ -1,6 +1,6 @@
import ArchivedGame from "@/components/archive/ArchivedGame";
import { fetchArchivedGame } from "@/lib/game";
import type { Game } from "@chessu/types";
import type { Game } from "@michess/types";
import { notFound } from "next/navigation";
export async function generateMetadata({ params }: { params: { id: number } }) {
@@ -19,10 +19,10 @@ export async function generateMetadata({ params }: { params: { id: number } }) {
return {
description: `Archived game: ${game.white?.name} vs ${game.black?.name}`,
openGraph: {
title: "chessu",
title: "MiChess",
description: `Archived game: ${game.white?.name} vs ${game.black?.name}`,
url: `https://ches.su/archive/${game.id}`,
siteName: "chessu",
siteName: "MiChess",
locale: "en_US",
type: "website"
},

View File

@@ -9,12 +9,12 @@ import AuthModal from "@/components/auth/AuthModal";
import ContextProvider from "@/context/ContextProvider";
export const metadata = {
title: "Michess",
title: "MiChess",
description: "Schach spielen lokal, privat, kostenlos.",
openGraph: {
title: "Michess",
title: "MiChess",
description: "Schach spielen lokal, privat, kostenlos.",
siteName: "Michess",
siteName: "MiChess",
locale: "de_DE",
type: "website"
},
@@ -55,9 +55,9 @@ export default function RootLayout({ children }: { children: ReactNode }) {
id="load-theme"
dangerouslySetInnerHTML={{
__html: `if (localStorage.theme === "dark" || (!("theme" in localStorage) && window.matchMedia("(prefers-color-scheme: dark)").matches)) {
document.documentElement.setAttribute("data-theme", "chessuDark");
document.documentElement.setAttribute("data-theme", "michessDark");
} else {
document.documentElement.setAttribute("data-theme", "chessuLight");
document.documentElement.setAttribute("data-theme", "michessLight");
}`
}}
></script>

View File

@@ -16,13 +16,13 @@ export async function generateMetadata({ params }: { params: { name: string } })
};
}
return {
title: `${data.name} | chessu`,
title: `${data.name} | MiChess`,
description: `${data.name}'s profile`,
openGraph: {
title: `${data.name} | chessu`,
description: `${data.name}'s profile on chessu`,
title: `${data.name} | MiChess`,
description: `${data.name}'s profile on MiChess`,
url: `https://ches.su/user/${data.name}`,
siteName: "chessu",
siteName: "MiChess",
locale: "en_US",
type: "website"
},

View File

@@ -2,11 +2,11 @@ export default function Footer() {
return (
<footer className="footer border-base-300 dark:border-neutral text-base-content mx-1 mt-4 w-auto grid-flow-col items-center justify-between border-t-2 p-4 md:mx-16 lg:mx-40">
<div className="items-center">
<p>&copy; {new Date().getFullYear()} Michess &mdash; Dein privates Schachbrett</p>
<p>&copy; {new Date().getFullYear()} MiChess &mdash; Dein privates Schachbrett</p>
</div>
<div className="items-center">
<a
href="https://git.mischlabs.de/MrDiderot/Michess"
href="https://git.mischlabs.de/MrDiderot/MiChess"
target="_blank"
rel="noopener noreferrer"
className="btn btn-ghost btn-sm gap-1 normal-case"

View File

@@ -25,7 +25,7 @@ export default function Header() {
>
<path d="M237.84 383.74c13.61 23.9 35.9 48.09 32.29 80.27H17.83c-3.62-32.18 21.67-56.37 35.28-80.27h184.73zM69.68 120.41h148.64c7.51 0 13.66 6.18 13.66 13.66s-6.18 13.66-13.66 13.66H69.68c-7.48 0-13.66-6.15-13.66-13.66s6.15-13.66 13.66-13.66zM120.55 0h48.95v56.29c0 3.87 3.18 7.04 7.04 7.04h24.32c3.86 0 6.32-3.23 7.04-7.04L218.59 0h43.56L244.7 85.8c-4.01 12.59-13.6 18.96-28.35 19.63H66.56c-12.93-.28-20.33-6.82-22.54-19.63L25.85 0h45.62l10.69 56.29c.71 3.81 3.17 7.04 7.03 7.04h24.32c3.86 0 7.04-3.17 7.04-7.04V0zM70.94 162.75c-1.5 60.45-7.75 119.42-22.87 158.47h191.86c-17.59-44.3-24.65-102.49-26.68-158.47H70.94zM46.28 336.2h195.44c8.94 0 16.26 7.36 16.26 16.26v.01c0 8.9-7.36 16.26-16.26 16.26H46.28c-8.9 0-16.26-7.32-16.26-16.26v-.01c0-8.94 7.32-16.26 16.26-16.26zM16.82 479.03h254.36c9.25 0 16.82 7.57 16.82 16.81v.01c0 9.25-7.57 16.81-16.82 16.81H16.82C7.57 512.66 0 505.1 0 495.85v-.01c0-9.24 7.57-16.81 16.82-16.81z" />
</svg>
Michess
MiChess
</Link>
</div>
<div className="flex-none gap-1">

View File

@@ -7,7 +7,7 @@ export default function ThemeToggle() {
const [darkTheme, setDarkTheme] = useState(true);
useEffect(() => {
if (document.documentElement.getAttribute("data-theme") === "chessuDark") {
if (document.documentElement.getAttribute("data-theme") === "michessDark") {
setDarkTheme(true);
} else {
setDarkTheme(false);
@@ -16,14 +16,14 @@ export default function ThemeToggle() {
function toggleTheme() {
if (
document.documentElement.getAttribute("data-theme") === "chessuDark" ||
document.documentElement.getAttribute("data-theme") === "michessDark" ||
(!("theme" in localStorage) && window.matchMedia("(prefers-color-scheme: dark)").matches)
) {
document.documentElement.setAttribute("data-theme", "chessuLight");
document.documentElement.setAttribute("data-theme", "michessLight");
localStorage.theme = "light";
setDarkTheme(false);
} else {
document.documentElement.setAttribute("data-theme", "chessuDark");
document.documentElement.setAttribute("data-theme", "michessDark");
localStorage.theme = "dark";
setDarkTheme(true);
}

View File

@@ -1,7 +1,7 @@
"use client";
import type { CustomSquares } from "@/types";
import { Game } from "@chessu/types";
import { Game } from "@michess/types";
import {
IconChevronLeft,
IconChevronRight,

View File

@@ -1,7 +1,7 @@
"use client";
import { SessionContext } from "@/context/session";
import type { Game } from "@chessu/types";
import type { Game } from "@michess/types";
import { useContext } from "react";
import GamePage from "./GamePage";

View File

@@ -15,7 +15,7 @@ import { SessionContext } from "@/context/session";
import { useContext, useEffect, useReducer, useRef, useState } from "react";
import type { Message } from "@/types";
import type { Game } from "@chessu/types";
import type { Game } from "@michess/types";
import type { Move, Square } from "chess.js";
import { Chess } from "chess.js";
@@ -149,9 +149,9 @@ export default function GamePage({ initialLobby }: { initialLobby: Game }) {
if (lobby.side === "s" || !lobby.white?.id || !lobby.black?.id) return;
if (!lobby.endReason && lobby.side === lobby.actualGame.turn()) {
document.title = "(your turn) chessu";
document.title = "(your turn) MiChess";
} else {
document.title = "chessu";
document.title = "MiChess";
}
}

View File

@@ -1,5 +1,5 @@
import type { Action, CustomSquares, Lobby, Message } from "@/types";
import type { Game, User } from "@chessu/types";
import type { Game, User } from "@michess/types";
import type { Dispatch, SetStateAction } from "react";
import type { Socket } from "socket.io-client";

View File

@@ -1,5 +1,5 @@
import type { Action, CustomSquares, Lobby } from "@/types";
import type { Game, User } from "@chessu/types";
import type { Game, User } from "@michess/types";
import type { Dispatch, SetStateAction } from "react";
export const syncPgn = (

View File

@@ -1,6 +1,6 @@
"use client";
import type { User } from "@chessu/types";
import type { User } from "@michess/types";
import type { ReactNode } from "react";
import { useEffect, useState } from "react";

View File

@@ -1,4 +1,4 @@
import type { User } from "@chessu/types";
import type { User } from "@michess/types";
import { createContext, Dispatch, SetStateAction, useContext } from "react";
export const SessionContext = createContext<{

View File

@@ -1,5 +1,5 @@
import { API_URL } from "@/config";
import type { User } from "@chessu/types";
import type { User } from "@michess/types";
export const fetchSession = async () => {
try {

View File

@@ -1,5 +1,5 @@
import { API_URL } from "@/config";
import type { Game } from "@chessu/types";
import type { Game } from "@michess/types";
export const createGame = async (side: string, unlisted: boolean) => {
try {

View File

@@ -1,5 +1,5 @@
import { API_URL } from "@/config";
import type { Game, User } from "@chessu/types";
import type { Game, User } from "@michess/types";
export const fetchProfileData = async (name: string) => {
try {

View File

@@ -1,4 +1,4 @@
import type { Game, User } from "@chessu/types";
import type { Game, User } from "@michess/types";
import type { Chess } from "chess.js";
export interface Lobby extends Game {