ي
ec2f9151b8
Harden backlink lead campaign ownership
2026-06-03 18:19:16 +05:30
ajaysi
923fa671fe
feat: ContentGuardianAgent, onboarding UX, Team Activity action wiring, docs, agent help modal
...
ContentGuardianAgent consolidation:
- Merge 3 duplicate classes into single source in specialized/content_guardian.py
- Watchdog audit_committee() with heuristic scoring, coverage gaps, overlaps, alerts
- Remove misleading rejection_rate() helper; use acceptance_rate directly
- Integrate audit + alerts + trend signals into today_workflow_service.py
Team Activity page:
- QualityAuditPanel: health ring, per-agent critiques, coverage gaps, overlaps
- TrendSignalsPanel: opportunity cards with urgency/impact/coverage bars
- AlertBanner: persistent dismiss via POST /alerts/{id}/mark-read
- AgentHelpModal: dialog showing all 8 agents with descriptions, tools, schedule
- QualityAuditPanel action buttons: Fill gap -> /content-planning, Resolve overlap, View CTA on alerts/issues
- TrendSignalsPanel action buttons: Create content from this trend -> /blog-writer with trend context state
Onboarding system:
- Step 4 validation: no auto-pass via basic_ready; requires persona data or explicit progression
- Step 5 validation: logs warning on auto-pass without integration data
- OnboardingCompletionService: single DB session, transactional task creation, upsert pattern
- Business-without-website: nullable website_url on SIFIndexingTask and MarketTrendsTask
- DeepCompetitorAnalysisExecutor: 5-min timeout, 10-competitor cap, asyncio.wait_for
- Persona generation: async with 30s timeout, falls back to scheduler
- OnboardingProgressService.reset_onboarding(): resets session + pauses all DB tasks
- OnboardingControlService.reset_onboarding(): also cancels APScheduler jobs
- FinalStep TaskSchedulingPanel: shows scheduled/failed tasks after completion, 8s auto-redirect
- onboarding_completed agent activity event logged to feed
Documentation:
- docs-site/features/onboarding/: overview, steps, scheduler-tasks, technical-reference (4 pages)
- docs-site/mkdocs.yml: added Onboarding System nav section
- docs-site/features/sif-agents/: overview, agent-directory, committee-system, content-guardian (4 pages)
- docs-site/features/team-activity/: overview, quality-audit, trend-signals, alert-system (4 pages)
- docs-site/features/todays-workflow/: updated overview, technical-architecture, workflow-guide, api-reference
2026-06-01 12:24:31 +05:30
ajaysi
9b472f1c18
debug: add startup log to suggest-prompts endpoint to diagnose timeout
2026-05-30 11:08:43 +05:30
ajaysi
ce2b8eefba
fix: persist sectionImages to localStorage immediately in onImageGenerated callback, add restore/effect with debug logging
2026-05-30 08:22:04 +05:30
ajaysi
64f1f88cdd
feat: image generation overhaul (model-aware text, dim clamping, \.30 pricing), event-driven dashboard cache invalidation, SEO insights (AI visibility, GSC, keyword gap), YouTube OAuth/publish, blog writer & content planning improvements, scheduler monitoring updates
2026-05-30 07:58:22 +05:30
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
ajaysi
96fa469fe8
fix: add metadata-based Stripe customer lookup in verify-checkout for reliable post-subscription plan detection ( #538 )
2026-05-26 15:25:05 +05:30
ajaysi
6331671c6a
docs(seo-dashboard): add implementation notes and API endpoint alignment ( #537 )
2026-05-25 20:57:48 +05:30
ajaysi
a1a1abb8fd
fix: redact sensitive API key count from log in ai_refresh ( #536 )
2026-05-25 20:57:48 +05:30
ajaysi
c47b452943
fix: redact sensitive API key names from log in ai_refresh ( #535 )
2026-05-25 20:57:47 +05:30
ي
b805595e3c
docs(seo-dashboard): add recent SEO enhancement coverage from code + docs review
2026-05-25 20:56:27 +05:30
ajaysi
d889e83d6a
fix: harden podcast media path resolution and URL parsing ( #530 )
2026-05-25 20:31:08 +05:30
ajaysi
45e9de4a31
fix: replace MD5 with SHA256 in cache key derivation ( #528 )
2026-05-25 20:31:07 +05:30
ajaysi
03622fca6e
fix: use canonicalized resolved_video_path in transform serving ( #527 )
2026-05-25 20:31:07 +05:30
ajaysi
aba41bc1bf
fix: sanitize target_level in normalize_audio FFmpeg command ( #526 )
2026-05-25 20:31:00 +05:30
ي
d0f0c25cf3
Potential fix for code scanning alert no. 87: Clear-text logging of sensitive information
...
Co-authored-by: Copilot Autofix powered by AI <62310815+github-advanced-security[bot]@users.noreply.github.com>
2026-05-25 17:41:16 +05:30
ي
0c48e2e0bf
Potential fix for code scanning alert no. 85: Clear-text logging of sensitive information
...
Co-authored-by: Copilot Autofix powered by AI <62310815+github-advanced-security[bot]@users.noreply.github.com>
2026-05-25 17:39:49 +05:30
ي
c6c118e7b8
Potential fix for code scanning alert no. 128: Uncontrolled data used in path expression
...
Co-authored-by: Copilot Autofix powered by AI <62310815+github-advanced-security[bot]@users.noreply.github.com>
2026-05-25 17:33:13 +05:30
ي
56b2f3afcf
Potential fix for code scanning alert no. 134: Use of a broken or weak cryptographic hashing algorithm on sensitive data
...
Co-authored-by: Copilot Autofix powered by AI <62310815+github-advanced-security[bot]@users.noreply.github.com>
2026-05-25 17:29:39 +05:30
ي
8000d21a05
Potential fix for code scanning alert no. 139: Uncontrolled data used in path expression
...
Co-authored-by: Copilot Autofix powered by AI <62310815+github-advanced-security[bot]@users.noreply.github.com>
2026-05-25 17:25:28 +05:30
ي
6aca86f087
Potential fix for code scanning alert no. 29: Uncontrolled command line
...
Co-authored-by: Copilot Autofix powered by AI <62310815+github-advanced-security[bot]@users.noreply.github.com>
2026-05-25 17:24:15 +05:30
ajaysi
cb3666dd7b
fix: multi-tenant isolation for asset serving, image-studio ownership check, ts compile error
2026-05-25 17:23:59 +05:30
ajaysi
9b3bec698b
fix: credit tracking, voice clone TTL, avatar upload ui, asset serving fallback, OAuth encryption, free plan video renders, backlink outreach sprint
2026-05-25 17:07:35 +05:30
ajaysi
090d69761f
feat: Sprint 1 - Deep discovery, lead persistence, and dashboard nav
...
- Add BacklinkOutreachScraper (Exa + DuckDuckGo deep scraping)
- Extend DB and Pydantic models for lead enrichment columns
- Add StorageService methods for lead CRUD with auto-migration
- Add backend endpoints: deep discover, campaign detail, lead management
- Extend frontend API client and store with discovery + lead actions
- Create BacklinkOutreachDashboard component with campaigns/discover/leads tabs
- Register route at /backlink-outreach under SEO feature flag
- Add nav entry under Enterprise & Advanced in tool categories
2026-05-23 17:07:33 +05:30
ajaysi
816d59a30a
Remove legacy backlinking code from ToBeMigrated (migrated to backend/services + routers + frontend)
2026-05-23 15:18:39 +05:30
ajaysi
2b44e9c013
Merge branch 'pr-486'
2026-05-23 15:18:15 +05:30
ajaysi
3f287d85d8
Add frontend campaign create/list to backlinkOutreachApi + store + component
2026-05-23 15:18:04 +05:30
ajaysi
3d3bcceb45
Merge branch 'pr-483'
...
# Conflicts:
# backend/services/podcast/broll_composer.py
# backend/services/podcast/broll_service.py
2026-05-23 13:37:44 +05:30
ajaysi
e14ab7f931
Merge branch 'pr-525'
...
# Conflicts:
# docs-site/docs/features/podcast-maker/api-reference.md
# docs-site/docs/features/podcast-maker/implementation-overview.md
2026-05-23 13:35:24 +05:30
ي
6df1010db1
docs: remove podcast maker binary screenshot assets
2026-05-23 13:29:39 +05:30
ajaysi
d1cd28d407
Merge branch 'recover-stash'
2026-05-23 13:13:18 +05:30
ajaysi
33458c78c0
Merge branch 'pr-498'
...
# Conflicts:
# backend/services/user_workspace_manager.py
2026-05-23 13:11:34 +05:30
ajaysi
17b69708ca
Merge branch 'pr-497'
2026-05-23 13:09:48 +05:30
ajaysi
8f116ef4d1
On main: session-work-2026-05-22
2026-05-23 13:09:41 +05:30
ajaysi
9d73221f24
index on main: 644e72d2 feat: Brainstorm Topics with GSC + Issue #518 fixes + Blog Editor enhancements
2026-05-23 13:09:41 +05:30
ajaysi
644e72d289
feat: Brainstorm Topics with GSC + Issue #518 fixes + Blog Editor enhancements
...
Issue #518 - Subscription not updating after checkout:
- Fix stale closure in SubscriptionContext checkout polling (use subscriptionRef)
- Move checkout success polling from InitialRouteHandler into SubscriptionContext
- Remove redundant polling code from InitialRouteHandler
- Fix plan label: 'Free' instead of 'No Plan', proper capitalization
- Add plan refresh button in UserBadge
- Add 'View Costing Details' to UserBadge dropdown
- Rename 'ALwrity Podcast Maker' to 'Podcast Creator' across UI
- Clean subscription=success URL param after verification
Blog Writer WYSIWYG Editor enhancements:
- Per-section preview toggle (view/edit icons)
- Enhanced hover-based toolbar
- Circular SVG progress stats bar with detailed tooltip
- Research tool chips in stats bar footer
- Per-section TTS with useTextToSpeech hook (browser native)
- Full blog preview modal with print/PDF support
- PlayAllTTSButton: sequential playback with progress bar
- OnThisPageNav: floating sidebar with scroll tracking
- Section data attributes for scroll anchoring
GSC Brainstorm Topics feature:
- Backend: gsc_brainstorm_service.py (rule-based + LLM recommendations)
- Backend: POST /gsc/brainstorm endpoint with 3-word minimum validation
- Frontend: gscBrainstorm.ts API client
- Frontend: useGSCBrainstormConnection hook (popup OAuth, no /onboarding redirect)
- Frontend: useGSCBrainstorm hook (connect check + brainstorm call)
- Frontend: GSCBrainstormModal (3-tab results: Opportunities, Gaps, AI Recs)
- Frontend: BrainstormButton (visible at 3+ words, GSC connect overlay)
- Wire BrainstormButton into ManualResearchForm and ResearchAction
- Add blog_writer to gsc_auth router features for ALWRITY_ENABLED_FEATURES
2026-05-20 22:44:15 +05:30
ي
68190dedb3
Implement real Wix token-backed routes and error mapping
2026-05-20 22:42:16 +05:30
ي
9afd0d322d
# Harden Wix test routes behind admin+env gating
2026-05-20 22:38:36 +05:30
ي
439a9b6be3
Secure WordPress OAuth token storage with encryption and migration
2026-05-20 22:35:05 +05:30
ي
11d83e6f86
Harden OAuth callback postMessage origin and payload encoding
2026-05-20 22:35:05 +05:30
ي
8834a05cf5
Delete .planning directory
2026-05-18 18:25:38 +05:30
ي
ac34cb2935
Delete data/media/podcast_videos/AI_Videos directory
2026-05-18 18:24:42 +05:30
ي
882a62fa98
Unify workspace creation and add minimal-mode contract tests
2026-05-18 14:35:58 +05:30
ي
e8c190188f
Unify workspace root resolution across services
2026-05-18 14:35:37 +05:30
ajaysi
928c2f20aa
fix: WYSIWYG editor, content generation, and writing assistant bug fixes
...
- Fix text selection menu not showing: wire contentRef via inputRef on multiline TextField
- Fix blog title not truncating: add min-w-0 for flex item overflow
- Fix outline generation 500: escape curly braces in f-string prompt template
- Fix content generation 'NoneType not callable': replace SessionLocal() with get_session_for_user(), add db param to MediumBlogGenerator, fix signature mismatch in database_task_manager
- Fix writing assistant suggest 500: add auth + user_id to API endpoint and service, replace sync requests with httpx.AsyncClient
- Fix hallucination detector 404: explicitly include router in main.py and app.py
- Fix missing error_data in task failure responses
- Hide CopilotKit web inspector button
- Remove hardcoded fallback suggestions from SmartTypingAssist
- Fix stale closure refs in SmartTypingAssist handleTypingChange
- Add two-column editor layout, stats bar, section hover menu
- Various subscription, billing, and research module improvements
2026-05-14 09:11:51 +05:30
ajaysi
7385100017
fix(product-marketing): route image generation through unified subscription validation
...
Backend:
- product_image_service.py: Replaced direct wavespeed_client.generate_image()
with generate_image() from main_image_generation (unified entry point)
- This ensures subscription pre-flight validation (_validate_image_operation)
and usage tracking (_track_image_operation_usage) are enforced
- Removed _generate_image_with_retry method and WaveSpeedClient dependency
- Animation/video/avatar services already route through ImageStudioManager - no changes needed
Frontend:
- useProductMarketing.ts: Added formatError() helper for 402/429 detection
across all 8 API operations
- useCampaignCreator.ts: Added formatError() helper for 402/429 detection
across all 13 API operations
- All error messages now surface subscription limits with upgrade prompts
2026-05-14 09:11:51 +05:30
ajaysi
93a1985d9f
fix(image-studio): add asset library saving + 402 subscription error handling
...
Backend:
- New POST /api/image-studio/save-to-library endpoint
Saves generated base64 images to workspace disk and creates ContentAsset
record for the unified asset library. Returns asset_id, file_url, filename.
Frontend:
- Added saveImageToLibrary() to useImageStudio hook
- CreateStudio auto-saves generated images to asset library after creation
- All 8 API operations now use _formatErrorMessage() helper
for 402/429 subscription limit errors with upgrade prompts
instead of generic error messages
2026-05-14 09:11:51 +05:30
ajaysi
4fdc7d3ea0
refactor(phase3-session-b4): remove legacy router, __init__.py creates router directly
...
- Deleted empty routers/image_studio_router.py (legacy file)
- __init__.py now creates APIRouter directly instead of re-exporting from legacy
- Same prefix, tags, and all 33 routes preserved
- app.py imports unchanged: from routers.image_studio import router as image_studio_router
Final package structure:
routers/image_studio/
├── __init__.py ← creates router, includes 10 sub-routers
├── models.py ← 40 Pydantic models
├── deps.py ← shared dependencies
├── create.py edit.py face_swap.py upscale.py ← endpoint groups
├── control.py social.py transform.py
├── compress.py convert.py health.py
2026-05-14 09:11:51 +05:30
ajaysi
85d6cc1d20
refactor(phase3-session-b3): extract create, transform, compress, convert into sub-routers
...
Extracted remaining 4 endpoint groups:
- create.py: 7 endpoints (create, 3xtemplates, providers, estimate-cost, platform-specs)
- transform.py: 4 endpoints (image-to-video, talking-avatar, estimate-cost, video serving)
- compress.py: 5 endpoints (compress, batch, estimate, formats, presets)
- convert.py: 4 endpoints (convert-format, batch, supported, recommendations)
Legacy router is now empty (only imports + empty router definition).
All 33 routes preserved. Package is fully modular.
2026-05-14 09:11:51 +05:30
ajaysi
0d20dcb801
refactor(phase3-session-b2): extract edit and face_swap into sub-routers
...
Extracted 2 endpoint groups into separate sub-router modules:
- edit.py: 4 endpoints (POST /edit/process, GET /edit/operations, GET /edit/models, POST /edit/recommend)
- face_swap.py: 3 endpoints (POST /face-swap/process, GET /face-swap/models, POST /face-swap/recommend)
All 33 routes preserved (10 extracted in B1, 7 extracted in B2, 16 remaining in legacy).
2026-05-14 09:11:51 +05:30