Creates rich biographical narrative section with:

  • AI-generated narrative voice (opening, journey, present)

  • Enhanced stats visualization with quality metrics

  • Visual timeline (if milestones provided)

  • Rich bio layout with typography hierarchy

  • Location and social integration

artistStoryUI(
  ns,
  artist_data,
  stats = NULL,
  artist_voice = NULL,
  milestones = NULL
)

Arguments

ns

Namespace function from parent module

artist_data

Single row data.frame with artist profile. Expected columns:

  • artist_name / display_name

  • bio (optional)

  • city, state (optional)

  • created_utc (member since date)

  • url_site, url_ig, url_tiktok, url_youtube, url_reddit, url_twitx (optional)

stats

Named list with counts. Expected (Phase 0 simple):

  • artworks (integer)

  • collections (integer)

  • member_since (POSIXct) OR (Phase 1 enhanced from get_artist_career_stats):

  • totals$artworks, totals$collections, totals$total_views

  • averages$views_per_artwork, averages$likes_per_artwork

  • engagement$engagement_rate

  • quality_score

artist_voice

Optional named list from get_artist_voice() with:

  • opening, journey, approach, signature, present

milestones

Optional data.frame with journey milestones (not yet implemented)

Value

Shiny tag with artist story HTML

Examples

if (FALSE) { # \dontrun{
output$artist_story <- renderUI({
  artistStoryUI(ns, artist_data, stats, artist_voice = voice_data)
})
} # }