feat(linkedin-thought-leadership): v1.0.0 — initial open-source import

Build LinkedIn thought leadership with algorithmic understanding,
strategic consistency, and AI-assisted content creation. Updated for
the January 2026 360Brew algorithm change.

16 agents, 25 commands, 6 skills, 9 hooks, 24 reference docs.

Personal data sanitized: voice samples generalized to template,
high-engagement posts cleared, region-specific references replaced
with placeholders.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
Kjell Tore Guttormsen 2026-04-07 22:09:03 +02:00
commit 39f8b275a6
143 changed files with 32662 additions and 0 deletions

View file

@ -0,0 +1,74 @@
export interface PostAnalytics {
id: string; // Hash of title + date
title: string; // First ~100 chars of post content
publishedDate: string; // YYYY-MM-DD
metrics: PostMetrics;
importedAt: string; // ISO datetime
exportSource: string; // Original CSV filename
}
export interface PostMetrics {
impressions: number;
reactions: number;
comments: number;
shares: number;
clicks: number;
engagementRate: number; // (reactions+comments+shares+clicks)/impressions * 100
}
export interface AnalyticsBatch {
batchId: string; // UUID-like identifier
importedAt: string; // ISO datetime
exportFilename: string;
dateRange: { from: string; to: string };
postCount: number;
posts: PostAnalytics[];
}
export interface WeeklyReport {
week: string; // ISO week e.g. "2026-W05"
generatedAt: string;
summary: {
totalPosts: number;
totalImpressions: number;
totalReactions: number;
totalComments: number;
totalShares: number;
totalClicks: number;
avgEngagementRate: number;
avgImpressionsPerPost: number;
};
topPerformers: PostAnalytics[];
underperformers: PostAnalytics[];
trends: {
impressionsTrend: TrendDirection;
engagementTrend: TrendDirection;
comparedTo: string;
percentChange: {
impressions: number;
engagement: number;
};
};
alerts: Alert[];
}
export type TrendDirection = "up" | "down" | "stable";
export interface Alert {
type: "spike" | "drop" | "milestone";
severity: "info" | "warning" | "critical";
metric: string;
message: string;
postId?: string;
value: number;
baseline: number;
deviations: number;
}
export const ALERT_THRESHOLDS = {
spike: 2.0,
drop: -1.5,
weeklyDropWarning: -30,
weeklyDropCritical: -50,
weeklySpikeInfo: 100,
} as const;