Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion public/css/app.css

Large diffs are not rendered by default.

41 changes: 41 additions & 0 deletions public/llms.txt
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
# Dotkernel Light

> Dotkernel Light is the technical blog for the Dotkernel headless PHP platform — a PSR-15 compliant application built on Mezzio and Laminas components. It publishes architecture write-ups, how-tos, and release notes for Dotkernel Admin, API, Frontend, and Light.

Content spans foundational PHP/middleware architecture (PSR-7, PSR-15, request lifecycle, dependency injection), practical how-tos (Doctrine migrations, CORS, authentication, caching), and the history/release notes of the Dotkernel ecosystem going back to 2008. Posts are organized by category and attributed to an author; URLs follow the pattern `/{category-slug}/{post-slug}/`.

## Docs

- [Blog](https://new.dotkernel.com/blog/): full list of posts, most recent first, paginated
- [Categories](https://new.dotkernel.com/categories/): all categories with post counts
- [About](https://new.dotkernel.com/about/): what Dotkernel Light is
- [Who We Are](https://new.dotkernel.com/who-we-are/): team/company background
- [OSS Package Lifecycle](https://new.dotkernel.com/dotkernel-packages-oss-lifecycle/): support/maintenance status of Dotkernel's open-source packages
- [Contact](https://new.dotkernel.com/contact/)

## Categories

- [Dotkernel](https://new.dotkernel.com/category/dotkernel/): the core framework — releases, caching, sessions, auth, WURFL/device detection (64 posts)
- [PHP Development](https://new.dotkernel.com/category/php-development/): general PHP tooling, environments, IDEs, security (20 posts)
- [How to's](https://new.dotkernel.com/category/how-to/): practical guides — migrations, CORS, PSR-7, routing (14 posts)
- [Best Practice](https://new.dotkernel.com/category/best-practice/): coding standards and database access patterns (13 posts)
- [Dotkernel API](https://new.dotkernel.com/category/dotkernel-api/): REST API package — auth, content negotiation, OpenAPI (10 posts)
- [Dotkernel 3](https://new.dotkernel.com/category/dotkernel3/): the v3 rewrite on Zend Expressive/Mezzio (9 posts)
- [Headless Platform](https://new.dotkernel.com/category/headless-platform/): the current Dotkernel headless architecture (9 posts)
- [Zend Framework](https://new.dotkernel.com/category/zend-framework/): Zend Framework 1 history and end-of-life notes (8 posts)
- [Javascript](https://new.dotkernel.com/category/javascript/): frontend/JS topics (3 posts)
- [Middleware](https://new.dotkernel.com/category/middleware/): PSR-15 middleware and routing internals (3 posts)
- [Architecture](https://new.dotkernel.com/category/architecture/): request lifecycle and application bootstrapping (3 posts)
- [PHP Troubleshooting](https://new.dotkernel.com/category/php-troubleshooting/): fixes for common PHP setup issues (2 posts)
- [Android](https://new.dotkernel.com/category/android/): Android install-referrer and broadcast receivers (2 posts)
- [PHPStorm](https://new.dotkernel.com/category/phpstorm/): IDE setup (1 post)
- [Licensing](https://new.dotkernel.com/category/licensing/): open-source license comparisons (1 post)

## Optional

- [Dotkernel Headless Platform: The What's, How's and Why's](https://new.dotkernel.com/headless-platform/dotkernel-headless-platform-the-whats-hows-and-whys/): best starting point for understanding the current platform
- [Understanding Middleware](https://new.dotkernel.com/architecture/understanding-middleware/)
- [Request Lifecycle for a Mezzio Based Application](https://new.dotkernel.com/architecture/request-lifecycle-for-a-mezzio-based-application/)
- [ConfigProvider: Bootstrap Modern PHP Applications](https://new.dotkernel.com/architecture/configprovider-bootstrap-modern-php-applications/)
- [What is PSR-7 and How to Use It](https://new.dotkernel.com/how-to/what-is-psr-7-and-how-to-use-it/)
- [Dependency Injection Made Easy in Laminas/Mezzio Applications](https://new.dotkernel.com/dotkernel/dependency-injection-made-easy-in-laminas-mezzio-applications/)
2 changes: 1 addition & 1 deletion src/App/assets/scss/components/_blog.scss
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
// ============================================================
// Blog post page styles extracted & converted to SCSS
// Blog post page styles - extracted & converted to SCSS
// Relies on the global CSS custom properties (--bg, --text, etc.)
// defined in :root / [data-theme="light"].
// ============================================================
Expand Down
5 changes: 5 additions & 0 deletions src/App/assets/scss/components/_custom.scss
Original file line number Diff line number Diff line change
Expand Up @@ -813,6 +813,11 @@ details.acc {
gap: 20px;
}

.posts-grid-2-col {
display: grid;
grid-template-columns: repeat(2, 1fr);
gap: 20px;
}
.post-card {
background: var(--surface);
border: 1px solid var(--border);
Expand Down
2 changes: 2 additions & 0 deletions src/App/src/ConfigProvider.php
Original file line number Diff line number Diff line change
Expand Up @@ -122,6 +122,7 @@ public function getDependencies(): array
* paths: array{
* app: array{literal-string&non-falsy-string},
* error: array{literal-string&non-falsy-string},
* jsonld: array{literal-string&non-falsy-string},
* layout: array{literal-string&non-falsy-string},
* partial: array{literal-string&non-falsy-string},
* }
Expand All @@ -133,6 +134,7 @@ public function getTemplates(): array
'paths' => [
'app' => [__DIR__ . '/../templates/app'],
'error' => [__DIR__ . '/../templates/error'],
'jsonld' => [__DIR__ . '/../templates/jsonld'],
'layout' => [__DIR__ . '/../templates/layout'],
'partial' => [__DIR__ . '/../templates/partial'],
],
Expand Down
1 change: 1 addition & 0 deletions src/App/src/RoutesDelegator.php
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ public function __invoke(ContainerInterface $container, string $serviceName, cal
$uri = $request->getUri();
return new RedirectResponse((string) $uri . '/', 301);
});

$app->get('/{first}/{second}', function ($request) {
$uri = $request->getUri();
return new RedirectResponse((string) $uri . '/', 301);
Expand Down
24 changes: 12 additions & 12 deletions src/App/templates/app/index.html.twig
Original file line number Diff line number Diff line change
@@ -1,15 +1,15 @@
{% extends '@layout/default.html.twig' %}

{% block json_ld %} {% include '@jsonld/index.jsonld.twig'%} {% endblock %}
{% block title %}A PSR-15 compliant application{% endblock %}

{% block content %}

<section class="hero">
<div class="wrap hero-grid">
<div>
<span class="eyebrow">PSR-15 · middleware-first architecture</span>
<span class="eyebrow">PSR-15 . middleware-first architecture</span>
<h1>A headless platform for building modern web applications</h1>
<p class="sub">Dotkernel is a collection of open-source application skeletons built on Mezzio and Laminas pre-configured and ready for anything from a presentation site to an enterprise-grade API.</p>
<p class="sub">Dotkernel is a collection of open-source application skeletons built on Mezzio and Laminas - pre-configured and ready for anything from a presentation site to an enterprise-grade API.</p>
<div class="hero-ctas">
<a class="btn btn-primary" href="https://docs.dotkernel.org" target="_blank" rel="noopener">
<svg viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2"><path d="M4 19.5A2.5 2.5 0 0 1 6.5 17H20"/><path d="M6.5 2H20v20H6.5A2.5 2.5 0 0 1 4 19.5v-15A2.5 2.5 0 0 1 6.5 2z"/></svg>
Expand All @@ -22,7 +22,7 @@
</div>
<div class="hero-stack-note">
<div><span>Runtime</span> Mezzio + Laminas</div>
<div><span>Standards</span> PSR-7 · PSR-11 · PSR-15</div>
<div><span>Standards</span> PSR-7 . PSR-11 . PSR-15</div>
<div><span>License</span> BSD-3-Clause</div>
</div>
</div>
Expand Down Expand Up @@ -87,7 +87,7 @@
<div class="section-head">
<span class="eyebrow">Headless Platform</span>
<h2>Three applications, one platform</h2>
<p>API, Admin, and Queue are designed to integrate into a single, unified headless platform better together than the sum of their parts.</p>
<p>API, Admin, and Queue are designed to integrate into a single, unified headless platform - better together than the sum of their parts.</p>
</div>

<div class="products-grid">
Expand Down Expand Up @@ -120,7 +120,7 @@
<img alt="License" src="https://img.shields.io/github/license/dotkernel/admin?style=flat&label=&color=D6D2CC">
<img alt="Stars" src="https://img.shields.io/github/stars/dotkernel/admin?style=flat&label=%E2%98%85&color=D6D2CC">
</div>
<p class="desc">A ready-to-go admin skeleton for managing your platform's records with a simple, table-based approach plus the tools to build reports and dashboards.</p>
<p class="desc">A ready-to-go admin skeleton for managing your platform's records with a simple, table-based approach - plus the tools to build reports and dashboards.</p>
<div class="card-btns">
<a class="btn btn-ghost btn-sm" href="https://github.com/dotkernel/admin" target="_blank" rel="noopener">GitHub</a>
<a class="btn btn-ghost btn-sm" href="https://admin7.dotkernel.net/" target="_blank" rel="noopener">Demo</a>
Expand Down Expand Up @@ -161,15 +161,15 @@

<div class="card" style="--accent:var(--rose)">
<div class="card-top">
<div><span class="kicker">Skeleton · Didactic</span><h3>Light</h3></div>
<div><span class="kicker">Skeleton . Didactic</span><h3>Light</h3></div>
</div>
<div class="badges">
<img alt="PHP" src="https://img.shields.io/packagist/php-v/dotkernel/light?style=flat&label=php&color=F6D6DA">
<img alt="Packagist" src="https://img.shields.io/packagist/v/dotkernel/light?style=flat&label=&color=F6D6DA">
<img alt="License" src="https://img.shields.io/github/license/dotkernel/light?style=flat&label=&color=F6D6DA">
<img alt="Stars" src="https://img.shields.io/github/stars/dotkernel/light?style=flat&label=%E2%98%85&color=F6D6DA">
</div>
<p class="desc">A minimal, PSR-15 compliant skeleton built for learning purposes a simple, didactic example of how to put together a basic website, not a Headless Platform component.</p>
<p class="desc">A minimal, PSR-15 compliant skeleton built for learning purposes - a simple, didactic example of how to put together a basic website, not a Headless Platform component.</p>
<div class="card-btns">
<a class="btn btn-ghost btn-sm" href="https://github.com/dotkernel/light" target="_blank" rel="noopener">GitHub</a>
<a class="btn btn-ghost btn-sm" href="https://light.dotkernel.net/" target="_blank" rel="noopener">Demo</a>
Expand All @@ -179,15 +179,15 @@

<div class="card" style="--accent:var(--sage)">
<div class="card-top">
<div><span class="kicker">Skeleton · Standalone</span><h3>Frontend</h3></div>
<div><span class="kicker">Skeleton . Standalone</span><h3>Frontend</h3></div>
</div>
<div class="badges">
<img alt="PHP" src="https://img.shields.io/packagist/php-v/dotkernel/frontend?style=flat&label=php&color=E39AA8">
<img alt="Packagist" src="https://img.shields.io/packagist/v/dotkernel/frontend?style=flat&label=&color=E39AA8">
<img alt="License" src="https://img.shields.io/github/license/dotkernel/frontend?style=flat&label=&color=E39AA8">
<img alt="Stars" src="https://img.shields.io/github/stars/dotkernel/frontend?style=flat&label=%E2%98%85&color=E39AA8">
</div>
<p class="desc">A web starter skeleton for building frontend applications on Mezzio and Laminas a standalone alternative, separate from the Headless Platform.</p>
<p class="desc">A web starter skeleton for building frontend applications on Mezzio and Laminas - a standalone alternative, separate from the Headless Platform.</p>
<div class="card-btns">
<a class="btn btn-ghost btn-sm" href="https://github.com/dotkernel/frontend" target="_blank" rel="noopener">GitHub</a>
<a class="btn btn-ghost btn-sm" href="https://v5.dotkernel.net/" target="_blank" rel="noopener">Demo</a>
Expand All @@ -204,7 +204,7 @@
<div class="section-head">
<span class="eyebrow">Components</span>
<h2>Every layer, on its own</h2>
<p>Small, independent dot-* packages pull in what you need. Lifecycle status for each lives on the <a href="https://www.dotkernel.com/dotkernel-packages-oss-lifecycle/" style="color:var(--teal);">Packages Lifecycle</a> page.</p>
<p>Small, independent dot-* packages - pull in what you need. Lifecycle status for each lives on the <a href="https://www.dotkernel.com/dotkernel-packages-oss-lifecycle/" style="color:var(--teal);">Packages Lifecycle</a> page.</p>
</div>
<div class="components-grid">
<div>
Expand Down Expand Up @@ -331,7 +331,7 @@
<h2>Control, scalability &amp; performance you can build on.</h2>
</div>
<div>
<p class="about-text">Dotkernel is an open-source project created and led by the dev team at Apidemia built first as an internal tool for handling complex architectures, now freely shared as our way of giving back to the community.</p>
<p class="about-text">Dotkernel is an open-source project created and led by the dev team at Apidemia - built first as an internal tool for handling complex architectures, now freely shared as our way of giving back to the community.</p>
<div class="about-cta">
<a class="btn btn-ghost" href="{{ url('page::contact') }}">See more about us →</a>
</div>
Expand Down
101 changes: 101 additions & 0 deletions src/App/templates/jsonld/index.jsonld.twig
Original file line number Diff line number Diff line change
@@ -0,0 +1,101 @@
<script type="application/ld+json">
{
"@context": "https://schema.org",
"@graph": [
{
"@type": "WebSite",
"@id": "{{ absolute_url('/') }}#website",
"url": "{{ absolute_url('/') }}",
"name": "Dotkernel",
"description": "Dotkernel is a collection of open-source application skeletons built on Mezzio and Laminas - pre-configured and ready for anything from a presentation site to an enterprise-grade API.",
"publisher": { "@id": "{{ absolute_url('/') }}#organization" }
},
{
"@type": "Organization",
"@id": "{{ absolute_url('/') }}#organization",
"name": "Dotkernel",
"url": "{{ absolute_url('/') }}",
"logo": "{{ absolute_url(asset('images/app/dotkernel-logo.png')) }}",
"sameAs": [
"https://github.com/dotkernel",
"https://www.dotkernel.com"
],
"parentOrganization": {
"@type": "Organization",
"name": "Apidemia",
"url": "https://www.apidemia.com"
}
},
{
"@type": "SoftwareApplication",
"name": "Dotkernel API",
"applicationCategory": "DeveloperApplication",
"operatingSystem": "Cross-platform",
"description": "A framework-less, opinionated toolkit for intermediate-to-advanced developers who want to ship REST APIs quickly and efficiently. An alternative to legacy Laminas API Tools (Apigility).",
"url": "https://github.com/dotkernel/api",
"license": "https://opensource.org/licenses/BSD-3-Clause",
"offers": {
"@type": "Offer",
"price": "0",
"priceCurrency": "USD"
}
},
{
"@type": "SoftwareApplication",
"name": "Dotkernel Admin",
"applicationCategory": "DeveloperApplication",
"operatingSystem": "Cross-platform",
"description": "A ready-to-go admin skeleton for managing your platform's records with a simple, table-based approach - plus the tools to build reports and dashboards.",
"url": "https://github.com/dotkernel/admin",
"license": "https://opensource.org/licenses/BSD-3-Clause",
"offers": {
"@type": "Offer",
"price": "0",
"priceCurrency": "USD"
}
},
{
"@type": "SoftwareApplication",
"name": "Dotkernel Queue",
"applicationCategory": "DeveloperApplication",
"operatingSystem": "Cross-platform",
"description": "Asynchronous task queuing built on Symfony Messenger, wired into the Laminas Service Manager container via netglue/laminas-messenger.",
"url": "https://github.com/dotkernel/queue",
"license": "https://opensource.org/licenses/BSD-3-Clause",
"offers": {
"@type": "Offer",
"price": "0",
"priceCurrency": "USD"
}
},
{
"@type": "SoftwareApplication",
"name": "Dotkernel Light",
"applicationCategory": "DeveloperApplication",
"operatingSystem": "Cross-platform",
"description": "A minimal, PSR-15 compliant skeleton built for learning purposes - a simple, didactic example of how to put together a basic website.",
"url": "https://github.com/dotkernel/light",
"license": "https://opensource.org/licenses/BSD-3-Clause",
"offers": {
"@type": "Offer",
"price": "0",
"priceCurrency": "USD"
}
},
{
"@type": "SoftwareApplication",
"name": "Dotkernel Frontend",
"applicationCategory": "DeveloperApplication",
"operatingSystem": "Cross-platform",
"description": "A web starter skeleton for building frontend applications on Mezzio and Laminas - a standalone alternative, separate from the Headless Platform.",
"url": "https://github.com/dotkernel/frontend",
"license": "https://opensource.org/licenses/BSD-3-Clause",
"offers": {
"@type": "Offer",
"price": "0",
"priceCurrency": "USD"
}
}
]
}
</script>
6 changes: 3 additions & 3 deletions src/App/templates/layout/default.html.twig
Original file line number Diff line number Diff line change
Expand Up @@ -18,8 +18,8 @@
<link href="https://fonts.googleapis.com/css?family=Montserrat:300,400,500,600" rel="stylesheet">
<link href="https://fonts.googleapis.com/css?family=Source+Sans+Pro:300,400,600" rel="stylesheet">
<link href="{{ asset('css/app.css') }}" rel="stylesheet" />
{% block stylesheets %}
{% endblock %}
{% block json_ld %}{% endblock %}
{% block stylesheets %}{% endblock %}
</head>
<body class="app d-flex flex-column min-vh-100 {% block body_class %}{% endblock %}">
<header class="sticky-top">
Expand Down Expand Up @@ -96,7 +96,7 @@
<img class="icon icon-jetbrains mt-1" src="{{ asset('images/app/icon/jetbrains-mono.svg') }}" alt="JetBrains">
</a>
</span>
<span class="sponsor">Built with Mezzio, Laminas &amp; Doctrine for PHP developers, by PHP developers.</span>
<span class="sponsor">Built with Mezzio, Laminas &amp; Doctrine - for PHP developers, by PHP developers.</span>
</div>
</div>
</footer>
Expand Down
Loading