50## Tech Stack
51
52- **Backend**: Hono (TypeScript API framework)
53- **Database**: SQLite for voice note metadata
54- **Storage**: Val Town Blob storage for audio files
20
21// Mount routes
22app.route("/api/voicenotes", voiceNotesRoutes);
23app.route("/", staticRoutes);
24
15 try {
16 setLoading(true);
17 const response = await fetch('/api/voicenotes');
18 const data = await response.json();
19
120
121 try {
122 const response = await fetch(`/api/voicenotes/${voiceNoteId}`, {
123 method: 'DELETE'
124 });
12## Structure
13
14- `backend/index.ts` - Main Hono server with API routes
15- `frontend/index.html` - Main chat interface
16- `frontend/index.tsx` - React chat components
146 }
147
148 fetch('/api/voicenotes', {
149 method: 'POST',
150 body: formData
20 try {
21 setLoading(true);
22 const response = await fetch(`/api/voicenotes/${voiceNoteId}`);
23 const data = await response.json();
24
26 setVoiceNote(data.voiceNote);
27 // Get audio URL
28 setAudioUrl(`/api/voicenotes/${voiceNoteId}/audio`);
29 } else {
30 setError(data.error || 'Voice note not found');
50## Tech Stack
51
52- **Backend**: Hono (TypeScript API framework)
53- **Database**: SQLite for voice note metadata
54- **Storage**: Val Town Blob storage for audio files
20
21// Mount routes
22app.route("/api/voicenotes", voiceNotesRoutes);
23app.route("/", staticRoutes);
24
15 try {
16 setLoading(true);
17 const response = await fetch('/api/voicenotes');
18 const data = await response.json();
19
120
121 try {
122 const response = await fetch(`/api/voicenotes/${voiceNoteId}`, {
123 method: 'DELETE'
124 });
146 }
147
148 fetch('/api/voicenotes', {
149 method: 'POST',
150 body: formData