Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
11 changes: 11 additions & 0 deletions app/lib/seo.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
const homepageTitle = 'Talo - open source, self-hostable game backend'

type PageTitles = { title: string; seoTitle?: string }

export function docTitle(page: PageTitles, isIndex: boolean): string {
if (isIndex) {
return homepageTitle
}

return `${page.seoTitle ?? page.title} | Talo docs`
}
5 changes: 5 additions & 0 deletions app/lib/source.ts
Original file line number Diff line number Diff line change
@@ -1,12 +1,17 @@
import { loader } from 'fumadocs-core/source'
import { pageSchema } from 'fumadocs-core/source/schema'
import { defineDocs } from 'fumadocs-mdx/macro'
import { z } from 'zod'
import { docsRoute } from './shared'
import { resolveIcon } from './sidebar-icons'

export const docs = defineDocs({
dir: 'content/docs',
docs: {
async: true,
// `seoTitle` overrides only the SERP <title>; `title` stays the page name
// used by the sidebar, H1 and search.
schema: pageSchema.extend({ seoTitle: z.string().optional() }),
postprocess: {
includeProcessedMarkdown: true,
},
Expand Down
8 changes: 5 additions & 3 deletions app/routes/docs.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ import { Feedback } from '@/components/feedback/client'
import { useMDXComponents } from '@/components/mdx'
import { onPageFeedback } from '@/lib/feedback'
import { baseOptions } from '@/lib/layout.shared'
import { docTitle } from '@/lib/seo'
import { siteOrigin } from '@/lib/shared'
import { docs, source } from '@/lib/source'
import type { Route } from './+types/docs'
Expand All @@ -29,6 +30,9 @@ export async function loader({ params }: Route.LoaderArgs) {
}
}

// The 1.x root is the docs landing page, so it keeps the marketing title.
const INDEX_PATH = '1.x/index.mdx'

function Content({ path, url }: { path: string; url: string }) {
const page = docs.getPage(path)
if (!page) {
Expand All @@ -47,9 +51,7 @@ function Content({ path, url }: { path: string; url: string }) {
footer={path === 'index.mdx' ? { className: 'mt-8' } : {}}
slots={{ breadcrumb: Breadcrumb }}
>
<title>
{path === 'index.mdx' ? 'Talo - open source, self-hostable game backend' : page.title}
</title>
<title>{docTitle(page, path === INDEX_PATH)}</title>
<link rel='canonical' href={`${siteOrigin}${url}`} />
<meta name='description' content={page.description} />
<DocsTitle>{page.title}</DocsTitle>
Expand Down
1 change: 1 addition & 0 deletions content/docs/1.x/admin/authentication.mdx
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
---
description: Learn how to authenticate your Admin API requests.
title: Authentication
seoTitle: Admin API authentication
---

## What is the Admin API?
Expand Down
1 change: 1 addition & 0 deletions content/docs/1.x/admin/bruno-collection.mdx
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
---
description: Interactive API explorer for the Admin API
title: Bruno request collection
seoTitle: Admin API Bruno collection
---

[Bruno](https://www.usebruno.com) is an open-source API client (a Postman alternative) for exploring and testing REST APIs. A pre-built Talo collection is available so you can try every endpoint, including the Admin API.
Expand Down
1 change: 1 addition & 0 deletions content/docs/1.x/admin/common-errors.mdx
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
---
description: Debug common issues with Admin API requests.
title: Common errors
seoTitle: Common admin API errors
---

## Missing authentication
Expand Down
1 change: 1 addition & 0 deletions content/docs/1.x/admin/dev-data.mdx
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
---
description: Separate development data from live data when using the Admin API.
title: Separating development data
seoTitle: Admin API development data
---
## Dev build headers

Expand Down
1 change: 1 addition & 0 deletions content/docs/1.x/admin/game-stat-api.mdx
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
---
description: Manage game stats via the admin API. Create stats, find them and view their metrics.
title: Game stat admin API
seoTitle: Admin game stats API
---

import { ServiceDocumentation } from '@/components/documentation/ServiceDocumentation'
Expand Down
1 change: 1 addition & 0 deletions content/docs/1.x/godot/channels.mdx
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
---
description: Talo Channels can be used for player chats, sending data to specific groups, pushing game updates and storing shared game state.
title: Channels and storage
seoTitle: Godot channels and storage
---

import { ScopeBadges } from '@/components/documentation/ScopeBadges'
Expand Down
1 change: 1 addition & 0 deletions content/docs/1.x/godot/continuity.mdx
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
---
description: Talo is designed to work online and offline. Talo will automatically keep data in sync for offline players.
title: Continuity and offline mode
seoTitle: Godot continuity and offline mode
---
import { ScopeBadges } from '@/components/documentation/ScopeBadges'

Expand Down
1 change: 1 addition & 0 deletions content/docs/1.x/godot/events.mdx
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
---
description: Event tracking allows you to understand what players are doing inside your game.
title: Events
seoTitle: Godot event tracking
---

import { ScopeBadges } from '@/components/documentation/ScopeBadges'
Expand Down
1 change: 1 addition & 0 deletions content/docs/1.x/godot/exporting.mdx
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
---
description: Talo can separate development data from live data based on debug builds and feature tags.
title: Exporting your project
seoTitle: Exporting a Godot project
---

## Android export permissions
Expand Down
1 change: 1 addition & 0 deletions content/docs/1.x/godot/feedback.mdx
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
---
description: Talo Feedback allows you to receive feedback directly from players. Feedback can be categorised, analysed and filtered to improve your game.
title: Feedback
seoTitle: Godot player feedback
---

import { ScopeBadges } from '@/components/documentation/ScopeBadges'
Expand Down
1 change: 1 addition & 0 deletions content/docs/1.x/godot/groups.mdx
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
---
description: Talo groups allow you to apply filters on your player-base to create distinct segments between players. You can have groups for beta testers, players who completed your game or players with specific props.
title: Player groups
seoTitle: Godot player groups
---

import { ScopeBadges } from '@/components/documentation/ScopeBadges'
Expand Down
1 change: 1 addition & 0 deletions content/docs/1.x/godot/identifying.mdx
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
---
description: The Talo Godot plugin allows you to authenticate players, create player aliases and sync identities with external identity providers.
title: Identifying a player
seoTitle: Identifying players in Godot
---

import { ScopeBadges } from '@/components/documentation/ScopeBadges'
Expand Down
1 change: 1 addition & 0 deletions content/docs/1.x/godot/install.mdx
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
---
description: Learn how to add Talo's Godot plugin to your game.
title: Installation
seoTitle: Installing the Talo Godot plugin
---

## Import into Godot
Expand Down
1 change: 1 addition & 0 deletions content/docs/1.x/godot/leaderboards.mdx
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
---
description: Talo leaderboards are highly customisable - sort modes, entry uniqueness and refresh intervals can all be easily configured per-leaderboard.
title: Leaderboards
seoTitle: Godot leaderboards
---

import { ScopeBadges } from '@/components/documentation/ScopeBadges'
Expand Down
1 change: 1 addition & 0 deletions content/docs/1.x/godot/live-config.mdx
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
---
description: Live config lets you push data to your game from the Talo dashboard without releasing a new update.
title: Live config
seoTitle: Godot live config
---

import { ScopeBadges } from '@/components/documentation/ScopeBadges'
Expand Down
1 change: 1 addition & 0 deletions content/docs/1.x/godot/player-authentication.mdx
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
---
description: Talo player authentication fully manages player login credentials, registrations and email verifications.
title: Player authentication
seoTitle: Godot player login and authentication
---

import { ScopeBadges } from '@/components/documentation/ScopeBadges'
Expand Down
1 change: 1 addition & 0 deletions content/docs/1.x/godot/player-presence.mdx
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
---
description: With Talo's presence API, you can track whether a player is online, allowing you to easily build social features like friends lists.
title: Player presence
seoTitle: Godot player presence and online status
---

import { ScopeBadges } from '@/components/documentation/ScopeBadges'
Expand Down
1 change: 1 addition & 0 deletions content/docs/1.x/godot/player-props.mdx
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
---
description: Players can have properties that are persisted across all of their aliases and across sessions. Props can be viewed and modified from the dashboard.
title: Players and props
seoTitle: Godot player properties
---

import { ScopeBadges } from '@/components/documentation/ScopeBadges'
Expand Down
1 change: 1 addition & 0 deletions content/docs/1.x/godot/player-relationships.mdx
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
---
description: Player relationships link players together for social features like friends lists, parties and guilds.
title: Player relationships
seoTitle: Godot player relationships
---

import { ScopeBadges } from '@/components/documentation/ScopeBadges'
Expand Down
1 change: 1 addition & 0 deletions content/docs/1.x/godot/request-verification.mdx
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
---
description: Enable request verification in the Godot plugin to cryptographically sign network requests and socket messages, preventing replay attacks and tampering.
title: Request verification
seoTitle: Godot request verification
---

## How it works
Expand Down
1 change: 1 addition & 0 deletions content/docs/1.x/godot/saves.mdx
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
---
description: Talo Saves allow you to persist your game's state across multiple sessions. Each object in your scene can be saved and restored from one of your player's saves.
title: Saves
seoTitle: Godot save system
---

import { ScopeBadges } from '@/components/documentation/ScopeBadges'
Expand Down
1 change: 1 addition & 0 deletions content/docs/1.x/godot/settings-reference.mdx
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
---
description: Customise Talo using the settings.cfg file.
title: Settings reference
seoTitle: Godot settings reference
---

## Default settings
Expand Down
1 change: 1 addition & 0 deletions content/docs/1.x/godot/socket.mdx
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
---
description: The Talo Socket automatically handles connections, messages and events.
title: Talo Socket
seoTitle: Godot sockets
---

import { ScopeBadges } from '@/components/documentation/ScopeBadges'
Expand Down
1 change: 1 addition & 0 deletions content/docs/1.x/godot/stats.mdx
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
---
description: Talo stats let you track individual player data as well as aggregated global data - like how many items have been crafted or how many deaths a player has.
title: Stats
seoTitle: Godot stats
---

import { ScopeBadges } from '@/components/documentation/ScopeBadges'
Expand Down
1 change: 1 addition & 0 deletions content/docs/1.x/godot/upgrading-to-1.0.mdx
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
---
description: Upgrade the Talo Godot plugin to 1.0 and migrate code from v0.49.1 and earlier.
title: Upgrading to 1.0
seoTitle: Upgrading the Talo Godot plugin to 1.0
---
## How to upgrade

Expand Down
1 change: 1 addition & 0 deletions content/docs/1.x/http/authentication.mdx
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
---
description: Learn how to authenticate your API requests.
title: Authentication
seoTitle: HTTP API authentication
---

## Creating and using an API key
Expand Down
1 change: 1 addition & 0 deletions content/docs/1.x/http/common-errors.mdx
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
---
description: Debug common issues with API requests.
title: Common errors
seoTitle: Common API errors
---

## Missing authentication
Expand Down
1 change: 1 addition & 0 deletions content/docs/1.x/http/event-api.mdx
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
---
description: Event tracking allows you to understand what players are doing inside your game.
title: Event API
seoTitle: Event tracking API
---

import { ServiceDocumentation } from '@/components/documentation/ServiceDocumentation'
Expand Down
1 change: 1 addition & 0 deletions content/docs/1.x/http/game-stat-api.mdx
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
---
description: Talo stats let you track individual player data as well as aggregated global data - like how many items have been crafted or how many deaths a player has.
title: Game stat API
seoTitle: Game stats API
---

import { ServiceDocumentation } from '@/components/documentation/ServiceDocumentation'
Expand Down
1 change: 1 addition & 0 deletions content/docs/1.x/http/request-verification.mdx
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
---
description: Talo's request verification system prevents replay attacks and tampering by validating signatures on HTTP API requests and socket messages.
title: Request verification
seoTitle: API request verification
---

## How it works
Expand Down
1 change: 1 addition & 0 deletions content/docs/1.x/integrations/apple-game-center.mdx
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
---
description: Use Talo's Apple Game Center integration to automatically identify players signed in to Game Center.
title: Apple Game Center
seoTitle: Apple Game Center integration
---

## How it works
Expand Down
1 change: 1 addition & 0 deletions content/docs/1.x/integrations/google-play-games.mdx
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
---
description: Use Talo's Google Play Games integration to automatically identify players signed in to Google.
title: Google Play Games
seoTitle: Google Play Games integration
---

## How it works
Expand Down
1 change: 1 addition & 0 deletions content/docs/1.x/integrations/steamworks.mdx
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
---
description: Talo's Steamworks integration can sync your players, stats and leaderboards. You can authenticate players and verify their ownership of your game.
title: Steamworks
seoTitle: Steamworks integration
---

## How it works
Expand Down
1 change: 1 addition & 0 deletions content/docs/1.x/selfhosting/configuration.mdx
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
---
description: Learn how to configure your self-hosted Talo.
title: Configuration
seoTitle: Self-hosting configuration
---

## Backend environment variables
Expand Down
2 changes: 2 additions & 0 deletions content/docs/1.x/sockets/common-errors.mdx
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
---
description: Fix common Talo Socket errors, from invalid messages to expired tickets.
title: Common errors
seoTitle: Common socket errors
---

## Missing authentication
Expand Down
1 change: 1 addition & 0 deletions content/docs/1.x/sockets/custom-ping-pongs.mdx
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
---
description: If your clientside websocket framework doesn't support ping-pong control frames, you can use Talo's custom heartbeat message to keep connections alive.
title: Custom ping-pongs
seoTitle: Custom socket ping-pongs
---

## Browser support
Expand Down
1 change: 1 addition & 0 deletions content/docs/1.x/sockets/request-verification.mdx
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
---
description: Socket message verification uses cryptographic signatures to prevent replay attacks and tampering on WebSocket messages.
title: Request verification
seoTitle: Socket request verification
---

## How it works
Expand Down
1 change: 1 addition & 0 deletions content/docs/1.x/sockets/requests.mdx
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
---
description: Requests are socket messages you send to Talo and other players
title: Requests
seoTitle: Socket requests
---

## Players
Expand Down
1 change: 1 addition & 0 deletions content/docs/1.x/sockets/responses.mdx
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
---
description: Responses are socket messages sent from Talo and other players
title: Responses
seoTitle: Socket responses
---

## Players
Expand Down
1 change: 1 addition & 0 deletions content/docs/1.x/unity/channels.mdx
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
---
description: Talo Channels can be used for player chats, sending data to specific groups, pushing game updates and storing shared game state.
title: Channels and storage
seoTitle: Unity channels and storage
---

import { ScopeBadges } from '@/components/documentation/ScopeBadges'
Expand Down
1 change: 1 addition & 0 deletions content/docs/1.x/unity/continuity.mdx
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
---
description: Talo is designed to work online and offline. Talo will automatically keep data in sync for offline players.
title: Continuity and offline mode
seoTitle: Unity continuity and offline mode
---

import { ScopeBadges } from '@/components/documentation/ScopeBadges'
Expand Down
1 change: 1 addition & 0 deletions content/docs/1.x/unity/dev-data.mdx
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
---
description: Separate your development data from live data inside the Talo dashboard.
title: Separating development data
seoTitle: Unity development data
---

## Debug builds
Expand Down
Loading
Loading