Frontend: - LandingPage.jsx: hero, 6 feature cards, AI Scribe section (links peds.danvics.com), contact form - Contact form: name/email/type toggle (question vs moderator app), Turnstile anti-bot (optional) - App.jsx: /home route for unauthenticated users, auth pages reachable pre-login, logged-in /home → / Backend: - contact.py: POST /api/contact (public), stores in DB, emails admin; GET /submissions (admin) - main.py: create contact_submissions table, register contact router - main.py: add pedshub.com + www.pedshub.com to CORS origins - config.py: TURNSTILE_SECRET_KEY, ADMIN_EMAIL settings Env vars to set: VITE_TURNSTILE_SITE_KEY=<from cloudflare.com/turnstile> (frontend) TURNSTILE_SECRET_KEY=<secret> (backend .env) ADMIN_EMAIL=you@example.com (backend .env) Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
45 lines
1.4 KiB
Python
45 lines
1.4 KiB
Python
from pydantic_settings import BaseSettings, SettingsConfigDict
|
|
|
|
|
|
class Settings(BaseSettings):
|
|
model_config = SettingsConfigDict(env_file=".env", extra="ignore")
|
|
|
|
DATABASE_URL: str = "sqlite:///./quiz.db"
|
|
SECRET_KEY: str = "change-me-to-a-random-secret-key-in-production"
|
|
ALGORITHM: str = "HS256"
|
|
ACCESS_TOKEN_EXPIRE_MINUTES: int = 1440
|
|
|
|
REDIS_URL: str = "redis://localhost:6379/0"
|
|
|
|
LITELLM_MODEL: str = "gpt-4o-mini"
|
|
LITELLM_API_KEY: str = ""
|
|
LITELLM_API_BASE: str = ""
|
|
LITELLM_EMBEDDING_MODEL: str = ""
|
|
OPENAI_API_KEY: str = ""
|
|
ELEVENLABS_API_KEY: str = ""
|
|
GOOGLE_TTS_API_KEY: str = ""
|
|
AWS_ACCESS_KEY_ID: str = ""
|
|
AWS_SECRET_ACCESS_KEY: str = ""
|
|
AWS_REGION: str = "us-east-1"
|
|
AWS_BEDROCK_REGION: str = "us-east-1"
|
|
EMBEDDING_DIMENSIONS: int = 1024
|
|
APP_URL: str = "https://quiz.danvics.com"
|
|
|
|
CHROMA_PERSIST_DIR: str = "./chroma_data"
|
|
|
|
MAIL_USERNAME: str = ""
|
|
MAIL_PASSWORD: str = ""
|
|
MAIL_FROM: str = ""
|
|
MAIL_PORT: int = 587
|
|
MAIL_SERVER: str = "smtp.gmail.com"
|
|
MAIL_STARTTLS: bool = True
|
|
MAIL_SSL_TLS: bool = False
|
|
|
|
UPLOAD_DIR: str = "./uploads"
|
|
MAX_UPLOAD_SIZE: int = 524288000 # 500MB
|
|
|
|
TURNSTILE_SECRET_KEY: str = "" # Cloudflare Turnstile — leave blank to disable captcha
|
|
ADMIN_EMAIL: str = "" # Where contact form submissions are emailed
|
|
|
|
|
|
settings = Settings()
|