@extends('layouts.admin') @section('content') @php $identityFields = [ 'public_business_name' => ['Public business name', 'The customer-facing store name used on the website and supported business listings.', 'text'], 'legal_business_name' => ['Legal business name', 'The formal business name retained for official/admin workflows.', 'text'], 'street_address' => ['Street address', 'Used on the Visit page, maps, structured business data, and supported listing sync.', 'text'], 'city' => ['City', 'Public locality used with the business address.', 'text'], 'state' => ['State', 'Public state/region used with the business address.', 'text'], 'postal_code' => ['Postal code', 'Public ZIP/postal code used with the business address.', 'text'], 'phone' => ['Phone', 'Public store phone number used by call buttons, the footer, and supported listings.', 'tel'], 'public_email' => ['Public email', 'Public-facing business email available to website templates and supported listings.', 'email'], 'contact_recipient_email' => ['Contact-form recipient', 'Private email address that receives website contact-form notifications.', 'email'], 'website_url' => ['Website URL', 'Canonical production website address.', 'url'], 'timezone' => ['Timezone', 'Controls store-hours calculations and scheduled content.', 'text'], 'directions_url' => ['Directions URL', 'Preferred destination for the public Get Directions button.', 'url'], 'google_maps_url' => ['Google Maps URL', 'Optional official Google Maps/place URL used as a fallback.', 'url'], ]; $contentFields = [ 'business_description' => ['Business description', 'General store description used on public pages and as a metadata fallback.'], 'parking_information' => ['Parking information', 'Displayed on the public Visit page when populated.'], 'accessibility_information' => ['Accessibility information', 'Displayed on the public Visit page. Enter only verified accessibility facts.'], 'eligibility_notice' => ['Eligibility notice', 'Displayed in the slim banner above the public website navigation.'], 'product_disclaimer' => ['Product disclaimer', 'Product/catalog disclaimer text available to public templates.'], 'cannabis_disclaimer' => ['Cannabis disclaimer', 'Cannabis-related disclaimer text available to public templates where needed.'], ]; $brandAssets = [ 'logo' => ['logo_media_id','Logo','Primary HMS logo used by templates that support the configured brand logo.'], 'hero' => ['hero_media_id','Homepage hero','Primary image available to the homepage hero area.'], 'storefront' => ['storefront_media_id','Storefront / visit photo','Exterior or storefront image available to visit/location content.'], ]; @endphp

Single source of truth

Business Settings

Manage the business facts HMS uses across the website and supported business-presence providers. Each field explains what it controls.

@csrf @method('PUT')

Business identity & contact

Canonical facts used by the public website and supported business-presence connections.

@foreach($identityFields as $key => [$label,$description,$type]) @endforeach

Public information & notices

Optional fields remain hidden on public surfaces when left blank.

@foreach($contentFields as $key => [$label,$description]) @endforeach

Brand images

For each location, choose an image already in HMS, upload a new one, or paste a direct HTTPS image link. A new upload/link overrides the existing-image selection and is added to Media Library automatically.

Only add images HMS has permission to publish. Alt text is required for every new image.

@foreach($brandAssets as $prefix => [$settingKey,$label,$description]) @php($currentMedia = $approvedMedia->first(fn($item) => (string)$item->id === (string)old($settingKey,$values[$settingKey] ?? '')))

{{ $label }}

{{ $description }}

@if($currentMedia){{ $currentMedia->alt_text }}@endif
or
@endforeach

Public catalog & launch controls

These switches can immediately change what the public website exposes.

Leafly

Leafly strain pages may be recorded as research references. HMS does not automatically scrape Leafly or copy Leafly images/long-form content. Retailer menu integration stays off unless authorized integration access is configured.

Social profiles

Only verified official HMS accounts should be entered.

@foreach(['facebook_url'=>'Facebook URL','instagram_url'=>'Instagram URL','youtube_url'=>'YouTube URL','x_url'=>'X / Twitter URL'] as $key=>$label) @endforeach

Saving records an audit event and queues eligible supported business-presence changes for reconciliation.

Regular hours

Normal weekly hours used for the live open/closed status, Visit page, and eligible listing sync.

@csrf @method('PUT') @foreach(['Sunday','Monday','Tuesday','Wednesday','Thursday','Friday','Saturday'] as $day=>$label) @php($row=$hours->get($day))
{{ $label }}
@endforeach

Holiday / special hours

Date-specific override for holidays or one-day schedule changes.

@csrf
@forelse($holidayHours as $holiday)
{{ $holiday->date->toFormattedDateString() }} · {{ $holiday->label ?: 'Special hours' }} · {{ $holiday->is_closed ? 'Closed' : substr($holiday->opens_at,0,5).'–'.substr($holiday->closes_at,0,5) }}
@csrf @method('DELETE')
@empty

No special-hours overrides.

@endforelse

Temporary closure

Use for a temporary closure that should override normal open/closed status.

@csrf
@forelse($closures as $closure)
{{ $closure->starts_at->toDayDateTimeString() }} · {{ $closure->is_active ? 'Active' : 'Inactive' }}
{{ $closure->public_message }}
@csrf @method('DELETE')
@empty

No temporary closures.

@endforelse
@endsection