OpenClassify is modular and most advanced open source classified platform build with Laravel 8.1 & PHP 8.2 Supported. Included Pyrocms
Go to file
2026-03-07 22:23:53 +03:00
.ai/mcp Refactor ListingResource 2026-03-04 23:27:19 +03:00
.chatgpt beta 2026-03-03 12:49:08 +03:00
.codex beta 2026-03-03 12:49:08 +03:00
.devcontainer feat: Install FilamentPHP v5, add Admin/Partner modules, Docker support 2026-03-03 08:07:28 +00:00
.gemini Refactor Filament module UX 2026-03-07 02:30:09 +03:00
app Align auth pages and headers 2026-03-07 22:23:53 +03:00
bootstrap Improve partner panel UX 2026-03-07 20:19:00 +03:00
config Demo hazırla sayfa ekle 2026-03-07 19:29:55 +03:00
database Demo hazırla sayfa ekle 2026-03-07 19:29:55 +03:00
docker feat: Install FilamentPHP v5, add Admin/Partner modules, Docker support 2026-03-03 08:07:28 +00:00
lang Düzelt konum ve ilan sayısı 2026-03-07 03:08:00 +03:00
Modules Align auth pages and headers 2026-03-07 22:23:53 +03:00
public Düzelt konum ve ilan sayısı 2026-03-07 03:08:00 +03:00
resources Align auth pages and headers 2026-03-07 22:23:53 +03:00
routes Align auth pages and headers 2026-03-07 22:23:53 +03:00
storage Rewrite as Laravel 12 classified ads site (OpenClassify) 2026-03-02 23:34:07 +00:00
stubs/nwidart-stubs Rewrite as Laravel 12 classified ads site (OpenClassify) 2026-03-02 23:34:07 +00:00
.editorconfig Rewrite as Laravel 12 classified ads site (OpenClassify) 2026-03-02 23:34:07 +00:00
.env.example Demo hazırla sayfa ekle 2026-03-07 19:29:55 +03:00
.gitattributes Rewrite as Laravel 12 classified ads site (OpenClassify) 2026-03-02 23:34:07 +00:00
.gitignore beta 2026-03-03 12:49:08 +03:00
.styleci.yml Rewrite as Laravel 12 classified ads site (OpenClassify) 2026-03-02 23:34:07 +00:00
AGENTS.md Refactor Filament module UX 2026-03-07 02:30:09 +03:00
artisan Rewrite as Laravel 12 classified ads site (OpenClassify) 2026-03-02 23:34:07 +00:00
boost.json beta 2026-03-03 12:49:08 +03:00
composer.json Demo hazırla sayfa ekle 2026-03-07 19:29:55 +03:00
docker-compose.dev.yml feat: Install FilamentPHP v5, add Admin/Partner modules, Docker support 2026-03-03 08:07:28 +00:00
docker-compose.yml feat: Install FilamentPHP v5, add Admin/Partner modules, Docker support 2026-03-03 08:07:28 +00:00
Dockerfile feat: Install FilamentPHP v5, add Admin/Partner modules, Docker support 2026-03-03 08:07:28 +00:00
Dockerfile.dev feat: Install FilamentPHP v5, add Admin/Partner modules, Docker support 2026-03-03 08:07:28 +00:00
modules_statuses.json Improve partner panel UX 2026-03-07 20:19:00 +03:00
package.json Rewrite as Laravel 12 classified ads site (OpenClassify) 2026-03-02 23:34:07 +00:00
postcss.config.js Rewrite as Laravel 12 classified ads site (OpenClassify) 2026-03-02 23:34:07 +00:00
README.md Improve partner panel UX 2026-03-07 20:19:00 +03:00
tailwind.config.js Unify fonts and fix category seed 2026-03-06 02:15:13 +03:00
vite-module-loader.js Rewrite as Laravel 12 classified ads site (OpenClassify) 2026-03-02 23:34:07 +00:00
vite.config.js Rewrite as Laravel 12 classified ads site (OpenClassify) 2026-03-02 23:34:07 +00:00

OpenClassify

A modern classified ads platform built with Laravel 12, FilamentPHP v5, and Laravel Modules — similar to Letgo and Sahibinden.

Features

  • 🛍️ Classified Listings — Browse, search, and post ads across categories
  • 🗂️ Categories — Hierarchical categories with icons
  • 📍 Locations — Country and city management
  • 👤 User Profiles — Manage your listings and account
  • 🔐 Admin Panel — Full control via FilamentPHP v5 at /admin
  • 🤝 Partner Panel — Users manage their own listings at /partner/{id} (tenant isolation)
  • 🧪 Demo Mode — Per-visitor PostgreSQL schema provisioning with seeded data and automatic cleanup
  • 🌍 10 Languages — English, Turkish, Arabic, German, French, Spanish, Portuguese, Russian, Chinese, Japanese
  • 🐳 Docker Ready — One-command production and development setup
  • ☁️ GitHub Codespaces — Zero-config cloud development

AI Custom Instructions

Project-level custom instruction set files are available at:

  • .chatgpt/CUSTOM_INSTRUCTIONS.md (ChatGPT)
  • .codex/CUSTOM_INSTRUCTIONS.md (Codex)
  • .gemini/CUSTOM_INSTRUCTIONS.md (Google Gemini / Antigravity)

Tech Stack

Layer Technology
Framework Laravel 12
Admin UI FilamentPHP v5
Modules nWidart/laravel-modules v11
Auth/Roles Spatie Laravel Permission
Frontend Blade + TailwindCSS + Vite
Database PostgreSQL (required for demo mode), SQLite for minimal local dev
Cache/Queue Database or Redis

Quick Start (Docker)

# Clone the repository
git clone https://github.com/openclassify/openclassify.git
cd openclassify

# Copy environment file
cp .env.example .env

# Start with Docker Compose (production-like)
docker compose up -d

# The application will be available at http://localhost:8000

Demo Credentials (DEMO=1 only)

Role Email Password
Admin a@a.com 236330
Partner b@b.com 36330

Demo preparation auto-logs the visitor into the schema-local admin account, so manual login is usually not required.

Admin Panel: http://localhost:8000/admin Partner Panel: http://localhost:8000/partner


Development Setup

Option 1: GitHub Codespaces (Zero Config)

  1. Click Code → Codespaces → New codespace on GitHub
  2. Wait for the environment to build (~2 minutes)
  3. The app starts automatically at port 8000

Option 2: Docker Development

# Start development environment with hot reload
docker compose -f docker-compose.dev.yml up -d

# View logs
docker compose -f docker-compose.dev.yml logs -f app

Option 3: Local (PHP + Node)

Requirements: PHP 8.2+, Composer, Node 18+, PostgreSQL for demo mode

# Install dependencies
composer install
npm install

# Setup environment
cp .env.example .env
php artisan key:generate

# Database (SQLite for quick start)
touch database/database.sqlite
php artisan migrate
php artisan db:seed

# Start all services (server + queue + vite)
composer run dev

Demo Mode

Demo mode is designed for isolated visitor sessions. When enabled, each visitor can provision a private temporary marketplace backed by its own PostgreSQL schema.

Requirements

  • DB_CONNECTION=pgsql
  • DEMO=1
  • database-backed session / cache / queue drivers are supported and will stay on the public schema via pgsql_public

If DEMO=1 is set while the app is not using PostgreSQL, the application fails fast during boot.

Runtime Behavior

  • On the first guest homepage visit, the primary visible CTA is a single large Prepare Demo button.
  • The homepage shows how long the temporary demo will live before automatic deletion.
  • Clicking Prepare Demo provisions a visitor-specific schema, runs migrate and db:seed, and logs the visitor into the seeded admin account.
  • The same browser reuses its active demo instead of creating duplicate schemas.
  • Demo lifetime defaults to 360 minutes from explicit prepare / reopen time.
  • Expired demos are removed by demo:cleanup, which is scheduled hourly.

Environment

DB_CONNECTION=pgsql
DEMO=1
DEMO_TTL_MINUTES=360
DEMO_SCHEMA_PREFIX=demo_
DEMO_COOKIE_NAME=oc2_demo
DEMO_LOGIN_EMAIL=a@a.com
DEMO_PUBLIC_SCHEMA=public

Commands

php artisan migrate --force
php artisan db:seed --force
php artisan demo:prepare
php artisan demo:cleanup

Notes

  • php artisan db:seed only injects demo-heavy listings, favorites, inbox threads, and demo users when demo mode is enabled.
  • Public infrastructure tables such as sessions, cache, jobs, and failed jobs remain on the public schema even while visitor requests are switched into demo schemas.

Architecture

Module Structure

Modules/
├── Admin/              # FilamentPHP Admin Panel
│   ├── Filament/
│   │   └── Resources/  # CRUD resources (User, Category, Listing, Location)
│   └── Providers/
│       ├── AdminServiceProvider.php
│       └── AdminPanelProvider.php
│
├── Category/           # Category management
│   ├── Models/Category.php
│   ├── Http/Controllers/
│   ├── database/migrations/
│   └── database/seeders/
│
├── Listing/            # Listing management
│   ├── Models/Listing.php
│   ├── Http/Controllers/
│   ├── database/migrations/
│   └── database/seeders/
│
├── Location/           # Countries & Cities
│   ├── Models/{Country,City,District}.php
│   ├── database/migrations/
│   └── database/seeders/
│
└── Profile/            # User profile pages
    ├── Models/Profile.php
    ├── Http/Controllers/
    └── database/migrations/

Panels

Panel URL Access
Admin /admin Users with admin role
Frontend Panel /panel All authenticated users

Roles (Spatie Permission)

Role Access
admin Full admin panel access
partner Partner panel only (manages own listings)

Creating a New Module

php artisan module:make ModuleName

Then add to modules_statuses.json:

{
    "ModuleName": true
}

Adding a Filament Resource to Admin Panel

Resources are auto-discovered from Modules/Admin/Filament/Resources/.


Language Support

Languages are in lang/{locale}/messages.php. To add a new language:

  1. Create lang/{locale}/messages.php
  2. Switch language via: GET /lang/{locale}

Supported locales: en, tr, ar, de, fr, es, pt, ru, zh, ja


Running Tests

php artisan test

Production Deployment

Environment Variables

APP_ENV=production
APP_DEBUG=false
APP_URL=https://yourdomain.com

DB_CONNECTION=mysql
DB_HOST=your-db-host
DB_DATABASE=openclassify
DB_USERNAME=openclassify
DB_PASSWORD=your-secure-password

REDIS_HOST=your-redis-host
CACHE_STORE=redis
SESSION_DRIVER=redis
QUEUE_CONNECTION=redis

Post-Deploy Commands

php artisan migrate --force
php artisan db:seed --force    # Only on first deploy
php artisan config:cache
php artisan route:cache
php artisan view:cache
php artisan storage:link

Contributing

  1. Fork the repository
  2. Create a feature branch: git checkout -b feature/your-feature
  3. Commit your changes: git commit -m 'Add your feature'
  4. Push to the branch: git push origin feature/your-feature
  5. Open a Pull Request

License

MIT License. See LICENSE for details.