This application runs completely locally with no cloud dependencies except for the Gemini AI API for video analysis.
- Frontend: React + Vite (served from
/dist) - Backend: Express.js server
- File Storage: Local file system (
/uploadsdirectory) - Database: Local JSON file (
/data/reports.json) - AI Analysis: Google Gemini API (requires API key)
- Node.js 18 or higher
- Google Gemini API key
-
Install dependencies:
npm install
-
Configure environment:
- Copy
.env.exampleto.env - Add your Gemini API key to
.env:GEMINI_API_KEY=your_api_key_here
- Copy
-
Build the frontend:
npm run build
-
Start the server:
npm start
-
Access the application:
- Open your browser to
http://localhost:8080 - Login with:
- Username:
JRinst - Password:
JRiocl@2025
- Username:
- Open your browser to
├── uploads/ # Uploaded videos and PDFs (local storage)
├── data/ # Local database
│ └── reports.json # Saved analysis reports
├── dist/ # Built frontend files
├── server.js # Express server
├── App.tsx # Main React component
└── .env # Environment variables
- ✅ Local file upload (videos and PDFs)
- ✅ AI-powered video analysis using Gemini
- ✅ Local report storage (JSON file)
- ✅ Session-based authentication
- ✅ PDF report generation
- User uploads video → Saved to
/uploadsdirectory - User uploads reference PDFs → Saved to
/uploadsdirectory - Files served via
/api/content/*endpoint
- Video file uploaded to Gemini API for processing
- Reference PDFs sent as inline base64 data
- Gemini analyzes video against references
- Results returned and saved to local JSON database
- Gemini file cleaned up after analysis
- Reports saved to
data/reports.json - Each report has a unique UUID
- Reports include video URL, references, analysis results, and metadata
- ❌ No Google Cloud Storage
- ❌ No Firestore
- ❌ No Vercel
- ✅ Only Gemini API for AI analysis (temporary file upload during processing)
npm run dev # Frontend dev server
npm run dev:api # API server (if separate)npm run build
npm start- Check that
GEMINI_API_KEYis set in.env - Verify the API key is valid
- Check server logs for detailed error messages
- Ensure
/uploadsdirectory exists (created automatically) - Check file permissions
- Verify disk space
# Find process using port 8080
netstat -ano | findstr :8080
# Kill the process (Windows)
taskkill /PID <PID> /F- Change default password in production
- Set a secure
SESSION_SECRETin.env - Keep
.envfile secure (never commit to git) - Uploaded files are stored locally - ensure proper file system permissions
- Session storage uses MemoryStore (not suitable for production scaling)
- Reports stored in single JSON file (consider database for large scale)
- No file cleanup mechanism (uploaded files persist indefinitely)
Proprietary - Refinery Eye AI