Fresh Next.js CRM built from:
../monday_graphql_export.xlsxas the source database export../Projects_Summary_September.xlsxas the spreadsheet-style design reference
Email sending is intentionally excluded until the final sending domain is chosen.
- Next.js App Router
- TypeScript
- Tailwind CSS
- Supabase Postgres/Auth
- Excel import via
exceljs - GitHub Pages static export
npm install
npm run generate:data
npm run devOpen http://localhost:3000.
The dashboard does not ship real workbook data in the static bundle. Project data loads from Supabase after a user signs in.
The CRM is isolated inside the existing steelit.site Supabase project with crm_* tables. It does not use or overwrite generic tables like projects or profiles.
Copy .env.example to .env.local and fill:
NEXT_PUBLIC_SUPABASE_URL=
NEXT_PUBLIC_SUPABASE_ANON_KEY=
SUPABASE_SERVICE_ROLE_KEY=Apply the migration:
supabase/migrations/202606140001_initial_crm.sqlImport the workbook after the schema exists:
npm run import:mondayThe import upserts projects by Monday Item ID.
The original Excel row is preserved in crm_projects.raw_data, so unmapped workbook columns are not lost.
The app is built as a static export into out/.
GitHub repository variables:
NEXT_PUBLIC_SUPABASE_URL
NEXT_PUBLIC_SUPABASE_ANON_KEY
NEXT_PUBLIC_BASE_PATHUse NEXT_PUBLIC_BASE_PATH only if the site is served under a repository path, for example /steelit-crm. Leave it empty for a custom domain or root GitHub Pages site.
npm run dev
npm run build
npm run lint
npm run import:dry-run
npm run import:monday