docs: update docusaurus configuration and documentation structure

- Revised the tagline in `docusaurus.config.js` for improved clarity on the documentation's focus.
- Removed German localization support from the configuration to streamline the user experience.
- Updated navigation items in the sidebar to better reflect the current structure, emphasizing player and developer resources.
- Enhanced the README and various documentation files to clarify the repository layout and improve accessibility for users.
- Adjusted links and descriptions throughout the documentation to ensure consistency and accuracy.

This commit aims to enhance the overall clarity and usability of the documentation.
This commit is contained in:
Marvin
2026-04-10 02:26:32 +02:00
parent 8d8fda49c4
commit 331847013d
50 changed files with 634 additions and 1070 deletions

View File

@@ -431,7 +431,11 @@ body {
/* Doc canvas — editorial bleed (wiki layout alignment); no hard section borders */
.theme-doc-wrapper {
background: linear-gradient(180deg, var(--color-surface-container-low) 0%, var(--color-background) 42%);
background: linear-gradient(
180deg,
var(--color-surface-container-low) 0%,
var(--color-background) 42%
);
}
.theme-doc-root .theme-doc-sidebar-container {
@@ -576,7 +580,9 @@ body {
flex-shrink: 0;
opacity: 0.85;
color: rgba(192, 252, 246, 0.45);
transition: color 0.2s ease, opacity 0.2s ease;
transition:
color 0.2s ease,
opacity 0.2s ease;
}
.footer__link-item:hover .footer-icon-svg {

View File

@@ -97,7 +97,8 @@ export const moduleCatalog: ModuleEntry[] = [
name: 'FMF.ModPathRedirector',
repoFolder: 'gregMod.PathRedirector',
type: 'plugin',
description: 'MelonLoader plugin: waits for each subscribed Workshop item (Steam + StreamingAssets/Mods/workshop_*) before MelonMods load.',
description:
'MelonLoader plugin: waits for each subscribed Workshop item (Steam + StreamingAssets/Mods/workshop_*) before MelonMods load.',
version: '1.5.0',
author: 'DataCenterExporter / gregFramework Community',
languages: ['C#'],

View File

@@ -1,54 +0,0 @@
import type { HomepageContent } from './types';
import { homepageShellDe } from './sharedLinks';
export const de: HomepageContent = {
...homepageShellDe,
heroLine1: 'DATACENTER MODDING HUB.',
heroLine2: 'SEI SMART WIE GREG.',
heroSub1: 'Klar. Flexibel. Community-getrieben.',
heroSub2: 'gregFramework, Rust-Stacks, Multiplayer und Plugins.',
ctaStart: 'MODDING STARTEN',
ctaMods: 'VERFÜGBARE STANDALONE MODS & PLUGINS',
docsPaths: 'Dokumentationspfade',
featureTitles: ['Dual-Track Modding', 'Runtime Hook Bridge', 'Wiki-basierte Doku', 'Community-Ökosystem'],
featureDescriptions: [
'Baue Mods direkt in C# oder nativ in Rust via C-ABI/FFI.',
'Harmony-Patches, Event-IDs und deterministische Hook-Weiterleitung.',
'Source of truth aus .wiki mit Enduser- und Moddev-Pfaden.',
'Core-Framework-Doku plus Standalone-Plugin- und Ökosystem-Doku.',
],
comingSoon: 'Kommt bald',
comingSoonText: '`datacentermods.com` wird gerade vorbereitet. Bis zum Launch findest du alles unter `Docs Hub → Standalone Mods`.',
communityTitle: 'Community & Maintainer',
communityText: 'Dieses Portal bündelt gregFramework-Doku und Community-Plugins für das Data-Center-Ökosystem.',
docsEndUserTitle: 'Endnutzer',
docsEndUserDescription: 'Installation, Updates, FAQ und Fehlerbehebung.',
docsModDevsTitle: 'Mod-Entwickler',
docsModDevsDescription: 'Debug-Workflows, Setup, Hooks und Referenzen.',
docsContributorsTitle: 'Mitwirkende',
docsContributorsDescription: 'Konventionen, CI-Checks und Contribution-Workflow.',
docsCapabilityTitle: 'Capability Matrix',
docsCapabilityDescription: 'Komplette Feature-Übersicht und konkrete Use Cases.',
ecosystemTitle: 'Ecosystem Coverage',
ecosystemCoreTitle: 'gregFramework Core',
ecosystemCoreDescription: 'Hook-System, FFI-Bridge, Event-Verträge und Runtime-Architektur.',
ecosystemCoreCta: 'Core-Doku öffnen →',
ecosystemRustTitle: 'Standalone Rust',
ecosystemRustDescription: 'Rust/FFI-Implementierungsleitfäden für externe und standalone Runtimes.',
ecosystemRustCta: 'Rust/FFI-Doku öffnen →',
ecosystemMultiplayerTitle: 'Multiplayer & Plugins',
ecosystemMultiplayerDescription: 'Multiplayer-Roadmap, Plugin-Doku und Community-Modul-Referenzen.',
ecosystemMultiplayerCta: 'Multiplayer-Doku öffnen →',
gregTitle: 'Die Legende von Greg',
gregText1:
'Greg ist der unermüdliche Server-Techniker des Projekts. Er wirkt zwar so, als hätte er seit Monaten nicht mehr geschlafen, und er ist meistens still — aber sobald ein Rack ausfällt oder ein Mod zickt, ist Greg schon da.',
gregText2:
'Unterwürfig erfüllt er all deine Wünsche: mehr Uptime, sauberere Configs, bessere Logs und weniger Drama im Deployment. Er fragt nicht viel, er liefert einfach.',
gregQuote: '"Be smart. Be like Greg."',
supportTitle: 'Support',
supportText: 'Melde Bugs, fordere Doku für neue Community-Plugins an und verfolge Workstreams.',
supportCta: 'GitHub Issues öffnen',
availableModsLabel: 'Verfügbare Mods',
repositoryLabel: 'Repository',
joinLabel: 'BEITRETEN',
};

View File

@@ -5,20 +5,21 @@ export const en: HomepageContent = {
...homepageShellEn,
heroLine1: 'DATACENTER MODDING HUB.',
heroLine2: 'SMART LIKE GREG.',
heroSub1: 'Streamlined. Flexible. Community-curated.',
heroSub2: 'gregFramework, Rust stacks, multiplayer, and plugins.',
ctaStart: 'START MODDING',
ctaMods: 'AVAILABLE STANDALONE MODS & PLUGINS',
heroSub1: 'Install mods, use the Workshop, fix common issues — without digging through engine docs.',
heroSub2: 'Technical reference for authors lives under Developers in the wiki.',
ctaStart: 'HELP FOR PLAYERS',
ctaMods: 'MOD CATALOG',
docsPaths: 'Documentation paths',
featureTitles: ['Dual-track modding', 'Runtime hook bridge', 'Wiki-driven docs', 'Community ecosystem'],
featureTitles: ['Play with mods', 'Workshop & updates', 'Clear docs', 'Community'],
featureDescriptions: [
'Build mods in C# or natively in Rust via C-ABI/FFI.',
'Harmony patches, event IDs, and deterministic hook forwarding.',
'Source of truth from .wiki with end-user and mod-dev paths.',
'Core framework docs plus standalone plugin and ecosystem docs.',
'Step-by-step paths for installing and troubleshooting — no repo jargon on day one.',
'WorkshopManager and release channels explain where builds come from.',
'Player pages are short; author pages stay under one Developers section.',
'Discord and GitHub for help — framework internals only when you need them.',
],
comingSoon: 'Coming soon',
comingSoonText: '`datacentermods.com` is in preparation. Until launch, use `Docs Hub → Standalone Mods`.',
comingSoonText:
'`datacentermods.com` is in preparation. Until launch, use the wiki **For players** and the **Mod catalog**.',
communityTitle: 'Community & maintainers',
communityText: 'This portal is designed for gregFramework docs and community-built plugins across the Data Center ecosystem.',
docsEndUserTitle: 'End-user',

View File

@@ -1,25 +1,8 @@
import { de } from './de';
import { en } from './en';
import type { HomepageContent, LocaleKey } from './types';
import {en} from './en';
import type {HomepageContent} from './types';
const homepageByLocale: Record<LocaleKey, HomepageContent> = {
en,
de,
};
export type {HomepageContent, LocaleKey} from './types';
export type { HomepageContent, LocaleKey } from './types';
export function getHomepageContent(locale: string): HomepageContent {
const normalizedLocale = (locale || 'en').toLowerCase();
const languageOnly = normalizedLocale.split('-')[0] as LocaleKey;
if (normalizedLocale in homepageByLocale) {
return homepageByLocale[normalizedLocale as LocaleKey];
}
if (languageOnly in homepageByLocale) {
return homepageByLocale[languageOnly];
}
return homepageByLocale.en;
export function getHomepageContent(_locale: string): HomepageContent {
return en;
}

View File

@@ -1,122 +1,81 @@
import type { HomepageContent, HomepageDocLink } from './types';
import type {HomepageContent, HomepageDocLink} from './types';
/** English link hub — reused for locales without dedicated translations. */
/** Player-first links — technical docs live under /wiki/developers */
export const sharedKnowledgeLinksEn: HomepageDocLink[] = [
{ title: 'Wiki Overview', description: 'Canonical docs entry under /wiki.', link: '/wiki' },
{title: 'Wiki home', description: 'Short entry — players vs developers.', link: '/wiki'},
{
title: 'Framework Core',
description: 'Runtime hooks, bridge, events, and architecture.',
link: '/wiki/mods/framework',
},
{
title: 'Plugins (FFM)',
description: 'FFM.Plugin.* docs and release pages.',
link: '/wiki/plugins/',
},
{ title: 'Mods (FMF)', description: 'Gameplay mods, releases, and module docs.', link: '/wiki/mods/' },
{
title: 'FMF Hooks Catalog',
description: 'Hook strings and event IDs generated from core sources.',
link: '/wiki/reference/fmf-hooks-catalog',
},
{
title: 'Release Channels',
description: 'Steam Workshop vs GitHub for discovery and betas.',
link: '/wiki/reference/release-channels',
},
{
title: 'Unified Roadmap',
description: 'Consolidated planning with duplicate tracks removed.',
link: '/wiki/roadmap/unified-roadmap',
},
{ title: 'Mods Catalog', description: 'Dynamic /mods page with wiki and download links.', link: '/mods' },
];
export const sharedWorkflowLinksEn: HomepageDocLink[] = [
{
title: 'End-user docs',
description: 'Install, update, and troubleshooting paths.',
title: 'For players',
description: 'Install, update, troubleshooting.',
link: '/wiki/guides/players/overview',
},
{
title: 'Mod developer docs',
description: 'Setup, debugging, and hook integration.',
title: 'WorkshopManager',
description: 'Browse and install Workshop mods.',
link: '/wiki/guides/players/enduser-workshop',
},
{
title: 'Release channels',
description: 'Steam Workshop vs GitHub for builds.',
link: '/wiki/reference/release-channels',
},
{title: 'Mod catalog', description: 'Modules with docs and download links.', link: '/mods'},
];
/** Authors & contributors — one hop to the full technical tree */
export const sharedWorkflowLinksEn: HomepageDocLink[] = [
{
title: 'Developers (hub)',
description: 'Framework, mods, plugins, reference, roadmap — all technical links.',
link: '/wiki/developers',
},
{
title: 'Mod developer guide',
description: 'Hooks, setup, and workflow entry.',
link: '/wiki/guides/mod-developers/overview',
},
{
title: 'Repo inventory',
description: 'Split-repo layout and drift notes for contributors.',
link: '/wiki/contributors/repo-inventory',
},
{
title: 'Contributor workflow',
description: 'Standards, CI, and documentation workflow.',
description: 'Docs site and repo conventions.',
link: '/wiki/contributors/docusaurus-workflow',
},
{
title: 'Plugin security audit',
description: 'Submission and malicious-code review process.',
link: '/wiki/contributors/plugin-submission-audit',
},
];
export const sharedKnowledgeLinksDe: HomepageDocLink[] = [
{ title: 'Wiki-Übersicht', description: 'Einstieg unter /wiki.', link: '/wiki' },
{title: 'Wiki-Start', description: 'Kurzüberblick — Spieler vs. Entwickler.', link: '/wiki'},
{
title: 'Framework-Core',
description: 'Runtime-Hooks, Bridge, Events und Architektur.',
link: '/wiki/mods/framework',
title: 'Für Spieler',
description: 'Installation, Updates, Fehlerbehebung.',
link: '/wiki/guides/players/overview',
},
{
title: 'Plugins (FFM)',
description: 'FFM.Plugin.*-Doku und Release-Seiten.',
link: '/wiki/plugins/',
},
{ title: 'Mods (FMF)', description: 'Gameplay-Mods, Releases und Modul-Doku.', link: '/wiki/mods/' },
{
title: 'FMF-Hooks-Katalog',
description: 'Hook-Strings und Event-IDs aus den Core-Quellen.',
link: '/wiki/reference/fmf-hooks-catalog',
title: 'WorkshopManager',
description: 'Workshop-Mods suchen und installieren.',
link: '/wiki/guides/players/enduser-workshop',
},
{
title: 'Release-Kanäle',
description: 'Steam Workshop vs GitHub für Discovery und Betas.',
description: 'Steam Workshop vs GitHub.',
link: '/wiki/reference/release-channels',
},
{
title: 'Einheitliche Roadmap',
description: 'Zusammengeführte Planung ohne doppelte Tracks.',
link: '/wiki/roadmap/unified-roadmap',
},
{ title: 'Mods-Katalog', description: 'Dynamische /mods-Seite mit Wiki- und Download-Links.', link: '/mods' },
{title: 'Mod-Katalog', description: 'Module mit Doku- und Download-Links.', link: '/mods'},
];
export const sharedWorkflowLinksDe: HomepageDocLink[] = [
{
title: 'Endnutzer-Doku',
description: 'Installation, Updates und Fehlerbehebung.',
link: '/wiki/guides/players/overview',
title: 'Entwickler (Hub)',
description: 'Framework, Mods, Plugins, Referenz — alle technischen Links.',
link: '/wiki/developers',
},
{
title: 'Mod-Entwickler-Doku',
description: 'Setup, Debugging und Hook-Integration.',
title: 'Mod-Entwickler-Guide',
description: 'Hooks, Setup, Einstieg.',
link: '/wiki/guides/mod-developers/overview',
},
{
title: 'Repo-Inventar',
description: 'Split-Repo-Layout und Drift-Hinweise.',
link: '/wiki/contributors/repo-inventory',
},
{
title: 'Contributor-Workflow',
description: 'Standards, CI und Doku-Workflow.',
description: 'Doku-Site und Repo-Konventionen.',
link: '/wiki/contributors/docusaurus-workflow',
},
{
title: 'Plugin-Security-Audit',
description: 'Einreichung und Review auf Schadcode.',
link: '/wiki/contributors/plugin-submission-audit',
},
];
export const homepageShellEn: Pick<
@@ -137,13 +96,13 @@ export const homepageShellEn: Pick<
heroBadge: 'gregFramework · docs live',
heroBrandLine1: 'greg',
heroBrandLine2Gradient: 'Framework',
knowledgeSectionTitle: 'Knowledge architecture',
workflowSectionTitle: 'Workflows',
codeSectionTitle: 'Engineered for mod authors',
knowledgeSectionTitle: 'Players — start here',
workflowSectionTitle: 'Authors & contributors',
codeSectionTitle: 'Building on gregFramework',
codeSectionLead:
'C# mods on MelonLoader, FMF plugins, and optional Rust FFI bridges — one documentation hub, versioned with the split repos.',
ctaDiscordTitle: 'Build with the community',
ctaDiscordLead: 'Ask questions, share mods, and follow framework releases alongside core development.',
'C# mods on MelonLoader, FFM plugins, and optional Rust bridges — details for authors are under Developers.',
ctaDiscordTitle: 'Community',
ctaDiscordLead: 'Questions about playing or building — ask in Discord.',
ctaDiscordButton: 'Join Discord',
knowledgeLinks: sharedKnowledgeLinksEn,
workflowLinks: sharedWorkflowLinksEn,
@@ -167,13 +126,13 @@ export const homepageShellDe: Pick<
heroBadge: 'gregFramework · Live-Dokumentation',
heroBrandLine1: 'greg',
heroBrandLine2Gradient: 'Framework',
knowledgeSectionTitle: 'Wissensarchitektur',
workflowSectionTitle: 'Arbeitsabläufe',
codeSectionTitle: 'Für Mod-Autoren gebaut',
knowledgeSectionTitle: 'Spieler — Einstieg',
workflowSectionTitle: 'Autoren & Contributors',
codeSectionTitle: 'Auf gregFramework aufbauen',
codeSectionLead:
'C#-Mods auf MelonLoader, FMF-Plugins und optionale Rust-FFI-Brücken — ein Dokumentations-Hub, versioniert mit den Split-Repos.',
ctaDiscordTitle: 'Mit der Community bauen',
ctaDiscordLead: 'Fragen stellen, Mods teilen und Releases parallel zur Core-Entwicklung verfolgen.',
'C#-Mods auf MelonLoader, FFM-Plugins, optionale Rust-Brücken — Details für Autoren unter Entwickler.',
ctaDiscordTitle: 'Community',
ctaDiscordLead: 'Fragen zum Spielen oder Bauen — im Discord.',
ctaDiscordButton: 'Discord beitreten',
knowledgeLinks: sharedKnowledgeLinksDe,
workflowLinks: sharedWorkflowLinksDe,

View File

@@ -1,4 +1,4 @@
export type LocaleKey = 'en' | 'de';
export type LocaleKey = 'en';
export type HomepageDocLink = {
title: string;

View File

@@ -1,5 +1,3 @@
import type { LocaleKey } from './homepage/types';
export type ModsPageStrings = {
title: string;
description: string;
@@ -13,36 +11,20 @@ export type ModsPageStrings = {
legacyNoSplitRepo: string;
};
const byLocale: Record<LocaleKey, ModsPageStrings> = {
en: {
title: 'Mods & plugins catalog',
description:
'Generated from the module catalog. Each entry links to its wiki article, release page, and download route.',
pluginsHeading: 'Plugins',
modsHeading: 'Mods',
wiki: 'Wiki',
release: 'Release',
download: 'Download DLL',
notReleased: 'Not released yet',
repoFolder: 'gregFramework folder',
legacyNoSplitRepo: 'Legacy — no split repo in workspace',
},
de: {
title: 'Mods- & Plugin-Katalog',
description:
'Aus dem Modul-Katalog erzeugt. Jeder Eintrag verweist auf Wiki, Release-Seite und Download-Route.',
pluginsHeading: 'Plugins',
modsHeading: 'Mods',
wiki: 'Wiki',
release: 'Release',
download: 'DLL laden',
notReleased: 'Noch nicht veröffentlicht',
repoFolder: 'Ordner unter gregFramework',
legacyNoSplitRepo: 'Legacy — kein Split-Repo im Workspace',
},
const strings: ModsPageStrings = {
title: 'Mods & plugins catalog',
description:
'Generated from the module catalog. Each entry links to its wiki article, release page, and download route.',
pluginsHeading: 'Plugins',
modsHeading: 'Mods',
wiki: 'Wiki',
release: 'Release',
download: 'Download DLL',
notReleased: 'Not released yet',
repoFolder: 'gregFramework folder',
legacyNoSplitRepo: 'Legacy — no split repo in workspace',
};
export function getModsPageStrings(locale: string): ModsPageStrings {
const languageOnly = (locale || 'en').toLowerCase().split('-')[0] as LocaleKey;
return byLocale[languageOnly] ?? byLocale.en;
export function getModsPageStrings(_locale: string): ModsPageStrings {
return strings;
}

View File

@@ -69,7 +69,7 @@ export default function HomePage(): JSX.Element {
return (
<Layout
title="Home"
description="Community documentation for gregFramework — Data Center modding, plugins, and hooks."
description="Help for Data Center players using mods — plus developer docs under /wiki/developers."
>
<main className="bg-background text-on-surface font-sans min-h-screen editorial-bleed bg-hero-gradient">
<section className="hero-motion-wrap relative flex min-h-[72vh] flex-col items-center justify-center overflow-hidden px-4 py-24 text-center">
@@ -138,7 +138,7 @@ export default function HomePage(): JSX.Element {
transition={{delay: reducedMotion ? 0 : 0.22}}
>
<Link
to="/wiki/mods/framework"
to="/wiki/guides/players/overview"
className="btn-primary hero-glow rounded-lg px-10 py-4 text-lg"
>
{t.ctaStart}

View File

@@ -48,7 +48,8 @@ export default function FooterLinkItem({item}: Props): ReactNode {
: {
to: toUrl,
})}
{...props}>
{...props}
>
{icon ? (
<span className="footer-link-with-icon">
{icon}

View File

@@ -25,9 +25,7 @@ function useLocaleDropdownUtils() {
const getLocaleConfig = (locale: string) => {
const localeConfig = localeConfigs[locale];
if (!localeConfig) {
throw new Error(
`Docusaurus bug, no locale config found for locale=${locale}`,
);
throw new Error(`Docusaurus bug, no locale config found for locale=${locale}`);
}
return localeConfig;
};
@@ -49,10 +47,7 @@ function useLocaleDropdownUtils() {
return {
getURL: (locale: string, options: {queryString: string | undefined}) => {
const finalSearch = mergeSearchStrings(
[search, options.queryString],
'append',
);
const finalSearch = mergeSearchStrings([search, options.queryString], 'append');
return `${getBaseURLForLocale(locale)}${finalSearch}${hash}`;
},
getLabel: (locale: string) => {
@@ -85,11 +80,7 @@ export default function LocaleDropdownNavbarItem({
target: '_self',
autoAddBaseUrl: false,
className:
locale === currentLocale
? mobile
? 'menu__link--active'
: 'dropdown__link--active'
: '',
locale === currentLocale ? (mobile ? 'menu__link--active' : 'dropdown__link--active') : '',
};
});
@@ -103,15 +94,11 @@ export default function LocaleDropdownNavbarItem({
})
: utils.getLabel(currentLocale);
const iconOnlyDesktop =
!mobile && String(className ?? '').includes('nav-icon-only');
const iconOnlyDesktop = !mobile && String(className ?? '').includes('nav-icon-only');
const label: ReactNode = (
<>
<IoLanguage
className={iconOnlyDesktop ? styles.iconOnly : styles.iconLanguage}
aria-hidden
/>
<IoLanguage className={iconOnlyDesktop ? styles.iconOnly : styles.iconLanguage} aria-hidden />
{mobile || !iconOnlyDesktop ? (
dropdownLabel
) : (

View File

@@ -80,9 +80,7 @@ export default function NavbarNavLink({
<>
{label}
{isExternalLink && (
<IconExternalLink
{...(isDropdownLink && {width: 12, height: 12})}
/>
<IconExternalLink {...(isDropdownLink && {width: 12, height: 12})} />
)}
</>
),