import os from pydantic_settings import BaseSettings from dotenv import load_dotenv load_dotenv() class Settings(BaseSettings): # API Keys ANTHROPIC_API_KEY: str = "" ELEVENLABS_API_KEY: str = "" ELEVENLABS_VOICE_ID: str = "21m00Tcm4TlvDq8ikWAM" EXA_API_KEY: str = "" FIRECRAWL_API_KEY: str = "" # Google OAuth GOOGLE_CLIENT_ID: str = "" GOOGLE_CLIENT_SECRET: str = "" # Stripe STRIPE_SECRET_KEY: str = "" STRIPE_PUBLISHABLE_KEY: str = "" STRIPE_WEBHOOK_SECRET: str = "" STRIPE_PRO_PRICE_ID: str = "" # Price ID for $50/mo Pro plan STRIPE_PRO_ANNUAL_PRICE_ID: str = "" # Price ID for $480/yr Pro plan (20% off) STRIPE_PER_VIDEO_PRICE_ID: str = "" # Price ID for $5 one-time per-video # JWT JWT_SECRET: str = "change-me-in-production" JWT_ALGORITHM: str = "HS256" JWT_EXPIRATION_HOURS: int = 72 # Local testing override — set DEFAULT_PLAN=PRO in .env to auto-assign plan on login DEFAULT_PLAN: str = "" # App FRONTEND_URL: str = "http://localhost:5173" # Database DATABASE_URL: str = "sqlite:///./blog2video.db" # Remotion REMOTION_PROJECT_PATH: str = os.path.join( os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))), "remotion-video", ) # Media storage MEDIA_DIR: str = os.path.join( os.path.dirname(os.path.dirname(os.path.abspath(__file__))), "media" ) # Cloudflare R2 Storage R2_ACCOUNT_ID: str = "" R2_ACCESS_KEY_ID: str = "" R2_SECRET_ACCESS_KEY: str = "" R2_BUCKET_NAME: str = "blog2video" R2_PUBLIC_URL: str = "" # e.g. https://media.yourdomain.com or https://pub-xxx.r2.dev R2_KEY_PREFIX: str = "" # Set to "dev" (or any string) locally to avoid overwriting production R2 data # Email (Resend) RESEND_API_KEY: str = "" class Config: env_file = ".env" settings = Settings()