@php $servicesText = collect($profile?->services ?? [])->map(fn ($row) => trim(($row['name'] ?? '').' | '.($row['level'] ?? ''), ' |'))->implode("\n"); $toolsText = collect($profile?->tool_inventory ?? [])->map(fn ($row) => trim(($row['name'] ?? '').' | '.($row['category'] ?? ''), ' |'))->implode("\n"); $certsText = collect($profile?->certification_records ?? [])->map(fn ($row) => trim(($row['name'] ?? '').' | '.($row['issuer'] ?? ''), ' |'))->implode("\n"); $visibility = $profile?->profile_visibility ?? []; $visible = fn (string $field): bool => (bool) ($visibility[$field] ?? true); $selectedTaxonomy = $profile?->taxonomyTerms?->pluck('id')->all() ?? []; @endphp
@csrf @method('PUT')

This is self-declared until native work history, buyer endorsements, certifications, or admin verification support it.

Self-declared tags and evidence

Choose categories, specialties, skills, tools, and certifications that describe your work. Later passes can let buyers endorse or challenge these after completed work orders.

@foreach ($taxonomyTerms as $term) @endforeach

Public sections

Unchecked sections remain available to you but do not display on the public provider profile.

@foreach (['bio' => 'Bio', 'services' => 'Services', 'tools' => 'Tools', 'certifications' => 'Certifications', 'rate_card' => 'Rate card', 'availability' => 'Availability', 'imports' => 'Imported history'] as $key => $label) @endforeach
Save provider profile @if ($profile)

Profile photos, certification proof, tools, and job files

Use captions to distinguish van photos, tool photos, certification proof, job photos, and insurance documents.

@csrf

Guided imported-history wizard

Manually preserve earned history from Field Nation, WorkMarket, or similar platforms without scraping private systems. Keep client names, addresses, work-order IDs, and sensitive buyer details out of public fields.

Imported endorsement categories

@foreach (['communication', 'professionalism', 'problem_solving', 'preparedness', 'work_quality', 'responsiveness'] as $endorsement) @endforeach
Save imported history

Private import source vault

Upload provider-owned Field Nation, WorkMarket, or similar source material here before creating a public summary. Raw files stay private by default for provider/admin review and should not be published directly.

@csrf

Allowed: images, PDF, text, CSV, JSON, HTML, and zip files. Default storage is private.

Upload private source

Uploaded import sources

@forelse ($profile->externalImportSources->sortByDesc('uploaded_at') as $source)

{{ $source->platform }} | {{ $source->sourceTypeLabel() }}

{{ $source->parseStatusLabel() }} {{ $source->reviewStatusLabel() }}

{{ $source->original_name }} | {{ number_format($source->size / 1024, 1) }} KB | {{ $source->uploaded_at?->format('M j, Y g:i A') }}

@if ($source->externalProfileImport)

Linked summary: {{ $source->externalProfileImport->platform }} {{ $source->externalProfileImport->external_id ? '#'.$source->externalProfileImport->external_id : '' }}

@endif @if ($source->provider_notes)

{{ $source->provider_notes }}

@endif @if ($source->parse_warnings)

Parser warnings

    @foreach ($source->parse_warnings as $warning)
  • {{ $warning }}
  • @endforeach
@endif @if ($source->parsed_payload)

Parsed draft

@foreach ($source->parsed_payload as $field => $value)
{{ str_replace('_', ' ', $field) }}
@if (is_array($value)) {{ collect($value)->contains(fn ($item) => is_array($item)) ? json_encode($value) : implode(', ', $value) }} @else {{ $value }} @endif
@endforeach
@endif
@csrf Parse source
@if ($source->parse_status === 'parsed')
@csrf Approve draft
@endif
@empty

No raw import sources have been uploaded yet.

@endforelse

Saved imported-history records

@forelse ($profile->externalImports as $import)

{{ $import->platform }} {{ $import->external_id ? '#'.$import->external_id : '' }}

{{ \App\Models\ExternalProfileImport::VERIFICATION_STATUSES[$import->verification_status] ?? $import->verification_status }} {{ \App\Models\ExternalProfileImport::VISIBILITIES[$import->visibility] ?? $import->visibility }}

Rating {{ $import->rating ?? 'n/a' }} | Reviews {{ $import->review_count ?? 'n/a' }} | Completed {{ $import->completed_jobs ?? 'n/a' }}

@if ($import->operational_metrics)

Clients {{ $import->operational_metrics['client_count'] ?? 'n/a' }} | On-time {{ $import->operational_metrics['on_time_rate'] ?? 'n/a' }}% | Backout {{ $import->operational_metrics['backout_rate'] ?? 'n/a' }}%

@endif @if ($import->background_check_status || $import->drug_test_status)
@if ($import->background_check_status)

Background check

{{ ucfirst($import->background_check_status) }}{{ $import->background_check_date ? ' on '.$import->background_check_date : '' }}

@endif @if ($import->drug_test_status)

Drug test

{{ ucfirst($import->drug_test_status) }}{{ $import->drug_test_date ? ' on '.$import->drug_test_date : '' }}

@endif
@endif @if ($import->work_categories)
@foreach ($import->work_categories as $category) {{ $category }} @endforeach
@endif @if ($import->workHistoryEntries->isNotEmpty())

External work history

{{ $import->workHistoryEntries->count() }} private imported job rows. Customer names and work-order links stay private here.

Private proof
@foreach ($import->workHistoryEntries->sortByDesc('performed_on')->take(8) as $entry) @endforeach
Date Service Customer Type Location Rating Status
{{ $entry->performed_on?->format('M j, Y') ?? 'n/a' }} {{ \Illuminate\Support\Str::limit($entry->service_title, 72) }} {{ $entry->customer_name ?? 'n/a' }} {{ $entry->work_type ?? 'n/a' }} {{ $entry->location ?? 'n/a' }} {{ $entry->rating ?? 'n/a' }} {{ $entry->status ?? 'n/a' }}
@endif
@empty

No imported-history records yet.

@endforelse
@endif