Docs
How Pitpage works
Last updated: 27 October 2026
Everything a team needs, from the first sign-in to race night, on one page.
Sign in
Sign in at app.pitpage.app with Google, Discord or a one-time code sent to your email. There is no password to remember. You can connect more than one way to sign in from your account settings.
Create your team
Name your team, pick its address (yourteam.pitpage.app) and a theme. You can start from one of the eight finished demo sites and replace its content with yours.
Add your racing
Drivers, results, races, trophies, partners and photos go in the panel, a few fields each. A result you log once appears in the results archive and on each driver's page, and every podium becomes a trophy.
Edit your site
Open the editor from the panel. Click any block on your real site to change its words, style or layout beside it; drag sections to reorder them; add pages and blog posts. Every change is kept as a draft until you publish.
Publish and restore
Publishing puts your draft live at once. Your last 20 published versions are kept, so you can restore an earlier one.
Change the theme
Switch themes any time in the editor; your content stays.
Members and Discord sign-in
Connect your Discord server in the panel. Members then sign in with Discord: Pitpage checks that they are on your server and, if you pick one, that they have the role. Members can answer race calls on the site.
The Discord bot
- Announces each race with Going, Maybe and Can't buttons; answers from Discord and from the site count together.
- Reminds everyone a day and an hour before the start.
- Posts new results to your results channel.
- Answers /next-race and /results in any channel.
Photos and video
Upload photos and cover videos in the panel. The free plan holds 250 MB.
Your address
Every site lives at yourteam.pitpage.app. A team's own domain is planned for Pro.
Custom code
When the editor's sections are not enough, write your own. A custom section is one file, sections/<name>.liquid: HTML with Liquid tags that read your team's records, an optional {% stylesheet %} and a {% schema %} that names its settings. Blocks (blocks/<name>.liquid) go inside the editor's sections, columns and grids; snippets (snippets/<name>.liquid) are pieces you share with {% render 'name' %}; a snippet sees only what you pass it, as in {% render 'row', result: result %}. A name is lowercase letters and digits with single dashes between words, up to 40 characters; pp and names that start with pp- are Pitpage's own.
<div class="tower">
<h2>{{ section.settings.title }}</h2>
{% for result in results limit: section.settings.count %}
<p><b>P{{ result.position }}</b> {{ result.event_name }}</p>
{% endfor %}
</div>
{% stylesheet %}
.tower { display: grid; gap: 4px; font-family: var(--pp-font-mono); }
.tower b { color: var(--pp-color-accent); }
{% endstylesheet %}
{% schema %}
{
"name": "Timing tower",
"settings": [
{ "type": "text", "id": "title", "label": "Title", "default": "Latest results" },
{ "type": "range", "id": "count", "label": "Rows", "min": 3, "max": 20, "default": 8 }
],
"presets": [{ "name": "Timing tower" }]
}
{% endschema %}Settings
Each setting in the schema becomes a field in the editor: text, textarea, number, range, checkbox, select, color, image, url and driver. A section can also hold blocks of the types it names, up to 50, and draws them with {% for block in section.blocks %}.
Your records
Templates read team, drivers, results (newest first), trophies, events.upcoming, events.past, sponsors, gallery, stats, links, pages, page, now, and the section's own section.settings and section.blocks. Names are written with underscores, as in result.track_code. Only what your site already shows is there: no drafts, and nothing about your members.
Filters
Liquid's standard filters, and image_url: 800 (an upload at the right size), date (in your team's time zone), ordinal, pad, format_number, duration (minutes as 2h 40m), flag (a country code as its flag) and markdown.
CSS
A file's styles apply only inside its own section or block. Use your site's design variables, such as var(--pp-color-accent), var(--pp-color-surface) and var(--pp-font-display), and the section follows your theme. @media, @supports, @container and @keyframes work; @import and fonts from other sites do not. Name one of Pitpage's fonts and it is loaded for you. {% stylesheet %} takes no Liquid: for a colour or size that changes from section to section, write style="--size: {{ section.settings.size }}px" in the template and read var(--size) in the CSS.
What is removed
Scripts, forms, event handlers and frames are removed from what a template draws, except embeds of YouTube (youtube-nocookie.com/embed), the Twitch player and the Discord widget. JavaScript runs only in a sandboxed frame, from a {% javascript %} block.
Limits, drafts and publishing
Up to 100 files per team, 64 KB each and 1 MB in all, and 8,000 Liquid parts a file, 32,000 in all: a part is a tag, an output, or a word, number or sign inside one, and a string counts one more for every 8 characters. A file with a mistake is not saved: the error comes back with its line. Code is part of your draft. It goes live when you publish, and comes back when you restore an earlier version.
CLI and AI agents
Pitpage's CLI and its MCP server let you, or an AI agent you already use, work on your site from a terminal or a code editor, with the same draft and the same rules as the editor. Build your site with an AI agent walks through the setup.
Each command runs as npx https://pitpage.app/cli/pitpage.tgz <command>:
loginsigns you in through your browser; add--deviceon a machine without one.logoutsigns you out, andwhoamiandteamssay who you are and which teams you can edit.linkties a folder to one of your teams;pulldownloads its code files and the drafts of its pages;pushsends what changed and shows any mistake with its line, andpush --publishputs it live too.devsends each file as you save it and prints a preview link that follows your draft.publishputs your draft live;new section <name>(orblock,snippet) starts a file from a template.toolcalls any of the agent's tools by name, anduploadadds an image.mcpprints the commands that connect Claude Code, Cursor, Codex and VS Code.
The first command is npx https://pitpage.app/cli/pitpage.tgz login. The MCP server is at https://app.pitpage.app/mcp: an agent signs in with OAuth and works on the teams you edit, and Connected apps in your account lists each one and ends its access. For CI or a script, make an access token in your account, limit it to one team if you like, and pass it as PITPAGE_TOKEN. Pitpage runs no AI of its own: your agent works on your own subscription.
Need help?
Write to info@pitpage.app.