OpenTownieChatInput.tsx2 matches
13}
1415export function ChatInput({
16input,
17handleInputChange,
128onClick={() => {
129const customStop = (window as any).customStopRef?.current;
130if (typeof customStop === "function") {
131customStop();
132}
OpenTownieChatHeader.tsx1 match
17}
1819export function ChatHeader({
20project,
21bearerToken,
OpenTownieBranchControl.tsx1 match
17}
1819export function BranchControl({
20projectId,
21projectName,
OpenTownieApp.tsx4 matches
6import { Projects } from "./Projects.tsx";
78function safeParse(s: string) {
9try {
10return JSON.parse(s);
14}
1516export function App() {
17const [bearerToken, setBearerToken] = useLocalStorage("bearer", "");
18const [anthropicApiKey, setAnthropicApiKey] = useLocalStorage("anthropic_api_key", "");
20const [project, setProject_] = useState(safeParse(projectJSON));
2122function setProject(p: any) {
23setProject_(p);
24setProjectJSON(JSON.stringify(p));
25}
2627function handleLogout() {
28setBearerToken("");
29// Keep the anthropic API key in case the user wants to reuse it
OpenTownieapi.ts1 match
1// Fetch project files from the backend
2export async function fetchProjectFiles(
3{ bearerToken, projectId, branchId }: { bearerToken: string; projectId: string; branchId?: string },
4) {
OpenTownieApiKeyWarning.tsx1 match
6}
78export function ApiKeyWarning({ show }: ApiKeyWarningProps) {
9if (!show) return null;
10
cheerfulTanMarmotmain.tsx1 match
8// Fetches a random joke.
9// Fetches a random joke.
10async function fetchRandomJoke() {
11const response = await fetch(
12"https://official-joke-api.appspot.com/random_joke",
5const COMMENT_WEBHOOK = Deno.env.get("COMMENT_WEBHOOK")!!;
67export async function comment(request: Request) {
8let message;
9
10let unifiedSpeed = 0.8; // Slow movement speed - this now controls everything
1112export function setup() {
13// Create a canvas that fills the entire screen
14createCanvas(windowWidth, windowHeight);
2627// Handle window resizing
28export function windowResized() {
29resizeCanvas(windowWidth, windowHeight);
30// Adjust comet position after resize
32}
3334export function draw() {
35// Create a continuously changing gradient background - simplified version
36colorPhase += 0.005; // Slow color change speed
255}
256257function updateComet() {
258// Fixed position for comet head (base position, bounce is added when drawing)
259cometPosition.x = width / 2;
280}
281282function drawCometTrail() {
283noStroke();
284295}
296297function createCometParticle() {
298// Create particles around the current trail point rather than the comet head
299let trailPos = cometTrail.length > 0
361}
362363function updateParticles() {
364// Update and remove dead particles
365for (let i = particles.length - 1; i >= 0; i--) {
371}
372373function drawParticles() {
374// Draw all particles
375for (let particle of particles) {
vitalSilverBandicootmain.tsx6 matches
3import React, { useEffect, useState } from "https://esm.sh/react@18.2.0";
45function JobPostingBoard() {
6const [jobPosts, setJobPosts] = useState([]);
7const [newPost, setNewPost] = useState({
90}
9192function ChatGroup() {
93const [messages, setMessages] = useState([]);
94const [newMessage, setNewMessage] = useState("");
151}
152153function FindJobsPortals() {
154const jobPortals = [
155{
218}
219220function App() {
221const [activeTab, setActiveTab] = useState("jobs");
222263}
264265function client() {
266createRoot(document.getElementById("root")).render(<App />);
267}
268if (typeof document !== "undefined") { client(); }
269270export default async function server(request: Request): Promise<Response> {
271const { sqlite } = await import("https://esm.town/v/stevekrouse/sqlite");
272const KEY = "vitalSilverBandicoot";