aiTodoAppqueries.ts6 matches
3import type { Todo, CreateTodoRequest, UpdateTodoRequest } from "../../shared/types.ts";
45export async function getAllTodos(): Promise<Todo[]> {
6const result = await sqlite.execute(`
7SELECT * FROM ${TABLE_NAME}
13}
1415export async function getTodoById(id: number): Promise<Todo | null> {
16const result = await sqlite.execute(`SELECT * FROM ${TABLE_NAME} WHERE id = ?`, [id]);
17return result.rows[0] as Todo || null;
18}
1920export async function createTodo(todo: CreateTodoRequest): Promise<Todo> {
21const result = await sqlite.execute(`
22INSERT INTO ${TABLE_NAME} (title, description, priority)
38}
3940export async function updateTodo(id: number, updates: UpdateTodoRequest): Promise<Todo | null> {
41const fields: string[] = [];
42const values: any[] = [];
75}
7677export async function updateTodoAIPriority(id: number, aiPriority: number, aiReasoning: string): Promise<void> {
78await sqlite.execute(`
79UPDATE ${TABLE_NAME}
83}
8485export async function deleteTodo(id: number): Promise<boolean> {
86const result = await sqlite.execute(`DELETE FROM ${TABLE_NAME} WHERE id = ?`, [id]);
87return result.changes > 0;
brainstormingindex.ts10 matches
305
306<script>
307async function clearUsers() {
308if (confirm('Are you sure you want to clear all users?')) {
309const response = await fetch('/debug/clear-users', { method: 'POST' });
471});
472473// Helper functions
474async function initializeDatabase() {
475// Users table
476await sqlite.execute(`
529}
530531async function hashPassword(password: string): Promise<string> {
532// Simple hash for demo - use bcrypt in production
533const encoder = new TextEncoder();
538}
539540async function verifyPassword(password: string, hash: string): Promise<boolean> {
541const passwordHash = await hashPassword(password);
542return passwordHash === hash;
543}
544545function generateRandomPassword(): string {
546return Math.random().toString(36).slice(-8);
547}
548549async function getUserById(userId: number) {
550const result = await sqlite.execute(
551"SELECT * FROM users WHERE id = ?",
557}
558559async function getCurrentUser(c: any) {
560const userId = getCookie(c, "user_id");
561if (!userId) return null;
564}
565566async function generateAIResponse(messages: any[], initialChallenge: string) {
567const genAI = new GoogleGenerativeAI(Deno.env.get("GEMINI_API_KEY") || "");
568const model = genAI.getGenerativeModel({ model: "gemini-2.0-flash-exp" });
626}
627628function extractCategory(text: string, question: string): string | null {
629// Simple category extraction based on keywords
630const categories = {
brainstormingsignup.html2 matches
326});
327328function showLoginForm() {
329console.log('showLoginForm called'); // Debug
330const modal = document.getElementById('loginModal');
338}
339340function hideLoginForm() {
341const modal = document.getElementById('loginModal');
342if (modal) {
aiTodoAppTodoList.tsx1 match
9}
1011export default function TodoList({ todos, onUpdate, onDelete }: TodoListProps) {
12const [editingId, setEditingId] = useState<number | null>(null);
13const [editTitle, setEditTitle] = useState("");
aiTodoAppTodoForm.tsx1 match
6}
78export default function TodoForm({ onAdd }: TodoFormProps) {
9const [title, setTitle] = useState("");
10const [description, setDescription] = useState("");
brainstormingindex.html3 matches
258259<script>
260// Login Modal Functions
261function showLoginModal() {
262document.getElementById('loginModal').classList.remove('hidden');
263}
264265function hideLoginModal() {
266document.getElementById('loginModal').classList.add('hidden');
267document.getElementById('loginError').classList.add('hidden');
5import TodoList from "./TodoList.tsx";
67export default function App() {
8const [todos, setTodos] = useState<Todo[]>([]);
9const [loading, setLoading] = useState(true);
aiTodoAppmigrations.ts1 match
3const TABLE_NAME = 'todos_v1';
45export async function runMigrations() {
6// Create todos table
7await sqlite.execute(`CREATE TABLE IF NOT EXISTS ${TABLE_NAME} (
EmailCron1weekCron.tsx1 match
34// Cron handler
5export default async function cronValHandler(interval: Interval) {
6// Action
7const now = new Date();
8586// Initialize the website
87document.addEventListener('DOMContentLoaded', function() {
88initializePortfolio();
89initializeMobileMenu();
9495// Mobile Menu Toggle
96function initializeMobileMenu() {
97mobileMenuBtn.addEventListener('click', function() {
98mobileMenu.classList.toggle('hidden');
99const icon = mobileMenuBtn.querySelector('i');
105const mobileLinks = mobileMenu.querySelectorAll('a');
106mobileLinks.forEach(link => {
107link.addEventListener('click', function() {
108mobileMenu.classList.add('hidden');
109const icon = mobileMenuBtn.querySelector('i');
114}
115116// Portfolio Functions
117function initializePortfolio() {
118renderPortfolioItems('all');
119
120filterBtns.forEach(btn => {
121btn.addEventListener('click', function() {
122const filter = this.getAttribute('data-filter');
123
132}
133134function renderPortfolioItems(filter) {
135const filteredItems = filter === 'all'
136? portfolioItems
145}
146147function createPortfolioItem(item, index) {
148const div = document.createElement('div');
149div.className = 'portfolio-item';
173174// Scroll Animations
175function initializeScrollAnimations() {
176const observerOptions = {
177threshold: 0.1,
179};
180
181const observer = new IntersectionObserver(function(entries) {
182entries.forEach(entry => {
183if (entry.isIntersecting) {
194195// Smooth Scrolling for Navigation Links
196function initializeSmoothScrolling() {
197document.querySelectorAll('a[href^="#"]').forEach(anchor => {
198anchor.addEventListener('click', function(e) {
199e.preventDefault();
200const target = document.querySelector(this.getAttribute('href'));
211212// Contact Form
213function initializeContactForm() {
214contactForm.addEventListener('submit', async function(e) {
215e.preventDefault();
216
252253// Notification System
254function showNotification(message, type = 'info') {
255const notification = document.createElement('div');
256notification.className = `fixed top-4 right-4 z-50 p-4 rounded-lg shadow-lg max-w-sm transform translate-x-full transition-transform duration-300 ${
288289// Parallax Effect for Hero Section
290window.addEventListener('scroll', function() {
291const scrolled = window.pageYOffset;
292const parallaxElements = document.querySelectorAll('.floating-shape');
299300// Add active navigation highlighting
301window.addEventListener('scroll', function() {
302const sections = document.querySelectorAll('section[id]');
303const navLinks = document.querySelectorAll('.nav-link');
321322// Preload images for better performance
323function preloadImages() {
324portfolioItems.forEach(item => {
325const img = new Image();