BREAKING: Full rewrite from static HTML to production-grade stack. Features: - React 18 + Vite + Tailwind CSS (mobile-first) - Express + Prisma + PostgreSQL backend - JWT authentication with role-based access - Weekly Mon-Sun timesheets with auto-save - Multiple homeowner entries per day - Submit → Approve/Reject workflow - Server-side PDF generation - SMTP email integration - Admin panel with reporting & filters - Dark mode (system-aware) - Docker Compose one-command deploy - Non-root containers, Helmet, bcrypt, Zod validation
23 lines
1.3 KiB
Bash
23 lines
1.3 KiB
Bash
# ─── Database ───────────────────────────────────────────
|
|
DATABASE_URL=postgresql://coastal:coastal_secret@localhost:5432/coastal_timesheet
|
|
|
|
# ─── JWT Secrets ────────────────────────────────────────
|
|
# Generate with: node -e "console.log(require('crypto').randomBytes(64).toString('hex'))"
|
|
JWT_SECRET=change-me-to-a-random-64-byte-hex-string
|
|
JWT_REFRESH_SECRET=change-me-to-a-different-random-64-byte-hex-string
|
|
|
|
# ─── Server ────────────────────────────────────────────
|
|
PORT=3001
|
|
NODE_ENV=development
|
|
CORS_ORIGINS=http://localhost:5173,http://localhost:3000
|
|
|
|
# ─── SMTP (Email) ──────────────────────────────────────
|
|
SMTP_HOST=smtp.gmail.com
|
|
SMTP_PORT=587
|
|
SMTP_USER=your-email@gmail.com
|
|
SMTP_PASS=your-app-password
|
|
SMTP_FROM=your-email@gmail.com
|
|
|
|
# ─── Admin ──────────────────────────────────────────────
|
|
ADMIN_EMAIL=bizzle@coastalcontracting.com
|