AI-powered social media content generation and publishing SaaS — Clone de ViewCreator.ai
Générez, adaptez et publiez du contenu sur 8 plateformes (Instagram, TikTok, YouTube, Facebook, X, LinkedIn, Threads, Pinterest) via des agents IA avec contrôle humain et conformité platforme.
- Création d'agents par type : TEXT_POST, VIDEO_CLIP, CROSS_POST
- Génération de contenu platform-adapted via Claude Sonnet 4
- Brand voice personnalisée + content bank
- Scheduling cron pour runs automatiques
- Contenu généré en DRAFT par défaut
- Revue humaine avant publication
- Workflow : DRAFT → APPROVED → PUBLISHED / REJECTED
- 8 publishers officiels (APIs Meta, TikTok, YouTube, LinkedIn, X, Facebook, Threads, Pinterest)
- Cap de fréquence : max 4 posts/jour/compte (configurable jusqu'à 8)
- PublishLog immutable pour audit trail
- Upload via UploadThing
- Transcription via Deepgram (timestamps)
- Identification automatique des moments clés via Claude
- Extraction de clips via Mux
- Génération de captions + hashtags par plateforme
- Dashboard par profile + global
- Stats par plateforme : impressions, engagements, clicks, followers
- Charts avec Recharts
- API JSON-RPC 2.0 pour intégrations externes
- 5 tools : list_agents, get_agent, create_agent, run_agent, get_run_status
- Auth via API keys SHA-256 hashées
- Plans : Starter ($50), Pro ($70), Team ($110)
- Checkout, billing portal, webhooks
| Catégorie | Outil |
|---|---|
| Framework | Next.js 14 (App Router) + TypeScript |
| Design | Tailwind CSS + shadcn/ui (Design System ElevenLabs) |
| Auth | NextAuth.js v5 (Google OAuth) |
| Base de données | PostgreSQL (Neon serverless) + Prisma ORM |
| IA | Claude Sonnet 4 (Anthropic) |
| Vidéo | Mux (transcoding/clips) + Deepgram (transcription) |
| Upload | UploadThing |
| Jobs | Trigger.dev |
| Billing | Stripe |
| Publication | APIs officielles uniquement |
- Node.js 18+
- PostgreSQL (local ou Neon)
- Comptes API : Google OAuth, Anthropic, Stripe, Deepgram, Mux, UploadThing
# Cloner le repo
git clone https://github.com/rachid-softdev/SocialCreator.git
cd SocialCreator
# Installer les dépendances (pnpm)
pnpm install
# Configurer les variables d'environnement
cp .env.local.example .env.local
# Éditer .env.local avec vos clés API
# Générer le client Prisma
pnpm --filter=socialcreator-web prisma generate
# Push le schéma vers la base de données
pnpm --filter=socialcreator-web prisma db push
# Lancer en développement
pnpm dev# Auth
AUTH_SECRET="openssl rand -base64 32"
AUTH_URL="http://localhost:3000"
ENCRYPTION_KEY="openssl rand -base64 32"
GOOGLE_CLIENT_ID="your-google-client-id"
GOOGLE_CLIENT_SECRET="your-google-client-secret"
# Database
DATABASE_URL="postgresql://user:pass@localhost:5432/socialcreator"
# APIs
ANTHROPIC_API_KEY="sk-ant-api03-..."
STRIPE_SECRET_KEY="sk_live_..."
STRIPE_WEBHOOK_SECRET="whsec_..."
NEXT_PUBLIC_STRIPE_PUBLISHABLE_KEY="pk_live_..."
DEEPGRAM_API_KEY="your-deepgram-key"
MUX_TOKEN_ID="your-mux-token-id"
MUX_TOKEN_SECRET="your-mux-token-secret"
UPLOADTHING_SECRET="your-uploadthing-secret"
UPLOADTHING_APP_ID="your-uploadthing-app-id"
# Trigger.dev
TRIGGER_SECRET_KEY="your-trigger-secret"
NEXT_PUBLIC_TRIGGER_PUBLIC_KEY="your-trigger-public"pnpm build
pnpm start# Installation des dépendances
pnpm install
# Développement
pnpm dev # Lance tous les packages en mode dev
pnpm dev:web # Lance uniquement l'app web
pnpm dev:all # Lance web + scheduler
# Build
pnpm build # Build tous les packages
pnpm build:web # Build uniquement l'app web
# Tests
pnpm test # Tests unitaires tous packages
pnpm test:run # Tests unitaires sans watch
pnpm test:coverage # Tests avec coverage
pnpm test:e2e # Tests end-to-end
pnpm test:e2e:headed # Tests e2e avec navigateur visible
# Linting & Typecheck
pnpm lint # Lint tous les packages
pnpm typecheck # Typecheck tous les packagesCe projet est un monorepo utilisant Turborepo et pnpm workspaces.
| Package | Description | Commandes |
|---|---|---|
| socialcreator-web | Application Next.js principale (Dashboard, Agents, Analytics) | pnpm web:dev, pnpm web:build, pnpm web:start, pnpm web:lint, pnpm web:typecheck |
| socialcreator-desktop | Application desktop (Electron/Tauri) | pnpm desktop:dev, pnpm desktop:build, pnpm desktop:test |
| socialcreator-mobile | Application mobile (React Native/Expo) | pnpm mobile:dev, pnpm mobile:build, pnpm mobile:test |
| socialcreator-extension | Extension navigateur | pnpm extension:dev, pnpm extension:build, pnpm extension:test |
| Package | Description |
|---|---|
| @socialcreator/ui | Composants UI, design system |
| @socialcreator/types | Types TypeScript partagés |
| @socialcreator/utils | Utilitaires et helpers |
| @socialcreator/config | Configuration Tailwind, ESLint, etc. |
# Web
pnpm web:dev
pnpm web:build
pnpm web:start
pnpm web:test
pnpm web:lint
pnpm web:typecheck
# Desktop
pnpm desktop:dev
pnpm desktop:build
pnpm desktop:test
# Mobile
pnpm mobile:dev
pnpm mobile:build
pnpm mobile:test
# Extension
pnpm extension:dev
pnpm extension:build
pnpm extension:test
# Environment
pnpm check-env # Valider les variables d'environnement
pnpm push-env # Pousser les variables vers Vercelsrc/
├── app/
│ ├── (auth)/ # Login, Register
│ ├── (main)/ # Dashboard, Profiles, Agents, Content, etc.
│ ├── (onboarding)/ # CGU
│ └── api/ # API routes
│ ├── agents/
│ ├── content/
│ ├── connected-accounts/
│ ├── mcp/
│ ├── profiles/
│ ├── stripe/
│ ├── video/
│ └── uploadthing/
├── components/
│ ├── agent/ # Agent cards, forms, run list
│ ├── analytics/ # Charts, stats cards
│ ├── auth/ # Login, register, CGU forms
│ ├── billing/ # Pricing table, plan selector
│ ├── content/ # Content cards, approval panel
│ ├── connected-accounts/ # Account cards, connect modal
│ ├── dashboard/ # Stats grid, quick actions
│ ├── mcp/ # API key manager, MCP tester
│ ├── profile/ # Profile cards, forms
│ ├── settings/ # Settings tabs
│ ├── ui/ # Design system components
│ └── video/ # Upload, transcript, clips
├── lib/
│ ├── auth.ts # NextAuth config
│ ├── crypto.ts # AES-256 encryption
│ ├── deepgram.ts # Transcription API
│ ├── llm.ts # Claude integration
│ ├── mux.ts # Mux video API
│ ├── oauth/ # OAuth flows (Meta, TikTok, LinkedIn, X...)
│ ├── prompts.ts # Platform-specific prompts
│ ├── publish-guard.ts # Frequency cap
│ ├── publishers/ # 8 platform publishers
│ ├── quota-guard.ts # Profile quota by plan
│ ├── stripe.ts # Stripe checkout/portal
│ └── video-pipeline.ts # Video pipeline orchestrator
├── triggers/
│ ├── agent-run.trigger.ts
│ ├── agent-scheduler.trigger.ts
│ ├── publish-worker.trigger.ts
│ └── video-pipeline.trigger.ts
└── types/
└── agent.ts
- Cap de fréquence — max 4 posts/jour/compte, configurable jusqu'à 8
- Contenu adapté — chaque plateforme a son propre prompt (ton, longueur, hashtags)
- Mode approval —
auto_publish: falsepar défaut, contenu passe en DRAFT - Audit log — PublishLog immutable (CREATE only, jamais UPDATE)
- CGU onboarding — acceptation obligatoire avant accès à la publication
- Pas d'engagement automatique — likes, follows, comments, DMs automatiques = hors scope
| Plan | Prix | Profils inclus | +profiles |
|---|---|---|---|
| Starter | $50/mois | 1 | +$20/profil |
| Pro | $70/mois | 2 | +$20/profil |
| Team | $110/mois | 4 | +$20/profil |
curl -X POST http://localhost:3000/api/mcp \
-H "Authorization: Bearer <api_key>" \
-H "Content-Type: application/json" \
-d '{
"jsonrpc": "2.0",
"id": 1,
"method": "list_agents",
"params": { "profileId": "xxx" }
}'Methods disponibles :
list_agents— liste des agents avec statutget_agent— config complète d'un agentcreate_agent— crée un nouvel agentrun_agent— lance un run, retourne {run_id}get_run_status— statut + contenu généré
MIT — voir LICENSE