[{"data":1,"prerenderedAt":2220},["ShallowReactive",2],{"navigation_docs":3,"-recipes-crm-person-feed":111,"-recipes-crm-person-feed-surround":2215},[4,20,30,66,82,89,96],{"title":5,"icon":6,"path":7,"stem":8,"children":9,"page":6},"Getting Started",false,"\u002Fgetting-started","1.getting-started",[10,15],{"title":11,"path":12,"stem":13,"icon":14},"Installation","\u002Fgetting-started\u002Finstallation","1.getting-started\u002F1.installation","i-lucide-download",{"title":16,"path":17,"stem":18,"icon":19},"Quick start","\u002Fgetting-started\u002Fquick-start","1.getting-started\u002F2.quick-start","i-lucide-rocket",{"title":21,"icon":22,"path":23,"stem":24,"children":25,"page":6},"Concepts","i-lucide-compass","\u002Fconcepts","2.concepts",[26],{"title":27,"path":28,"stem":29,"icon":22},"How it works","\u002Fconcepts\u002Fhow-it-works","2.concepts\u002F1.how-it-works",{"title":31,"icon":32,"path":33,"stem":34,"children":35,"page":6},"Essentials","i-lucide-book-open","\u002Fessentials","3.essentials",[36,41,46,51,56,61],{"title":37,"path":38,"stem":39,"icon":40},"Sources","\u002Fessentials\u002Fsources","3.essentials\u002F1.sources","i-lucide-layers",{"title":42,"path":43,"stem":44,"icon":45},"Filament UI","\u002Fessentials\u002Ffilament-ui","3.essentials\u002F2.filament-ui","i-lucide-layout-dashboard",{"title":47,"path":48,"stem":49,"icon":50},"Refining the timeline","\u002Fessentials\u002Frefining-the-timeline","3.essentials\u002F3.refining-the-timeline","i-lucide-filter",{"title":52,"path":53,"stem":54,"icon":55},"Customization","\u002Fessentials\u002Fcustomization","3.essentials\u002F4.customization","i-lucide-paintbrush",{"title":57,"path":58,"stem":59,"icon":60},"Caching","\u002Fessentials\u002Fcaching","3.essentials\u002F5.caching","i-lucide-database",{"title":62,"path":63,"stem":64,"icon":65},"Configuration","\u002Fessentials\u002Fconfiguration","3.essentials\u002F6.configuration","i-lucide-settings",{"title":67,"icon":68,"path":69,"stem":70,"children":71,"page":6},"Recipes","i-lucide-chef-hat","\u002Frecipes","4.recipes",[72,77],{"title":73,"path":74,"stem":75,"icon":76},"CRM person feed","\u002Frecipes\u002Fcrm-person-feed","4.recipes\u002F1.crm-person-feed","i-lucide-users",{"title":78,"path":79,"stem":80,"icon":81},"Audit log for admins","\u002Frecipes\u002Faudit-log-for-admins","4.recipes\u002F2.audit-log-for-admins","i-lucide-shield",{"title":83,"path":84,"stem":85,"children":86,"icon":88},"Testing","\u002Ftesting","5.testing\u002F1.index",[87],{"title":83,"path":84,"stem":85,"icon":88},"i-lucide-flask-conical",{"title":90,"path":91,"stem":92,"children":93,"icon":95},"Troubleshooting","\u002Ftroubleshooting","6.troubleshooting\u002F1.index",[94],{"title":90,"path":91,"stem":92,"icon":95},"i-lucide-life-buoy",{"title":97,"path":98,"stem":99,"children":100,"page":6},"Community","\u002Fcommunity","7.community",[101,106],{"title":102,"path":103,"stem":104,"icon":105},"Contributing","\u002Fcommunity\u002Fcontributing","7.community\u002F1.contributing","i-lucide-heart-handshake",{"title":107,"path":108,"stem":109,"icon":110},"License","\u002Fcommunity\u002Flicense","7.community\u002F2.license","i-lucide-scale",{"id":112,"title":73,"body":113,"description":2206,"extension":2207,"links":2208,"meta":2209,"navigation":2210,"path":74,"seo":2211,"stem":75,"__hash__":2214},"docs\u002F4.recipes\u002F1.crm-person-feed.md",{"type":114,"value":115,"toc":2197},"minimark",[116,125,130,137,203,213,1268,1284,1290,1296,1477,1483,1688,1694,1849,1859,1863,1866,1872,2039,2042,2175,2179,2193],[117,118,119,120,124],"p",{},"You're building a CRM. Each ",[121,122,123],"code",{},"Person"," profile shows a unified feed: profile changes (own spatie log) plus activity on attached emails, notes, and tasks (related spatie logs), plus canonical \"email sent\" \u002F \"task completed\" events derived from timestamp columns. A custom renderer makes the email-sent entries scannable.",[126,127,129],"h2",{"id":128},"setup","Setup",[117,131,132,133,136],{},"Assuming you've completed ",[134,135,12],"a",{"href":12},", this recipe expects:",[138,139,140,162,178,187],"ul",{},[141,142,143,144,146,147,150,151,154,155,154,158,161],"li",{},"A ",[121,145,123],{}," model with ",[121,148,149],{},"HasMany"," relations: ",[121,152,153],{},"emails",", ",[121,156,157],{},"notes",[121,159,160],{},"tasks",".",[141,163,164,165,154,168,154,171,174,175,161],{},"All three related models (",[121,166,167],{},"Email",[121,169,170],{},"Note",[121,172,173],{},"Task",") use ",[121,176,177],{},"Spatie\\Activitylog\\Traits\\LogsActivity",[141,179,180,182,183,186],{},[121,181,123],{}," itself uses ",[121,184,185],{},"LogsActivity"," so profile changes show up.",[141,188,189,190,192,193,196,197,199,200,161],{},"The ",[121,191,167],{}," model has a ",[121,194,195],{},"sent_at"," timestamp column; ",[121,198,173],{}," has ",[121,201,202],{},"completed_at",[126,204,206,207,209,210],{"id":205},"step-1-person-model-with-composed-timeline","Step 1 — ",[121,208,123],{}," model with composed ",[121,211,212],{},"timeline()",[214,215,220],"pre",{"className":216,"code":217,"language":218,"meta":219,"style":219},"language-php shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","namespace App\\Models;\n\nuse Illuminate\\Database\\Eloquent\\Model;\nuse Illuminate\\Database\\Eloquent\\Relations\\HasMany;\nuse Relaticle\\ActivityLog\\Concerns\\InteractsWithTimeline;\nuse Relaticle\\ActivityLog\\Contracts\\HasTimeline;\nuse Relaticle\\ActivityLog\\Timeline\\Sources\\RelatedModelSource;\nuse Relaticle\\ActivityLog\\Timeline\\TimelineBuilder;\nuse Spatie\\Activitylog\\LogOptions;\nuse Spatie\\Activitylog\\Traits\\LogsActivity;\n\nfinal class Person extends Model implements HasTimeline\n{\n    use InteractsWithTimeline;\n    use LogsActivity;\n\n    protected $fillable = ['name', 'email', 'company'];\n\n    public function getActivitylogOptions(): LogOptions\n    {\n        return LogOptions::defaults()->logFillable();\n    }\n\n    public function emails(): HasMany\n    {\n        return $this->hasMany(Email::class);\n    }\n\n    public function notes(): HasMany\n    {\n        return $this->hasMany(Note::class);\n    }\n\n    public function tasks(): HasMany\n    {\n        return $this->hasMany(Task::class);\n    }\n\n    public function timeline(): TimelineBuilder\n    {\n        return TimelineBuilder::make($this)\n            ->fromActivityLog()\n            ->fromActivityLogOf(['emails', 'notes', 'tasks'])\n            ->fromRelation('emails', function (RelatedModelSource $source): void {\n                $source\n                    ->event(column: 'sent_at', event: 'email_sent', icon: 'heroicon-o-paper-airplane', color: 'primary')\n                    ->title(fn (Email $email): string => $email->subject ?? 'Email')\n                    ->description(fn (Email $email): ?string => \"to {$email->recipient}\")\n                    ->causer(fn (Email $email) => $email->sender);\n            })\n            ->fromRelation('tasks', function (RelatedModelSource $source): void {\n                $source\n                    ->event(column: 'completed_at', event: 'task_completed', icon: 'heroicon-o-check-circle', color: 'success')\n                    ->title(fn (Task $task): string => $task->title);\n            });\n    }\n}\n","php","",[121,221,222,245,252,279,305,330,353,380,402,422,444,449,474,480,491,501,506,556,561,580,586,611,617,622,637,642,666,671,676,690,695,714,719,724,738,743,762,767,772,787,792,808,820,856,895,904,972,1022,1073,1109,1115,1148,1155,1215,1251,1257,1262],{"__ignoreMap":219},[223,224,227,231,235,239,242],"span",{"class":225,"line":226},"line",1,[223,228,230],{"class":229},"sbssI","namespace",[223,232,234],{"class":233},"sBMFI"," App",[223,236,238],{"class":237},"sMK4o","\\",[223,240,241],{"class":233},"Models",[223,243,244],{"class":237},";\n",[223,246,248],{"class":225,"line":247},2,[223,249,251],{"emptyLinePlaceholder":250},true,"\n",[223,253,255,258,262,264,267,269,272,274,277],{"class":225,"line":254},3,[223,256,257],{"class":229},"use",[223,259,261],{"class":260},"sTEyZ"," Illuminate",[223,263,238],{"class":237},[223,265,266],{"class":260},"Database",[223,268,238],{"class":237},[223,270,271],{"class":260},"Eloquent",[223,273,238],{"class":237},[223,275,276],{"class":260},"Model",[223,278,244],{"class":237},[223,280,282,284,286,288,290,292,294,296,299,301,303],{"class":225,"line":281},4,[223,283,257],{"class":229},[223,285,261],{"class":260},[223,287,238],{"class":237},[223,289,266],{"class":260},[223,291,238],{"class":237},[223,293,271],{"class":260},[223,295,238],{"class":237},[223,297,298],{"class":260},"Relations",[223,300,238],{"class":237},[223,302,149],{"class":260},[223,304,244],{"class":237},[223,306,308,310,313,315,318,320,323,325,328],{"class":225,"line":307},5,[223,309,257],{"class":229},[223,311,312],{"class":260}," Relaticle",[223,314,238],{"class":237},[223,316,317],{"class":260},"ActivityLog",[223,319,238],{"class":237},[223,321,322],{"class":260},"Concerns",[223,324,238],{"class":237},[223,326,327],{"class":260},"InteractsWithTimeline",[223,329,244],{"class":237},[223,331,333,335,337,339,341,343,346,348,351],{"class":225,"line":332},6,[223,334,257],{"class":229},[223,336,312],{"class":260},[223,338,238],{"class":237},[223,340,317],{"class":260},[223,342,238],{"class":237},[223,344,345],{"class":260},"Contracts",[223,347,238],{"class":237},[223,349,350],{"class":260},"HasTimeline",[223,352,244],{"class":237},[223,354,356,358,360,362,364,366,369,371,373,375,378],{"class":225,"line":355},7,[223,357,257],{"class":229},[223,359,312],{"class":260},[223,361,238],{"class":237},[223,363,317],{"class":260},[223,365,238],{"class":237},[223,367,368],{"class":260},"Timeline",[223,370,238],{"class":237},[223,372,37],{"class":260},[223,374,238],{"class":237},[223,376,377],{"class":260},"RelatedModelSource",[223,379,244],{"class":237},[223,381,383,385,387,389,391,393,395,397,400],{"class":225,"line":382},8,[223,384,257],{"class":229},[223,386,312],{"class":260},[223,388,238],{"class":237},[223,390,317],{"class":260},[223,392,238],{"class":237},[223,394,368],{"class":260},[223,396,238],{"class":237},[223,398,399],{"class":260},"TimelineBuilder",[223,401,244],{"class":237},[223,403,405,407,410,412,415,417,420],{"class":225,"line":404},9,[223,406,257],{"class":229},[223,408,409],{"class":260}," Spatie",[223,411,238],{"class":237},[223,413,414],{"class":260},"Activitylog",[223,416,238],{"class":237},[223,418,419],{"class":260},"LogOptions",[223,421,244],{"class":237},[223,423,425,427,429,431,433,435,438,440,442],{"class":225,"line":424},10,[223,426,257],{"class":229},[223,428,409],{"class":260},[223,430,238],{"class":237},[223,432,414],{"class":260},[223,434,238],{"class":237},[223,436,437],{"class":260},"Traits",[223,439,238],{"class":237},[223,441,185],{"class":260},[223,443,244],{"class":237},[223,445,447],{"class":225,"line":446},11,[223,448,251],{"emptyLinePlaceholder":250},[223,450,452,456,459,462,465,468,471],{"class":225,"line":451},12,[223,453,455],{"class":454},"spNyl","final",[223,457,458],{"class":454}," class",[223,460,461],{"class":233}," Person",[223,463,464],{"class":454}," extends",[223,466,467],{"class":233}," Model",[223,469,470],{"class":454}," implements",[223,472,473],{"class":233}," HasTimeline\n",[223,475,477],{"class":225,"line":476},13,[223,478,479],{"class":237},"{\n",[223,481,483,486,489],{"class":225,"line":482},14,[223,484,485],{"class":229},"    use",[223,487,488],{"class":260}," InteractsWithTimeline",[223,490,244],{"class":237},[223,492,494,496,499],{"class":225,"line":493},15,[223,495,485],{"class":229},[223,497,498],{"class":260}," LogsActivity",[223,500,244],{"class":237},[223,502,504],{"class":225,"line":503},16,[223,505,251],{"emptyLinePlaceholder":250},[223,507,509,512,515,518,521,524,527,531,533,536,539,542,544,546,548,551,553],{"class":225,"line":508},17,[223,510,511],{"class":454},"    protected",[223,513,514],{"class":237}," $",[223,516,517],{"class":260},"fillable ",[223,519,520],{"class":237},"=",[223,522,523],{"class":237}," [",[223,525,526],{"class":237},"'",[223,528,530],{"class":529},"sfazB","name",[223,532,526],{"class":237},[223,534,535],{"class":237},",",[223,537,538],{"class":237}," '",[223,540,541],{"class":529},"email",[223,543,526],{"class":237},[223,545,535],{"class":237},[223,547,538],{"class":237},[223,549,550],{"class":529},"company",[223,552,526],{"class":237},[223,554,555],{"class":237},"];\n",[223,557,559],{"class":225,"line":558},18,[223,560,251],{"emptyLinePlaceholder":250},[223,562,564,567,570,574,577],{"class":225,"line":563},19,[223,565,566],{"class":454},"    public",[223,568,569],{"class":454}," function",[223,571,573],{"class":572},"s2Zo4"," getActivitylogOptions",[223,575,576],{"class":237},"():",[223,578,579],{"class":233}," LogOptions\n",[223,581,583],{"class":225,"line":582},20,[223,584,585],{"class":237},"    {\n",[223,587,589,593,596,599,602,605,608],{"class":225,"line":588},21,[223,590,592],{"class":591},"s7zQu","        return",[223,594,595],{"class":233}," LogOptions",[223,597,598],{"class":237},"::",[223,600,601],{"class":572},"defaults",[223,603,604],{"class":237},"()->",[223,606,607],{"class":572},"logFillable",[223,609,610],{"class":237},"();\n",[223,612,614],{"class":225,"line":613},22,[223,615,616],{"class":237},"    }\n",[223,618,620],{"class":225,"line":619},23,[223,621,251],{"emptyLinePlaceholder":250},[223,623,625,627,629,632,634],{"class":225,"line":624},24,[223,626,566],{"class":454},[223,628,569],{"class":454},[223,630,631],{"class":572}," emails",[223,633,576],{"class":237},[223,635,636],{"class":233}," HasMany\n",[223,638,640],{"class":225,"line":639},25,[223,641,585],{"class":237},[223,643,645,647,650,653,656,658,660,663],{"class":225,"line":644},26,[223,646,592],{"class":591},[223,648,649],{"class":237}," $this->",[223,651,652],{"class":572},"hasMany",[223,654,655],{"class":237},"(",[223,657,167],{"class":233},[223,659,598],{"class":237},[223,661,662],{"class":229},"class",[223,664,665],{"class":237},");\n",[223,667,669],{"class":225,"line":668},27,[223,670,616],{"class":237},[223,672,674],{"class":225,"line":673},28,[223,675,251],{"emptyLinePlaceholder":250},[223,677,679,681,683,686,688],{"class":225,"line":678},29,[223,680,566],{"class":454},[223,682,569],{"class":454},[223,684,685],{"class":572}," notes",[223,687,576],{"class":237},[223,689,636],{"class":233},[223,691,693],{"class":225,"line":692},30,[223,694,585],{"class":237},[223,696,698,700,702,704,706,708,710,712],{"class":225,"line":697},31,[223,699,592],{"class":591},[223,701,649],{"class":237},[223,703,652],{"class":572},[223,705,655],{"class":237},[223,707,170],{"class":233},[223,709,598],{"class":237},[223,711,662],{"class":229},[223,713,665],{"class":237},[223,715,717],{"class":225,"line":716},32,[223,718,616],{"class":237},[223,720,722],{"class":225,"line":721},33,[223,723,251],{"emptyLinePlaceholder":250},[223,725,727,729,731,734,736],{"class":225,"line":726},34,[223,728,566],{"class":454},[223,730,569],{"class":454},[223,732,733],{"class":572}," tasks",[223,735,576],{"class":237},[223,737,636],{"class":233},[223,739,741],{"class":225,"line":740},35,[223,742,585],{"class":237},[223,744,746,748,750,752,754,756,758,760],{"class":225,"line":745},36,[223,747,592],{"class":591},[223,749,649],{"class":237},[223,751,652],{"class":572},[223,753,655],{"class":237},[223,755,173],{"class":233},[223,757,598],{"class":237},[223,759,662],{"class":229},[223,761,665],{"class":237},[223,763,765],{"class":225,"line":764},37,[223,766,616],{"class":237},[223,768,770],{"class":225,"line":769},38,[223,771,251],{"emptyLinePlaceholder":250},[223,773,775,777,779,782,784],{"class":225,"line":774},39,[223,776,566],{"class":454},[223,778,569],{"class":454},[223,780,781],{"class":572}," timeline",[223,783,576],{"class":237},[223,785,786],{"class":233}," TimelineBuilder\n",[223,788,790],{"class":225,"line":789},40,[223,791,585],{"class":237},[223,793,795,797,800,802,805],{"class":225,"line":794},41,[223,796,592],{"class":591},[223,798,799],{"class":233}," TimelineBuilder",[223,801,598],{"class":237},[223,803,804],{"class":572},"make",[223,806,807],{"class":237},"($this)\n",[223,809,811,814,817],{"class":225,"line":810},42,[223,812,813],{"class":237},"            ->",[223,815,816],{"class":572},"fromActivityLog",[223,818,819],{"class":237},"()\n",[223,821,823,825,828,831,833,835,837,839,841,843,845,847,849,851,853],{"class":225,"line":822},43,[223,824,813],{"class":237},[223,826,827],{"class":572},"fromActivityLogOf",[223,829,830],{"class":237},"([",[223,832,526],{"class":237},[223,834,153],{"class":529},[223,836,526],{"class":237},[223,838,535],{"class":237},[223,840,538],{"class":237},[223,842,157],{"class":529},[223,844,526],{"class":237},[223,846,535],{"class":237},[223,848,538],{"class":237},[223,850,160],{"class":529},[223,852,526],{"class":237},[223,854,855],{"class":237},"])\n",[223,857,859,861,864,866,868,870,872,874,876,879,881,883,886,889,892],{"class":225,"line":858},44,[223,860,813],{"class":237},[223,862,863],{"class":572},"fromRelation",[223,865,655],{"class":237},[223,867,526],{"class":237},[223,869,153],{"class":529},[223,871,526],{"class":237},[223,873,535],{"class":237},[223,875,569],{"class":454},[223,877,878],{"class":237}," (",[223,880,377],{"class":233},[223,882,514],{"class":237},[223,884,885],{"class":260},"source",[223,887,888],{"class":237},"):",[223,890,891],{"class":229}," void",[223,893,894],{"class":237}," {\n",[223,896,898,901],{"class":225,"line":897},45,[223,899,900],{"class":237},"                $",[223,902,903],{"class":260},"source\n",[223,905,907,910,913,915,918,921,923,925,927,929,932,934,936,939,941,943,946,948,950,953,955,957,960,962,964,967,969],{"class":225,"line":906},46,[223,908,909],{"class":237},"                    ->",[223,911,912],{"class":572},"event",[223,914,655],{"class":237},[223,916,917],{"class":233},"column",[223,919,920],{"class":237},":",[223,922,538],{"class":237},[223,924,195],{"class":529},[223,926,526],{"class":237},[223,928,535],{"class":237},[223,930,931],{"class":233}," event",[223,933,920],{"class":237},[223,935,538],{"class":237},[223,937,938],{"class":529},"email_sent",[223,940,526],{"class":237},[223,942,535],{"class":237},[223,944,945],{"class":233}," icon",[223,947,920],{"class":237},[223,949,538],{"class":237},[223,951,952],{"class":529},"heroicon-o-paper-airplane",[223,954,526],{"class":237},[223,956,535],{"class":237},[223,958,959],{"class":233}," color",[223,961,920],{"class":237},[223,963,538],{"class":237},[223,965,966],{"class":529},"primary",[223,968,526],{"class":237},[223,970,971],{"class":237},")\n",[223,973,975,977,980,982,985,987,989,991,993,995,998,1001,1003,1005,1008,1011,1014,1016,1018,1020],{"class":225,"line":974},47,[223,976,909],{"class":237},[223,978,979],{"class":572},"title",[223,981,655],{"class":237},[223,983,984],{"class":454},"fn",[223,986,878],{"class":237},[223,988,167],{"class":233},[223,990,514],{"class":237},[223,992,541],{"class":260},[223,994,888],{"class":237},[223,996,997],{"class":229}," string",[223,999,1000],{"class":237}," =>",[223,1002,514],{"class":237},[223,1004,541],{"class":260},[223,1006,1007],{"class":237},"->",[223,1009,1010],{"class":260},"subject ",[223,1012,1013],{"class":237},"??",[223,1015,538],{"class":237},[223,1017,167],{"class":529},[223,1019,526],{"class":237},[223,1021,971],{"class":237},[223,1023,1025,1027,1030,1032,1034,1036,1038,1040,1042,1044,1047,1050,1052,1055,1058,1061,1063,1065,1068,1071],{"class":225,"line":1024},48,[223,1026,909],{"class":237},[223,1028,1029],{"class":572},"description",[223,1031,655],{"class":237},[223,1033,984],{"class":454},[223,1035,878],{"class":237},[223,1037,167],{"class":233},[223,1039,514],{"class":237},[223,1041,541],{"class":260},[223,1043,888],{"class":237},[223,1045,1046],{"class":237}," ?",[223,1048,1049],{"class":229},"string",[223,1051,1000],{"class":237},[223,1053,1054],{"class":237}," \"",[223,1056,1057],{"class":529},"to ",[223,1059,1060],{"class":237},"{$",[223,1062,541],{"class":260},[223,1064,1007],{"class":237},[223,1066,1067],{"class":260},"recipient",[223,1069,1070],{"class":237},"}\"",[223,1072,971],{"class":237},[223,1074,1076,1078,1081,1083,1085,1087,1089,1091,1093,1096,1098,1100,1102,1104,1107],{"class":225,"line":1075},49,[223,1077,909],{"class":237},[223,1079,1080],{"class":572},"causer",[223,1082,655],{"class":237},[223,1084,984],{"class":454},[223,1086,878],{"class":237},[223,1088,167],{"class":233},[223,1090,514],{"class":237},[223,1092,541],{"class":260},[223,1094,1095],{"class":237},")",[223,1097,1000],{"class":237},[223,1099,514],{"class":237},[223,1101,541],{"class":260},[223,1103,1007],{"class":237},[223,1105,1106],{"class":260},"sender",[223,1108,665],{"class":237},[223,1110,1112],{"class":225,"line":1111},50,[223,1113,1114],{"class":237},"            })\n",[223,1116,1118,1120,1122,1124,1126,1128,1130,1132,1134,1136,1138,1140,1142,1144,1146],{"class":225,"line":1117},51,[223,1119,813],{"class":237},[223,1121,863],{"class":572},[223,1123,655],{"class":237},[223,1125,526],{"class":237},[223,1127,160],{"class":529},[223,1129,526],{"class":237},[223,1131,535],{"class":237},[223,1133,569],{"class":454},[223,1135,878],{"class":237},[223,1137,377],{"class":233},[223,1139,514],{"class":237},[223,1141,885],{"class":260},[223,1143,888],{"class":237},[223,1145,891],{"class":229},[223,1147,894],{"class":237},[223,1149,1151,1153],{"class":225,"line":1150},52,[223,1152,900],{"class":237},[223,1154,903],{"class":260},[223,1156,1158,1160,1162,1164,1166,1168,1170,1172,1174,1176,1178,1180,1182,1185,1187,1189,1191,1193,1195,1198,1200,1202,1204,1206,1208,1211,1213],{"class":225,"line":1157},53,[223,1159,909],{"class":237},[223,1161,912],{"class":572},[223,1163,655],{"class":237},[223,1165,917],{"class":233},[223,1167,920],{"class":237},[223,1169,538],{"class":237},[223,1171,202],{"class":529},[223,1173,526],{"class":237},[223,1175,535],{"class":237},[223,1177,931],{"class":233},[223,1179,920],{"class":237},[223,1181,538],{"class":237},[223,1183,1184],{"class":529},"task_completed",[223,1186,526],{"class":237},[223,1188,535],{"class":237},[223,1190,945],{"class":233},[223,1192,920],{"class":237},[223,1194,538],{"class":237},[223,1196,1197],{"class":529},"heroicon-o-check-circle",[223,1199,526],{"class":237},[223,1201,535],{"class":237},[223,1203,959],{"class":233},[223,1205,920],{"class":237},[223,1207,538],{"class":237},[223,1209,1210],{"class":529},"success",[223,1212,526],{"class":237},[223,1214,971],{"class":237},[223,1216,1218,1220,1222,1224,1226,1228,1230,1232,1235,1237,1239,1241,1243,1245,1247,1249],{"class":225,"line":1217},54,[223,1219,909],{"class":237},[223,1221,979],{"class":572},[223,1223,655],{"class":237},[223,1225,984],{"class":454},[223,1227,878],{"class":237},[223,1229,173],{"class":233},[223,1231,514],{"class":237},[223,1233,1234],{"class":260},"task",[223,1236,888],{"class":237},[223,1238,997],{"class":229},[223,1240,1000],{"class":237},[223,1242,514],{"class":237},[223,1244,1234],{"class":260},[223,1246,1007],{"class":237},[223,1248,979],{"class":260},[223,1250,665],{"class":237},[223,1252,1254],{"class":225,"line":1253},55,[223,1255,1256],{"class":237},"            });\n",[223,1258,1260],{"class":225,"line":1259},56,[223,1261,616],{"class":237},[223,1263,1265],{"class":225,"line":1264},57,[223,1266,1267],{"class":237},"}\n",[117,1269,1270,1271,1273,1274,1276,1277,1280,1281,1283],{},"Each chained source contributes one \"lane\" to the merged feed. The two spatie sources cover whatever events your ",[121,1272,419],{}," log; the two ",[121,1275,863],{}," calls add canonical timestamp events that aren't in spatie. Dedup happens automatically on ",[121,1278,1279],{},"(class, id, occurredAt)"," — no double-counting if a related model is also spatie-logged. See ",[134,1282,28],{"href":28}," for the merge mechanics.",[126,1285,1287,1288],{"id":1286},"step-2-custom-renderer-for-email_sent","Step 2 — Custom renderer for ",[121,1289,938],{},[117,1291,1292,1293,920],{},"The renderer class implements ",[121,1294,1295],{},"Relaticle\\ActivityLog\\Contracts\\TimelineRenderer",[214,1297,1299],{"className":216,"code":1298,"language":218,"meta":219,"style":219},"namespace App\\Timeline\\Renderers;\n\nuse Illuminate\\Contracts\\View\\View;\nuse Relaticle\\ActivityLog\\Contracts\\TimelineRenderer;\nuse Relaticle\\ActivityLog\\Timeline\\TimelineEntry;\n\nfinal class EmailSentRenderer implements TimelineRenderer\n{\n    public function render(TimelineEntry $entry): View\n    {\n        return view('app.timeline.email-sent', ['entry' => $entry]);\n    }\n}\n",[121,1300,1301,1318,1322,1343,1364,1385,1389,1403,1407,1430,1434,1469,1473],{"__ignoreMap":219},[223,1302,1303,1305,1307,1309,1311,1313,1316],{"class":225,"line":226},[223,1304,230],{"class":229},[223,1306,234],{"class":233},[223,1308,238],{"class":237},[223,1310,368],{"class":233},[223,1312,238],{"class":237},[223,1314,1315],{"class":233},"Renderers",[223,1317,244],{"class":237},[223,1319,1320],{"class":225,"line":247},[223,1321,251],{"emptyLinePlaceholder":250},[223,1323,1324,1326,1328,1330,1332,1334,1337,1339,1341],{"class":225,"line":254},[223,1325,257],{"class":229},[223,1327,261],{"class":260},[223,1329,238],{"class":237},[223,1331,345],{"class":260},[223,1333,238],{"class":237},[223,1335,1336],{"class":260},"View",[223,1338,238],{"class":237},[223,1340,1336],{"class":260},[223,1342,244],{"class":237},[223,1344,1345,1347,1349,1351,1353,1355,1357,1359,1362],{"class":225,"line":281},[223,1346,257],{"class":229},[223,1348,312],{"class":260},[223,1350,238],{"class":237},[223,1352,317],{"class":260},[223,1354,238],{"class":237},[223,1356,345],{"class":260},[223,1358,238],{"class":237},[223,1360,1361],{"class":260},"TimelineRenderer",[223,1363,244],{"class":237},[223,1365,1366,1368,1370,1372,1374,1376,1378,1380,1383],{"class":225,"line":307},[223,1367,257],{"class":229},[223,1369,312],{"class":260},[223,1371,238],{"class":237},[223,1373,317],{"class":260},[223,1375,238],{"class":237},[223,1377,368],{"class":260},[223,1379,238],{"class":237},[223,1381,1382],{"class":260},"TimelineEntry",[223,1384,244],{"class":237},[223,1386,1387],{"class":225,"line":332},[223,1388,251],{"emptyLinePlaceholder":250},[223,1390,1391,1393,1395,1398,1400],{"class":225,"line":355},[223,1392,455],{"class":454},[223,1394,458],{"class":454},[223,1396,1397],{"class":233}," EmailSentRenderer",[223,1399,470],{"class":454},[223,1401,1402],{"class":233}," TimelineRenderer\n",[223,1404,1405],{"class":225,"line":382},[223,1406,479],{"class":237},[223,1408,1409,1411,1413,1416,1418,1420,1422,1425,1427],{"class":225,"line":404},[223,1410,566],{"class":454},[223,1412,569],{"class":454},[223,1414,1415],{"class":572}," render",[223,1417,655],{"class":237},[223,1419,1382],{"class":233},[223,1421,514],{"class":237},[223,1423,1424],{"class":260},"entry",[223,1426,888],{"class":237},[223,1428,1429],{"class":233}," View\n",[223,1431,1432],{"class":225,"line":424},[223,1433,585],{"class":237},[223,1435,1436,1438,1441,1443,1445,1448,1450,1452,1454,1456,1458,1460,1462,1464,1466],{"class":225,"line":446},[223,1437,592],{"class":591},[223,1439,1440],{"class":572}," view",[223,1442,655],{"class":237},[223,1444,526],{"class":237},[223,1446,1447],{"class":529},"app.timeline.email-sent",[223,1449,526],{"class":237},[223,1451,535],{"class":237},[223,1453,523],{"class":237},[223,1455,526],{"class":237},[223,1457,1424],{"class":529},[223,1459,526],{"class":237},[223,1461,1000],{"class":237},[223,1463,514],{"class":237},[223,1465,1424],{"class":260},[223,1467,1468],{"class":237},"]);\n",[223,1470,1471],{"class":225,"line":451},[223,1472,616],{"class":237},[223,1474,1475],{"class":225,"line":476},[223,1476,1267],{"class":237},[117,1478,1479,1480,920],{},"The Blade view at ",[121,1481,1482],{},"resources\u002Fviews\u002Fapp\u002Ftimeline\u002Femail-sent.blade.php",[214,1484,1488],{"className":1485,"code":1486,"language":1487,"meta":219,"style":219},"language-blade shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","\u003Cdiv class=\"flex items-start gap-3\">\n    \u003Cx-filament::icon icon=\"heroicon-o-paper-airplane\" class=\"size-5 text-primary-500\"\u002F>\n    \u003Cdiv class=\"min-w-0 flex-1\">\n        \u003Cdiv class=\"font-medium\">{{ $entry->title }}\u003C\u002Fdiv>\n        \u003Cdiv class=\"text-sm text-gray-500\">{{ $entry->description }} · {{ $entry->occurredAt->diffForHumans() }}\u003C\u002Fdiv>\n    \u003C\u002Fdiv>\n\u003C\u002Fdiv>\n","blade",[121,1489,1490,1514,1546,1565,1608,1671,1680],{"__ignoreMap":219},[223,1491,1492,1495,1499,1501,1503,1506,1509,1511],{"class":225,"line":226},[223,1493,1494],{"class":237},"\u003C",[223,1496,1498],{"class":1497},"swJcz","div",[223,1500,458],{"class":454},[223,1502,520],{"class":237},[223,1504,1505],{"class":237},"\"",[223,1507,1508],{"class":529},"flex items-start gap-3",[223,1510,1505],{"class":237},[223,1512,1513],{"class":237},">\n",[223,1515,1516,1519,1522,1524,1526,1528,1530,1532,1534,1536,1538,1541,1543],{"class":225,"line":247},[223,1517,1518],{"class":237},"    \u003C",[223,1520,1521],{"class":1497},"x-filament::icon",[223,1523,945],{"class":454},[223,1525,520],{"class":237},[223,1527,1505],{"class":237},[223,1529,952],{"class":529},[223,1531,1505],{"class":237},[223,1533,458],{"class":454},[223,1535,520],{"class":237},[223,1537,1505],{"class":237},[223,1539,1540],{"class":529},"size-5 text-primary-500",[223,1542,1505],{"class":237},[223,1544,1545],{"class":237},"\u002F>\n",[223,1547,1548,1550,1552,1554,1556,1558,1561,1563],{"class":225,"line":254},[223,1549,1518],{"class":237},[223,1551,1498],{"class":1497},[223,1553,458],{"class":454},[223,1555,520],{"class":237},[223,1557,1505],{"class":237},[223,1559,1560],{"class":529},"min-w-0 flex-1",[223,1562,1505],{"class":237},[223,1564,1513],{"class":237},[223,1566,1567,1570,1572,1574,1576,1578,1581,1583,1586,1589,1591,1593,1595,1598,1601,1604,1606],{"class":225,"line":281},[223,1568,1569],{"class":237},"        \u003C",[223,1571,1498],{"class":1497},[223,1573,458],{"class":454},[223,1575,520],{"class":237},[223,1577,1505],{"class":237},[223,1579,1580],{"class":529},"font-medium",[223,1582,1505],{"class":237},[223,1584,1585],{"class":237},">",[223,1587,1588],{"class":572},"{{",[223,1590,514],{"class":237},[223,1592,1424],{"class":260},[223,1594,1007],{"class":237},[223,1596,1597],{"class":260},"title ",[223,1599,1600],{"class":572},"}}",[223,1602,1603],{"class":237},"\u003C\u002F",[223,1605,1498],{"class":1497},[223,1607,1513],{"class":237},[223,1609,1610,1612,1614,1616,1618,1620,1623,1625,1627,1629,1631,1633,1635,1638,1640,1643,1645,1647,1649,1651,1654,1656,1659,1662,1665,1667,1669],{"class":225,"line":307},[223,1611,1569],{"class":237},[223,1613,1498],{"class":1497},[223,1615,458],{"class":454},[223,1617,520],{"class":237},[223,1619,1505],{"class":237},[223,1621,1622],{"class":529},"text-sm text-gray-500",[223,1624,1505],{"class":237},[223,1626,1585],{"class":237},[223,1628,1588],{"class":572},[223,1630,514],{"class":237},[223,1632,1424],{"class":260},[223,1634,1007],{"class":237},[223,1636,1637],{"class":260},"description ",[223,1639,1600],{"class":572},[223,1641,1642],{"class":260}," · ",[223,1644,1588],{"class":572},[223,1646,514],{"class":237},[223,1648,1424],{"class":260},[223,1650,1007],{"class":237},[223,1652,1653],{"class":260},"occurredAt",[223,1655,1007],{"class":237},[223,1657,1658],{"class":572},"diffForHumans",[223,1660,1661],{"class":237},"()",[223,1663,1664],{"class":572}," }}",[223,1666,1603],{"class":237},[223,1668,1498],{"class":1497},[223,1670,1513],{"class":237},[223,1672,1673,1676,1678],{"class":225,"line":332},[223,1674,1675],{"class":237},"    \u003C\u002F",[223,1677,1498],{"class":1497},[223,1679,1513],{"class":237},[223,1681,1682,1684,1686],{"class":225,"line":355},[223,1683,1603],{"class":237},[223,1685,1498],{"class":1497},[223,1687,1513],{"class":237},[117,1689,1690,1691,920],{},"Register the renderer via the panel plugin in your ",[121,1692,1693],{},"AppPanelProvider",[214,1695,1697],{"className":216,"code":1696,"language":218,"meta":219,"style":219},"use App\\Timeline\\Renderers\\EmailSentRenderer;\nuse Relaticle\\ActivityLog\\Filament\\ActivityLogPlugin;\n\npublic function panel(Panel $panel): Panel\n{\n    return $panel\n        ->plugin(ActivityLogPlugin::make()->renderers([\n            'email_sent' => EmailSentRenderer::class,\n        ]))\n        \u002F\u002F ...\n    ;\n}\n",[121,1698,1699,1720,1742,1746,1771,1775,1785,1809,1829,1834,1840,1845],{"__ignoreMap":219},[223,1700,1701,1703,1705,1707,1709,1711,1713,1715,1718],{"class":225,"line":226},[223,1702,257],{"class":229},[223,1704,234],{"class":260},[223,1706,238],{"class":237},[223,1708,368],{"class":260},[223,1710,238],{"class":237},[223,1712,1315],{"class":260},[223,1714,238],{"class":237},[223,1716,1717],{"class":260},"EmailSentRenderer",[223,1719,244],{"class":237},[223,1721,1722,1724,1726,1728,1730,1732,1735,1737,1740],{"class":225,"line":247},[223,1723,257],{"class":229},[223,1725,312],{"class":260},[223,1727,238],{"class":237},[223,1729,317],{"class":260},[223,1731,238],{"class":237},[223,1733,1734],{"class":260},"Filament",[223,1736,238],{"class":237},[223,1738,1739],{"class":260},"ActivityLogPlugin",[223,1741,244],{"class":237},[223,1743,1744],{"class":225,"line":254},[223,1745,251],{"emptyLinePlaceholder":250},[223,1747,1748,1751,1753,1756,1758,1761,1763,1766,1768],{"class":225,"line":281},[223,1749,1750],{"class":454},"public",[223,1752,569],{"class":454},[223,1754,1755],{"class":572}," panel",[223,1757,655],{"class":237},[223,1759,1760],{"class":233},"Panel",[223,1762,514],{"class":237},[223,1764,1765],{"class":260},"panel",[223,1767,888],{"class":237},[223,1769,1770],{"class":233}," Panel\n",[223,1772,1773],{"class":225,"line":307},[223,1774,479],{"class":237},[223,1776,1777,1780,1782],{"class":225,"line":332},[223,1778,1779],{"class":591},"    return",[223,1781,514],{"class":237},[223,1783,1784],{"class":260},"panel\n",[223,1786,1787,1790,1793,1795,1797,1799,1801,1803,1806],{"class":225,"line":355},[223,1788,1789],{"class":237},"        ->",[223,1791,1792],{"class":572},"plugin",[223,1794,655],{"class":237},[223,1796,1739],{"class":233},[223,1798,598],{"class":237},[223,1800,804],{"class":572},[223,1802,604],{"class":237},[223,1804,1805],{"class":572},"renderers",[223,1807,1808],{"class":237},"([\n",[223,1810,1811,1814,1816,1818,1820,1822,1824,1826],{"class":225,"line":382},[223,1812,1813],{"class":237},"            '",[223,1815,938],{"class":529},[223,1817,526],{"class":237},[223,1819,1000],{"class":237},[223,1821,1397],{"class":233},[223,1823,598],{"class":237},[223,1825,662],{"class":229},[223,1827,1828],{"class":237},",\n",[223,1830,1831],{"class":225,"line":404},[223,1832,1833],{"class":237},"        ]))\n",[223,1835,1836],{"class":225,"line":424},[223,1837,1839],{"class":1838},"sHwdD","        \u002F\u002F ...\n",[223,1841,1842],{"class":225,"line":446},[223,1843,1844],{"class":237},"    ;\n",[223,1846,1847],{"class":225,"line":451},[223,1848,1267],{"class":237},[117,1850,1851,1852,1854,1855,1858],{},"The registry resolves event-keyed bindings before type-keyed ones, so only ",[121,1853,938],{}," entries get this renderer — everything else falls through to the defaults. See ",[134,1856,53],{"href":1857},"\u002Fessentials\u002Fcustomization#renderer-resolution-order"," for the full lookup order.",[126,1860,1862],{"id":1861},"step-3-wire-the-filament-ui","Step 3 — Wire the Filament UI",[117,1864,1865],{},"Two surfaces — the full feed on the view page, and a slide-over from the table.",[117,1867,1868,1869,1871],{},"On the Person view page, drop the ",[121,1870,317],{}," infolist component:",[214,1873,1875],{"className":216,"code":1874,"language":218,"meta":219,"style":219},"use Relaticle\\ActivityLog\\Filament\\Infolists\\Components\\ActivityLog;\n\npublic function infolist(Schema $schema): Schema\n{\n    return $schema->components([\n        \u002F\u002F ... your existing entries\n        ActivityLog::make('feed')\n            ->heading('Activity')\n            ->groupByDate()\n            ->perPage(20)\n            ->columnSpanFull(),\n    ]);\n}\n",[121,1876,1877,1907,1911,1935,1939,1954,1959,1979,1997,2006,2020,2030,2035],{"__ignoreMap":219},[223,1878,1879,1881,1883,1885,1887,1889,1891,1893,1896,1898,1901,1903,1905],{"class":225,"line":226},[223,1880,257],{"class":229},[223,1882,312],{"class":260},[223,1884,238],{"class":237},[223,1886,317],{"class":260},[223,1888,238],{"class":237},[223,1890,1734],{"class":260},[223,1892,238],{"class":237},[223,1894,1895],{"class":260},"Infolists",[223,1897,238],{"class":237},[223,1899,1900],{"class":260},"Components",[223,1902,238],{"class":237},[223,1904,317],{"class":260},[223,1906,244],{"class":237},[223,1908,1909],{"class":225,"line":247},[223,1910,251],{"emptyLinePlaceholder":250},[223,1912,1913,1915,1917,1920,1922,1925,1927,1930,1932],{"class":225,"line":254},[223,1914,1750],{"class":454},[223,1916,569],{"class":454},[223,1918,1919],{"class":572}," infolist",[223,1921,655],{"class":237},[223,1923,1924],{"class":233},"Schema",[223,1926,514],{"class":237},[223,1928,1929],{"class":260},"schema",[223,1931,888],{"class":237},[223,1933,1934],{"class":233}," Schema\n",[223,1936,1937],{"class":225,"line":281},[223,1938,479],{"class":237},[223,1940,1941,1943,1945,1947,1949,1952],{"class":225,"line":307},[223,1942,1779],{"class":591},[223,1944,514],{"class":237},[223,1946,1929],{"class":260},[223,1948,1007],{"class":237},[223,1950,1951],{"class":572},"components",[223,1953,1808],{"class":237},[223,1955,1956],{"class":225,"line":332},[223,1957,1958],{"class":1838},"        \u002F\u002F ... your existing entries\n",[223,1960,1961,1964,1966,1968,1970,1972,1975,1977],{"class":225,"line":355},[223,1962,1963],{"class":233},"        ActivityLog",[223,1965,598],{"class":237},[223,1967,804],{"class":572},[223,1969,655],{"class":237},[223,1971,526],{"class":237},[223,1973,1974],{"class":529},"feed",[223,1976,526],{"class":237},[223,1978,971],{"class":237},[223,1980,1981,1983,1986,1988,1990,1993,1995],{"class":225,"line":382},[223,1982,813],{"class":237},[223,1984,1985],{"class":572},"heading",[223,1987,655],{"class":237},[223,1989,526],{"class":237},[223,1991,1992],{"class":529},"Activity",[223,1994,526],{"class":237},[223,1996,971],{"class":237},[223,1998,1999,2001,2004],{"class":225,"line":404},[223,2000,813],{"class":237},[223,2002,2003],{"class":572},"groupByDate",[223,2005,819],{"class":237},[223,2007,2008,2010,2013,2015,2018],{"class":225,"line":424},[223,2009,813],{"class":237},[223,2011,2012],{"class":572},"perPage",[223,2014,655],{"class":237},[223,2016,2017],{"class":229},"20",[223,2019,971],{"class":237},[223,2021,2022,2024,2027],{"class":225,"line":446},[223,2023,813],{"class":237},[223,2025,2026],{"class":572},"columnSpanFull",[223,2028,2029],{"class":237},"(),\n",[223,2031,2032],{"class":225,"line":451},[223,2033,2034],{"class":237},"    ]);\n",[223,2036,2037],{"class":225,"line":476},[223,2038,1267],{"class":237},[117,2040,2041],{},"On the Person table, add the bundled action for quick access from the list view:",[214,2043,2045],{"className":216,"code":2044,"language":218,"meta":219,"style":219},"use Filament\\Tables\\Table;\nuse Relaticle\\ActivityLog\\Filament\\Actions\\ActivityLogAction;\n\npublic function table(Table $table): Table\n{\n    return $table\n        ->columns([\u002F* ... *\u002F])\n        ->actions([\n            ActivityLogAction::make(),\n        ]);\n}\n",[121,2046,2047,2066,2092,2096,2119,2123,2132,2146,2155,2166,2171],{"__ignoreMap":219},[223,2048,2049,2051,2054,2056,2059,2061,2064],{"class":225,"line":226},[223,2050,257],{"class":229},[223,2052,2053],{"class":260}," Filament",[223,2055,238],{"class":237},[223,2057,2058],{"class":260},"Tables",[223,2060,238],{"class":237},[223,2062,2063],{"class":260},"Table",[223,2065,244],{"class":237},[223,2067,2068,2070,2072,2074,2076,2078,2080,2082,2085,2087,2090],{"class":225,"line":247},[223,2069,257],{"class":229},[223,2071,312],{"class":260},[223,2073,238],{"class":237},[223,2075,317],{"class":260},[223,2077,238],{"class":237},[223,2079,1734],{"class":260},[223,2081,238],{"class":237},[223,2083,2084],{"class":260},"Actions",[223,2086,238],{"class":237},[223,2088,2089],{"class":260},"ActivityLogAction",[223,2091,244],{"class":237},[223,2093,2094],{"class":225,"line":254},[223,2095,251],{"emptyLinePlaceholder":250},[223,2097,2098,2100,2102,2105,2107,2109,2111,2114,2116],{"class":225,"line":281},[223,2099,1750],{"class":454},[223,2101,569],{"class":454},[223,2103,2104],{"class":572}," table",[223,2106,655],{"class":237},[223,2108,2063],{"class":233},[223,2110,514],{"class":237},[223,2112,2113],{"class":260},"table",[223,2115,888],{"class":237},[223,2117,2118],{"class":233}," Table\n",[223,2120,2121],{"class":225,"line":307},[223,2122,479],{"class":237},[223,2124,2125,2127,2129],{"class":225,"line":332},[223,2126,1779],{"class":591},[223,2128,514],{"class":237},[223,2130,2131],{"class":260},"table\n",[223,2133,2134,2136,2139,2141,2144],{"class":225,"line":355},[223,2135,1789],{"class":237},[223,2137,2138],{"class":572},"columns",[223,2140,830],{"class":237},[223,2142,2143],{"class":1838},"\u002F* ... *\u002F",[223,2145,855],{"class":237},[223,2147,2148,2150,2153],{"class":225,"line":382},[223,2149,1789],{"class":237},[223,2151,2152],{"class":572},"actions",[223,2154,1808],{"class":237},[223,2156,2157,2160,2162,2164],{"class":225,"line":404},[223,2158,2159],{"class":233},"            ActivityLogAction",[223,2161,598],{"class":237},[223,2163,804],{"class":572},[223,2165,2029],{"class":237},[223,2167,2168],{"class":225,"line":424},[223,2169,2170],{"class":237},"        ]);\n",[223,2172,2173],{"class":225,"line":446},[223,2174,1267],{"class":237},[126,2176,2178],{"id":2177},"what-you-get","What you get",[117,2180,2181,2182,2185,2186,2189,2190,161],{},"Profile creates and updates show up as spatie diffs (rendered by the built-in ",[121,2183,2184],{},"ActivityLogRenderer","); attached email, note, and task lifecycle events appear alongside them; \"email sent\" entries get the branded render you wrote in Step 2. Bookmark a filtered view via URL query params (",[121,2187,2188],{},"?type=activity_log&from=2026-01-01",") — see ",[134,2191,2192],{"href":2192},"\u002Fessentials\u002Ffilament-ui#built-in-url-filter-ui",[2194,2195,2196],"style",{},"html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .s7zQu, html code.shiki .s7zQu{--shiki-light:#39ADB5;--shiki-light-font-style:italic;--shiki-default:#89DDFF;--shiki-default-font-style:italic;--shiki-dark:#89DDFF;--shiki-dark-font-style:italic}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}",{"title":219,"searchDepth":247,"depth":247,"links":2198},[2199,2200,2202,2204,2205],{"id":128,"depth":247,"text":129},{"id":205,"depth":247,"text":2201},"Step 1 — Person model with composed timeline()",{"id":1286,"depth":247,"text":2203},"Step 2 — Custom renderer for email_sent",{"id":1861,"depth":247,"text":1862},{"id":2177,"depth":247,"text":2178},"End-to-end person profile timeline — own log, related logs, timestamp events, custom renderer.","md",null,{},{"icon":76},{"description":2212,"ogImage":2213,"title":73},"Complete recipe — Person model with emails, notes, tasks; spatie logs + timestamp events + a custom email renderer; Filament infolist + table action.","\u002Fpreview.png","V19Y8mZ4P7GYhSK8leCLxvjPOEWERXn_Gn61Mzf25_Q",[2216,2218],{"title":62,"path":63,"stem":64,"description":2217,"icon":65,"children":-1},"Full reference for config\u002Factivity-log.php.",{"title":78,"path":79,"stem":80,"description":2219,"icon":81,"children":-1},"Read-only admin audit trail — own log only, role-gated visibility, sensitive-field redaction.",1780504149910]