/SKILL.md
Senior PHP/Frontend engineer for TheHUB - Swedish cycling competition platform on Uppsala WebHotell. Use when JALLE asks about TheHUB development, GravitySeries, cycling events, PHP design patterns, mobile-first layouts, or component styling.
npx skillsauth add ecabbike/thehub thehub-design-systemInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
VIKTIGT: Läs alltid CLAUDE.md och CLAUDE-CSS.md i projektets root FÖRE all utveckling.
Platform: PHP 8.x / MySQL på Uppsala WebHotell
Domain: thehub.gravityseries.se
Användare: 3,000+ licensierade cyklister, arrangörer, klubbar
Version: 1.0.x (inga versionsprefix!)
| Fil | Syfte | Läs ALLTID |
|-----|-------|------------|
| CLAUDE.md | Utvecklingsregler, sidmallar, DB-schema | Före all kod |
| CLAUDE-CSS.md | CSS-tokens, breakpoints, färger | Före all styling |
| .claude/rules/page-routing.md | URL -> fil-mappning | Före sidredigering |
// FEL
HUB_V3_ROOT, HUB_V2_URL, 'v3/pages/event.php'
// RATT
HUB_ROOT, HUB_URL, 'pages/event.php'
// FEL
$icon = 'emoji';
// RATT
<i data-lucide="flag"></i>
/* FEL */
padding: 16px;
color: #61CE70;
/* RATT */
padding: var(--space-md);
color: var(--color-accent);
Skapa ALDRIG ny CSS utan att fråga först.
--space-2xs: 4px;
--space-xs: 8px;
--space-sm: 12px;
--space-md: 16px;
--space-lg: 24px;
--space-xl: 32px;
--space-2xl: 48px;
--space-3xl: 64px;
--radius-sm: 6px; /* Mobil: 0 */
--radius-md: 10px; /* Mobil: 0 */
--radius-lg: 14px; /* Mobil: 0 */
--radius-full: 9999px;
--color-bg-page: #0b131e;
--color-bg-card: #0e1621;
--color-text-primary: #f8f2f0;
--color-text-secondary: #c7cfdd;
--color-accent: #37d4d6;
--color-success: #10b981;
--color-warning: #fbbf24;
--color-error: #ef4444;
--series-enduro: #FFE009;
--series-downhill: #FF6B35;
--series-xc: #2E7D32;
--series-ges: #EF761F;
--series-ggs: #8A9A5B;
| Namn | Range | Beskrivning | |------|-------|-------------| | Mobile Portrait | 0-599px | Smal mobil | | Mobile Landscape | 600-767px | Mobil liggande | | Tablet | 768-1023px | Surfplatta | | Desktop | 1024px+ | Desktop |
@media (max-width: 767px) {
.card {
margin-left: -16px;
margin-right: -16px;
border-radius: 0 !important;
width: calc(100% + 32px);
}
}
<?php
require_once __DIR__ . '/config/database.php';
$pageTitle = 'Sidtitel';
include __DIR__ . '/includes/header.php';
?>
<main class="container">
<!-- INNEHÅLL -->
</main>
<?php include __DIR__ . '/includes/footer.php'; ?>
<?php
require_once __DIR__ . '/../config/database.php';
require_once __DIR__ . '/../includes/auth.php';
requireAdmin();
$pageTitle = 'Sidtitel';
include __DIR__ . '/../includes/admin-header.php';
?>
<div class="admin-content">
<div class="page-header">
<h1><?= $pageTitle ?></h1>
</div>
</div>
<?php include __DIR__ . '/../includes/admin-footer.php'; ?>
<div class="card">
<div class="card-header"><h3>Titel</h3></div>
<div class="card-body">Innehåll</div>
</div>
<button class="btn btn-primary">Primär</button>
<button class="btn btn-secondary">Sekundär</button>
<button class="btn btn-danger">Danger</button>
<div class="alert alert-success">OK</div>
<div class="alert alert-warning">Varning</div>
<div class="alert alert-danger">Fel</div>
<span class="badge badge-success">Aktiv</span>
<span class="badge badge-warning">Väntande</span>
<div class="table-responsive">
<table class="table">
<thead><tr><th>Kolumn</th></tr></thead>
<tbody><tr><td>Data</td></tr></tbody>
</table>
</div>
$stmt = $pdo->prepare("SELECT * FROM riders WHERE id = ?");
$stmt->execute([$id]);
$rider = $stmt->fetch();
// FEL - missar events i series_events
JOIN series s ON e.series_id = s.id
// RATT - anvand series_events (many-to-many)
JOIN series_events se ON se.event_id = e.id
JOIN series s ON se.series_id = s.id
echo htmlspecialchars($data, ENT_QUOTES, 'UTF-8');
thehub/
├── CLAUDE.md # Utvecklingsregler
├── CLAUDE-CSS.md # CSS-system
├── config/database.php
├── includes/
│ ├── header.php
│ ├── footer.php
│ ├── layout-header.php # LAST
│ └── layout-footer.php # LAST
├── components/
│ ├── sidebar.php # LAST
│ └── header.php # LAST
├── assets/css/
│ ├── tokens.css # LAST
│ ├── theme.css # LAST
│ ├── components.css # LAST
│ └── pages/*.css
├── pages/ # Publika sidor
├── admin/ # Admin-sidor
├── api/ # API-endpoints
└── Tools/migrations/ # DB-migrationer
/Tools/migrations/ (ENDAST där!)/admin/migrations.phpNNN_beskrivande_namn.sql/admin/tools.php| Engelska | Svenska | |----------|---------| | Event | Tävling | | Registration | Anmälan | | Results | Resultat | | Rider | Åkare | | Club | Klubb | | Series | Serie | | Points | Poäng | | Class | Klass |
filnamn.php
[KOMPLETT KOD]
Placera i: /path/to/file
tools
Use when work should span one or more detached tasks but still behave like one job with a single owner context. TaskFlow is the durable flow substrate under authoring layers like Lobster, ACPX, plugins, or plain code. Keep conditional logic in the caller; use TaskFlow for flow identity, child-task linkage, waiting state, revision-checked mutations, and user-facing emergence.
tools
# Lobster Lobster executes multi-step workflows with approval checkpoints. Use it when: - User wants a repeatable automation (triage, monitor, sync) - Actions need human approval before executing (send, post, delete) - Multiple tool calls should run as one deterministic operation ## When to use Lobster | User intent | Use Lobster? | | ------------------------------------------------------ | --------------------------
tools
# Lobster Lobster executes multi-step workflows with approval checkpoints. Use it when: - User wants a repeatable automation (triage, monitor, sync) - Actions need human approval before executing (send, post, delete) - Multiple tool calls should run as one deterministic operation ## When to use Lobster | User intent | Use Lobster? | | ------------------------------------------------------ | --------------------------
tools
A CLI tool for making authenticated requests to the X (Twitter) API. Use this skill when you need to post tweets, reply, quote, search, read posts, manage followers, send DMs, upload media, or interact with any X API v2 endpoint.