# shopPRO — Codebase Overview > Generated: 2026-03-12 ## What is this project? shopPRO is a PHP e-commerce platform with an admin panel, customer-facing storefront, and REST API. It uses a Domain-Driven Design architecture with Dependency Injection (migration from legacy architecture complete). ## Size & Health | Metric | Value | |--------|-------| | PHP files (autoload/) | ~588 | | Lines of code (autoload/) | ~71,668 | | Test suite | **810 tests, 2264 assertions** | | Domain modules | 29 | | Admin controllers | 28 | | Frontend controllers | 8 | | API controllers | 4 | | Frontend views (static) | 11 | ## Tech Snapshot | Layer | Technology | |-------|-----------| | Language | PHP 7.4–7.x (production **< 8.0**) | | Database ORM | Medoo 1.7.10 + MySQL | | Caching | Redis via `CacheHandler` | | Email | PHPMailer (classic) | | Frontend JS | jQuery 2.1.3 | | CSS | Bootstrap 4.x (pre-compiled SCSS) | | HTTP Client | Native cURL | | Testing | PHPUnit 9.6 via `phpunit.phar` | | Build tools | **None** | ## Entry Points | File | Role | |------|------| | `index.php` | Frontend storefront | | `admin/index.php` | Admin panel | | `ajax.php` | Frontend AJAX | | `admin/ajax.php` | Admin AJAX | | `api.php` | REST API (ordersPRO) | | `cron.php` | Background job processor | ## External Integrations | Integration | Purpose | |-------------|---------| | **Apilo** | ERP/WMS — order sync, inventory, pricing (OAuth 2.0) | | **Ekomi** | Customer review CSV export | | **TrustMate** | Review invitation (browser-based, separate cron) | | **Google XML Feed** | Google Shopping product feed | | **shopPRO Import** | Import products from another shopPRO instance | ## Key Architecture Decisions - **DI via manual factories** in `admin\App`, `front\App`, `api\ApiRouter` - **Repository pattern** — all DB access in `autoload/Domain/{Module}/{Module}Repository.php` - **Redis caching** for products (TTL 24h), routes, and settings - **No Composer autoload at runtime** — custom dual-convention autoloader in each entry point - **Stateless REST API** — auth via `X-Api-Key` header + `hash_equals()` - **Job queue** — cron jobs stored in `pp_cron_jobs` table, processed by `cron.php` ## Quick Reference - Full stack details: `stack.md` - Architecture & routing: `architecture.md` - Code conventions: `conventions.md` - Testing patterns: `testing.md` - Known issues & debt: `concerns.md`