Full-stack Next.js app for uploading CSV sales data, viewing margin analytics, and emailing on-demand reports.
# Create a Neon project at https://console.neon.tech
# Copy your DATABASE_URL
# Add to .env.local:
DATABASE_URL="postgresql://user:pass@ep-xxxx.neon.tech/db?sslmode=require"npm install
npm run db:pushMIKE_PASSWORD="your-secure-password" npx tsx scripts/seed.tsDefault: mike.thompson@company.com / password123
DATABASE_URL=your_neon_url
NEXTAUTH_SECRET=your-32-char-random-secret
NEXTAUTH_URL=http://localhost:3000 (or production URL)
RESEND_API_KEY=re_xxxxx
RESEND_FROM_EMAIL=reports@yourdomain.comnpm run dev
# Open http://localhost:3000/loginvercel- CSV Upload — Fuzzy column detection, validation, scrubbing report
- Margin Analytics — Gross margin %, net margin %, top tech, top margin product
- Dashboard — 4 KPI cards, upload history, settings
- Email Reports — On-demand reports via Resend to configurable email
- Authentication — NextAuth.js credentials (single user)
users— email, password_hashcsv_uploads— file metadata, row countssales_records— products, revenue, costs, margins (cents for money, numeric(8,4) for %)metrics— aggregated KPIs per uploadsettings— user preferences (report email, etc.)
POST /api/auth/signin— LoginPOST /api/upload— Upload CSVGET /api/metrics— Get latest KPIsGET /api/history— Get upload historyPOST /api/email— Send report emailGET /api/settings— Get user settingsPOST /api/settings— Update email/password
Expects columns (fuzzy matched):
- Product / Name
- Technology / Tech
- Revenue / Sales / Amount
- COGS / Cost of Goods Sold
- Operating Expense (optional)
- Quantity / Units (optional)
All currency values can be formatted ($1,234.56, 1234.56, etc.)