15 url: tool.url,
16 pricing: tool.pricing,
17 imageUrl: tool.image_url,
18 features
19 };
37 url: tool.url,
38 pricing: tool.pricing,
39 imageUrl: tool.image_url,
40 features
41 };
64 url: tool.url,
65 pricing: tool.pricing,
66 imageUrl: tool.image_url,
67 features
68 };
104 url: tool.url,
105 pricing: tool.pricing,
106 imageUrl: tool.image_url,
107 features
108 };
17 url TEXT NOT NULL,
18 pricing TEXT NOT NULL,
19 image_url TEXT
20 )
21 `);
145 for (const tool of tools) {
146 const result = await sqlite.execute(
147 `INSERT INTO ${TOOLS_TABLE} (name, description, category, url, pricing, image_url)
148 VALUES (?, ?, ?, ?, ?, ?)`,
149 [tool.name, tool.description, tool.category, tool.url, tool.pricing, null]
20 features: string[];
21 pricing: string;
22 imageUrl?: string;
23}
24
30 "rating": 4.5,
31 "amenities": ["string"],
32 "imageUrl": "string",
33 "weeklyPrice": 700,
34 "nightlyPrice": 120
193 const card = hotelCardTemplate.content.cloneNode(true);
194
195 // Set hotel image
196 const img = card.querySelector('img');
197 img.src = hotel.imageUrl;
198 img.alt = hotel.name;
199
100 rating,
101 amenities: hotelAmenities,
102 imageUrl: `https://placehold.co/600x400/png?text=Hotel+${i+1}`,
103 weeklyPrice,
104 nightlyPrice
12 rating: number;
13 amenities: string[];
14 imageUrl: string;
15 weeklyPrice: number;
16 nightlyPrice: number;
18
19 <!-- Favicon -->
20 <link rel="icon" href="/frontend/assets/favicon.ico" type="image/x-icon">
21
22 <!-- Preload key assets -->
50 src: "/frontend/assets/icon-192.png",
51 sizes: "192x192",
52 type: "image/png"
53 },
54 {
55 src: "/frontend/assets/icon-512.png",
56 sizes: "512x512",
57 type: "image/png"
58 }
59 ]
458 <title>Smart Quiz Challenge</title>
459 <meta name="viewport" content="width=device-width, initial-scale=1">
460 <link rel="icon" href="data:image/svg+xml,<svg xmlns=%22http://www.w3.org/2000/svg%22 viewBox=%220 0 100 100%22><text y=%22.9em%22 font-size=%2290%22>🧠</text></svg>">
461 <style>
462 body {