7 <script src="https://cdn.twind.style" crossorigin></script>
8 <script src="https://esm.town/v/std/catch"></script>
9 <link rel="icon" href="data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 100 100'><text y='.9em' font-size='90'>🧠</text></svg>">
10 <style>
11 /* Custom animations and styles */
178 <div className="flex items-center">
179 <img
180 src={coin.image}
181 alt={coin.name}
182 className="w-12 h-12 rounded-full mr-4"
29 <div className="flex items-center">
30 <img
31 src={coin.image}
32 alt={coin.name}
33 className="w-10 h-10 rounded-full mr-3"
8 <script src="https://esm.town/v/std/catch"></script>
9 <link rel="stylesheet" href="/frontend/style.css">
10 <link rel="icon" href="data:image/svg+xml,<svg xmlns='http://www.w3.org/2000/svg' viewBox='0 0 100 100'><text y='.9em' font-size='90'>₿</text></svg>">
11</head>
12<body class="bg-gray-50 min-h-screen">
5 symbol: string;
6 name: string;
7 image: string;
8 current_price: number;
9 market_cap: number;
13 price REAL NOT NULL,
14 category TEXT NOT NULL,
15 image_url TEXT,
16 stock INTEGER DEFAULT 0,
17 created_at DATETIME DEFAULT CURRENT_TIMESTAMP
103 <div className="px-6 py-4">
104 <div className="flex items-center space-x-4">
105 {/* Product Image */}
106 <div className="flex-shrink-0">
107 {product.image_url ? (
108 <img
109 src={product.image_url}
110 alt={product.name}
111 className="w-16 h-16 object-cover rounded-lg"
183 return (
184 <div className="bg-white rounded-lg shadow-sm hover:shadow-md transition-shadow product-card">
185 {/* Product Image */}
186 <div className="aspect-w-1 aspect-h-1 w-full overflow-hidden rounded-t-lg">
187 {product.image_url ? (
188 <img
189 src={product.image_url}
190 alt={product.name}
191 className="w-full h-48 object-cover"
192 />
193 ) : (
194 <div className="w-full h-48 product-image-placeholder">
195 📦
196 </div>
25}
26
27/* Product image placeholder */
28.product-image-placeholder {
29 background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
30 display: flex;
27export async function getCartItems(sessionId: string): Promise<CartItem[]> {
28 return await sqlite.execute(`
29 SELECT ci.*, p.name, p.description, p.price, p.category, p.image_url, p.stock
30 FROM cart_items ci
31 JOIN products p ON ci.product_id = p.id
111export async function getOrderItems(orderId: number): Promise<OrderItem[]> {
112 return await sqlite.execute(`
113 SELECT oi.*, p.name, p.description, p.category, p.image_url
114 FROM order_items oi
115 JOIN products p ON oi.product_id = p.id