diff --git a/backend/Dockerfile b/backend/Dockerfile new file mode 100644 index 0000000..e26859d --- /dev/null +++ b/backend/Dockerfile @@ -0,0 +1,35 @@ +# Backend Dockerfile +FROM python:3.11-slim + +# Install system dependencies +RUN apt-get update && apt-get install -y \ + curl \ + ffmpeg \ + gcc \ + g++ \ + && rm -rf /var/lib/apt/lists/* + +# Set working directory +WORKDIR /app + +# Copy requirements first (for caching) +COPY requirements.txt . + +# Install Python dependencies +RUN pip install --no-cache-dir -r requirements.txt + +# Copy application code +COPY . . + +# Create uploads directory +RUN mkdir -p /app/uploads + +# Expose port +EXPOSE 5000 + +# Health check +HEALTHCHECK --interval=30s --timeout=10s --start-period=40s --retries=3 \ + CMD curl -f http://localhost:5000/api/health || exit 1 + +# Run application +CMD ["python", "main.py"] diff --git a/backend/__pycache__/api_routes.cpython-314.pyc b/backend/__pycache__/api_routes.cpython-314.pyc index ee62c8f..bf742e5 100644 Binary files a/backend/__pycache__/api_routes.cpython-314.pyc and b/backend/__pycache__/api_routes.cpython-314.pyc differ diff --git a/backend/__pycache__/db_queries.cpython-314.pyc b/backend/__pycache__/db_queries.cpython-314.pyc index 1be6bc1..9b57687 100644 Binary files a/backend/__pycache__/db_queries.cpython-314.pyc and b/backend/__pycache__/db_queries.cpython-314.pyc differ diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..c992016 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,67 @@ +version: '3.8' + +services: + # Backend Service + backend: + build: + context: ./backend + dockerfile: Dockerfile + container_name: voicevault-backend + restart: unless-stopped + ports: + - "5000:5000" + environment: + # Flask + FLASK_APP: main.py + FLASK_ENV: production + + # Supabase - REPLACE THESE WITH YOUR ACTUAL VALUES + SUPABASE_URL: "https://tnpnlkosqqudoadfylss.supabase.co" + SUPABASE_SERVICE_ROLE_KEY: "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6InRucG5sa29zcXF1ZG9hZGZ5bHNzIiwicm9sZSI6InNlcnZpY2Vfcm9sZSIsImlhdCI6MTc3MTAyNTQwOCwiZXhwIjoyMDg2NjAxNDA4fQ.v1xblErJBBv8p001vvTCUBfjP8ZqskfXNETB_yJOgvc" + SUPABASE_BUCKET: "archives" + + # Whisper AI Settings + WHISPER_MODEL: "base" + WHISPER_DEVICE: "cpu" + WHISPER_COMPUTE_TYPE: "int8" + + # Backend Settings + BACKEND_UPLOAD_DIR: "/app/uploads" + volumes: + - uploads:/app/uploads + networks: + - voicevault-network + healthcheck: + test: ["CMD-SHELL", "curl -f http://localhost:5000/api/health || exit 1"] + interval: 30s + timeout: 10s + retries: 3 + start_period: 40s + + # Frontend Service + frontend: + build: + context: ./frontend + dockerfile: Dockerfile + container_name: voicevault-frontend + restart: unless-stopped + ports: + - "3000:3000" + depends_on: + backend: + condition: service_healthy + networks: + - voicevault-network + healthcheck: + test: ["CMD-SHELL", "curl -f http://localhost || exit 1"] + interval: 30s + timeout: 10s + retries: 3 + +volumes: + uploads: + driver: local + +networks: + voicevault-network: + driver: bridge diff --git a/frontend/Dockerfile b/frontend/Dockerfile new file mode 100644 index 0000000..2019d70 --- /dev/null +++ b/frontend/Dockerfile @@ -0,0 +1,30 @@ +# Frontend Dockerfile - Node.js serve (no nginx) +FROM node:18-alpine + +# Set working directory +WORKDIR /app + +# Copy package files +COPY package*.json ./ + +# Install dependencies (including Tailwind) +RUN npm install + +# Copy source code +COPY . . + +# Build the React app +RUN npm run build + +# Install serve to host the static files +RUN npm install -g serve + +# Expose port 3000 +EXPOSE 3000 + +# Health check +HEALTHCHECK --interval=30s --timeout=10s --retries=3 \ + CMD wget --quiet --tries=1 --spider http://localhost:3000 || exit 1 + +# Serve the built app +CMD ["serve", "-s", "dist", "-l", "3000"] diff --git a/frontend/src/Example.jsx b/frontend/src/Example.jsx deleted file mode 100644 index 0bfbed5..0000000 --- a/frontend/src/Example.jsx +++ /dev/null @@ -1,320 +0,0 @@ -import { Search, User, Play, Archive, History, Settings, Volume2, Heart, MessageCircle, Share2, Bookmark, MoreVertical } from 'lucide-react' - -export default function App() { - return ( -
- {/* Header */} -
-
- {/* Left: Logo */} -
-
- -
-

VoiceVault

-
- - {/* Center: Search Bar */} -
-
- - -
-
- - {/* Right: Login */} -
- -
-
-
- -
- {/* Sidebar - Profile */} - - - {/* Main Content - Feed */} -
-
- - {/* Audio Post Card */} -
- {/* Post Header */} -
-
-
-
- DM -
-
-
- Diana Martinez - • 2 hours ago -
-
- Historical Events - Personal Stories -
-
-
- -
- -

My Grandmother's Journey Through WWII

- - {/* Audio Player */} -
-
- -
-
-
-
-
- 2:34 - 7:52 -
-
- -
-
- - {/* Transcription Preview */} -
-

- "I remember the day clearly, despite all these years. We were living in a small village outside Warsaw when the news came. My mother gathered us all together and told us we had to leave everything behind..." -

- -
-
- - {/* Post Actions */} -
- - - - -
-
- - {/* Second Audio Post Card */} -
-
-
-
-
- RM -
-
-
- Robert Miller - • 5 hours ago -
-
- Cultural Traditions - Oral History -
-
-
- -
- -

Traditional Music of the Appalachian Mountains

- -
-
- -
-
-
-
-
- 4:15 - 8:30 -
-
- -
-
- -
-

- "This song has been passed down through five generations of our family. My great-great-grandfather used to play it on his banjo during summer evenings on the porch. The melody tells the story of..." -

- -
-
- -
- - - - -
-
- -
-
- - {/* Right Sidebar - Trending */} - -
-
- ) -} diff --git a/frontend/vite.config.js b/frontend/vite.config.js index b9818fe..b298cd8 100644 --- a/frontend/vite.config.js +++ b/frontend/vite.config.js @@ -2,8 +2,31 @@ import { defineConfig } from 'vite' import react from '@vitejs/plugin-react' import tailwindcss from '@tailwindcss/vite' -// https://vite.dev/config/ + +// https://vitejs.dev/config/ export default defineConfig({ plugins: [react(), tailwindcss()], + server: { + host: true, + port: 3000, + strictPort: true, + }, + preview: { + host: true, + port: 3000, + strictPort: true, + }, + build: { + outDir: 'dist', + sourcemap: false, + minify: 'esbuild', + rollupOptions: { + output: { + manualChunks: { + vendor: ['react', 'react-dom'], + }, + }, + }, + }, }) diff --git a/start.sh b/start.sh new file mode 100644 index 0000000..e69de29