ajaysi
2f93ae4891
Merge remote-tracking branch 'origin/codex/add-sender-email-validation-and-logging'
2026-06-03 18:50:53 +05:30
ajaysi
2a879a6e24
Merge remote-tracking branch 'origin/codex/update-compliance-requirements-for-outreach-send'
2026-06-03 18:49:07 +05:30
ajaysi
7749b4db0e
Merge remote-tracking branch 'origin/codex/refactor-backlink-outreach-services-for-async-support'
...
# Conflicts:
# backend/routers/backlink_outreach.py
2026-06-03 18:49:01 +05:30
ي
cbace3b752
Validate backlink outreach sender aliases
2026-06-03 18:48:17 +05:30
ي
98d4ac6dbd
Harden backlink outreach send policy
2026-06-03 18:33:11 +05:30
ي
55b7209554
Refactor backlink discovery HTTP calls
2026-06-03 18:28:40 +05:30
ajaysi
57e46a20f8
Merge remote-tracking branch 'origin/codex/update-backlink-outreach-for-campaign-validation'
2026-06-03 18:22:35 +05:30
ي
ec2f9151b8
Harden backlink lead campaign ownership
2026-06-03 18:19:16 +05:30
ي
40516e5c79
Secure backlink lead status updates
2026-06-03 18:16:10 +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