Skip to content

FocusIndividual

A focus individual is a person profiled as part of a project — a named executive with scores, location, career history and a set of narrative profile sections.

Projects identify people worth examining: potential hires, succession candidates, or figures shaping a market. Each row holds both structured signals (four numeric scores, geography, experience tags) and long-form profile content stored as JSON. Most of the table is profile material added over successive releases as the individual profile pages grew.

Focus individuals are imported from research, edited by staff, and surfaced across the client app.

  • app/Services/FocusIndividualImporter.php — imports profiles into a project.
  • app/Services/ProjectService.php — merges them into the aggregated report list as pseudo-reports of type: 'focus-individual'.
  • app/Services/SuccessionPipelineService.php and SuccessionPipelineWriter.php — promote individuals into succession pipelines.
  • app/Services/Voice/Tools/GetFocusIndividualsBySignal.php — voice-agent lookup by recruitment signal.
  • app/Filament/Resources/FocusIndividualResource.php and ProjectResource/RelationManagers/FocusIndividualsRelationManager.php — staff editing.
Relation Type Related model
project belongsTo Project
avatar belongsTo Attachment via avatar_id
profile belongsTo Attachment via profile_id

The inverse is Project::focusIndividuals() (hasMany).

Table: focus_individuals.

Column Type Notes
id uuid Primary key
project_id uuid FK to projects, cascade delete
name string Indexed
position string Nullable
company string Nullable
linkedin string Nullable
industry string Nullable
bio text Nullable
avatar_id uuid Nullable FK to attachments, null on delete
profile_id uuid Nullable FK to attachments, null on delete
created_at, updated_at timestamp
Column Type Notes
divergence tinyint Nullable
performance tinyint Nullable
potential tinyint Nullable
agency tinyint Nullable
country string(3) Nullable; country code
city string Nullable
latitude decimal(10,7) Nullable, cast decimal:7
longitude decimal(10,7) Nullable, cast decimal:7

Profile content (all json, all nullable, cast to array)

Section titled “Profile content (all json, all nullable, cast to array)”
Column Notes
recruitment_signals List of signal strings
vertical_experience Sector tags
functional_experience Function tags
career_history Companies with nested roles and dates
education Institutions and degrees
highlights Keyed narrative bullet groups
career_mobility Rating plus narrative
suitability Titled narrative blocks
unique_strengths List of strings
bibliography Sources with optional URLs
proximity Reference person, base and company links
thought_leadership Publications and speaking roles

career_progression is a nullable text column, not JSON.