Learn PHP the right way —
before you touch Laravel.
A beginner-friendly PHP MVC starter kit that teaches you how routing, controllers, models, and views actually work — so Laravel feels natural when you get there.
...
GitHub Stars
Laravel-ready
MVC Patterns
Zero Frameworks
Pure PHP 8+
Features
Everything a beginner needs,
nothing to overwhelm you.
Learn the patterns Laravel uses — routing, MVC, auth, env config — without the magic hiding how it works.
MVC Architecture
Understand Controllers, Models, and Views hands-on — the same pattern Laravel is built on.
Session Auth
Build login, register, and logout from scratch — so you know what Laravel Auth does under the hood.
Admin Dashboard
A real-world admin panel with sidebar, topbar, and data tables — not just a tutorial toy.
Routing from Scratch
See exactly how URL routing works before Laravel's Route::get() abstracts it away.
REST API & JSON
Build pure RESTful JSON endpoints for decoupled applications or choose full-stack templates.
Laravel-Ready Patterns
Every pattern here — models, controllers, env config — maps directly to how Laravel works.
How it works
From zero to Laravel-ready in 3 steps.
Composer install
Install using composer create-project mardev/starter-kit to trigger the setup wizard.
Read the code
Every file is readable and commented. No magic, no black boxes — just PHP.
Graduate to Laravel
Once you understand MVC from scratch, Laravel's conventions will click immediately.
Blog
Latest articles
Getting Started with PHP MVC
Learn how to set up and customize this starter kit for your next project.
Building REST APIs with Vanilla PHP
How to create clean JSON endpoints without any framework overhead.
Tailwind CSS Tips for PHP Devs
Practical utility-first patterns that work great in PHP template files.
Frontend Layer
AJAX, API, Alpine.js & jQuery interactions — all wired up.
No build pipeline. No bundler. Just clean, readable JavaScript files and preset frontend bundles that show you exactly how the frontend talks to the backend.
Ajax.js / jquery_ajax.js
Clean wrappers around Fetch API or jQuery $.ajax. Every form submission — login, register, profile update — is automatically wired through them.
js/ajax.js or jquery_ajax.jsApp.js — Global Utilities
Shared helpers used everywhere: App.toast() for notifications, App.alert() for inline errors, App.setLoading() for button spinners.
Auth.js — Form Handlers
Handles login, register, forgot password, and reset password form submissions via AJAX — including a live password strength meter on the reset form.
js/auth.jsAvatar.js — Upload & Preview
Drag-and-drop or click-to-upload avatar with instant local preview, XHR upload progress bar, and live DOM update across topbar, sidebar, and profile card.
js/avatar.jsAlpine.js or jQuery Stack
Pick Alpine.js for modern reactive attributes or jQuery for traditional AJAX stack monolith flows — both come fully ready out of the box.
Alpine.js CDN or js/jquery.min.jsTheme.js + Sidebar.js
Dark/light mode toggle persisted to localStorage. Sidebar open/close bound to frontend state with a Ctrl+B keyboard shortcut.
How a request travels end-to-end
Form submit or button click triggers the flow
Fetch POST with FormData + X-Requested-With header
Ajax.post('ajax/login', formData).then(res => {
App.toast(res.message);
});
ajax/* route matched → Controller method dispatched
$router->post('ajax/login', [AuthController::class, 'login']);
{ success, message, data } returned to the client
"success": true,
"message": "Logged in",
"data": { ... }
}
UI updates instantly — zero page reload
Start learning today
Understand PHP before the framework does it for you.
Most beginners jump straight into Laravel without knowing what's happening underneath. Start here — build real features in vanilla PHP, then Laravel will make complete sense.