JEPAT adalah aplikasi web internal V1 untuk tim kecil yang digunakan mencatat check-in emosi harian secara manual, membandingkan polanya dengan ringkasan Human Design tiap anggota yang dikelola manual, serta meninjau rekomendasi yang lembut dan reflektif.
Produk ini diposisikan sebagai alat self-awareness dan wellbeing tim. Aplikasi ini bukan produk medis, psikologis, atau diagnostik.
- Next.js 15 App Router
- TypeScript
- Tailwind CSS
- shadcn-style UI components in
components/ui - Prisma ORM
- PostgreSQL
- Credential-based authentication with secure signed cookies
- Recharts
- Zod
- Role-based authentication for
OWNERandMEMBER - Seeded demo accounts for one owner and nine members
- Team member CRUD
- Human Design summary management per member
- Rave chart file upload support for PDF and image files
- Morning and night emotion logs with validation
- One morning log and one night log per member per day
- Rule-based recommendation engine that saves recommendations after each log
- Owner dashboard with summary metrics, completion status, trends, and member comparisons
- Member dashboard with personal trends, status, Human Design summary, and recent recommendations
- The app uses reflective, non-clinical recommendation language.
- Human Design data is entered manually by the owner in V1.
- There is no OCR, PDF interpretation, or AI chart analysis in this version.
- File rave chart lama masih tersedia di
public/uploads. - Upload ravechart baru dapat diarahkan ke Supabase Storage untuk deployment online.
/login/dashboard/me/members/members/[id]/members/[id]/human-design/logs/settings
Create a local .env file based on .env.example.
DATABASE_URL="postgresql://postgres.[YOUR_PROJECT_REF]:[YOUR_DB_PASSWORD]@[YOUR_REGION].pooler.supabase.com:6543/postgres?pgbouncer=true"
DIRECT_URL="postgresql://postgres.[YOUR_PROJECT_REF]:[YOUR_DB_PASSWORD]@[YOUR_REGION].pooler.supabase.com:5432/postgres"
AUTH_SECRET="replace-with-a-long-random-string"
APP_URL="http://localhost:3000"
NEXT_PUBLIC_SUPABASE_URL="https://[YOUR_PROJECT_REF].supabase.co"
SUPABASE_SERVICE_ROLE_KEY="replace-with-your-supabase-service-role-key"
SUPABASE_STORAGE_BUCKET="ravecharts"
UPLOAD_DIR="./public/uploads"DATABASE_URLis required for Prisma commands and runtime database access.DATABASE_URLshould use the Supabase transaction pooler for runtime traffic, with?pgbouncer=true.DIRECT_URLshould use the Supabase session pooler for Prisma CLI commands such asdb push.AUTH_SECRETshould be a long random string in non-local environments.NEXT_PUBLIC_SUPABASE_URLis used to build public URLs for uploaded ravechart files.SUPABASE_SERVICE_ROLE_KEYis used only on the server to upload and remove files from Supabase Storage. Never expose it in the browser.SUPABASE_STORAGE_BUCKETshould point to a public bucket, for exampleravecharts.UPLOAD_DIRdefaults to./public/uploads.- Existing ravechart files currently live in
public/uploads/ravechartsso they can remain visible when the project is moved or published. - For multi-instance or serverless production deployments, use persistent object storage such as Supabase Storage or Vercel Blob.
- Install dependencies:
npm install- Copy the environment file and update values:
copy .env.example .env- Generate Prisma client:
npx prisma generate- Push the schema to your PostgreSQL database:
npx prisma db push- Seed demo data:
npm run prisma:seed- Start the development server:
npm run dev- Open the app:
http://localhost:3000
If npm run dev runs into shell or permission issues in a restricted terminal session, you can still run the app locally with:
npm run build
npm run startThis project was verified successfully with that fallback flow as well.
- Create a public Supabase Storage bucket named
ravecharts. - Fill Vercel project environment variables with:
DATABASE_URLDIRECT_URLAUTH_SECRETAPP_URLNEXT_PUBLIC_SUPABASE_URLSUPABASE_SERVICE_ROLE_KEYSUPABASE_STORAGE_BUCKET
- Point
DATABASE_URLto your Supabase Postgres connection string. - Run
npx prisma db pushagainst the Supabase database. - Run
npm run prisma:seedonce if you want the demo accounts on the online environment. - Deploy to Vercel from the linked GitHub repository.
Bucket note:
getPublicUrl() from the Supabase SDK only works for public buckets, so ravecharts needs to be public according to the Supabase docs.
npm run build
npm run start- Email:
owner@emotiontracker.local - Password:
Owner123!
Setiap anggota seed menggunakan password Member123!.
lugas.adepi.bumi@emotiontracker.localnaila.salma@emotiontracker.localilham.nasrudin@emotiontracker.localsindy.pratiwi@emotiontracker.localmiftah.masud@emotiontracker.localyongki.pardamean@emotiontracker.localarif.rahman@emotiontracker.localagung.kusuma.wulandari@emotiontracker.localnuzulul.lia@emotiontracker.local
- 1 owner account
- 9 member accounts
- Human Design profile summaries for all seeded members
- Tidak ada dummy emotion log
- Tidak ada rekomendasi dummy
V1 accepts:
- JPG / JPEG
- PNG
- WEBP
Uploaded files are saved in public/uploads/ravecharts.
The codebase was verified with:
npx prisma generatenpm run build
If you run npx prisma validate without a configured DATABASE_URL, Prisma will report that the environment variable is missing. That is expected until .env is configured.