TownieuseProjects.tsx1 match
1import { useState, useEffect } from "react";
23const ENDPOINT = "/api/projects-loader";
45export function useProjects() {
TownieuseCreateProject.tsx1 match
1import { useState, useEffect } from "react";
23const ENDPOINT = "/api/create-project";
45export function useCreateProject() {
TownieuseCreateBranch.tsx1 match
1import { useState, useEffect } from "react";
23const ENDPOINT = "/api/create-branch";
45export function useCreateBranch(projectId: string) {
TownieuseChatLogic.ts2 matches
14project,
15branchId,
16// anthropicApiKey,
17// bearerToken,
18selectedFiles,
35status,
36} = useChat({
37api: "/api/send-message",
38body: {
39project,
TownieuseBranches.tsx1 match
1import { useState, useEffect } from "react";
23const ENDPOINT = "/api/project-branches";
45export function useBranches (projectId: string) {
Towniesystem_prompt.txt9 matches
13- Generate code in TypeScript or TSX
14- Add appropriate TypeScript types and interfaces for all data structures
15- Prefer official SDKs or libraries than writing API calls directly
16- Ask the user to supply API or library documentation if you are at all unsure about it
17- **Never bake in secrets into the code** - always use environment variables
18- Include comments explaining complex logic (avoid commenting obvious operations)
23### 1. HTTP Trigger
2425- Create web APIs and endpoints
26- Handle HTTP requests and responses
27- Example structure:
158- **AI Image:** To inline generate an AI image use: `<img src="https://maxm-imggenurl.web.val.run/the-description-of-your-image" />`
159- **Storage:** DO NOT use the Deno KV module for storage
160- **Browser APIs:** DO NOT use the `alert()`, `prompt()`, or `confirm()` methods
161- **Weather Data:** Use open-meteo for weather data (doesn't require API keys) unless otherwise specified
162- **Error Debugging:** Add `<script src="https://esm.town/v/std/catch"></script>` to HTML to capture client-side errors
163- **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
164- **Environment Variables:** Use `Deno.env.get('keyname')` when you need to, but generally prefer APIs that don't require keys
165- **Imports:** Use `https://esm.sh` for npm and Deno dependencies to ensure compatibility on server and browser
166- **Storage Strategy:** Only use backend storage if explicitly required; prefer simple static client-side sites
200### Backend (Hono) Best Practices
201202- Hono is the recommended API framework
203- Main entry point should be `backend/index.ts`
204- Do NOT use Hono serveStatic middleware
225});
226```
227- Create RESTful API routes for CRUD operations
228- Always include this snippet at the top-level Hono app to re-throwing errors to see full stack traces:
229```ts
262- For files in the project, use `readFile` helpers
2632645. **API Design:**
265- `fetch` handler is the entry point for HTTP vals
266- Run the Hono app with `export default app.fetch // This is the entry point for HTTP vals`
TowniesoundEffects.ts4 matches
45/**
6* Plays a bell sound notification using the Web Audio API
7* @returns A Promise that resolves when the sound has started playing
8*/
13const AudioContext = window.AudioContext || (window as any).webkitAudioContext;
14if (!AudioContext) {
15console.warn("Web Audio API not supported in this browser");
16resolve();
17return;
6566/**
67* Plays a simple notification sound using the Web Audio API
68* This is a simpler, shorter bell sound
69* @returns A Promise that resolves when the sound has started playing
75const AudioContext = window.AudioContext || (window as any).webkitAudioContext;
76if (!AudioContext) {
77console.warn("Web Audio API not supported in this browser");
78resolve();
79return;
Towniesend-message.ts6 matches
33}
3435const { messages, project, branchId, anthropicApiKey, selectedFiles, images } = await c.req.json();
3637// do we want to allow user-provided tokens still
38const apiKey = anthropicApiKey || Deno.env.get("ANTHROPIC_API_KEY");
39const our_api_token = apiKey === Deno.env.get("ANTHROPIC_API_KEY");
4041if (our_api_token) {
42if (await overLimit(bearerToken)) {
43const user = await getUser(bearerToken);
5960const rowid = await startTrackingUsage({
61our_api_token,
62bearerToken, // will look up the userId from this
63branch_id: branchId,
6869const anthropic = createAnthropic({
70apiKey,
71});
72
Townieschema.tsx2 matches
19finish_reason?: string;
20num_images?: number;
21our_api_token: boolean;
22}
2344finish_reason TEXT,
45num_images INTEGER,
46our_api_token INTEGER NOT NULL,
47finish_timestamp INTEGER
48)
Townierequests.ts4 matches
17finish_reason: string | null;
18num_images: number | null;
19our_api_token: number;
20}
2157
58// Fetch the inference calls data
59fetch('/api/inference-calls?usage_id=' + usageId)
60.then(response => response.json())
61.then(data => {
192<th>Finish</th>
193<th>Images</th>
194<th>Our API</th>
195</tr>
196</thead>
216<td>${row.finish_reason || '-'}</td>
217<td>${formatNumber(row.num_images)}</td>
218<td>${formatBoolean(row.our_api_token)}</td>
219</tr>
220`).join("")}