# WP-SlimStat Project Rules (Master)
## WordPress Coding Standards
* **Indentation:** Tabs (not spaces).
* **Naming:** Prefix public classes, functions, hooks, and globals with `wp_slimstat_*`; Pro uses `WpSlimstatPro\…` namespaces.
* **Brace/Spacing:** Follow WP PHP Coding Standards (opening brace on same line; standard spacing).
* **Yoda Conditions:** `if ( 'value' === $var )`.
* **Docs:** PHPDoc for all classes, methods, hooks; meaningful inline comments.
## Version Support
* **Minimum WordPress:** **5.6+**
* **Minimum PHP:** **7.4+** (ensure forward compatibility with PHP 8.0–8.3).
* Use typed properties, arrow functions, and `declare(strict_types=1);` where appropriate; avoid deprecated 8.x-removed features.
## GPL Compliance & Open Source
* **License:** GPLv2+ (or GPL-compatible) for all code/assets.
* **No Encrypted/Obfuscated Code:** Ship sources for any minified assets.
* **Headers:** Add GPL license headers to new files; keep build scripts open.
## Secure Coding Practices
* **Sanitize Inputs:** `sanitize_text_field()`, `intval()`, `sanitize_email()`, `sanitize_key()`, `wp_unslash()` + `esc_url_raw()` where relevant.
* **Escape Outputs:** `esc_html()`, `esc_attr()`, `esc_url()`, `wp_kses_post()` by context.
* **DB Safety:** Always use `$wpdb->prepare()`; no raw interpolated SQL.
* **No Unsafe Functions:** No `eval()`/dynamic include of user-controlled paths.
* **Types & Validation:** Validate type/format before processing.
## Security & Permissions
* **Nonces + Caps:** Nonce check + capability check for every state-changing action (`manage_options` or custom `slimstat_*`).
* **AJAX/REST:** Use `permission_callback`; never expose raw queries; validate/sanitize all params.
* **Escaping Everywhere:** Output is escaped at render time; never echo unsanitized DB/user values.
* **Indexes:** Ensure SlimStat tables are indexed for safe, fast queries.
## Nonce & Permission Checks (Forms)
* `wp_nonce_field()` in forms; `wp_verify_nonce()` on submit.
* `current_user_can()` for admin actions; respect roles/capabilities.
* CSRF prevention on all POST/AJAX routes.
## Privacy & GDPR Compliance (Analytics-Specific)
* **Consent Required:** No tracking without opt-in; integrate with WP privacy policy tools/consent UI.
* **Anonymization:** Hash or truncate IPs before storage; avoid storing direct personal identifiers.
* **Respect Opt-Out:** Front-end opt-out (cookie/localStorage). Honor globally.
* **Retention:** Admin setting for data retention; purge via WP-Cron.
* **No External Calls by Default:** Geolocation/3rd-party services are **opt-in** with clear disclosure.
* **WP Privacy API:** Implement personal data exporters/erasers where applicable.
* **No Regressions:** New code must maintain or improve GDPR posture.
## No External Calls Without Opt-In
* **No Silent Phone-Home:** Any remote request must be user-initiated or explicitly enabled.
* **Documented:** List endpoints, purpose, and data sent.
* **No Usage Telemetry** without explicit, revocable consent.
## WordPress Plugin Directory Guidelines
* **No Crippleware:** Free plugin fully works; Pro extends via addons/hooks.
* **No Unauthorized Ads/Links:** "Powered by" is opt-in only.
* **Admin Notices:** Relevant, dismissible, minimal.
* **Graceful Fallbacks:** External service failures don't break the site.
* **Repository Eligibility:** Follow all WP.org rules strictly.
## Architecture & Code Organization
### Core (Free)
* **Pattern:** Procedural singleton (`wp_slimstat` static class) + small focused classes.
* **Structure:**
* Admin logic in `admin/`
* Admin views/templates in `admin/view/` (minimal logic)
* Data & services in `src/`
* **Separation of Concerns:** Keep templates thin; move logic into classes.
### Pro
* **Pattern:** Modern OOP with namespaces + DI container.
* **Namespaces:** `WpSlimstatPro\…` with directories like `src/Admin/`, `src/Addon/`.
* **Services:** Register via service providers (DI); avoid mixing paradigms with Free.
### Extensibility
* **Hooks:** Provide `do_action()`/`apply_filters()` for key lifecycle points.
* **Free vs Pro Boundaries:** Pro adds features via hooks/classes, not hidden gates in Free.
* **Schema Versioning:** Migrate with `dbDelta()` behind version checks.
## Consistency Across Free & Pro
* **Hook Stability:** Maintain BC for public hooks/APIs; deprecate gradually.
* **Identifiers:** Don't rename/remove globals/options without a migration path.
* **Text Domains:** `wp-slimstat` (Free), `wp-slimstat-pro` (Pro); i18n everywhere.
* **Modularity:** Avoid monoliths; keep logical file/module boundaries.
## Performance & Resource Usage
* **Scalable Storage:** Use dedicated SlimStat tables; avoid `postmeta/options` for logs.
* **Batch/Async:** Heavy jobs via WP-Cron/batches (e.g., IP lookups, aggregations).
* **Caching:** Transients/object cache for repeated aggregates.
* **Big Data Safety:** No `SELECT *` on large tables; paginate; limit columns; ensure indexes.
* **Memory & Time:** Optimize for high-traffic sites.
## Error Handling & Logging
* **Graceful Failures:** Try/catch risky code; never fatal in admin/front.
* **Admin Notices:** Friendly, non-sensitive error messages.
* **Logging:** `WP_DEBUG_LOG`/`error_log()`; never log personal data.
* **Uninstall:** `uninstall.php` cleans tables/options/settings introduced by SlimStat.
## Documentation
* **PHPDoc:** For public methods/classes; document filter/action signatures.
* **Readme/Changelog:** Keep `readme.txt` + `CHANGELOG.md` current for user-impacting changes.
* **Comments:** Clarify complex logic; err on the side of over-explaining.
## Internationalization & Accessibility
* **i18n:** Wrap all user-facing strings; load text domain early.
* **RTL & a11y:** RTL-ready admin UI; semantic headings; ARIA where appropriate.
## File Naming & Placement
* **Core:** Files prefixed `wp-slimstat-*`; class files in `src/` by concern.
* **Pro:** Namespaced classes under `src/…`; service providers by feature area.
* **Admin:** Views under `admin/view/`; logic in `admin/` classes.
## Testing Requirements
* **Unit Tests:** `WP_UnitTestCase` for data layer/edge cases.
* **Large Dataset Tests:** Validate performance on millions of rows (synthetic fixtures OK).
* **Security Tests:** Inputs sanitized, outputs escaped; nonce/cap checks present.
* **Integration:** Confirm new features don't break existing reports/tracking.
* **Cross-Version:** Test WP 5.6+ and PHP 7.4–8.3.
## Development Workflow
* **CI/CD:** Run PHPCS (WordPress rules), unit tests, and linting on every PR.
* **Static Analysis:** PHPStan/Psalm (with WP stubs) at level 6–8.
* **E2E (critical flows):** Playwright/Cypress hitting a test site to ensure visits get logged.
* **Build Hygiene:** No `var_dump()`/echo in shipped code; remove debug code before release.
## Backward Compatibility
* **Hooks:** If changing a hook, add `_deprecated_hook()` and a replacement filter/action.
* **Options/Tables:** Migrate options/DB schema on upgrade; never drop data silently.
## Packaging & Deployment
* **Plugin Headers (main file):**
* `Requires at least: 5.6`
* `Requires PHP: 7.4`
* `Tested up to: [latest]`
* `Stable tag: [x.y.z]`
* **Readme Compliance:** Changelog per release; stable tag matches Git tag.
* **Exclude Dev Files:** Use `.gitattributes`/build script to exclude tests, CI configs, node_modules, etc.
## Multisite & WooCommerce Considerations
* **Multisite:** Data stored per-site; test network activate/deactivate; no cross-site leakage.
* **WooCommerce Tracking:** Use official hooks (`woocommerce_thankyou`, `woocommerce_add_to_cart`, etc.) for ecommerce events; no template overrides for tracking.
* **Graceful Deactivation:** Turning off Pro must not corrupt/lose Free data or break admin UI.
## Data Portability
* **Export/Erase:** Implement `wp_privacy_personal_data_exporter` and `…_eraser` for SlimStat's stored data (if any is personal).
* **Formats:** Provide CSV/JSON exports with proper escaping and column headers.
## Code Review Checklist (pre-PR)
1. ✅ WP Coding Standards (PHPCS clean)
2. ✅ Nonce + capability checks on mutations
3. ✅ Inputs sanitized; outputs escaped
4. ✅ GDPR-safe (consent, anonymization, opt-out honored)
5. ✅ Architecture consistent (Free vs Pro patterns)
6. ✅ Efficient queries; indexes present; no N+1
7. ✅ Graceful error handling; no sensitive logs
8. ✅ Docs updated (PHPDoc, readme, changelog)
9. ✅ Tests pass (unit/integration); manual smoke tests on fresh & large datasets
10. ✅ Backward compatible (hooks, options, schema)