https://github.com/openclassify/openclassify
OpenClassify is modular and most advanced open source classified platform build with Laravel 8.1 & PHP 8.2 Supported. Included Pyrocms
https://github.com/openclassify/openclassify
classified classified-ads classified-script classified-software classified-web-app classifieds laravel laravel-classified php php7 php8 pyrocms
Last synced: 7 days ago
JSON representation
OpenClassify is modular and most advanced open source classified platform build with Laravel 8.1 & PHP 8.2 Supported. Included Pyrocms
- Host: GitHub
- URL: https://github.com/openclassify/openclassify
- Owner: openclassify
- Created: 2019-06-21T08:33:41.000Z (over 6 years ago)
- Default Branch: master
- Last Pushed: 2026-03-03T10:38:10.000Z (12 days ago)
- Last Synced: 2026-03-03T10:57:33.418Z (12 days ago)
- Topics: classified, classified-ads, classified-script, classified-software, classified-web-app, classifieds, laravel, laravel-classified, php, php7, php8, pyrocms
- Language: PHP
- Homepage: https://openclassify.com
- Size: 32.5 MB
- Stars: 298
- Watchers: 18
- Forks: 97
- Open Issues: 28
-
Metadata Files:
- Readme: README.md
- Contributing: docs/CONTRIBUTING.md
- Funding: .github/FUNDING.yml
- License: LICENSE.md
- Code of conduct: docs/CODE_OF_CONDUCT.md
Awesome Lists containing this project
- awesome - openclassify/openclassify - OpenClassify is modular and most advanced open source classified platform build with Laravel 8.1 & PHP 8.2 Supported. Included Pyrocms (PHP)
README
# 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`
- ๐งญ **Frontend Panel** โ Authenticated users manage listings, profile, videos, favorites, and inbox at `/panel`
- ๐งช **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)
```bash
# 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
```
### Default Accounts
| Role | Email | Password |
|------|-------|----------|
| Admin | a@a.com | 236330 |
| Member | b@b.com | 36330 |
These accounts are seeded by `Modules\User\Database\Seeders\AuthUserSeeder`. In demo mode, demo preparation still auto-logs the visitor into the schema-local admin account.
**Admin Panel:** http://localhost:8000/admin
**Frontend Panel:** http://localhost:8000/panel
---
## 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
```bash
# 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
```bash
# 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
```env
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
```bash
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/
โ
โโโ User/ # Users, auth, profile, and account flows
โโโ App/Http/Controllers/
โโโ App/Models/
โโโ Database/Seeders/
โโโ 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 |
---
## Code Contributors
OpenClassify is a modular open source classified platform built with Laravel.
- Website: [openclassify.com](https://openclassify.com)
- Package: [openclassify/openclassify](https://packagist.org/packages/openclassify/openclassify)
This project is maintained and improved by its contributors.
## Creating a New Module
```bash
php artisan module:make ModuleName
```
Then add to `modules_statuses.json`:
```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
```bash
php artisan test
```
---
## Production Deployment
### Environment Variables
```env
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
```bash
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](LICENSE) for details.