Skip to main content

CODITECT Pattern Library: Complete Template & Integration Specifications

Templates + Real-World Integration Patterns

T1: DashboardGrid Template

Purpose: Main dashboard layout with card grid

Composition:

organisms:
- Header (navbar)
- Card (multiple instances)
molecules:
- StatusIndicator
- ButtonGroup
atoms:
- Button
- Badge
- Avatar

Implementation:

<div class="dashboard-template">
<!-- Header Organism -->
<header class="navbar">
<div class="navbar__brand">
<img src="/logo.svg" alt="CODITECT" />
</div>
<nav class="navbar__nav">
<a href="/projects" class="navbar__link navbar__link--active">Projects</a>
<a href="/team" class="navbar__link">Team</a>
<a href="/reports" class="navbar__link">Reports</a>
</nav>
<div class="navbar__actions">
<button class="button button--ghost">
<svg width="20" height="20"><!-- bell icon --></svg>
</button>
<div class="user-menu"><!-- UserMenu organism --></div>
</div>
</header>

<!-- Page Header -->
<div class="page-header">
<div class="page-header__content">
<h1 class="page-header__title">Projects Overview</h1>
<p class="page-header__description">Manage all your automation projects</p>
</div>
<div class="page-header__actions">
<button class="button button--primary">
<svg width="16" height="16"><!-- plus icon --></svg>
New Project
</button>
</div>
</div>

<!-- Card Grid -->
<div class="card-grid">
<!-- Card Organism (repeated) -->
<article class="card">
<div class="card__header">
<h3 class="card__title">Customer Onboarding</h3>
<button class="icon-button" aria-label="More options">
<svg width="16" height="16"><!-- dots icon --></svg>
</button>
</div>

<div class="card__body">
<p class="card__description">
Automated workflow for new customer setup and H.P.009-CONFIGuration
</p>

<!-- StatusIndicator Molecule -->
<div class="status-indicator status-indicator--success">
<span class="status-dot"></span>
<span class="status-text">Active</span>
</div>

<!-- ProgressIndicator Molecule -->
<div class="progress-indicator">
<div class="progress-bar">
<div class="progress-bar__fill" style="width: 75%"></div>
</div>
<div class="progress-text">
<span class="progress-percentage">75%</span>
<span class="progress-detail">15 of 20 tasks completed</span>
</div>
</div>

<!-- AvatarStack Molecule -->
<div class="avatar-stack">
<img src="/user1.jpg" alt="User 1" class="avatar avatar--stacked" />
<img src="/user2.jpg" alt="User 2" class="avatar avatar--stacked" />
<div class="avatar avatar--stacked avatar--count">+3</div>
</div>
</div>

<div class="card__footer">
<span class="card__meta">Updated 2h ago</span>
<button class="button button--sm button--secondary">View Details</button>
</div>
</article>

<!-- More cards... -->
</div>
</div>

CSS:

.dashboard-template {
min-height: 100vh;
display: flex;
flex-direction: column;
}

.page-header {
display: flex;
align-items: center;
justify-content: space-between;
gap: var(--space-6);
padding: var(--space-6) var(--space-6) var(--space-4);
border-bottom: 1px solid var(--color-gray-200);
}

.page-header__content {
flex: 1;
}

.page-header__title {
font-size: var(--font-size-2xl);
font-weight: var(--font-weight-bold);
color: var(--color-gray-900);
margin-bottom: var(--space-1);
}

.page-header__description {
font-size: var(--font-size-base);
color: var(--color-gray-600);
}

.page-header__actions {
display: flex;
gap: var(--space-3);
}

.card-grid {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(320px, 1fr));
gap: var(--space-6);
padding: var(--space-6);
}

@media (max-width: 768px) {
.card-grid {
grid-template-columns: 1fr;
}

.page-header {
flex-direction: column;
align-items: flex-start;
}
}

T2: DetailView Template

Purpose: Entity detail page with sidebar

Composition:

organisms:
- Header
- Sidebar (detail sidebar)
- Card (main content)
molecules:
- Breadcrumb
- TabList
- FormField
atoms:
- Button
- Label
- Input

Implementation:

<div class="detail-view-template">
<header class="navbar"><!-- Navbar organism --></header>

<div class="detail-view__container">
<!-- Breadcrumb -->
<nav class="breadcrumb" aria-label="Breadcrumb">
<ol class="breadcrumb__list">
<li class="breadcrumb__item">
<a href="/projects" class="breadcrumb__link">Projects</a>
</li>
<li class="breadcrumb__separator"></li>
<li class="breadcrumb__item">
<span class="breadcrumb__current" aria-current="page">Customer Onboarding</span>
</li>
</ol>
</nav>

<div class="detail-view__layout">
<!-- Main Content -->
<main class="detail-view__main">
<div class="detail-view__header">
<div>
<h1 class="detail-view__title">Customer Onboarding</h1>
<div class="status-indicator status-indicator--success">
<span class="status-dot"></span>
<span class="status-text">Active</span>
</div>
</div>
<div class="button-group">
<button class="button button--secondary">Edit</button>
<button class="button button--ghost" aria-label="More options">
<svg width="16" height="16"><!-- dots --></svg>
</button>
</div>
</div>

<!-- Tabs -->
<div class="tabs">
<div class="tabs__list" role="tablist">
<button class="tabs__tab tabs__tab--active" role="tab" aria-selected="true" id="overview-tab">
Overview
</button>
<button class="tabs__tab" role="tab" aria-selected="false" id="tasks-tab">
Tasks
</button>
<button class="tabs__tab" role="tab" aria-selected="false" id="activity-tab">
Activity
</button>
</div>

<div class="tabs__panel" role="tabpanel" aria-labelledby="overview-tab">
<div class="card">
<div class="card__body">
<h3 class="card__subtitle">Description</h3>
<p>Automated workflow for new customer setup and H.P.009-CONFIGuration...</p>

<h3 class="card__subtitle">Progress</h3>
<div class="progress-indicator">
<div class="progress-bar">
<div class="progress-bar__fill" style="width: 75%"></div>
</div>
<div class="progress-text">
<span class="progress-percentage">75%</span>
<span class="progress-detail">15 of 20 tasks</span>
</div>
</div>
</div>
</div>
</div>
</div>
</main>

<!-- Sidebar -->
<aside class="detail-view__sidebar">
<div class="card">
<div class="card__header">
<h3 class="card__title">Details</h3>
</div>
<div class="card__body">
<dl class="detail-list">
<dt class="detail-list__label">Owner</dt>
<dd class="detail-list__value">
<div class="user-info">
<img src="/avatar.jpg" alt="John Doe" class="user-info__avatar" />
<span class="user-info__name">John Doe</span>
</div>
</dd>

<dt class="detail-list__label">Created</dt>
<dd class="detail-list__value">Jan 15, 2026</dd>

<dt class="detail-list__label">Team</dt>
<dd class="detail-list__value">
<div class="avatar-stack">
<img src="/u1.jpg" alt="User 1" class="avatar avatar--sm avatar--stacked" />
<img src="/u2.jpg" alt="User 2" class="avatar avatar--sm avatar--stacked" />
<div class="avatar avatar--sm avatar--stacked avatar--count">+3</div>
</div>
</dd>

<dt class="detail-list__label">Tags</dt>
<dd class="detail-list__value">
<div class="tag-list">
<span class="tag">automation</span>
<span class="tag">onboarding</span>
</div>
</dd>
</dl>
</div>
</div>
</aside>
</div>
</div>
</div>

CSS:

.detail-view-template {
min-height: 100vh;
display: flex;
flex-direction: column;
}

.detail-view__container {
flex: 1;
padding: var(--space-4) var(--space-6);
}

.detail-view__layout {
display: grid;
grid-template-columns: 1fr 320px;
gap: var(--space-6);
margin-top: var(--space-6);
}

.detail-view__main {
min-width: 0;
}

.detail-view__header {
display: flex;
align-items: flex-start;
justify-content: space-between;
gap: var(--space-4);
margin-bottom: var(--space-6);
}

.detail-view__title {
font-size: var(--font-size-3xl);
font-weight: var(--font-weight-bold);
color: var(--color-gray-900);
margin-bottom: var(--space-2);
}

.detail-view__sidebar {
position: sticky;
top: var(--space-4);
align-self: start;
}

.detail-list {
display: grid;
gap: var(--space-4);
}

.detail-list__label {
font-size: var(--font-size-sm);
font-weight: var(--font-weight-medium);
color: var(--color-gray-600);
margin-bottom: var(--space-1);
}

.detail-list__value {
font-size: var(--font-size-sm);
color: var(--color-gray-900);
}

@media (max-width: 1024px) {
.detail-view__layout {
grid-template-columns: 1fr;
}

.detail-view__sidebar {
position: static;
}
}

T3: KanbanBoard Template

Purpose: Kanban-style board with draggable columns

Composition:

organisms:
- Header
- KanbanColumn (multiple)
- Card (within columns)
molecules:
- ButtonGroup
- StatusIndicator
atoms:
- Badge
- Avatar

Implementation:

<div class="kanban-template">
<header class="navbar"><!-- Navbar --></header>

<div class="kanban__container">
<div class="page-header">
<div class="page-header__content">
<h1 class="page-header__title">Project Tasks</h1>
</div>
<div class="page-header__actions">
<button class="button button--secondary">
<svg width="16" height="16"><!-- filter --></svg>
Filter
</button>
<button class="button button--primary">
<svg width="16" height="16"><!-- plus --></svg>
New Task
</button>
</div>
</div>

<div class="kanban-board">
<!-- Column 1: To Do -->
<div class="kanban-column" data-status="todo">
<div class="kanban-column__header">
<h2 class="kanban-column__title">
To Do
<span class="kanban-column__count">3</span>
</h2>
<button class="icon-button" aria-label="Column options">
<svg width="16" height="16"><!-- dots --></svg>
</button>
</div>

<div class="kanban-column__body">
<div class="kanban-card" draggable="true">
<h3 class="kanban-card__title">Update API documentation</h3>
<p class="kanban-card__description">
Review and update all endpoint descriptions
</p>
<div class="kanban-card__meta">
<div class="tag-list">
<span class="tag tag--primary">docs</span>
<span class="tag">api</span>
</div>
<div class="avatar-stack">
<img src="/u1.jpg" alt="User" class="avatar avatar--sm avatar--stacked" />
</div>
</div>
</div>

<!-- More cards -->
</div>

<button class="kanban-column__add">
<svg width="16" height="16"><!-- plus --></svg>
Add task
</button>
</div>

<!-- Column 2: In Progress -->
<div class="kanban-column" data-status="in-progress">
<div class="kanban-column__header">
<h2 class="kanban-column__title">
In Progress
<span class="kanban-column__count">2</span>
</h2>
<button class="icon-button" aria-label="Column options">
<svg width="16" height="16"><!-- dots --></svg>
</button>
</div>

<div class="kanban-column__body">
<!-- Cards -->
</div>
</div>

<!-- Column 3: Done -->
<div class="kanban-column" data-status="done">
<div class="kanban-column__header">
<h2 class="kanban-column__title">
Done
<span class="kanban-column__count">5</span>
</h2>
<button class="icon-button" aria-label="Column options">
<svg width="16" height="16"><!-- dots --></svg>
</button>
</div>

<div class="kanban-column__body">
<!-- Cards -->
</div>
</div>
</div>
</div>
</div>

CSS:

.kanban-template {
min-height: 100vh;
display: flex;
flex-direction: column;
}

.kanban__container {
flex: 1;
display: flex;
flex-direction: column;
overflow: hidden;
}

.kanban-board {
flex: 1;
display: flex;
gap: var(--space-4);
padding: var(--space-6);
overflow-x: auto;
}

.kanban-column {
display: flex;
flex-direction: column;
min-width: 320px;
max-width: 320px;
background: var(--color-gray-50);
border-radius: var(--border-radius-lg);
padding: var(--space-4);
}

.kanban-column__header {
display: flex;
align-items: center;
justify-content: space-between;
margin-bottom: var(--space-4);
}

.kanban-column__title {
display: flex;
align-items: center;
gap: var(--space-2);
font-size: var(--font-size-base);
font-weight: var(--font-weight-semibold);
color: var(--color-gray-900);
}

.kanban-column__count {
display: inline-flex;
align-items: center;
justify-content: center;
min-width: 24px;
height: 24px;
padding: 0 6px;
background: var(--color-gray-200);
color: var(--color-gray-700);
border-radius: 12px;
font-size: var(--font-size-xs);
font-weight: var(--font-weight-semibold);
}

.kanban-column__body {
flex: 1;
display: flex;
flex-direction: column;
gap: var(--space-3);
overflow-y: auto;
min-height: 100px;
}

.kanban-card {
padding: var(--space-4);
background: var(--color-white);
border: 1px solid var(--color-gray-200);
border-radius: var(--border-radius-md);
cursor: grab;
transition: all var(--transition-fast);
}

.kanban-card:hover {
border-color: var(--color-gray-300);
box-shadow: var(--shadow-sm);
}

.kanban-card:active {
cursor: grabbing;
}

.kanban-card.is-dragging {
opacity: 0.5;
}

.kanban-card__title {
font-size: var(--font-size-sm);
font-weight: var(--font-weight-semibold);
color: var(--color-gray-900);
margin-bottom: var(--space-2);
}

.kanban-card__description {
font-size: var(--font-size-sm);
color: var(--color-gray-600);
margin-bottom: var(--space-3);
line-height: var(--line-height-normal);
}

.kanban-card__meta {
display: flex;
align-items: center;
justify-content: space-between;
gap: var(--space-2);
}

.kanban-column__add {
display: flex;
align-items: center;
justify-content: center;
gap: var(--space-2);
padding: var(--space-2);
background: none;
border: 1px dashed var(--color-gray-300);
border-radius: var(--border-radius-md);
color: var(--color-gray-600);
font-size: var(--font-size-sm);
cursor: pointer;
transition: all var(--transition-fast);
margin-top: var(--space-3);
}

.kanban-column__add:hover {
background: var(--color-white);
border-color: var(--color-gray-400);
color: var(--color-gray-900);
}

T4: FormPage Template

Purpose: Full-page form with sections

Composition:

organisms:
- Header
- Form
molecules:
- FormField (multiple)
- ButtonGroup
atoms:
- Label
- Input
- Button
- Toggle

Implementation:

<div class="form-page-template">
<header class="navbar"><!-- Navbar --></header>

<div class="form-page__container">
<div class="form-page__header">
<div class="breadcrumb"><!-- Breadcrumb --></div>
<h1 class="form-page__title">Project Settings</h1>
<p class="form-page__description">
Configure your project preferences and integrations
</p>
</div>

<div class="form-page__layout">
<!-- Sidebar Navigation -->
<nav class="form-page__nav">
<a href="#general" class="form-page__nav-link form-page__nav-link--active">
General
</a>
<a href="#team" class="form-page__nav-link">
Team
</a>
<a href="#integrations" class="form-page__nav-link">
Integrations
</a>
<a href="#notifications" class="form-page__nav-link">
Notifications
</a>
<a href="#danger" class="form-page__nav-link form-page__nav-link--danger">
Danger Zone
</a>
</nav>

<!-- Form Content -->
<main class="form-page__content">
<form class="form">
<section class="form__section" id="general">
<h2 class="form__section-title">General Settings</h2>

<div class="form-field">
<label for="project-name" class="form-field__label">
Project Name
<span class="form-field__required">*</span>
</label>
<input
id="project-name"
type="text"
class="form-field__input"
value="Customer Onboarding"
required
/>
</div>

<div class="form-field">
<label for="description" class="form-field__label">
Description
</label>
<textarea
id="description"
class="form-field__textarea"
rows="4"
>Automated workflow for new customer setup</textarea>
<span class="form-field__hint">
Provide a clear description of this project's purpose
</span>
</div>

<div class="form-field">
<label class="toggle">
<input type="checkbox" role="switch" class="toggle__input" checked />
<span class="toggle__track">
<span class="toggle__thumb"></span>
</span>
<span class="toggle__content">
<span class="toggle__label">Enable auto-save</span>
<span class="toggle__description">
Automatically save changes as you work
</span>
</span>
</label>
</div>
</section>

<hr class="form__divider" />

<section class="form__section" id="team">
<h2 class="form__section-title">Team Access</h2>
<!-- Team settings -->
</section>

<div class="form__footer">
<div class="form__footer-info">
<svg width="16" height="16" class="icon icon--muted">
<path d="M12 8v4m0 4h.01M21 12a9 9 0 11-18 0 9 9 0 0118 0z" stroke="currentColor" stroke-width="2"/>
</svg>
<span class="form__footer-text">
Changes are saved automatically
</span>
</div>
<div class="button-group">
<button type="button" class="button button--secondary">
Cancel
</button>
<button type="submit" class="button button--primary">
Save Changes
</button>
</div>
</div>
</form>
</main>
</div>
</div>
</div>

CSS:

.form-page-template {
min-height: 100vh;
display: flex;
flex-direction: column;
}

.form-page__container {
flex: 1;
padding: var(--space-6);
}

.form-page__header {
max-width: 800px;
margin: 0 auto var(--space-8);
}

.form-page__title {
font-size: var(--font-size-3xl);
font-weight: var(--font-weight-bold);
color: var(--color-gray-900);
margin-bottom: var(--space-2);
}

.form-page__description {
font-size: var(--font-size-base);
color: var(--color-gray-600);
}

.form-page__layout {
display: grid;
grid-template-columns: 240px 1fr;
gap: var(--space-8);
max-width: 1200px;
margin: 0 auto;
}

.form-page__nav {
display: flex;
flex-direction: column;
gap: var(--space-1);
position: sticky;
top: var(--space-6);
align-self: start;
}

.form-page__nav-link {
padding: var(--space-2) var(--space-3);
font-size: var(--font-size-sm);
font-weight: var(--font-weight-medium);
color: var(--color-gray-700);
text-decoration: none;
border-radius: var(--border-radius-md);
transition: all var(--transition-fast);
}

.form-page__nav-link:hover {
background: var(--color-gray-100);
color: var(--color-gray-900);
}

.form-page__nav-link--active {
background: var(--color-blue-50);
color: var(--color-blue-700);
}

.form-page__nav-link--danger {
color: var(--color-red-600);
}

.form-page__nav-link--danger:hover {
background: var(--color-red-50);
color: var(--color-red-700);
}

.form-page__content {
min-width: 0;
}

.form__divider {
margin: var(--space-8) 0;
border: none;
border-top: 1px solid var(--color-gray-200);
}

.form__footer {
display: flex;
align-items: center;
justify-content: space-between;
gap: var(--space-4);
padding-top: var(--space-6);
border-top: 1px solid var(--color-gray-200);
margin-top: var(--space-8);
}

.form__footer-info {
display: flex;
align-items: center;
gap: var(--space-2);
}

.form__footer-text {
font-size: var(--font-size-sm);
color: var(--color-gray-600);
}

@media (max-width: 1024px) {
.form-page__layout {
grid-template-columns: 1fr;
}

.form-page__nav {
position: static;
flex-direction: row;
overflow-x: auto;
}
}

Integration Pattern: Complete Dashboard Example

Real-world composition showing all patterns working together:

// Dashboard.jsx - Complete integration example
import React from 'react';
import { Navbar } from '@/components/organisms/Navbar';
import { Card } from '@/components/organisms/Card';
import { StatusIndicator } from '@/components/molecules/StatusIndicator';
import { ProgressIndicator } from '@/components/molecules/ProgressIndicator';
import { AvatarStack } from '@/components/molecules/AvatarStack';
import { Button } from '@/components/atoms/Button';
import { Badge } from '@/components/atoms/Badge';

export function Dashboard() {
const projects = [
{
id: 1,
title: 'Customer Onboarding',
description: 'Automated workflow for new customer setup',
status: 'active',
progress: 75,
tasksCompleted: 15,
tasksTotal: 20,
team: [
{ id: 1, name: 'Alice', avatar: '/alice.jpg' },
{ id: 2, name: 'Bob', avatar: '/bob.jpg' },
{ id: 3, name: 'Charlie', avatar: '/charlie.jpg' },
],
updatedAt: '2h ago',
},
{
id: 2,
title: 'Invoice Processing',
description: 'Automated invoice validation and approval',
status: 'warning',
progress: 45,
tasksCompleted: 9,
tasksTotal: 20,
team: [
{ id: 4, name: 'David', avatar: '/david.jpg' },
],
updatedAt: '5h ago',
},
// More projects...
];

return (
<div className="dashboard-template">
<Navbar>
<Navbar.Brand>
<img src="/logo.svg" alt="CODITECT" />
</Navbar.Brand>
<Navbar.Nav>
<Navbar.Link href="/projects" active>Projects</Navbar.Link>
<Navbar.Link href="/team">Team</Navbar.Link>
<Navbar.Link href="/reports">Reports</Navbar.Link>
</Navbar.Nav>
<Navbar.Actions>
<Button variant="ghost" icon="bell" aria-label="Notifications" />
<UserMenu />
</Navbar.Actions>
</Navbar>

<div className="page-header">
<div className="page-header__content">
<h1 className="page-header__title">Projects Overview</h1>
<p className="page-header__description">
Manage all your automation projects
</p>
</div>
<div className="page-header__actions">
<Button variant="primary" icon="plus">
New Project
</Button>
</div>
</div>

<div className="card-grid">
{projects.map(project => (
<Card key={project.id}>
<Card.Header>
<Card.Title>{project.title}</Card.Title>
<Button variant="ghost" icon="dots" aria-label="More options" />
</Card.Header>

<Card.Body>
<p className="card__description">{project.description}</p>

<StatusIndicator
variant={project.status}
label={project.status === 'active' ? 'Active' : 'Needs attention'}
/>

<ProgressIndicator
percentage={project.progress}
detail={`${project.tasksCompleted} of ${project.tasksTotal} tasks`}
/>

<AvatarStack users={project.team} max={3} />
</Card.Body>

<Card.Footer>
<span className="card__meta">Updated {project.updatedAt}</span>
<Button variant="secondary" size="sm">
View Details
</Button>
</Card.Footer>
</Card>
))}
</div>
</div>
);
}

Pattern Composition Matrix

How components compose at each level:

Page (Dashboard):
- Template: DashboardGrid
- Organism: Navbar
- Molecule: UserMenu
- Atom: Avatar
- Atom: Button
- Atom: Button (multiple)

- Organism: Card (multiple instances)
- Molecule: StatusIndicator
- Atom: StatusDot
- Text content
- Molecule: ProgressIndicator
- Atom: ProgressBar
- Text content
- Molecule: AvatarStack
- Atom: Avatar (multiple)
- Atom: Button
- Atom: Badge

This completes all H.P.008-TEMPLATES with production-ready, copy-paste code!