+ Sharpe Ratio
+ {results.sharpe_ratio.toFixed(2)}
+
+
+
+
+
+
+ {/if}
+
+
+
\ No newline at end of file
diff --git a/src/frontend/src/lib/components/BotCard.svelte b/src/frontend/src/lib/components/BotCard.svelte
new file mode 100644
index 0000000..69c7147
--- /dev/null
+++ b/src/frontend/src/lib/components/BotCard.svelte
@@ -0,0 +1,127 @@
+
+
+
e.key === 'Enter' && handleOpen()}>
+
+
{bot.name}
+ {#if bot.description}
+
{bot.description}
+ {/if}
+ {bot.status}
+
+ {#if showActions}
+
e.stopPropagation()} role="group">
+
+
+
+ {/if}
+
+
+
\ No newline at end of file
diff --git a/src/frontend/src/lib/components/BotSelector.svelte b/src/frontend/src/lib/components/BotSelector.svelte
new file mode 100644
index 0000000..4b3eed5
--- /dev/null
+++ b/src/frontend/src/lib/components/BotSelector.svelte
@@ -0,0 +1,94 @@
+
+
+
+ {#if label}
+
+ {/if}
+
+
+ {bots.length}/{MAX_BOTS}
+
+
+
+
\ No newline at end of file
diff --git a/src/frontend/src/lib/components/ChatInterface.svelte b/src/frontend/src/lib/components/ChatInterface.svelte
new file mode 100644
index 0000000..ed83b7a
--- /dev/null
+++ b/src/frontend/src/lib/components/ChatInterface.svelte
@@ -0,0 +1,300 @@
+
+
+
Welcome to {bot?.name || 'your bot'}! Describe your trading strategy in plain English.
+
Example: "Buy PEPE when the price drops by 5% within 1 hour"
+
+ {/if}
+
+ {#each messages as message}
+
+
+ {message.content}
+
+
+ {message.timestamp.toLocaleTimeString()}
+
+
+ {/each}
+
+ {#if isSending}
+
+
+
+
+
+
+
+ {/if}
+
+
+ {#if bot}
+
+
+
+
+ {/if}
+
+
+
\ No newline at end of file
diff --git a/src/frontend/src/lib/components/ConditionBuilder.svelte b/src/frontend/src/lib/components/ConditionBuilder.svelte
new file mode 100644
index 0000000..06c914b
--- /dev/null
+++ b/src/frontend/src/lib/components/ConditionBuilder.svelte
@@ -0,0 +1,348 @@
+
+
+
+
+
Conditions
+
+
+
+ {#if conditions.length === 0}
+
+
No conditions set
+
Add a condition to define when your strategy triggers
+
+
\ No newline at end of file
diff --git a/src/frontend/src/lib/components/ProUpgradeBanner.svelte b/src/frontend/src/lib/components/ProUpgradeBanner.svelte
new file mode 100644
index 0000000..ca2516f
--- /dev/null
+++ b/src/frontend/src/lib/components/ProUpgradeBanner.svelte
@@ -0,0 +1,121 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/src/frontend/src/lib/components/SignalChart.svelte b/src/frontend/src/lib/components/SignalChart.svelte
new file mode 100644
index 0000000..0557a04
--- /dev/null
+++ b/src/frontend/src/lib/components/SignalChart.svelte
@@ -0,0 +1,228 @@
+
+
+
+ {#if signals.length === 0}
+
+
No signals to display
+
+ {:else}
+
+
+
+
+
+ Buy
+
+
+
+ Sell
+
+
+
+ Hold
+
+
+ {/if}
+
+
+
\ No newline at end of file
diff --git a/src/frontend/src/lib/components/StrategyPreview.svelte b/src/frontend/src/lib/components/StrategyPreview.svelte
new file mode 100644
index 0000000..5988427
--- /dev/null
+++ b/src/frontend/src/lib/components/StrategyPreview.svelte
@@ -0,0 +1,227 @@
+
+
+
+ Take Profit
+ {config.risk_management.take_profit_percent}%
+
+ {/if}
+
+
+ {/if}
+ {/if}
+
+
+
\ No newline at end of file
diff --git a/src/frontend/src/lib/components/TokenPicker.svelte b/src/frontend/src/lib/components/TokenPicker.svelte
new file mode 100644
index 0000000..4248843
--- /dev/null
+++ b/src/frontend/src/lib/components/TokenPicker.svelte
@@ -0,0 +1,256 @@
+
+
+