AI-powered content generation service for social posts, blog articles, emails, and multi-platform content
npm install @bernierllc/ai-content-generatorAI-powered content generation service for social posts, blog articles, emails, and multi-platform content from source material.
``bash`
npm install @bernierllc/ai-content-generator
- Social Media Generation: Create platform-optimized posts for Twitter, LinkedIn, Facebook, Instagram, Mastodon, and Bluesky
- Blog Generation: Generate full blog posts from outlines with SEO optimization
- Email Generation: Create compelling emails with subject lines and preheaders
- Multi-Platform: Generate content for multiple platforms from a single source
- Thread Generation: Create Twitter/LinkedIn threads from long-form content
- Hashtag Generation: Generate relevant hashtags for any content
- Commit-to-Content: Transform git commits into blog posts, social posts, or emails
- Batch Generation: Process multiple generation requests in parallel
- Analytics: Track generation statistics and usage
`typescript
import { AIContentGenerator } from '@bernierllc/ai-content-generator';
import { OpenAIProvider } from '@bernierllc/ai-provider-openai';
const provider = new OpenAIProvider({
providerName: 'openai',
apiKey: process.env.OPENAI_API_KEY!,
});
const generator = new AIContentGenerator({
provider,
enableAnalytics: true,
});
`
`typescript
const twitterPost = await generator.generateSocialPost(
'Excited to announce our new TypeScript features that improve developer productivity by 50%!',
'twitter',
{
includeHashtags: true,
hashtagCount: 3,
includeEmojis: true,
callToAction: true,
}
);
console.log(twitterPost.content);
// "🚀 Big news! Our new TypeScript features boost dev productivity by 50%!
// Check it out and level up your coding game! #TypeScript #DevTools #Productivity"
`
`typescript
const multiPlatform = await generator.generateMultiPlatformContent(
'Blog post about AI-powered development tools and their impact on software engineering',
['twitter', 'linkedin', 'facebook', 'instagram'],
{
tone: 'professional',
targetAudience: 'software developers',
}
);
multiPlatform.results.forEach(({ platform, result }) => {
console.log(\n${platform.toUpperCase()}:);`
console.log(result.content);
});
`typescript
const blogPost = await generator.generateBlogPost(
{
topic: 'Getting Started with TypeScript Generics',
sections: [
{
title: 'What are Generics?',
keyPoints: ['Type parameters', 'Reusability', 'Type safety'],
},
{
title: 'Basic Examples',
keyPoints: ['Generic functions', 'Generic interfaces', 'Generic classes'],
},
{
title: 'Advanced Patterns',
keyPoints: ['Constraints', 'Default types', 'Conditional types'],
},
],
targetAudience: 'intermediate developers',
tone: 'educational',
},
{
targetLength: 1500,
includeIntro: true,
includeConclusion: true,
seoKeywords: ['TypeScript', 'Generics', 'Type Safety'],
}
);
console.log(blogPost.content);
console.log(Word count: ${blogPost.metadata?.wordCount});`
`typescript
const email = await generator.generateEmail(
'Announcing our new product features including real-time collaboration and AI-powered suggestions',
'newsletter',
{
includeCallToAction: true,
targetAudience: 'existing customers',
tone: 'friendly and professional',
}
);
console.log('Subject:', email.metadata?.subject);
console.log('Preheader:', email.metadata?.preheader);
console.log('Body:', email.content);
`
`typescript
const thread = await generator.generateThread(
'Long-form content about TypeScript best practices and common pitfalls...',
'twitter',
10 // max posts
);
thread.posts.forEach((post, i) => {
console.log(\nTweet ${i + 1}/${thread.totalPosts}:);`
console.log(post);
});
`typescript
const commitContent = await generator.generateFromCommit(
{
sha: 'abc123',
message: 'feat(auth): Add JWT token validation with refresh token support',
author: 'John Doe',
files: ['src/auth.ts', 'src/middleware/jwt.ts', 'src/types/auth.ts'],
additions: 145,
deletions: 23,
},
['blog', 'social', 'email']
);
console.log('Blog:', commitContent.generatedContent.blog?.content);
console.log('Social:', commitContent.generatedContent.social?.content);
console.log('Email:', commitContent.generatedContent.email?.content);
`
`typescript
const hashtags = await generator.generateHashtags(
'New AI-powered development tools that revolutionize coding',
5,
true // trending
);
console.log('Hashtags:', hashtags.hashtags.join(', '));
// Output: "AI, DevTools, Coding, TechNews, Innovation"
`
`typescript
const batchResults = await generator.batchGenerate([
{
id: 'tweet-1',
type: 'social',
sourceContent: 'Product launch announcement',
platform: 'twitter',
options: { includeHashtags: true },
},
{
id: 'linkedin-1',
type: 'social',
sourceContent: 'Product launch announcement',
platform: 'linkedin',
options: { tone: 'professional' },
},
{
id: 'email-1',
type: 'email',
sourceContent: 'Product launch details',
emailType: 'announcement',
emailOptions: { includeCallToAction: true },
},
]);
console.log(Generated: ${batchResults.successCount}/${batchResults.totalGenerated});`
`typescript
const analytics = generator.getAnalytics({
start: new Date('2025-01-01'),
end: new Date(),
});
console.log(Total generations: ${analytics.totalGenerations});By platform:
console.log(, analytics.byPlatform);Average tokens: ${analytics.averageTokens}
console.log();Estimated cost: $${analytics.totalCost.toFixed(4)}
console.log();``
| Property | Type | Description |
|----------|------|-------------|
| provider | AIProvider | AI provider instance for generation |
| fallbackProvider | AIProvider | Optional fallback provider |
| defaultOptions | GenerationOptions | Default options for all generations |
| enableAnalytics | boolean | Enable analytics tracking |
| maxRetries | number | Maximum retries for failed generations |
| defaultTemperature | number | Default temperature (0-1) |
| Property | Type | Description |
|----------|------|-------------|
| creativity | number | Creativity level (0-1) |
| targetAudience | string | Target audience description |
| tone | string | Desired content tone |
| includeHashtags | boolean | Include hashtags in social content |
| hashtagCount | number | Number of hashtags to include |
| includeEmojis | boolean | Include emojis |
| callToAction | boolean | Include a call to action |
| alternateVersions | number | Number of alternate versions |
- twitter: 280 character limit, conversational tone
- linkedin: 3000 character limit, professional tone
- facebook: Long-form friendly, conversational
- instagram: 2200 character limit, visual storytelling
- mastodon: 500 character limit, community-focused
- bluesky: 300 character limit, authentic tone
- newsletter: Regular updates and content
- announcement: Product or feature announcements
- promotional: Marketing and promotional content
- transactional: Transaction-related emails
- Logger: planned
- Docs-Suite: ready (typedoc)
- NeverHub: planned
Copyright (c) 2025 Bernier LLC. All rights reserved.