An open API service indexing awesome lists of open source software.

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

Awesome Lists containing this project

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 Logo

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.



OpenClassify 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.