diff --git a/backend/igny8_core/modules/billing/serializers.py b/backend/igny8_core/modules/billing/serializers.py
index d0a8afee..6d7780a7 100644
--- a/backend/igny8_core/modules/billing/serializers.py
+++ b/backend/igny8_core/modules/billing/serializers.py
@@ -44,16 +44,12 @@ class CreditUsageLogSerializer(serializers.ModelSerializer):
read_only_fields = ['created_at', 'account']
def get_client_cost(self, obj) -> str:
- """Calculate client-facing cost from credits * default_credit_price_usd"""
+ """Calculate client-facing cost from credits * default_credit_price_usd (price per credit)"""
from igny8_core.business.billing.models import BillingConfiguration
- try:
- config = BillingConfiguration.get_config()
- price_per_credit = config.default_credit_price_usd
- client_cost = Decimal(obj.credits_used) * price_per_credit
- return str(client_cost.quantize(Decimal('0.0001')))
- except Exception:
- # Fallback to cost_usd if billing config unavailable
- return str(obj.cost_usd) if obj.cost_usd else '0.0000'
+ config = BillingConfiguration.get_config()
+ price_per_credit = config.default_credit_price_usd
+ client_cost = Decimal(obj.credits_used) * price_per_credit
+ return str(client_cost.quantize(Decimal('0.0001')))
def get_site_name(self, obj) -> Optional[str]:
"""Get the site name if available"""
diff --git a/frontend/src/components/sites/WordPressIntegrationForm.tsx b/frontend/src/components/sites/WordPressIntegrationForm.tsx
index 3caa4b42..c7a38d07 100644
--- a/frontend/src/components/sites/WordPressIntegrationForm.tsx
+++ b/frontend/src/components/sites/WordPressIntegrationForm.tsx
@@ -6,23 +6,17 @@ import React, { useState, useEffect } from 'react';
import { Card } from '../ui/card';
import Button from '../ui/button/Button';
import IconButton from '../ui/button/IconButton';
-import Label from '../form/Label';
import Input from '../form/input/InputField';
-import Checkbox from '../form/input/Checkbox';
-import Switch from '../form/switch/Switch';
import { useToast } from '../ui/toast/ToastContainer';
import { fetchAPI, API_BASE_URL } from '../../services/api';
import {
- CheckCircleIcon,
- AlertIcon,
DownloadIcon,
PlusIcon,
CopyIcon,
TrashBinIcon,
GlobeIcon,
- KeyIcon,
RefreshCwIcon,
- InfoIcon
+ InfoIcon,
} from '../../icons';
interface WordPressIntegrationFormProps {
@@ -283,56 +277,40 @@ export default function WordPressIntegrationForm({
{/* Connection Status & Test Button */}
{apiKey && (
-
- {/* Status Indicator - Uses theme colors from design-system */}
-
- {connectionStatus === 'connected' && (
- <>
-
Connected>
- )}
- {connectionStatus === 'testing' && (
- <>
-
Testing...>
- )}
- {connectionStatus === 'api_key_pending' && (
- <>
-
Pending Setup>
- )}
- {connectionStatus === 'plugin_missing' && (
- <>
-
Plugin Missing>
- )}
- {connectionStatus === 'error' && (
- <>
-
Error>
- )}
- {connectionStatus === 'unknown' && (
- <>
-
Not Tested>
- )}
+
+ {/* Connection Status Indicator */}
+
+
+
+ {connectionStatus === 'connected' && 'Connected'}
+ {connectionStatus === 'testing' && 'Testing...'}
+ {connectionStatus === 'api_key_pending' && 'Pending Setup'}
+ {connectionStatus === 'plugin_missing' && 'Plugin Missing'}
+ {connectionStatus === 'error' && 'Error'}
+ {connectionStatus === 'unknown' && 'Configured'}
+
- {/* Test Connection Button - IconButton only */}
-
}
- />
+ startIcon={
}
+ >
+ Test Connection
+
)}
diff --git a/frontend/src/pages/Sites/Settings.tsx b/frontend/src/pages/Sites/Settings.tsx
index 221d0187..6f1387d3 100644
--- a/frontend/src/pages/Sites/Settings.tsx
+++ b/frontend/src/pages/Sites/Settings.tsx
@@ -499,19 +499,6 @@ export default function SiteSettings() {
return `${months}mo ago`;
};
- // Integration status - tracks actual connection state
- const [integrationStatus, setIntegrationStatus] = useState<'connected' | 'configured' | 'not_configured'>('not_configured');
-
- // Check integration status based on API key presence (will be updated by WordPressIntegrationForm)
- useEffect(() => {
- if (site?.wp_api_key) {
- // API key exists - mark as configured (actual connection tested in WordPressIntegrationForm)
- setIntegrationStatus('configured');
- } else {
- setIntegrationStatus('not_configured');
- }
- }, [site?.wp_api_key]);
-
// Sync Now handler - tests actual WordPress connection
const [syncLoading, setSyncLoading] = useState(false);
const [lastSyncTime, setLastSyncTime] = useState
(null);
@@ -535,10 +522,8 @@ export default function SiteSettings() {
const healthChecks = res.health_checks || {};
if (healthChecks.plugin_has_api_key) {
- setIntegrationStatus('connected');
toast.success('WordPress connection verified - fully connected!');
} else if (healthChecks.plugin_installed) {
- setIntegrationStatus('configured');
toast.warning('Plugin found but API key not configured in WordPress');
} else {
toast.warning('WordPress reachable but IGNY8 plugin not installed');
@@ -684,21 +669,6 @@ export default function SiteSettings() {
Publishing
-
- {/* Integration Status Indicator - Larger */}
-
-
-
- {integrationStatus === 'connected' && 'Connected'}
- {integrationStatus === 'configured' && 'Configured'}
- {integrationStatus === 'not_configured' && 'Not Configured'}
-
-