+ Blog Publisher — Post Published Notification
+
+ [${object.blog_post_id.blog_id.name or 'ITSulu Insights'}] Blog Post Published: ${object.blog_post_id.name or 'New Post'} - ${format_date(object.create_date, date_format='MMMM dd, yyyy')}
+ ${user.email_formatted}
+ True
+
+
+ Today's ${object.blog_post_id.blog_id.name or 'ITSulu Insights'} Blog Post Published
+
+ Date: ${format_date(object.create_date, date_format='MMMM dd, yyyy (EEEE)')}
+ Title: ${object.blog_post_id.name or ''}
+ % set post_url = object.blog_post_id.website_url and ('https://itsulu.com' + object.blog_post_id.website_url) or ''
+ URL: ${post_url}
+
+ Post Details
+
+ - LLM Provider: ${object.llm_provider or ''} / ${object.llm_model or ''}
+ - Tokens Used: ${object.tokens_used or 0}
+ - Generation Time: ${'{:.1f}'.format(object.duration_seconds or 0)}s
+ - Tags:
+ % for tag in object.blog_post_id.tag_ids:
+ ${tag.name}${' | ' if not loop.last else ''}
+ % endfor
+
+ - Publication Status: ${'Published' if object.blog_post_id.is_published else 'Draft'}
+ - Blog: ${object.blog_post_id.blog_id.name or ''}
+
+
+ % set social = object.blog_post_id.itsulu_social_id
+ % if social
+
+ Social Media Posts — Ready to Post
+
+
+
+ % if social.twitter_enabled and (social.twitter_post_a or social.twitter_post_b)
+ 🐦 X (Twitter) Post A:
+
+ ${social.twitter_post_a or ''}
+
+
+ 🐦 X (Twitter) Post B:
+
+ ${social.twitter_post_b or ''}
+
+ % endif
+
+
+
+ % if social.bluesky_enabled and (social.bluesky_post_a or social.bluesky_post_b)
+ 🌐 BlueSky Posts:
+
+ BlueSky A:
+ ${social.bluesky_post_a or ''}
+
+
+ BlueSky B:
+ ${social.bluesky_post_b or ''}
+
+ % endif
+
+
+
+ % if social.mastodon_enabled and social.mastodon_post
+ 🦣 Fediverse/Mastodon Post:
+
+ ${social.mastodon_post or ''}
+
+ % endif
+
+
+
+ % if social.linkedin_enabled and social.linkedin_post
+ 💼 LinkedIn Post:
+
+ ${social.linkedin_post or ''}
+
+ % endif
+
+ % if social.sources_referenced
+
+ News Sources Referenced:
+
+ % for line in (social.sources_referenced or '').splitlines():
+ % if line.strip()
+ % set parts = line.split(' — ', 1)
+ % if parts|length == 2
+ - ${parts[0].strip()}
+ % else
+ - ${line.strip()}
+ % endif
+ % endif
+ % endfor
+
+ % endif
+
+ % endif
+
+
+
+
+ Generated: ${format_date(object.create_date, date_format='MMMM dd, yyyy')} |
+ Service: ITSulu Blog Publisher
+ This email contains all social media post variations ready for posting
+ across X, BlueSky, Fediverse, and LinkedIn.
+
+
+
+ ]]>
+
+
+