Page Templates
Standard page layouts for the main site: a page is includes/header.php, a .container, and includes/footer.php.
info
These do not describe
/app/. The consolidated app shell has its own frame and its own layout system — see App Shell Layouts.Standard Page
The base template for all pages. Sets the page title, loads data, and wraps content between header and footer.
<?php $page_title = 'Page Title'; require_once 'includes/data.php'; require_once 'includes/header.php'; ?> <div class="container"> <h1>Page Title</h1> <!-- content --> </div> <?php require_once 'includes/footer.php'; ?>
info
header.php auto-loads component helpers, icon helper, and the unified header navigation. footer.php loads the toast container and component JavaScript.Listing Page
Used for workshops, exercises, and icebreakers. Features filtering, sorting, and a card grid.
Header — Unified nav bar
Hero —
ws_hero() with title, subtitle, statsFilter Bar — Category tabs + search + sort
Card Grid —
.listing-content-grid with ws_listing_card() itemsFooter — Site footer
<?php
$page_title = 'Workshops';
require_once 'includes/data.php';
require_once 'includes/listing-helpers.php';
require_once 'includes/header.php';
$pageData = prepareListingPageData($workshops, 'workshop');
?>
<?= ws_hero('Browse our curated', 'workshop library.', [
'badge' => 'Workshop Library',
'badgeIcon' => 'school',
'subtitle' => 'Find the perfect framework...',
]) ?>
<section class="section">
<div class="listing-content-grid">
<?php foreach ($pageData['items'] as $item):
$card = prepareCardData($item, $pageData);
echo ws_listing_card($card);
endforeach; ?>
</div>
</section>
<?php require_once 'includes/footer.php'; ?>Detail Page
Content detail pages for individual workshops, exercises, and icebreakers. Features a hero area, content body, and sidebar.
Header — Unified nav bar
Breadcrumb —
ws_breadcrumb()Detail Header — Title, badges, actions
Content + Sidebar — Two-column layout (main content left, metadata right)
Related Items —
.listing-content-grid with related cardsFooter — Site footer
<?php
$page_title = $workshop['title'];
require_once 'includes/data.php';
require_once 'includes/header.php';
?>
<?= ws_breadcrumb([
['label' => 'Home', 'href' => '/'],
['label' => 'Workshops', 'href' => '/library/workshops/'],
['label' => $workshop['title']],
]) ?>
<div class="detail-layout">
<main class="detail-content">
<!-- Content body -->
</main>
<aside class="detail-sidebar">
<!-- Metadata, actions -->
</aside>
</div>
<?php require_once 'includes/footer.php'; ?>Landing Page
Marketing/landing pages for apps (Coach, Tips, Podcasts). Feature-heavy with hero, feature grids, and CTAs.
Header — Unified nav bar (can hide for standalone)
Hero Section —
ws_hero()Features Section —
ws_section_header() + .features-gridContent Section — Mixed content + sample cards
Coming Soon —
.coming-soon-grid with future feature cardsFooter — Site footer
Form Page
Settings, admin forms, and data entry pages. Use ws_form_row() for consistent field layouts.
<?php
$page_title = 'Settings';
require_once 'includes/header.php';
?>
<div class="container" style="max-width: var(--container-sm);">
<?= ws_section_header('Account Settings', ['align' => 'left']) ?>
<form style="display: flex; flex-direction: column; gap: 20px;">
<?= ws_form_row(ws_input('name', ['value' => $user['name']]), [
'label' => 'Display Name',
'required' => true,
]) ?>
<?= ws_form_row(ws_input('email', ['type' => 'email', 'value' => $user['email']]), [
'label' => 'Email',
'required' => true,
'helper' => 'Used for sign-in and notifications.',
]) ?>
<?= ws_form_row(ws_select('timezone', $timezones), [
'label' => 'Timezone',
]) ?>
<?= ws_button('Save Changes', ['variant' => 'primary', 'type' => 'submit']) ?>
</form>
</div>
<?php require_once 'includes/footer.php'; ?>