# Technology Stack
**Project:** Leopost - AI Social Media Management SaaS
**Researched:** 2026-01-31
**Overall Confidence:** HIGH
## Executive Summary
The 2025/2026 standard stack for AI-powered social media management SaaS centers around **Next.js 15+ with React 19**, **Supabase** for backend, **Vercel AI SDK** for multi-provider AI, and **BullMQ** for job scheduling. This recommendation is based on verified current versions, ecosystem maturity, and specific requirements for headless architecture and Italian market deployment.
---
## Recommended Stack
### Core Framework
| Technology | Version | Purpose | Why |
|------------|---------|---------|-----|
| **Next.js** | 15.5+ (or 16.x) | Full-stack React framework | - Stable Turbopack for fast dev/builds
- Server Actions eliminate API boilerplate
- Built-in API routes for webhooks
- Excellent Vercel deployment
- Ready for headless architecture (separate frontend/backend)
**Confidence:** HIGH |
| **React** | 19.2+ | UI library | - Stable release (Dec 2024)
- Actions API perfect for AI streaming
- Server Components for reduced bundle size
- `use` API for async data
**Confidence:** HIGH |
| **TypeScript** | 5.8+ | Type safety | - Latest stable (Feb 2025)
- `--erasableSyntaxOnly` for Node.js compatibility
- Improved performance in watch mode
**Confidence:** HIGH |
| **Node.js** | 20 LTS | Runtime | - LTS support through 2026-04-30
- Native TypeScript support (experimental)
- Required for BullMQ
**Confidence:** HIGH |
**Installation:**
```bash
npx create-next-app@latest leopost --typescript --tailwind --app --use-npm
```
---
### Database & Backend
| Technology | Version | Purpose | Why |
|------------|---------|---------|-----|
| **Supabase** | Cloud (latest) | PostgreSQL + Auth + Storage | - **Perfect for Italian SaaS**: Free tier supports 50k MAU
- Built-in social auth (Google, Facebook)
- Row-Level Security (RLS) for multi-tenant
- Real-time subscriptions for editorial calendar
- Storage for user-uploaded images/logos
- 4-5x cheaper than Firebase
**Confidence:** HIGH |
| **Drizzle ORM** | 0.36+ | Type-safe ORM | - **Faster than Prisma** for simple queries
- SQL-like syntax (easier for complex queries)
- Excellent Supabase integration
- Smaller bundle size for edge functions
- Better serverless cold starts
**Alternative:** Prisma (if DX > performance)
**Confidence:** MEDIUM |
| **Redis** | 7.2+ (via Upstash) | Job queue storage | - Required for BullMQ
- Upstash offers serverless Redis (free tier)
- Sub-10ms latency globally
- No connection management
**Confidence:** HIGH |
**Why Supabase over VPS Supabase:**
- **Isolation**: Each customer gets isolated database (security)
- **Scalability**: Auto-scaling, no VPS resource limits
- **Compliance**: SOC2 on Team plan ($599/mo when needed)
- **Free tier**: 500MB DB, 1GB storage, 2GB bandwidth
---
### AI Integration
| Technology | Version | Purpose | Why |
|------------|---------|---------|-----|
| **Vercel AI SDK** | 6.0+ | Multi-provider AI orchestration | - **Single API for GPT, Claude, Gemini**
- Built-in streaming with React hooks
- Automatic retry/fallback between providers
- Smaller bundle than individual SDKs
- Native Next.js integration
- OpenResponses API support (Jan 2026)
**Confidence:** HIGH |
| **OpenAI SDK** | 4.x | GPT models (primary) | - GPT-4 Turbo for content generation
- DALL-E 3 for image generation ($0.040/image)
- Function calling for structured output
**Confidence:** HIGH |
| **Anthropic SDK** | 0.x | Claude models (fallback) | - Claude 3.5 Sonnet for long-form content
- 200k token context for brand memory
- Lower hallucination rate
**Confidence:** HIGH |
| **Google AI SDK** | 0.x | Gemini models (budget) | - Gemini Pro free tier (60 req/min)
- Multimodal for image + text
- Good for Italian language
**Confidence:** MEDIUM |
**Image Generation Strategy:**
- **Primary**: DALL-E 3 via OpenAI API ($0.040/image standard quality)
- **Alternative**: Stable Diffusion via Replicate API ($0.002/image) for budget tier
- **Why not Midjourney**: No API access, Discord-only workflow
**Multi-Provider Strategy:**
```typescript
// Vercel AI SDK handles provider switching automatically
import { openai, anthropic, google } from '@ai-sdk/openai'
import { streamText } from 'ai'
// Automatic fallback: OpenAI → Claude → Gemini
const result = await streamText({
model: openai('gpt-4-turbo'),
prompt: userInput,
fallbacks: [anthropic('claude-3-5-sonnet'), google('gemini-pro')]
})
```
---
### Job Scheduling & Queue
| Technology | Version | Purpose | Why |
|------------|---------|---------|-----|
| **BullMQ** | 5.66+ | Background job processing | - **Industry standard** for social media scheduling
- Redis-backed persistence
- Cron expressions for recurring posts
- Timezone-aware scheduling
- Automatic retries on API failures
- Horizontal scaling support
- 854 dependent packages (proven)
**Confidence:** HIGH |
| **Upstash Redis** | - | Queue storage | - Serverless Redis (no connection pooling)
- Free tier: 10k commands/day
- Global edge network
- REST API (works with serverless)
**Confidence:** HIGH |
**Why BullMQ over alternatives:**
- **vs Agenda**: BullMQ has Redis persistence (Agenda uses MongoDB)
- **vs node-cron**: BullMQ handles job failures, retries, distributed systems
- **vs Inngest**: BullMQ is open-source, no vendor lock-in
**Installation:**
```bash
npm install bullmq ioredis
```
---
### Social Media APIs
| Platform | API | Purpose | Why |
|----------|-----|---------|-----|
| **Facebook + Instagram** | Meta Graph API | Post to Pages/Business accounts | - **Unified API** for both platforms
- Supports Photos, Videos, Carousels, Reels, Stories
- Built-in scheduling (publish_time)
- Free (no API costs)
- Requires Business/Creator account
**Confidence:** HIGH |
| **LinkedIn** | LinkedIn Developer API | Post to personal/company pages | - Marketing Developer Platform
- Supports images, videos, articles
- UGC (User Generated Content) API
- Free (rate limits apply)
**Confidence:** MEDIUM |
**Social Media API Wrapper (Recommended):**
- **Build custom wrapper** around Meta Graph API + LinkedIn API
- **Why not unified API services** (Late, Ayrshare):
- Added cost ($50-200/mo)
- Rate limits on top of platform limits
- Not needed for 3 platforms
- Custom wrapper = full control + no middleman
**Meta Graph API Setup:**
```bash
# Requires:
# 1. Facebook App (developers.facebook.com)
# 2. Business account verification
# 3. Instagram Professional account linked
# 4. App Review for instagram_content_publish permission
```
---
### Messaging Integration
| Technology | Version | Purpose | Why |
|------------|---------|---------|-----|
| **Telegraf** | 4.16+ | Telegram Bot framework | - **TypeScript-native** (built-in types)
- Modern API (better than node-telegram-bot-api)
- Webhook + long polling support
- Scene-based conversations
- Middleware architecture
**Confidence:** HIGH |
| **WhatsApp Business API** | Cloud API | WhatsApp integration | - **Official Meta Cloud API** (free tier)
- Webhook-based message handling
- Template messages for notifications
- Requires Business verification
**Alternative:** Baileys (unofficial, risky)
**Confidence:** MEDIUM |
**Recommendation:**
- **Phase 1**: Telegram only (easier, no verification)
- **Phase 2**: WhatsApp (requires Meta Business verification, 2-4 weeks)
---
### UI & Styling
| Technology | Version | Purpose | Why |
|------------|---------|---------|-----|
| **shadcn/ui** | Latest | Component library | - **Copy-paste components** (you own the code)
- Built on Radix UI (accessibility)
- TailwindCSS styling
- 130M+ monthly Radix downloads
- Used by Vercel, Linear, Supabase
- 5 visual styles (Vega, Nova, Maia, Lyra, Mira)
- Radix OR Base UI choice
**Confidence:** HIGH |
| **TailwindCSS** | 4.0+ | Utility-first CSS | - Industry standard for SaaS
- JIT compilation (small bundles)
- Dark mode built-in
- Responsive design utilities
**Confidence:** HIGH |
| **Lucide React** | Latest | Icon library | - Modern fork of Feather Icons
- Tree-shakeable (small bundle)
- Consistent 24x24 grid
- Default for shadcn/ui
**Confidence:** HIGH |
| **Radix UI** | Latest | Headless primitives | - **Best-in-class accessibility**
- ARIA attributes built-in
- Keyboard navigation
- Focus management
- Underlying tech for shadcn/ui
**Confidence:** HIGH |
**UI Setup:**
```bash
npx shadcn@latest init
npx shadcn@latest add button dialog calendar
```
---
### State Management
| Technology | Version | Purpose | Why |
|------------|---------|---------|-----|
| **Zustand** | 5.0+ | Global state (AI providers, user settings) | - **Smallest bundle** (1.2KB)
- No boilerplate (vs Redux)
- Perfect for chat state, AI config
- Redux DevTools support
- Middleware for persistence
**Confidence:** HIGH |
| **Jotai** | 2.x+ | Atomic state (form fields, calendar) | - **Fine-grained reactivity**
- Perfect for editorial calendar cells
- Suspense support (async atoms)
- Minimal re-renders
- Works alongside Zustand
**Confidence:** MEDIUM |
**When to use each:**
- **Zustand**: AI provider selection, brand context, global settings
- **Jotai**: Editorial calendar state, form validation, derived computations
---
### Payment Processing
| Technology | Version | Purpose | Why |
|------------|---------|---------|-----|
| **Stripe** | Latest | Payment processor | - **Dominant in Italy** (supports SEPA, cards)
- Native Italian invoicing (fatturazione elettronica)
- Subscription management built-in
- Strong fraud prevention
- 2.9% + €0.25 per transaction
- Customer Portal for self-service
**Confidence:** HIGH |
**Why Stripe over alternatives:**
- **vs Paddle**: Paddle 5% + $0.50 (more expensive), US-focused
- **vs Lemon Squeezy**: Acquired by Stripe (unstable), server issues reported
- **Stripe = standard** for EU SaaS billing compliance
**Italian Requirements:**
- Enable Stripe Tax for Italian VAT (22%)
- Issue invoices via Stripe Invoicing
- SDI (Sistema di Interscambio) integration for e-invoicing
---
## Supporting Libraries
### Essential
| Library | Version | Purpose | When to Use |
|---------|---------|---------|-------------|
| **zod** | 3.x | Schema validation | All API routes, form validation, AI outputs |
| **date-fns** | 3.x | Date manipulation | Scheduling, timezone conversion, calendar |
| **react-hook-form** | 7.x | Form management | Post composer, settings forms |
| **@tanstack/react-query** | 5.x | Server state | Cache social media posts, user data |
| **clsx** + **tailwind-merge** | Latest | Conditional CSS | Dynamic component styling |
| **sonner** | Latest | Toast notifications | Success/error messages, post confirmations |
| **cmdk** | Latest | Command palette | Chat UI, keyboard shortcuts |
### AI-Specific
| Library | Version | Purpose | When to Use |
|---------|---------|---------|-------------|
| **ai** (Vercel) | 6.x | AI streaming hooks | `useChat()`, `useCompletion()` for chat UI |
| **openai** | 4.x | Direct OpenAI access | Image generation, embeddings |
| **@anthropic-ai/sdk** | 0.x | Direct Claude access | Long-form content, low hallucination |
| **@google/generative-ai** | 0.x | Direct Gemini access | Free tier for budget users |
| **langchain** | 0.3.x | AI agent orchestration | Future: multi-step workflows, RAG |
### Utilities
| Library | Version | Purpose | When to Use |
|---------|---------|---------|-------------|
| **axios** | 1.x | HTTP client | Social media API calls (better than fetch) |
| **sharp** | 0.33+ | Image processing | Resize uploads, optimize for platforms |
| **uuid** | 10.x | Unique IDs | Job IDs, session tracking |
| **jose** | 5.x | JWT handling | Supabase JWT verification |
| **winston** | 3.x | Logging | Production error tracking |
---
## Alternatives Considered
| Category | Recommended | Alternative | Why Not Alternative |
|----------|-------------|-------------|---------------------|
| **Framework** | Next.js | Remix, Astro | Next.js has better AI SDK integration, larger ecosystem, Vercel deployment |
| **Backend** | Supabase | Firebase, PlanetScale | Supabase cheaper, PostgreSQL > Firestore for relational data, RLS built-in |
| **ORM** | Drizzle | Prisma | Drizzle faster runtime, better edge support. Prisma better DX, slower cold starts |
| **AI SDK** | Vercel AI SDK | Individual SDKs | Vercel SDK provides unified API, automatic fallbacks, smaller bundle |
| **Queue** | BullMQ | Inngest, Trigger.dev | BullMQ open-source, self-hosted, no vendor lock-in, proven at scale |
| **State** | Zustand | Redux, Recoil | Zustand 1.2KB, zero boilerplate, easier learning curve for freelancers |
| **UI** | shadcn/ui | Chakra, MUI | shadcn = you own code, no runtime overhead, Tailwind-native |
| **Payment** | Stripe | Paddle, PayPal | Stripe best Italian compliance, e-invoicing support, most reliable |
| **Image Gen** | DALL-E 3 | Midjourney | Midjourney has no API, DALL-E has predictable pricing, better prompt adherence |
---
## Architecture Decisions
### Headless Architecture
**Frontend (Next.js App Router):**
```
/app
/api # API routes for webhooks (Meta, Stripe)
/(auth) # Auth pages (login, signup)
/(dashboard) # Protected dashboard routes
/chat # AI chat interface
/calendar # Editorial calendar
/settings # User settings
```
**Backend (Next.js Server Actions + API Routes):**
```
/actions # Server Actions for mutations
/posts.ts # Create, update, delete posts
/ai.ts # AI generation actions
/social.ts # Social media API calls
/lib
/queue # BullMQ job definitions
/supabase # Supabase client, queries
/ai # AI provider wrappers
/social # Meta Graph API, LinkedIn API
```
**Why Server Actions over API Routes:**
- **For internal mutations**: Server Actions (simpler, type-safe, auto-revalidation)
- **For webhooks/public endpoints**: API Routes (Meta webhooks, Stripe webhooks)
### Database Schema Strategy
**Multi-Tenancy with RLS:**
```sql
-- Supabase Row-Level Security
CREATE POLICY "Users can only see their own posts"
ON posts FOR SELECT
USING (auth.uid() = user_id);
-- Indexes for performance
CREATE INDEX posts_user_scheduled_idx
ON posts(user_id, scheduled_at)
WHERE status = 'scheduled';
```
**Key Tables:**
- `users` (Supabase Auth managed)
- `posts` (content, platforms, scheduled_at, status)
- `brand_contexts` (logos, colors, company info, embeddings)
- `ai_provider_configs` (API keys per user)
- `social_accounts` (connected FB/IG/LinkedIn accounts)
- `usage_tracking` (tier limits, AI token usage)
---
## Development Workflow
### Local Development
```bash
# 1. Install dependencies
npm install
# 2. Setup environment variables
cp .env.example .env.local
# Add: NEXT_PUBLIC_SUPABASE_URL, SUPABASE_SERVICE_KEY
# OPENAI_API_KEY, ANTHROPIC_API_KEY, GOOGLE_AI_KEY
# UPSTASH_REDIS_URL, STRIPE_SECRET_KEY
# 3. Run Supabase locally (optional)
npx supabase start
# 4. Run dev server
npm run dev
# 5. Run queue worker (separate terminal)
npm run queue:dev
```
### Deployment
**Recommended: Vercel + Upstash + Supabase Cloud**
```bash
# 1. Deploy Next.js to Vercel
vercel deploy --prod
# 2. Setup Upstash Redis (serverless)
# Free tier: 10k commands/day
# 3. Setup Supabase Cloud
# Free tier: 500MB DB, 50k MAU
# 4. Deploy BullMQ worker
# Option A: Vercel Serverless Function (cron-triggered)
# Option B: Separate Node.js process on VPS (24/7)
```
**VPS Deployment (Alternative):**
- Deploy Next.js on VPS (Docker container)
- BullMQ worker as separate container
- Redis on VPS or Upstash
- Lower cost, more control, complex setup
---
## Cost Analysis
### Free Tier Limits (MVP)
| Service | Free Tier | Monthly Cost at 100 Users | Notes |
|---------|-----------|---------------------------|-------|
| **Vercel** | 100GB bandwidth, 1k serverless hours | $0 (likely within free tier) | Upgrade to Pro at $20/mo if needed |
| **Supabase** | 500MB DB, 50k MAU, 1GB storage | $0 | Upgrade to Pro at $25/mo at 100k MAU |
| **Upstash Redis** | 10k commands/day | $0 | ~$10/mo if exceeding (100k commands) |
| **OpenAI** | Pay-per-use | ~$50-150 | GPT-4 Turbo: $0.01/1k tokens, DALL-E: $0.04/image |
| **Anthropic** | Pay-per-use | ~$30-100 | Claude 3.5 Sonnet: $0.003/1k in, $0.015/1k out |
| **Gemini** | 60 req/min free | $0 | Free tier generous for fallback |
| **Stripe** | Pay-per-transaction | 2.9% + €0.25 per transaction | No monthly fee |
| **Meta APIs** | Free | $0 | Facebook + Instagram + WhatsApp Cloud API |
| **LinkedIn API** | Free (rate limited) | $0 | - |
| **Telegram API** | Free | $0 | - |
**Total MVP Cost:** $50-150/mo (mostly AI tokens)
**Total at 100 Paying Users ($20/mo avg):** $200-300/mo (AI scales with usage)
---
## Security Considerations
### API Key Management
```typescript
// NEVER expose API keys client-side
// ❌ DON'T:
// process.env.NEXT_PUBLIC_OPENAI_API_KEY
// ✅ DO: Use Server Actions or API Routes
'use server'
export async function generateContent(prompt: string) {
const openai = new OpenAI({ apiKey: process.env.OPENAI_API_KEY })
// ...
}
```
### Supabase RLS
```sql
-- Enable RLS on ALL tables
ALTER TABLE posts ENABLE ROW LEVEL SECURITY;
-- Create policies for CRUD
CREATE POLICY "Users CRUD own posts"
ON posts FOR ALL
USING (auth.uid() = user_id);
```
### Rate Limiting
```typescript
// Use Upstash Rate Limit
import { Ratelimit } from '@upstash/ratelimit'
import { Redis } from '@upstash/redis'
const ratelimit = new Ratelimit({
redis: Redis.fromEnv(),
limiter: Ratelimit.slidingWindow(10, '1 m'), // 10 requests per minute
})
// In API route or Server Action
const { success } = await ratelimit.limit(userId)
if (!success) throw new Error('Rate limit exceeded')
```
---
## Performance Optimization
### Next.js Optimizations
```typescript
// 1. Enable Turbopack (default in Next.js 16)
// next.config.js
module.exports = {
experimental: {
turbo: true,
},
}
// 2. Optimize images
import Image from 'next/image'
// 3. Use Server Components by default
// Only add 'use client' when needed (interactivity)
// 4. Dynamic imports for heavy components
const Editor = dynamic(() => import('./Editor'), { ssr: false })
```
### Database Optimizations
```sql
-- Indexes for common queries
CREATE INDEX posts_user_status_idx ON posts(user_id, status);
CREATE INDEX posts_scheduled_at_idx ON posts(scheduled_at) WHERE status = 'scheduled';
-- Partial indexes for active data
CREATE INDEX active_posts_idx ON posts(user_id, created_at)
WHERE status IN ('draft', 'scheduled');
```
### AI Response Caching
```typescript
// Cache common AI responses
import { unstable_cache } from 'next/cache'
const getCachedAIResponse = unstable_cache(
async (prompt: string) => {
return await generateContent(prompt)
},
['ai-response'],
{ revalidate: 3600 } // 1 hour
)
```
---
## Testing Strategy
### Recommended Tools
| Type | Tool | Why |
|------|------|-----|
| **Unit** | Vitest | Faster than Jest, ESM support, compatible with Next.js |
| **Integration** | Playwright | E2E testing, headless browser, multi-browser |
| **API** | MSW (Mock Service Worker) | Mock social media APIs, AI APIs for testing |
| **Type** | TypeScript + Zod | Runtime + compile-time validation |
### Testing Social Media APIs
```typescript
// Mock Meta Graph API responses
import { http, HttpResponse } from 'msw'
export const handlers = [
http.post('https://graph.facebook.com/v18.0/me/feed', () => {
return HttpResponse.json({ id: 'post_123' })
}),
]
```
---
## Internationalization (i18n)
### Italian Market Specifics
```typescript
// Use next-intl for i18n
import { useTranslations } from 'next-intl'
const t = useTranslations('Dashboard')
t('welcome') // "Benvenuto"
// Italian date formatting
import { format } from 'date-fns'
import { it } from 'date-fns/locale'
format(new Date(), 'PPP', { locale: it })
// "31 gennaio 2026"
```
### Future Multi-Language
**Phase 1**: Italian only
**Phase 2**: Add English (for expansion)
**Setup:**
```bash
npm install next-intl
```
---
## Monitoring & Observability
### Recommended Tools
| Category | Tool | Why |
|----------|------|-----|
| **Error Tracking** | Sentry | Best Next.js integration, free tier 5k events/mo |
| **Analytics** | Vercel Analytics | Built-in, privacy-friendly, free on Pro plan |
| **Logging** | Axiom | Serverless-friendly, generous free tier |
| **APM** | Vercel Speed Insights | Built-in performance monitoring |
| **Uptime** | BetterStack | Free tier, status page, incident management |
---
## Sources
### Framework & Core
- [Next.js for SaaS Dashboards: Architecture and Best Practices](https://www.ksolves.com/blog/next-js/best-practices-for-saas-dashboards)
- [Modern Full Stack Application Architecture Using Next.js 15+](https://softwaremill.com/modern-full-stack-application-architecture-using-next-js-15/)
- [Server Actions vs API Routes in Next.js 15](https://www.wisp.blog/blog/server-actions-vs-api-routes-in-nextjs-15-which-should-i-use)
- [Next.js 15.5 Release Notes](https://nextjs.org/blog/next-15-5)
- [React v19 Release](https://react.dev/blog/2024/12/05/react-19)
- [TypeScript 5.8 Release](https://devblogs.microsoft.com/typescript/announcing-typescript-5-8/)
### AI & Multi-Provider
- [AI SDK 6 - Vercel](https://vercel.com/blog/ai-sdk-6)
- [Building a Complete Multi-AI Chat Platform](https://medium.com/@reactjsbd/building-a-complete-multi-ai-chat-platform-chatgpt-claude-gemini-grok-in-one-interface-4295d10e3174)
- [OpenAI SDK vs Vercel AI SDK Comparison](https://strapi.io/blog/openai-sdk-vs-vercel-ai-sdk-comparison)
- [The 9 Best AI Image Generation Models in 2026](https://www.gradually.ai/en/ai-image-models/)
- [DALL-E vs Midjourney vs Stable Diffusion 2025 Comparison](https://aloa.co/ai/comparisons/ai-image-comparison/dalle-vs-midjourney-vs-stable-diffusion)
### Database & Backend
- [Supabase Review 2026](https://hackceleration.com/supabase-review/)
- [Drizzle vs Prisma: Choosing the Right TypeScript ORM](https://betterstack.com/community/guides/scaling-nodejs/drizzle-vs-prisma/)
- [Prisma vs Drizzle ORM in 2026](https://medium.com/@thebelcoder/prisma-vs-drizzle-orm-in-2026-what-you-really-need-to-know-9598cf4eaa7c)
### Job Queue & Scheduling
- [BullMQ - Background Jobs processing](https://bullmq.io/)
- [How to Build a Job Queue in Node.js with BullMQ and Redis](https://oneuptime.com/blog/post/2026-01-06-nodejs-job-queue-bullmq-redis/view)
- [Job Scheduling in Node.js with BullMQ](https://betterstack.com/community/guides/scaling-nodejs/bullmq-scheduled-tasks/)
### Social Media APIs
- [Instagram API 2026: Complete Developer Guide](https://getlate.dev/blog/instagram-api)
- [10 Best Social Media APIs for Developers [2026 Comparison]](https://getlate.dev/blog/top-10-social-media-apis-for-developers)
- [Meta Graph API: Considerations and Alternatives](https://data365.co/blog/meta-graph-api)
### Messaging Integration
- [Telegraf - Modern Telegram Bot Framework](https://github.com/telegraf/telegraf)
- [How to Build a WhatsApp Chatbot in Node.js](https://www.kommunicate.io/blog/build-a-whatsapp-chatbot-using-node-js/)
### UI & Components
- [shadcn/ui - The Foundation for your Design System](https://ui.shadcn.com/)
- [ShadCN UI vs Radix UI vs Tailwind UI](https://javascript.plainenglish.io/shadcn-ui-vs-radix-ui-vs-tailwind-ui-which-should-you-choose-in-2025-b8b4cadeaa25)
- [Radix Primitives](https://www.radix-ui.com/)
### State Management
- [Zustand vs. Redux Toolkit vs. Jotai](https://betterstack.com/community/guides/scaling-nodejs/zustand-vs-redux-toolkit-vs-jotai/)
- [State Management in 2025: Context, Redux, Zustand, or Jotai](https://dev.to/hijazi313/state-management-in-2025-when-to-use-context-redux-zustand-or-jotai-2d2k)
### Payments
- [Stripe vs Paddle vs Lemon Squeezy Comparison](https://medium.com/@muhammadwaniai/stripe-vs-paddle-vs-lemon-squeezy-i-processed-10k-through-each-heres-what-actually-matters-27ef04e4cb43)
- [Compare SaaS Payment Provider Fees](https://saasfeecalc.com/)
---
## Installation Guide
### Step 1: Create Next.js Project
```bash
npx create-next-app@latest leopost \
--typescript \
--tailwind \
--app \
--use-npm \
--import-alias "@/*"
cd leopost
```
### Step 2: Install Core Dependencies
```bash
# Framework essentials
npm install zod react-hook-form @hookform/resolvers date-fns clsx tailwind-merge
# Supabase
npm install @supabase/supabase-js @supabase/ssr
# Drizzle ORM
npm install drizzle-orm postgres
npm install -D drizzle-kit
# AI SDKs
npm install ai @ai-sdk/openai @ai-sdk/anthropic @ai-sdk/google openai @anthropic-ai/sdk @google/generative-ai
# Queue
npm install bullmq ioredis
# State management
npm install zustand jotai
# UI components
npx shadcn@latest init
npx shadcn@latest add button dialog calendar form input textarea select
# Social media + messaging
npm install telegraf axios
# Payment
npm install stripe @stripe/stripe-js
# Utilities
npm install sonner cmdk sharp uuid jose winston
```
### Step 3: Setup Environment Variables
```bash
# .env.local
# Supabase
NEXT_PUBLIC_SUPABASE_URL=https://xxx.supabase.co
NEXT_PUBLIC_SUPABASE_ANON_KEY=xxx
SUPABASE_SERVICE_ROLE_KEY=xxx
# AI Providers
OPENAI_API_KEY=sk-xxx
ANTHROPIC_API_KEY=sk-ant-xxx
GOOGLE_AI_API_KEY=xxx
# Redis (Upstash)
UPSTASH_REDIS_REST_URL=https://xxx.upstash.io
UPSTASH_REDIS_REST_TOKEN=xxx
# Stripe
STRIPE_SECRET_KEY=sk_test_xxx
NEXT_PUBLIC_STRIPE_PUBLISHABLE_KEY=pk_test_xxx
STRIPE_WEBHOOK_SECRET=whsec_xxx
# Social Media
META_APP_ID=xxx
META_APP_SECRET=xxx
LINKEDIN_CLIENT_ID=xxx
LINKEDIN_CLIENT_SECRET=xxx
# Telegram
TELEGRAM_BOT_TOKEN=xxx
# App
NEXT_PUBLIC_APP_URL=http://localhost:3000
```
### Step 4: Initialize Supabase
```bash
npx supabase init
npx supabase db push
```
### Step 5: Run Development
```bash
# Terminal 1: Next.js dev server
npm run dev
# Terminal 2: BullMQ worker (create worker.ts first)
npm run queue:dev
```
---
## Next Steps
1. **Setup Supabase schema** (users, posts, brand_contexts)
2. **Configure Drizzle ORM** with Supabase connection
3. **Implement Vercel AI SDK** chat interface
4. **Setup BullMQ** job queue for scheduling
5. **Integrate Meta Graph API** for Facebook/Instagram
6. **Add Stripe** subscription management
7. **Deploy to Vercel** with environment variables
---
**Ready for Roadmap Creation**: This stack is production-ready, cost-effective for MVP, and scales to thousands of users.