Files
ALwrity/.gitignore
ajaysi aaf94049da feat: validate podcast cost estimation accuracy, document per-token costs, and fix subscription/plan enforcement
Issue #543 — Validate Estimated Cost Accuracy (UI vs Backend)

Backend:
- cost_estimator.py uses pricing catalog (APIProviderPricing) as single source of truth
- All 7 cost components: analysis, research (search+LLM), script, TTS, voice clone, avatar, video
- initialize_default_pricing() runs on every app startup for auto-sync

Frontend cost estimation fixes:
- Added missing analysisCost, scriptCost, voiceCloneCost to PodcastEstimate type
- toPodcastEstimate() now extracts all 7 backend fields (was dropping 3)
- headerCostEst maps analysisCost->Analyze, scriptCost->Write, voiceCloneCost->Produce
- EstimateCard shows 5 chips: Analysis, Research, Script, Voice(TTS+clone), Visuals(avatar+video)
- Chip sum now equals backend total for all configurations

Subscription & plan fixes:
- Removed Stripe re-verification from checkSubscription() (downgrade regression fix #539)
- Added verifyCheckoutRef pattern for reliable mount-time checkout polling
- One-time Stripe sync effect with pending_subscription_change flag for Customer Portal returns
- Free plan limits: stability_calls 3->10, audio_calls 5->10 (supports 2 podcasts)
- Image enforcement uses actual provider (GPT_PROVIDER), not hardcoded Stability
- Billing/pricing pages bypass onboarding check in ProtectedRoute
- Gradient buttons + loading spinner on plan chip in UserBadge
- Added metadata-based Stripe lookup fallback (Issue #538)

Documentation:
- TESTING_GUIDE.md: comprehensive testing instructions for non-technical testers
  - Free plan limits, usage tracking, cost estimation formulas
  - 10 test cases for UI verification
  - Troubleshooting guide
  - Quick-reference cost formulas with all default rates

Cleanup: removed legacy ToBeMigrated directory (70+ files, ~22K LOC)
GSC Brainstorm: service, hook, modal, and UI components for blog topic brainstorming
2026-05-27 08:46:38 +05:30

289 lines
3.5 KiB
Plaintext

# Python
__pycache__/
*.py[cod]
*.db
*.sqlite*
nul
LICENSE
CHANGELOG.md
.planning
.planning/
.trae/
.trae
workspace/
workspace/*
.windsurf
artifacts
.opencode
data/
data/*
.trae/
/backend/database/migrations/*
/backend/.db
backend/*.db
backend\youtube_audio
youtube_avatars
backend\youtube_images
data/media/podcast_videos/AI_Videos
backend/.trae_*
# Onboarding progress files
.onboarding_progress.json
backend/.onboarding_progress.json
backend/database/migrations/*
*.mp3
podcast_audio/*
backend/podcast_audio/
podcast_audio/
podcast_images/
youtube_videos/
backend/podcast_images/
backend/podcast_videos/
backend/researchtools_text/projects/
youtube_avatars/
youtube_avatars/*
youtube_videos/*
youtube_images/
youtube_audio
.cursorignore
story_videos
story_videos/*
story_audio
story_images
backend/story_videos/*
backend/story_audio/*
backend/story_images/*
# Environment
.env
.env.*
# User data
backend/lib/workspace/
backend/lib/workspace/users/
backend/logs/
backend/linkedin_images/
backend/test/
backend/.onboarding_progress_user*
backend/.onboarding_*.json
# Frontend
frontend/node_modules/
frontend/build/
frontend/.env*
# Logs
*.log
logs/
# OS
.DS_Store
Thumbs.db
# Docs build
docs-site/site/
# Dependencies
node_modules/
*/node_modules/
**/node_modules/
# Python cache files
__pycache__/
*/__pycache__/
**/__pycache__/
*.pyc
*.pyo
*.pyd
.gitignore
.pytest*
# Cache files
.cache/
*/cache/
**/cache/
*.cache
# MkDocs site directory
docs-site/site/
venv_new
venv
# Environment files
.env
.env.local
.env.development.local
.env.test.local
.env.production.local
backend/.env
frontend/.env
# Database files
*.db
*.sqlite
*.sqlite3
backend/alwrity.db
backend/content_cache.db
backend/outline_cache.db
backend/research_cache.db
# Google OAuth credentials
gsc_credentials.json
**/gsc_credentials.json
.cursor
# Onboarding progress files
.onboarding_progress.json
backend/.onboarding_progress.json
# IDE and editor files
.vscode/
.idea/
*.swp
*.swo
*~
# OS generated files
.DS_Store
.DS_Store?
._*
.Spotlight-V100
.Trashes
ehthumbs.db
Thumbs.db
# Node.js (for frontend)
npm-debug.log*
yarn-debug.log*
yarn-error.log*
# Build directories
build/
dist/
*.egg-info/
# Logs
*.log
logs/
# Temporary files
*.tmp
*.temp
# Coverage reports
htmlcov/
.coverage
.coverage.*
coverage.xml
*.cover
.hypothesis/
.pytest_cache/
# Virtual environments
venv/
env/
ENV/
.venv/
# Jupyter Notebook
.ipynb_checkpoints
# pyenv
.python-version
# pipenv
Pipfile.lock
# PEP 582
__pypackages__/
# Celery
celerybeat-schedule
celerybeat.pid
# SageMath parsed files
*.sage.py
# Spyder project settings
.spyderproject
.spyproject
# Rope project settings
.ropeproject
# mkdocs documentation
/site
.cursorignore
gsc_credentials_template.json
# mypy
.mypy_cache/
.dmypy.json
dmypy.json
docs
# Pyre type checker
.pyre/
# Credentials and secrets
gsc_credentials.json
*.pem
*.key
*.crt
# Test files
test_*.py
*_test.py
tests/
# Documentation build
docs/_build/
# Backup files
*.bak
*.backup
*.orig
# Lock files
package-lock.json
yarn.lock
# Cache directories
.pytest_cache
# Documentation cache
docs/__pycache__/
# Onboarding JSON files (CRITICAL: Should use database instead)
.onboarding_progress.json
*_onboarding_progress.json
backend/.onboarding_progress*.json
backend/researchtools_text/projects/Draft__AI_advanc_c2f90698.json
backend/researchtools_text/projects/Draft__AI_adv_388d4491.json
# Migration and debug scripts
debug_usage.py
fix_database.py
migrate_usage_summaries.py
simple_migrate.py
validate_implementation.py
# Camera selfie implementation (not needed)
CAMERA_SELFIE_IMPLEMENTATION.md