Gate. Capture. Redirect. A serverless visual security gateway that logs visitors with camera evidence before granting access to protected resources.
CameraGPT (Secure Gateway Portal) is a consent-based, serverless visitor verification layer. It sits in front of any protected link β visitors must pass through the gateway, approve camera access, and get logged with photographic evidence before being redirected to the protected destination.
Built entirely on Netlify's serverless stack β zero backend servers, zero infrastructure management.
[Visitor] β [Public Gateway Link]
β
βΌ
βββββββββββββββββββββββββββ
β Camera Consent Prompt β β Consent-based image capture
β Image Evidence Stored β β Netlify Blobs (serverless storage)
β Metadata Logged β β IP, timestamp, user agent
ββββββββββββ¬βββββββββββββββ
β
ββββββββββββΌβββββββββββββββ
β Redirect to Protected β β Only after successful log
β Destination β
βββββββββββββββββββββββββββ
β
[Admin Console] β View evidence, manage profiles, review logs
| Feature | Description |
|---|---|
| πΈ Consent-Based Capture | Visitor explicitly approves camera before capture occurs |
| π JWT-Secured Admin | Admin console protected with token-based authentication |
| ποΈ Profile-Based Links | Each gateway profile generates a unique public URL |
| πΌοΈ Image Evidence Vault | Captured images stored in Netlify Blobs, viewable in admin |
| π Access Log Tracking | Capture success/failure + redirect status per visit |
| βοΈ Zero-Server Deployment | 100% Netlify Functions β no VPS, no Docker, no DB |
| π Redirect Control | Configurable per-profile destination URLs |
| ποΈ Visitor Verify | Secondary verification flow for sensitive destinations |
git clone https://github.com/gnonymous1/CameraGPT.git
cd CameraGPT
npm installcp .env.example .env
# Fill in your values β see .env.example for all variables# Install Netlify CLI
npm install -g netlify-cli
# Link to your Netlify site
netlify link
# Deploy
netlify deploy --prodSet these environment variables in your Netlify dashboard β Site Settings β Environment Variables:
| Variable | Required | Purpose |
|---|---|---|
JWT_SECRET |
β | Signs admin session tokens |
ADMIN_EMAIL |
β | Admin login email |
ADMIN_PASSWORD |
β | Admin login password |
β οΈ Never commit.envto version control. Use.env.exampleas your template.
| URL | Purpose |
|---|---|
/ |
Admin console β manage profiles, view evidence |
/gateway/main-gateway |
Public gateway entry point |
CameraGPT/
β
βββ π index.html Admin console UI
βββ π public-attendance.html Public gateway page shell
βββ π visitor-verify.html Visitor verification page
β
βββ βοΈ script.js Admin console logic
βββ βοΈ public-attendance.js Capture & redirect flow
βββ βοΈ visitor-verify.js Verification logic
βββ βοΈ face-recognition.js Camera access & capture
β
βββ netlify/
β βββ functions/
β βββ π§ api.mjs Serverless API (JWT, Blobs, profiles)
β
βββ π¨ styles.css UI styling
βββ π netlify.toml Netlify routing config
βββ π _redirects URL redirect rules
βββ π .env.example Environment variable template
- All admin routes protected by JWT authentication
- Camera capture only occurs after explicit visitor consent
- Credentials configured via environment variables only β never hardcoded
- Image evidence stored in Netlify Blobs β not on public filesystem
JWT_SECRETshould be a cryptographically random 256-bit string
β οΈ Change the default password before any production deployment.
Set ADMIN_EMAIL and ADMIN_PASSWORD in Netlify environment variables. If ADMIN_PASSWORD is not set, the system uses the fallback Admin@12345 β never leave this in production.
# Generate a strong JWT secret
node -e "console.log(require('crypto').randomBytes(32).toString('hex'))"# Start local Netlify dev server
netlify dev
# Admin console available at:
# http://localhost:8888/
# Public gateway at:
# http://localhost:8888/gateway/main-gateway- Multi-admin role support
- Email notifications on visitor capture
- Rate limiting on gateway endpoints
- Analytics dashboard for capture metrics
- Time-limited gateway links (expiry)
- Webhook integration for capture events
git checkout -b feature/your-feature
# Make changes, test with netlify dev
git commit -m "feat: your feature"
# Open a Pull RequestRead CONTRIBUTING.md for full guidelines.
CameraGPT is designed for authorized, consent-based visitor logging only. Camera capture occurs only after explicit visitor approval. This tool must not be used to capture images of individuals without their knowledge or consent. The developer assumes no liability for misuse.