stevensDemogenerateFunFacts.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
stevensDemo.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`
stevensDemoApp.tsx8 matches
10import { NotebookView } from "./NotebookView.tsx";
1112const API_BASE = "/api/memories";
13const MEMORIES_PER_PAGE = 20; // Increased from 7 to 20 memories per page
149091// Fetch avatar image
92fetch("/api/images/stevens.jpg")
93.then((response) => {
94if (response.ok) return response.blob();
104105// Fetch wood background
106fetch("/api/images/wood.jpg")
107.then((response) => {
108if (response.ok) return response.blob();
133setError(null);
134try {
135const response = await fetch(API_BASE);
136if (!response.ok) {
137throw new Error(`HTTP error! status: ${response.status}`);
176177try {
178const response = await fetch(API_BASE, {
179method: "POST",
180headers: { "Content-Type": "application/json" },
199200try {
201const response = await fetch(`${API_BASE}/${id}`, {
202method: "DELETE",
203});
231232try {
233const response = await fetch(`${API_BASE}/${editingMemory.id}`, {
234method: "PUT",
235headers: { "Content-Type": "application/json" },
606<div className="font-pixel text-[#f8f1e0]">
607<style jsx>{`
608@import url("https://fonts.googleapis.com/css2?family=Pixelify+Sans&display=swap");
609610@tailwind base;
cp-rootold-get_vals_endpoints.tsx11 matches
1export default async function(req: Request) {
2try {
3const apiKey = Deno.env.get("VALTOWN_API_TOKEN");
45if (!apiKey) {
6return new Response(
7JSON.stringify({ error: "VALTOWN_API_TOKEN not found" }, null, 2),
8{ status: 400, headers: { "Content-Type": "application/json" } },
9);
1112// Get my vals using the authenticated /me/vals endpoint
13const valsResponse = await fetch("https://api.val.town/v2/me/vals", {
14headers: {
15"Authorization": `Bearer ${apiKey}`,
16"Content-Type": "application/json",
17},
20if (!valsResponse.ok) {
21const errorText = await valsResponse.text();
22console.log("API Error response:", errorText);
23throw new Error(
24`Failed to fetch vals: ${valsResponse.status} ${valsResponse.statusText}. Response: ${errorText}`,
42for (const val of vals) {
43try {
44// Use the files API to get the actual file structure
45const filesResponse = await fetch(
46`https://api.val.town/v2/vals/${val.id}/files?path=&recursive=true&limit=100`,
47{
48headers: {
49"Authorization": `Bearer ${apiKey}`,
50"Content-Type": "application/json",
51},
80// First get the file metadata to get the HTTP URL
81const fileContentResponse = await fetch(
82`https://api.val.town/v2/vals/${val.id}/files?path=${encodeURIComponent(endpointsFile.path)}`,
83{
84headers: {
85"Authorization": `Bearer ${apiKey}`,
86"Content-Type": "application/json",
87},
untitled-6400main.tsx1 match
6⦿ The system can use natural language processing to analyze user input and suggest the next best course or module.
78⦿ Built using open-source tools like LangChain, and doesn't require paid APIs. Perfect for educational startups or personal use.`;
9}
12<html>
13<head>
14<title>Test Person Enrichment API</title>
15<script src="https://cdn.twind.style" crossOrigin="anonymous"></script>
16<script src="https://esm.town/v/std/catch"></script>
50<body>
51<div className="container">
52<h1>Test Person Enrichment API</h1>
53<p>Endpoint: <code>${endpointUrl}</code></p>
54<form id="enrichmentForm">
124
125responseArea.textContent = JSON.stringify(result, null, 2);
126// Check for result.success as per the target API spec in index.ts (PersonEnrichmentResponse)
127if (response.ok && result.success) {
128responseArea.className = 'success';
kawtarnew-file-1664.tsx1 match
6⦿ Can be implemented using open-source tools like LangChain or HuggingFace.
78⦿ Doesn't require a paid API and is suitable for educational or practical purposes.`;
9}
18return serveFile(path, import.meta.url);
19}
20if (path.startsWith("/api/list")) {
21// Get all rows from lab_upload_blobs
22const response = await sqlite.execute(`
26return Response.json({ ok: true, rows: response.rows });
27}
28if (path.startsWith("/api/upload")) {
29return upload(req);
30}
31if (path.startsWith("/api/delete")) {
32return _delete(req);
33}
spagindex.html3 matches
230uploadButton.disabled = true;
231uploadButton.textContent = "Uploading...";
232const response = await fetch("/api/upload", {
233method: "POST",
234body,
251252async function fetchUploads() {
253const response = await fetch("/api/list");
254const data = await response.json();
255return data.rows;
395deleteButton.textContent = "Deleting...";
396const response = await fetch(
397`/api/delete`,
398{
399method: "POST",
untitled-929main.tsx1 match
6⦿ Can be implemented using open-source tools like LangChain or HuggingFace.
78⦿ Doesn't require a paid API and is suitable for educational or practical purposes.`;
9}