# CLAUDE.md This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository. ## Project Overview Digital Dabei Job Manager is a WordPress plugin providing a closed job board for "digital dabei Hamburg". External organizations (providers) self-register and manage job listings. Mentors (existing subscribers) view and apply to jobs. All jobs require admin moderation before publication. **Core principle**: Every job goes through admin approval before mentors see it. The moderation flow is the trust layer protecting mentors from spam. ## Development Environment - **Platform**: Local WP (WordPress development environment) - **WordPress**: 6.0+, PHP 7.4+ - **Required Plugins**: ACF Pro, Formidable Forms Pro, Elementor Pro - **Email**: WP Mail SMTP on production; disabled in Local WP dev environment ## Development Workflow with GSD **IMPORTANT**: Use `/gsd` commands for all code-related work in this repository. The GSD (Get Stuff Done) workflow provides: - Structured planning and execution phases - Automatic verification of changes - State management across sessions - Parallel execution when possible Common commands: - `/gsd:progress` - Check current state and next steps - `/gsd:plan-phase` - Plan implementation for a phase - `/gsd:execute-phase` - Execute all plans in a phase - `/gsd:help` - View all available GSD commands ## Development Workflow ### Testing Locally Since email is disabled in Local WP, test email functionality by: 1. Checking Action Scheduler status: WP Admin → Tools → Scheduled Actions 2. Monitoring logs: `error_log()` calls throughout notification classes 3. Using a plugin like WP Mail Logging to capture emails during dev ### Working with Forms Formidable forms are managed through the Formidable UI. When referencing forms in code: - Use form keys (e.g., 'job_submission') not IDs - Form ID lookup happens via `FrmForm::getOne('form_key')` - Field IDs are stored in form configuration, not hardcoded ### Modifying Email Templates Email templates are inline in `class-notifications.php`: - Admin emails use `wp_mail()` with HTML content - Mentor notification emails use `wp_mail()` with plain text - All emails include job title, provider name, and relevant links - Date formatting: Use `get_field()` for ACF dates, format with German locale ### Adding New Notifications 1. Identify triggering event (form submission, status change, custom action) 2. Add notification method to `class-notifications.php` 3. Hook into appropriate action in `setup_hooks()` 4. For batch processing, use `DDHH_JM_Scheduler::schedule_mentor_notification_batch()` ### CSS Best Practices **NEVER use `!important` in CSS.** This is a bad practice that creates maintenance issues and specificity wars. Instead, use proper CSS specificity to override styles: - **Bad:** `.button { color: #fff !important; }` - **Good:** `.ddhh-jobs-table .button { color: #fff; }` Specificity hierarchy (from weakest to strongest): 1. Element selectors: `button { }` 2. Class selectors: `.button { }` 3. Multiple classes: `.ddhh-jobs-table .button { }` 4. ID selectors: `#my-id { }` (avoid in most cases) 5. Inline styles: `style="..."` (avoid) 6. `!important` (NEVER use unless absolutely necessary for overriding external libraries) **Template-specific styles:** - All dashboard template styles are scoped with `.ddhh-provider-dashboard` or child selectors - This prevents conflicts with Elementor and other theme styles - Use parent selector chains like `.ddhh-jobs-table .button` for higher specificity