A modern blog platform built with Laravel 13 and Tailwind CSS, fully RTL and in Persian, using the Vazirmatn font.
Laravel Weblog lets users write posts, organize them into categories, and publish through an admin-approval workflow. The UI is fully Persian, RTL, and responsive.
| # | Feature | Description |
|---|---|---|
| π° | Post Management | Create, edit, delete, and view posts with image upload |
| ποΈ | Categories | Organize and browse posts by topic |
| π | Search | Quick search across post titles and content, from the header |
| β | Admin Approval | Posts by regular users require admin approval before publishing |
| ποΈ | View Counter | Automatic view tracking per post |
| π | Pagination | Smart pagination on the home page, post list, and "my posts" |
| π | Authentication | Registration, login, and profile management (Laravel Breeze) |
| π± | Responsive Design | Consistent experience across desktop, tablet, and mobile |
| π¨ | Persian RTL UI | Vazirmatn font and full RTL layout across the site |
| π§ | Shared Header/Footer | Consistent navigation, search, and quick links on every page |
| Layer | Technology |
|---|---|
| Backend | Laravel 13.8 (PHP 8.3) |
| Frontend | Blade, Tailwind CSS 3, Alpine.js |
| Database | MySQL (MariaDB) |
| Font | Vazirmatn |
| Icons | Font Awesome 6 |
| Auth | Laravel Breeze |
| Build Tool | Vite |
- PHP >= 8.2
- Composer
- Node.js >= 18 and npm
- MySQL or MariaDB (e.g. via XAMPP)
# 1) Clone the project
git clone https://github.com/your-username/laravel-weblog.git
cd laravel-weblog
# 2) Install PHP dependencies
composer install
# 3) Install Node dependencies
npm install
# 4) Set up environment file
cp .env.example .env
php artisan key:generateThen edit .env with your database credentials:
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=laravel-weblog
DB_USERNAME=root
DB_PASSWORD=# 5) Run migrations
php artisan migrate
# 6) Seed default categories
php artisan db:seed --class=CategorySeeder
# 7) Create the storage symlink (for uploaded images)
php artisan storage:link
# 8) Run the app (two separate terminals)
php artisan serve
npm run devVisit:
http://127.0.0.1:8000
After registering a user through the site, grant admin access via Tinker:
php artisan tinker$u = App\Models\User::find(1);
$u->is_admin = true;
$u->save();laravel-weblog/
βββ app/
β βββ Http/Controllers/
β β βββ PostController.php
β β βββ CategoryController.php
β βββ Models/
β βββ Post.php
β βββ Category.php
β βββ User.php
βββ database/
β βββ migrations/
β βββ seeders/
β βββ CategorySeeder.php
βββ resources/
β βββ css/app.css
β βββ views/
β βββ components/
β β βββ site-header.blade.php
β β βββ site-footer.blade.php
β βββ posts/
β βββ categories/
β βββ dashboard.blade.php
β βββ welcome.blade.php
βββ routes/
βββ web.php
| Role | Permissions |
|---|---|
| π€ Guest | View published posts, search, browse categories |
| βοΈ Member | Create, edit, and delete own posts (pending admin approval) |
| π‘οΈ Admin | Approve/publish pending posts, view all posts (published and pending) |
| Method | Path | Description |
|---|---|---|
| GET | / |
Home page |
| GET | /posts |
List all posts + search |
| GET | /posts/{slug} |
View a single post |
| GET | /posts/create |
Create post form |
| GET | /posts/{post}/edit |
Edit post form |
| POST | /posts/{post}/approve |
Approve and publish a post (admin only) |
| GET | /categories/{slug} |
Posts in a category |
| GET | /dashboard |
User dashboard |
If you like this project, give it a star on GitHub! π