IcarusBot.cursorrules10 matches
20### 2. HTTP Vals
2122- Create web APIs and endpoints
23- Handle HTTP requests and responses
24- Example structure:
66- Generate code in TypeScript
67- Add appropriate TypeScript types and interfaces for all data structures
68- Prefer official SDKs or libraries than writing API calls directly
69- Ask the user to supply API or library documentation if you are at all unsure about it
70- **Never bake in secrets into the code** - always use environment variables
71- Include comments explaining complex logic (avoid commenting obvious operations)
190- For AI-generated images, use: `https://maxm-imggenurl.web.val.run/the-description-of-your-image`
191- **Storage:** DO NOT use the Deno KV module for storage
192- **Browser APIs:** DO NOT use the `alert()`, `prompt()`, or `confirm()` methods
193- **Weather Data:** Use open-meteo for weather data (doesn't require API keys) unless otherwise specified
194- **View Source:** Add a view source link with `import.meta.url.replace("esm.town", "val.town")` and include `target="_top"` attribute
195- **Error Debugging:** Add `<script src="https://esm.town/v/std/catch"></script>` to HTML to capture client-side errors
196- **Error Handling:** Only use try...catch when there's a clear local resolution; avoid catches that merely log or return 500s - let errors bubble up with full context
197- **Environment Variables:** Use `Deno.env.get('keyname')` and minimize their use - prefer APIs without keys
198- **Imports:** Use `https://esm.sh` for npm and Deno dependencies to ensure compatibility on server and browser
199- **Storage Strategy:** Only use backend storage if explicitly required; prefer simple static client-side sites
230231### Backend (Hono) Best Practices
232- Hono is the recommended API framework (similar to Express, Flask, or Sinatra)
233- Main entry point should be `backend/index.ts`
234- **Static asset serving:** Use the utility functions to read and serve project files:
251});
252```
253- Create RESTful API routes for CRUD operations
254- Be careful with error handling as Hono tends to swallow errors
255- Always include this snippet at the top-level Hono app to re-throwing errors to see full stack traces:
268- Use React 18.2.0 consistently in all imports and the `@jsxImportSource` pragma
269- Follow the React component pattern from the example project
270- Handle API calls properly with proper error catching
271272### Database Patterns
299- For files in the project, use `readFile` helpers
3003015. **API Design:**
302- `fetch` handler is the entry point for HTTP vals
303- Run the Hono app with `export default app.fetch // This is the entry point for HTTP vals`
Icarus_Telegram_Botindex.ts1 match
30// This is a no-op if nothing's changed
31if (!isEndpointSet) {
32await bot.api.setWebhook(req.url, {
33secret_token: SECRET_TOKEN,
34});
Bates_botgetCalendarEvents.ts2 matches
22const endDate = addDays(today, 7);
2324// Format dates for API request
25const timeMin = formatISO(today);
26const timeMax = formatISO(endDate);
3940try {
41// Initialize Google Calendar API client for this account
42const calendar = await pipeDreamGoogle("calendar", calendarConfig.accountId);
43
9console.log("test");
1011const response = await fetch("/api/test", {
12method: "POST",
13headers: { "Content-Type": "application/json" },
5const app = new Hono();
67app.post("/api/test", async (c) => {
8const body = await c.req.json();
9const test = await anthropicCompletion(body.context);
48<pre><code id="resultCode"></code></pre>
49</div>
50<h2>API Documentation</h2>
51<p>To use the POST endpoint programmatically, send a POST request to this URL with the TypeScript code in the request body.</p>
52<h3>Curl Example:</h3>
my-first-val02_http.tsx2 matches
2425// Look up the user's location from their IP
26const geoResponse = await fetch(`http://ip-api.com/json/${ip}`);
27const geoData = await geoResponse.json();
2840<style>
41{`
42@import url('https://fonts.googleapis.com/css2?family=Share+Tech+Mono&display=swap');
43body { font-family: 'Share Tech Mono', monospace; background: #0a0a0a; color: #00ff00; }
44.glow { text-shadow: 0 0 10px #00ff00; }
Bates_botgenerateFunFacts.ts5 matches
77async function generateFunFacts(previousFacts) {
78try {
79// Get API key from environment
80const apiKey = Deno.env.get("ANTHROPIC_API_KEY");
81if (!apiKey) {
82console.error("Anthropic API key is not configured.");
83return null;
84}
8586// Initialize Anthropic client
87const anthropic = new Anthropic({ apiKey });
8889// Format previous facts for the prompt
69<p className="text-sm text-gray-600">
70{title === "Test d’Orientation"
71? "Passe un test rapide, apprends à te connaître et découvre les carrières qui te correspondent."
72: "Un service intelligent pour accompagner les jeunes dans leur parcours académique."}
73</p>
101<h2 className="text-2xl font-bold mb-4">Comment s’orienter ?</h2>
102<p className="text-gray-600 mb-10">
103Ofoqy, c’est simple et rapide. Quelques clics suffisent pour commencer ton parcours !
104</p>
105<div className="grid grid-cols-1 sm:grid-cols-3 gap-8">
52<p className="text-sm text-gray-600">
53{title === "Test d’Orientation"
54? "Passe un test rapide, apprends à te connaître et découvre les carrières qui te correspondent."
55: "Un service intelligent pour accompagner les jeunes dans leur parcours académique."}
56</p>
76<section className="bg-gray-100 py-16 px-6 md:px-20 text-center">
77<h2 className="text-2xl font-bold mb-4">Comment s’orienter ?</h2>
78<p className="text-gray-600 mb-10">Ofoqy, c’est simple et rapide. Quelques clics suffisent pour commencer ton parcours !</p>
79<div className="grid grid-cols-1 sm:grid-cols-3 gap-8">
80{["Création du Compte", "Test de personnalité", "Voie idéale"].map((step, i) => (