Files
homeproz/CLAUDE.md
T
root b6df4dbb92 Snapshot: MLS sync fixes, image refresh, plugin/theme updates
MLS plugin fixes from this session:
- Fix silent insert failures: location column NOT NULL was rejecting wpdb->insert calls,
  causing ~18k new properties since Dec 2025 to be lost. Inserts now build raw SQL
  with ST_PointFromText so the spatial column is populated atomically.
- Auto-refresh expired media URLs in MLS_Media_Handler::fetch_and_cache(), guarded by
  a property-level GET_LOCK so concurrent fetches share one API refresh.
- Normalize WP_Error to null in mls_get_property_image() so callers can rely on the
  documented string|null contract.
- Support comma-separated property_type filters in MLS_Query and MLS_Cluster so the
  homepage "View All Commercial" link (?property_type=Commercial+Sale,Land,Farm)
  actually filters correctly.
- Incremental sync now looks back 10 minutes past the latest modification timestamp
  as a safety margin against missed records.
- Smart sync exits silently (info-level, not warning) when a full sync is in progress.

Operational:
- New cron: weekly full sync Sundays at 3 AM (/usr/local/bin/mls-full-sync).
- New cron: hourly 2GB cap on mls-thumbnails/ and cache/transformed-images/
  (/usr/local/bin/mls-image-cache-cap).
- Logrotate config for wp-content/debug.log (2-day retention, daily rotation,
  delaycompress).

Repo policy:
- CLAUDE.md updated with explicit "commit everything except build artifacts" policy.
- .gitignore: untrack runtime image caches and debug.log rotations.

Other modifications in this snapshot are pre-existing in-flight theme/plugin/db_content_updates work.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-04-29 15:32:23 +00:00

108 lines
4.5 KiB
Markdown
Executable File

# HomeProz WordPress Theme
Custom WordPress theme for HomeProz Real Estate (Albert Lea, MN). Dark/rust brand aesthetic with ACF-powered property listings.
## Development Rules
1. **No emojis** - nowhere in code, commits, docs, or conversation
2. **Tailwind CSS + SCSS** - compiled via Vite
3. **jQuery** - for all JS functionality
4. **Co-locate files** - SCSS/JS live alongside PHP templates
5. **Page-scoped styles** - wrap in `.Page_Class_Name { }`, early return in JS
6. **Server-side render** - no client-side templating
7. **No custom animations** - keep it static and fast
8. **ASK before architectural decisions**
9. **No git commits unless asked** - commits are for checkpoints before major work or major milestones, not for small single-file changes
10. **Sync to staging** - after modifying theme or plugin files, sync them to `/var/www/vhosts/homeprozrealestate.com/staging/` using rsync
## Version Control Policy
Git is a snapshot tool and the historical record of what changed on the site. **If it's not in git, it may as well not exist.**
When asked to commit, commit **everything except build artifacts** — do not pick a "scope" or hand-select files. The point is the snapshot.
- **Commit:** all source (PHP, SCSS, JS), configs, `package.json`/`package-lock.json`, `db_content_updates/`, `node_modules/`, `dist/`, DB snapshots (`*.sql.gz`), plugins, themes, `CLAUDE.md`. `node_modules/` and `dist/` are tracked intentionally — see comments in `.gitignore`.
- **Do not commit:** runtime caches (`wp-content/cache/transformed-images/`), log files (`wp-content/debug.log*`), and other transient/regenerable runtime output. These belong in `.gitignore`.
If you find untracked files in scope of a commit, include them. If something looks ambiguous, default to committing it — under-tracking loses history; over-tracking is reversible.
## Build
```bash
cd wp-content/themes/homeproz
npm run build
```
## Tools
- **WP-CLI**: `wp --allow-root <command>`
- **Dev commits**: `./dev_commit.sh "message"` (includes DB snapshot)
## WordPress Admin
- **URL**: `/wp-admin/`
- **Username**: `admin`
- **Password**: `Byg2X2sqbHeVvHLYRz5e`
## Theme Options
Access via `homeproz_get_option('key')`:
- `phone`, `email`, `address`, `facebook`, `tiktok`
## Database Content Changes (MANDATORY)
This site has a production fork. All database changes must be documented for production sync.
**Schema changes** (new tables, columns, indexes): Use migration files in the MLS plugin (`wp-content/plugins/mls-by-hansonxyz/`).
**Content changes** (options, ACF fields, posts, menus, terms): Create a timestamped document in `db_content_updates/` with:
- Filename: `YYYY-MM-DD_HH-MM_description.md`
- What was changed (exact field names, option keys, post IDs)
- The exact values set (copy/paste the WP-CLI commands or SQL)
- Why it was changed
- Any dependencies or order of operations
Example: `2026-01-04_19-30_add-footer-menu.md`
**DO NOT** make database content changes without creating the corresponding document. The production team relies on these files to sync changes.
## Custom Post Types
### Agent (`/agents/`)
- ACF: phone, email, bio, gallery, social links, order, disabled toggle
- Disabled agents: 404 on profile, office contact on property cards
## Key Helpers
```php
// Get locations with active/pending properties only
$locations = homeproz_get_active_locations();
// Contact page with property inquiry prefill
$url = add_query_arg('property', urlencode($title), home_url('/contact/'));
```
## Page Classes
`Home_Page`, `Properties_Archive`, `Single_Property`, `About_Page`, `Contact_Page`, `Blog_Archive`, `Single_Post`, `Agents_Archive`, `Single_Agent`, `Search_Page`, `Error_404`
## MLS Property Overrides
### Force a non-HomeProz listing to appear as HomeProz
Some properties (e.g., LandProz listings) may need to appear on the HomeProz site. The `is_homeproz` flag overrides the office name check.
1. Find the property's `listing_key`:
```bash
wp --allow-root db query "SELECT listing_key, listing_id, street_name, city, list_office_name, is_homeproz FROM wp_mls_properties WHERE listing_id LIKE '%<MLS_ID>%'"
```
2. Set the override flag:
```bash
wp --allow-root db query "UPDATE wp_mls_properties SET is_homeproz = 1 WHERE listing_key = '<LISTING_KEY>'"
```
3. Document the change in `db_content_updates/` per the Database Content Changes policy.
**Example**: 121 Main St, Glenville (NST7785198) is listed under "LandProz Real Estate, LLC" but appears on HomeProz via `is_homeproz = 1`.