Synaplan
Open-source AI platform for companies: self-hosted AI agents, GDPR-compliant chatbot widget, RAG knowledge base, WhatsApp and Outlook AI, MCP, multi-model routing. Docker, Kubernetes or hosted in Germ
Xentro Management employee registration and authentication system
Translation pending
BusinessTypeScript · PLpgSQLGitHub @CreatixaITOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
Xentro Management repository
Translation pending
Taken from the repository README
Loading the full README.
Read the full README ↗Employee registration and authentication system with Supabase backend and Next.js frontend.
cd "/Users/air/Documents/Xentro Management"
npm install
cp .env.example .env.local
Edit .env.local and fill in the following values:
NEXT_PUBLIC_APP_URL=http://localhost:3000
NEXT_PUBLIC_SUPABASE_URL=your-supabase-project-url
NEXT_PUBLIC_SUPABASE_ANON_KEY=your-supabase-anon-key
SUPABASE_SERVICE_ROLE_KEY=your-supabase-service-role-key
NID_ENCRYPTION_KEY=your-32-byte-hex-key
NEXT_PUBLIC_SUPABASE_URLNEXT_PUBLIC_SUPABASE_ANON_KEYSUPABASE_SERVICE_ROLE_KEY (keep this secret!)Run this command to generate a secure 32-byte hex key:
node -e "console.log(require('crypto').randomBytes(32).toString('hex'))"
Copy the output to NID_ENCRYPTION_KEY in .env.local.
supabase link --project-ref your-project-id
supabase db push
supabase storage new employee-photos
supabase/migrations/001_initial_schema.sqlsupabase/migrations/002_storage_policies.sqlsupabase/migrations/003_rate_limiter.sqlemployee-photoshttp://localhost:3000 (for local)http://localhost:3000/auth/callbackhttp://localhost:3000/auth/callbackhttp://localhost:3000/reset-passwordnpm run dev
Open http://localhost:3000 in your browser.
npm run build
npm start
The built-in Supabase email sender is for testing only and has strict limits. For production:
npm i -g vercel
vercel login
vercel
In Vercel dashboard, add these environment variables for your Preview and Production environments:
NEXT_PUBLIC_APP_URL: Your Vercel domain (e.g., https://your-app.vercel.app)NEXT_PUBLIC_SUPABASE_URL: Your Supabase project URLNEXT_PUBLIC_SUPABASE_ANON_KEY: Your Supabase anon keySUPABASE_SERVICE_ROLE_KEY: Your Supabase service role keyNID_ENCRYPTION_KEY: Your 32-byte hex encryption keyAfter deploying to Vercel, update your Supabase project:
https://your-app.vercel.app/auth/callbackNew employee accounts start with status = 'PENDING' and role = 'EMPLOYEE'. An administrator must manually approve them.
Run this in Supabase SQL Editor (replace with actual user UUID or email):
-- Approve a user by email
UPDATE public.profiles
SET status = 'ACTIVE'
WHERE email = '[email protected]';
-- Or approve by user UUID
UPDATE public.profiles
SET status = 'ACTIVE'
WHERE id = 'user-uuid-here';
-- Promote to super admin (use with caution)
UPDATE public.profiles
SET role = 'SUPER_ADMIN', status = 'ACTIVE'
WHERE email = '[email protected]';
SELECT id, username, email, status, role
FROM public.profiles
WHERE email = '[email protected]';
├── src/
│ ├── app/ # Next.js App Router pages
│ │ ├── api/ # API routes
│ │ ├── auth/ # Auth callback routes
│ │ ├── dashboard/ # Protected dashboard
│ │ ├── sign-up/ # Registration page
│ │ ├── sign-in/ # Login page
│ │ └── ...
│ ├── components/ # Reusable components
│ ├── lib/ # Utilities and clients
│ │ ├── supabase/ # Supabase client configs
│ │ ├── encryption.ts # NID encryption
│ │ ├── validation.ts # Zod schemas
│ │ ├── rate-limit.ts # Rate limiting
│ │ └── env.ts # Environment validation
│ └── types/ # TypeScript types
├── supabase/
│ └── migrations/ # Database migrations
├── public/ # Static assets (poster, logo)
└── .env.example # Environment template
@tailwindcss/postcss installednpm run typecheck to see specific issuesnpm install to ensure dependencies are installedNEXT_PUBLIC_APP_URLprofiles table and username_normalized index existsemployee-photos bucket exists in Supabase Storagesrc/lib/rate-limit.ts and migration 003_rate_limiter.sqlSUPABASE_SERVICE_ROLE_KEY to Git. It should only be used server-side.This implementation includes:
Out of scope for Phase 1:
ISC
For issues or questions, please contact the project administrator.