PESYJE MAP BUSINESS COORDINATES V3

ROOT CAUSE FOUND:
BusinessLocation::count() = 0.
Pesyje's live business address data is stored directly in the `businesses` table:
address_line_1, address_line_2, city, state, zip, country.

The previous map patch incorrectly expected populated `business_locations`.
This V3 fixes that architecture mismatch.

WHAT V3 DOES:
1. Adds latitude + longitude directly to `businesses`.
2. Updates Business model fillable/casts.
3. Updates the Modern Search map to read coordinates directly from each Business.
4. Adds `php artisan pesyje:geocode-businesses` to fill real coordinates from existing addresses.
5. Does NOT create fake/random coordinates.
6. Keeps the real OpenStreetMap map visible even before geocoding.

INSTALL:
cd /home/n377435/pesyje
unzip -o PESYJE_MAP_BUSINESS_COORDINATES_V3.zip

php artisan migrate --path=database/migrations/2026_08_12_000007_add_coordinates_to_businesses_table.php --force
php artisan optimize:clear

CHECK:
php artisan tinker
\App\Models\Business::count();
\App\Models\Business::whereNotNull('latitude')->whereNotNull('longitude')->count();
exit

FIRST SAFE GEOCODING TEST (10 BUSINESSES):
php artisan pesyje:geocode-businesses --limit=10

CHECK AGAIN:
php artisan tinker
\App\Models\Business::whereNotNull('latitude')->whereNotNull('longitude')->count();
exit

IF GOOD, CONTINUE IN BATCHES:
php artisan pesyje:geocode-businesses --limit=50

Repeat until there are no businesses left to geocode.

IMPORTANT:
The public OpenStreetMap Nominatim service is rate-limited. The command deliberately waits at least ~1.1 sec/request.
Do NOT remove the delay or run multiple copies in parallel.
