Skip to content

Frontend views and layout

Wrap every tool page in @/components/tool/ToolShell.vue. It provides a page header (title / description / actions) and a full-width content area:

<template>
<ToolShell title="My tool" description="A short description">
<template #actions>
<Button>Action</Button>
</template>
<!-- content fills the full width -->
</ToolShell>
</template>
  • Props: title, description
  • Slots: actions, default slot

Organize centered columns and splits inside the page with Tailwind’s native grid (grid grid-cols-12 + col-start-* / col-span-*). Do not invent a custom grid concept, and do not use an mx-auto max-w-* centered container.

<ToolShell title="My tool" description="A short description">
<div class="mx-auto grid w-full grid-cols-12">
<div class="col-span-12 lg:col-start-3 lg:col-span-8">
<!-- centered 8 columns; full width below lg -->
</div>
</div>
</ToolShell>

Common spans:

ScenarioClasses
Full-width tablenone (full width by default)
Wide contentcol-span-10
Mixedcol-span-8
Forms / settingsmd:col-start-4 md:col-span-6

See the standard three-state pattern in the “Page template” tool (hello-world/frontend/views/TemplateTool.vue). Do not invent your own — keep it consistent app-wide.