diff --git a/agents/templates/agents/marketplace.html b/agents/templates/agents/marketplace.html
index a2a42e5..d17c1a8 100644
--- a/agents/templates/agents/marketplace.html
+++ b/agents/templates/agents/marketplace.html
@@ -95,6 +95,10 @@
🎓 Try Now →
+ {% elif agent.slug == 'ai-brand-strategist' %}
+
+ 🧠 Try Now →
+
{% else %}
Try Now →
{% endif %}
@@ -103,6 +107,10 @@
🔐 Login to Try
+ {% elif agent.slug == 'ai-brand-strategist' %}
+
+ 🔐 Login to Try
+
{% else %}
🔐 Login to Try
diff --git a/agents/urls.py b/agents/urls.py
index 96e490f..eadd0dc 100644
--- a/agents/urls.py
+++ b/agents/urls.py
@@ -10,6 +10,8 @@ urlpatterns = [
# Direct access routes
path('career-navigator/', views.career_navigator_view, name='career_navigator'),
path('career-navigator/access/', views.career_navigator_access, name='career_navigator_access'),
+ path('ai-brand-strategist/', views.ai_brand_strategist_view, name='ai_brand_strategist'),
+ path('ai-brand-strategist/access/', views.ai_brand_strategist_access, name='ai_brand_strategist_access'),
# API endpoints - specific URLs first to avoid slug conflicts
path('api/execute/', views.execute_agent, name='execute_agent'),
diff --git a/agents/views.py b/agents/views.py
index 5336ad4..ad8e21b 100644
--- a/agents/views.py
+++ b/agents/views.py
@@ -289,6 +289,102 @@ def career_navigator_view(request):
return render(request, 'career_navigator.html', context)
+def ai_brand_strategist_view(request):
+ """Display the AI Brand Strategist form page"""
+ if not request.user.is_authenticated:
+ # Clear any existing messages to prevent confusion
+ storage = messages.get_messages(request)
+ storage.used = True
+ messages.error(request, 'Please login to access the AI Brand Strategist.')
+ return redirect('authentication:login')
+
+ # Get the AI Brand Strategist agent
+ try:
+ agent = Agent.objects.get(slug='ai-brand-strategist', is_active=True)
+ except Agent.DoesNotExist:
+ messages.error(request, 'AI Brand Strategist is currently unavailable.')
+ return redirect('agents:marketplace')
+
+ # Check if user has a recent execution (within last 2 hours) or just redirect to payment
+ from django.utils import timezone
+ from datetime import timedelta
+
+ recent_execution = AgentExecution.objects.filter(
+ agent=agent,
+ user=request.user,
+ status='completed',
+ created_at__gte=timezone.now() - timedelta(hours=2)
+ ).first()
+
+ if not recent_execution:
+ messages.info(request, 'Please click "Try Now" to access your AI Brand Strategist consultation.')
+ return redirect('agents:marketplace')
+
+ context = {
+ 'agent': agent,
+ 'form_url': agent.webhook_url,
+ 'user_balance': request.user.wallet_balance,
+ 'execution': recent_execution
+ }
+
+ return render(request, 'ai_brand_strategist.html', context)
+
+
+def ai_brand_strategist_access(request):
+ """Handle Try Now button click - charge wallet and redirect to form"""
+ if not request.user.is_authenticated:
+ # Clear any existing messages to prevent confusion
+ storage = messages.get_messages(request)
+ storage.used = True
+ messages.error(request, 'Please login to access the AI Brand Strategist.')
+ return redirect('authentication:login')
+
+ # Get the AI Brand Strategist agent
+ try:
+ agent = Agent.objects.get(slug='ai-brand-strategist', is_active=True)
+ except Agent.DoesNotExist:
+ messages.error(request, 'AI Brand Strategist is currently unavailable.')
+ return redirect('agents:marketplace')
+
+ # Check if user has sufficient balance
+ if not request.user.has_sufficient_balance(agent.price):
+ messages.error(request, f'Insufficient balance! You need {agent.price} AED to access the AI Brand Strategist.')
+ return redirect('wallet:wallet')
+
+ # Deduct fee from user wallet
+ success = request.user.deduct_balance(
+ agent.price,
+ f'{agent.name} - Direct Access',
+ agent.slug
+ )
+
+ if not success:
+ messages.error(request, 'Failed to process payment. Please try again.')
+ return redirect('agents:marketplace')
+
+ # Create execution record for tracking
+ execution = AgentExecution.objects.create(
+ agent=agent,
+ user=request.user,
+ input_data={'action': 'direct_access', 'source': 'try_now_button'},
+ fee_charged=agent.price,
+ status='completed',
+ output_data={
+ 'type': 'direct_access',
+ 'message': f'Direct access granted to {agent.name}',
+ 'access_method': 'try_now_button'
+ },
+ completed_at=timezone.now()
+ )
+
+ # Success message and redirect to form
+ if agent.price > 0:
+ messages.success(request, f'Welcome to your {agent.name} consultation.')
+ else:
+ messages.success(request, f'Welcome to your {agent.name} consultation.')
+ return redirect('agents:ai_brand_strategist')
+
+
@api_view(['GET'])
@permission_classes([IsAuthenticated])
def execution_list(request):
diff --git a/templates/ai_brand_strategist.html b/templates/ai_brand_strategist.html
new file mode 100644
index 0000000..1b48a78
--- /dev/null
+++ b/templates/ai_brand_strategist.html
@@ -0,0 +1,43 @@
+{% extends 'base.html' %}
+{% load static %}
+
+{% block title %}AI Brand Strategist - Quantum Tasks AI{% endblock %}
+
+{% block extra_css %}
+
+{% endblock %}
+
+{% block content %}
+
+
+
+{% endblock %}
\ No newline at end of file