docs: consolidate documentation into organized structure

- Move 12 markdown files from root to docs/ subdirectories
- Organize documentation by category:
  • docs/troubleshooting/ (1 file)  - Technical troubleshooting guides
  • docs/deployment/      (4 files) - Deployment and security documentation
  • docs/guides/          (3 files) - Feature-specific guides
  • docs/planning/        (4 files) - Planning and improvement proposals

Root directory cleanup:
- Reduced from 16 to 4 markdown files in root
- Only essential project files remain:
  • CLAUDE.md (AI instructions)
  • README.md (Main project readme)
  • CLEANUP_PLAN.md (Current cleanup plan)
  • SRC_STRUCTURE_IMPROVEMENTS.md (Structure improvements)

This improves:
 Documentation discoverability
 Logical organization by purpose
 Clean root directory
 Better maintainability
This commit is contained in:
2025-10-05 11:05:04 +02:00
parent 887847dde6
commit 5050c7d73a
36686 changed files with 196456 additions and 12398919 deletions

View File

@@ -0,0 +1,64 @@
<layout name="layouts/admin" />
<div class="admin-page">
<div class="page-header">
<div class="d-flex justify-content-between align-items-center">
<div>
<h1>{{ title }}</h1>
<if condition="{{ subtitle }}">
<p class="text-muted">{{ subtitle }}</p>
</if>
</div>
<div>
<a href="{{ backUrl }}" class="btn btn-secondary">
<i class="bi bi-arrow-left"></i> Back to List
</a>
</div>
</div>
</div>
<div class="form-container">
<div class="card">
<div class="card-header">
<h5 class="mb-0">{{ formTitle }}</h5>
</div>
<div class="card-body">
<if condition="{{ errors }}">
<div class="alert alert-danger">
<h6>Please fix the following errors:</h6>
<ul class="mb-0">
<for var="error" in="errors">
<li>{{ error }}</li>
</for>
</ul>
</div>
</if>
{{ form }}
<div class="form-actions mt-4 d-flex gap-2">
<button type="submit" form="{{ formId }}" class="btn btn-primary">
<i class="bi bi-save"></i> Create {{ resourceName }}
</button>
<if condition="{{ saveAndContinue }}">
<button type="submit" form="{{ formId }}" name="action" value="save-and-continue" class="btn btn-secondary">
<i class="bi bi-plus-circle"></i> Save & Create Another
</button>
</if>
<a href="{{ backUrl }}" class="btn btn-outline-secondary">Cancel</a>
</div>
</div>
</div>
<if condition="{{ helpText }}">
<div class="card mt-3">
<div class="card-header">
<h6 class="mb-0"><i class="bi bi-info-circle"></i> Help</h6>
</div>
<div class="card-body">
<p class="mb-0">{{ helpText }}</p>
</div>
</div>
</if>
</div>
</div>

View File

@@ -0,0 +1,150 @@
<layout name="layouts/admin" />
<div class="admin-page">
<div class="page-header">
<div class="d-flex justify-content-between align-items-center">
<div>
<h1>{{ title }}</h1>
<if condition="{{ subtitle }}">
<p class="text-muted">{{ subtitle }}</p>
</if>
</div>
<div class="btn-group">
<if condition="{{ canView }}">
<a href="{{ viewUrl }}" class="btn btn-info">
<i class="bi bi-eye"></i> View
</a>
</if>
<a href="{{ backUrl }}" class="btn btn-secondary">
<i class="bi bi-arrow-left"></i> Back to List
</a>
</div>
</div>
</div>
<div class="row">
<div class="col-lg-8">
<div class="card">
<div class="card-header d-flex justify-content-between align-items-center">
<h5 class="mb-0">{{ formTitle }}</h5>
<if condition="{{ lastModified }}">
<small class="text-muted">Last modified: {{ lastModified }}</small>
</if>
</div>
<div class="card-body">
<if condition="{{ errors }}">
<div class="alert alert-danger">
<h6>Please fix the following errors:</h6>
<ul class="mb-0">
<for var="error" in="errors">
<li>{{ error }}</li>
</for>
</ul>
</div>
</if>
<if condition="{{ successMessage }}">
<div class="alert alert-success">
{{ successMessage }}
</div>
</if>
{{ form }}
<div class="form-actions mt-4 d-flex gap-2">
<button type="submit" form="{{ formId }}" class="btn btn-primary">
<i class="bi bi-save"></i> Save Changes
</button>
<if condition="{{ saveAndView }}">
<button type="submit" form="{{ formId }}" name="action" value="save-and-view" class="btn btn-secondary">
Save & View
</button>
</if>
<a href="{{ backUrl }}" class="btn btn-outline-secondary">Cancel</a>
</div>
</div>
</div>
</div>
<div class="col-lg-4">
<if condition="{{ metadata }}">
<div class="card mb-3">
<div class="card-header">
<h6 class="mb-0"><i class="bi bi-info-circle"></i> Information</h6>
</div>
<div class="card-body">
<dl class="row mb-0">
<if condition="{{ metadata.createdAt }}">
<dt class="col-sm-5">Created:</dt>
<dd class="col-sm-7">{{ metadata.createdAt }}</dd>
</if>
<if condition="{{ metadata.updatedAt }}">
<dt class="col-sm-5">Updated:</dt>
<dd class="col-sm-7">{{ metadata.updatedAt }}</dd>
</if>
<if condition="{{ metadata.createdBy }}">
<dt class="col-sm-5">Created by:</dt>
<dd class="col-sm-7">{{ metadata.createdBy }}</dd>
</if>
<if condition="{{ metadata.status }}">
<dt class="col-sm-5">Status:</dt>
<dd class="col-sm-7">
<span class="badge bg-{{ metadata.statusColor }}">{{ metadata.status }}</span>
</dd>
</if>
</dl>
</div>
</div>
</if>
<if condition="{{ canDelete }}">
<div class="card border-danger">
<div class="card-header bg-danger text-white">
<h6 class="mb-0"><i class="bi bi-exclamation-triangle"></i> Danger Zone</h6>
</div>
<div class="card-body">
<p class="mb-2">Permanently delete this {{ resourceName }}.</p>
<button type="button" class="btn btn-danger btn-sm" data-bs-toggle="modal" data-bs-target="#deleteModal">
<i class="bi bi-trash"></i> Delete {{ resourceName }}
</button>
</div>
</div>
</if>
<if condition="{{ helpText }}">
<div class="card mt-3">
<div class="card-header">
<h6 class="mb-0"><i class="bi bi-question-circle"></i> Help</h6>
</div>
<div class="card-body">
<p class="mb-0">{{ helpText }}</p>
</div>
</div>
</if>
</div>
</div>
</div>
<if condition="{{ canDelete }}">
<div class="modal fade" id="deleteModal" tabindex="-1">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title">Confirm Deletion</h5>
<button type="button" class="btn-close" data-bs-dismiss="modal"></button>
</div>
<div class="modal-body">
<p>Are you sure you want to delete this {{ resourceName }}?</p>
<p class="text-danger mb-0"><strong>This action cannot be undone.</strong></p>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Cancel</button>
<form method="POST" action="{{ deleteUrl }}" class="d-inline">
<input type="hidden" name="_method" value="DELETE">
<button type="submit" class="btn btn-danger">Delete</button>
</form>
</div>
</div>
</div>
</div>
</if>

View File

@@ -0,0 +1,165 @@
<layout name="layouts/admin" />
<div class="admin-page">
<div class="page-header">
<h1>{{ title }}</h1>
<if condition="{{ subtitle }}">
<p class="text-muted">{{ subtitle }}</p>
</if>
<div class="page-actions">
<if condition="{{ canCreate }}">
<a href="{{ createUrl }}" class="btn btn-primary">
<i class="bi bi-plus-circle"></i> Create New
</a>
</if>
</div>
</div>
<if condition="{{ filters }}">
<div class="filters-section card mb-3">
<div class="card-body">
<form method="GET" class="row g-3">
<for var="filter" in="filters">
<div class="col-md-3">
<label class="form-label">{{ filter.label }}</label>
<if condition="{{ filter.type == 'select' }}">
<select name="{{ filter.name }}" class="form-select">
<option value="">All</option>
<for var="option" in="filter.options">
<option value="{{ option.value }}">{{ option.label }}</option>
</for>
</select>
</if>
<if condition="{{ filter.type == 'text' }}">
<input type="text" name="{{ filter.name }}" class="form-control" placeholder="{{ filter.placeholder }}">
</if>
</div>
</for>
<div class="col-md-12">
<button type="submit" class="btn btn-secondary">Filter</button>
<a href="{{ currentUrl }}" class="btn btn-link">Clear</a>
</div>
</form>
</div>
</div>
</if>
<div class="table-container card">
<div class="card-body">
<if condition="{{ items }}">
<div class="table-responsive">
<table class="table table-hover">
<thead>
<tr>
<if condition="{{ bulkActions }}">
<th width="50">
<input type="checkbox" class="form-check-input" id="select-all">
</th>
</if>
<for var="column" in="columns">
<th>{{ column.label }}</th>
</for>
<if condition="{{ hasActions }}">
<th width="150">Actions</th>
</if>
</tr>
</thead>
<tbody>
<for var="item" in="items">
<tr>
<if condition="{{ bulkActions }}">
<td>
<input type="checkbox" class="form-check-input item-checkbox" value="{{ item.id }}">
</td>
</if>
<for var="column" in="columns">
<td>{{ item[column.field] }}</td>
</for>
<if condition="{{ hasActions }}">
<td>
<div class="btn-group btn-group-sm">
<if condition="{{ canView }}">
<a href="{{ viewUrl }}/{{ item.id }}" class="btn btn-info" title="View">
<i class="bi bi-eye"></i>
</a>
</if>
<if condition="{{ canEdit }}">
<a href="{{ editUrl }}/{{ item.id }}" class="btn btn-warning" title="Edit">
<i class="bi bi-pencil"></i>
</a>
</if>
<if condition="{{ canDelete }}">
<button type="button" class="btn btn-danger"
data-delete-item="{{ item.id }}"
title="Delete">
<i class="bi bi-trash"></i>
</button>
</if>
</div>
</td>
</if>
</tr>
</for>
</tbody>
</table>
</div>
<if condition="{{ pagination }}">
<div class="pagination-wrapper">
<nav>
<ul class="pagination">
<if condition="{{ pagination.hasPrevious }}">
<li class="page-item">
<a class="page-link" href="{{ pagination.previousUrl }}">Previous</a>
</li>
</if>
<for var="page" in="pagination.pages">
<li class="page-item {{ page.active ? 'active' : '' }}">
<a class="page-link" href="{{ page.url }}">{{ page.number }}</a>
</li>
</for>
<if condition="{{ pagination.hasNext }}">
<li class="page-item">
<a class="page-link" href="{{ pagination.nextUrl }}">Next</a>
</li>
</if>
</ul>
</nav>
<div class="pagination-info text-muted">
Showing {{ pagination.from }} to {{ pagination.to }} of {{ pagination.total }} entries
</div>
</div>
</if>
</if>
<if condition="{{ !items }}">
<div class="empty-state text-center py-5">
<i class="bi bi-inbox" style="font-size: 3rem; color: #ccc;"></i>
<p class="text-muted mt-3">No items found.</p>
<if condition="{{ canCreate }}">
<a href="{{ createUrl }}" class="btn btn-primary mt-2">Create First Item</a>
</if>
</div>
</if>
</div>
</div>
<if condition="{{ bulkActions }}">
<div class="bulk-actions-bar" style="display: none;">
<div class="selected-count">
<span id="selected-count">0</span> items selected
</div>
<div class="bulk-action-buttons">
<for var="action" in="bulkActions">
<button type="button" class="btn btn-{{ action.variant }}" data-bulk-action="{{ action.name }}">
{{ action.label }}
</button>
</for>
</div>
</div>
</if>
</div>

View File

@@ -0,0 +1,231 @@
<layout name="layouts/admin" />
<div class="admin-page">
<div class="page-header">
<div class="d-flex justify-content-between align-items-center">
<div>
<h1>{{ title }}</h1>
<if condition="{{ subtitle }}">
<p class="text-muted">{{ subtitle }}</p>
</if>
</div>
<div class="btn-group">
<if condition="{{ canEdit }}">
<a href="{{ editUrl }}" class="btn btn-warning">
<i class="bi bi-pencil"></i> Edit
</a>
</if>
<a href="{{ backUrl }}" class="btn btn-secondary">
<i class="bi bi-arrow-left"></i> Back to List
</a>
</div>
</div>
</div>
<div class="row">
<div class="col-lg-8">
<div class="card">
<div class="card-header">
<h5 class="mb-0">{{ detailsTitle }}</h5>
</div>
<div class="card-body">
<if condition="{{ fields }}">
<for var="field" in="fields">
<div class="row mb-3">
<div class="col-md-4">
<strong>{{ field.label }}:</strong>
</div>
<div class="col-md-8">
<if condition="{{ field.type == 'html' }}">
<div>{{{ field.value }}}</div>
</if>
<if condition="{{ field.type == 'badge' }}">
<span class="badge bg-{{ field.color }}">{{ field.value }}</span>
</if>
<if condition="{{ field.type == 'link' }}">
<a href="{{ field.url }}">{{ field.value }}</a>
</if>
<if condition="{{ field.type == 'image' }}">
<img src="{{ field.value }}" alt="{{ field.label }}" class="img-thumbnail" style="max-width: 200px;">
</if>
<if condition="{{ field.type == 'boolean' }}">
<i class="bi bi-{{ field.value ? 'check-circle text-success' : 'x-circle text-danger' }}"></i>
{{ field.value ? 'Yes' : 'No' }}
</if>
<if condition="{{ field.type == 'text' || !field.type }}">
{{ field.value || '-' }}
</if>
</div>
</div>
</for>
</if>
</div>
</div>
<if condition="{{ relatedItems }}">
<for var="relation" in="relatedItems">
<div class="card mt-3">
<div class="card-header d-flex justify-content-between align-items-center">
<h6 class="mb-0">{{ relation.title }}</h6>
<if condition="{{ relation.createUrl }}">
<a href="{{ relation.createUrl }}" class="btn btn-sm btn-primary">
<i class="bi bi-plus"></i> Add
</a>
</if>
</div>
<div class="card-body">
<if condition="{{ relation.items }}">
<div class="table-responsive">
<table class="table table-sm">
<thead>
<tr>
<for var="column" in="relation.columns">
<th>{{ column.label }}</th>
</for>
<if condition="{{ relation.hasActions }}">
<th width="100">Actions</th>
</if>
</tr>
</thead>
<tbody>
<for var="item" in="relation.items">
<tr>
<for var="column" in="relation.columns">
<td>{{ item[column.field] }}</td>
</for>
<if condition="{{ relation.hasActions }}">
<td>
<div class="btn-group btn-group-sm">
<if condition="{{ relation.canEdit }}">
<a href="{{ relation.editUrl }}/{{ item.id }}" class="btn btn-outline-warning btn-sm">
<i class="bi bi-pencil"></i>
</a>
</if>
<if condition="{{ relation.canDelete }}">
<button type="button" class="btn btn-outline-danger btn-sm" data-delete-related="{{ item.id }}">
<i class="bi bi-trash"></i>
</button>
</if>
</div>
</td>
</if>
</tr>
</for>
</tbody>
</table>
</div>
</if>
<if condition="{{ !relation.items }}">
<p class="text-muted text-center mb-0">No {{ relation.title }} found.</p>
</if>
</div>
</div>
</for>
</if>
</div>
<div class="col-lg-4">
<if condition="{{ metadata }}">
<div class="card mb-3">
<div class="card-header">
<h6 class="mb-0"><i class="bi bi-info-circle"></i> Metadata</h6>
</div>
<div class="card-body">
<dl class="row mb-0">
<if condition="{{ metadata.id }}">
<dt class="col-sm-5">ID:</dt>
<dd class="col-sm-7"><code>{{ metadata.id }}</code></dd>
</if>
<if condition="{{ metadata.createdAt }}">
<dt class="col-sm-5">Created:</dt>
<dd class="col-sm-7">{{ metadata.createdAt }}</dd>
</if>
<if condition="{{ metadata.updatedAt }}">
<dt class="col-sm-5">Updated:</dt>
<dd class="col-sm-7">{{ metadata.updatedAt }}</dd>
</if>
<if condition="{{ metadata.createdBy }}">
<dt class="col-sm-5">Created by:</dt>
<dd class="col-sm-7">{{ metadata.createdBy }}</dd>
</if>
<if condition="{{ metadata.status }}">
<dt class="col-sm-5">Status:</dt>
<dd class="col-sm-7">
<span class="badge bg-{{ metadata.statusColor }}">{{ metadata.status }}</span>
</dd>
</if>
</dl>
</div>
</div>
</if>
<if condition="{{ actions }}">
<div class="card mb-3">
<div class="card-header">
<h6 class="mb-0"><i class="bi bi-lightning"></i> Quick Actions</h6>
</div>
<div class="card-body">
<div class="d-grid gap-2">
<for var="action" in="actions">
<if condition="{{ action.type == 'link' }}">
<a href="{{ action.url }}" class="btn btn-{{ action.variant || 'secondary' }}">
<if condition="{{ action.icon }}">
<i class="bi bi-{{ action.icon }}"></i>
</if>
{{ action.label }}
</a>
</if>
<if condition="{{ action.type == 'button' }}">
<button type="button" class="btn btn-{{ action.variant || 'secondary' }}" data-action="{{ action.name }}">
<if condition="{{ action.icon }}">
<i class="bi bi-{{ action.icon }}"></i>
</if>
{{ action.label }}
</button>
</if>
</for>
</div>
</div>
</div>
</if>
<if condition="{{ canDelete }}">
<div class="card border-danger">
<div class="card-header bg-danger text-white">
<h6 class="mb-0"><i class="bi bi-exclamation-triangle"></i> Danger Zone</h6>
</div>
<div class="card-body">
<p class="mb-2">Permanently delete this {{ resourceName }}.</p>
<button type="button" class="btn btn-danger btn-sm" data-bs-toggle="modal" data-bs-target="#deleteModal">
<i class="bi bi-trash"></i> Delete
</button>
</div>
</div>
</if>
</div>
</div>
</div>
<if condition="{{ canDelete }}">
<div class="modal fade" id="deleteModal" tabindex="-1">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title">Confirm Deletion</h5>
<button type="button" class="btn-close" data-bs-dismiss="modal"></button>
</div>
<div class="modal-body">
<p>Are you sure you want to delete this {{ resourceName }}?</p>
<p class="text-danger mb-0"><strong>This action cannot be undone.</strong></p>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Cancel</button>
<form method="POST" action="{{ deleteUrl }}" class="d-inline">
<input type="hidden" name="_method" value="DELETE">
<button type="submit" class="btn btn-danger">Delete</button>
</form>
</div>
</div>
</div>
</div>
</if>