AISigner, stajyer/öğrencilerin kısa bir anketle güçlü yönlerini ve seviyelerini belirleyip uygun mentörle eşleştiren; proje havuzundan uygun bir proje atandıktan sonra AI destekli bir öğrenme yol haritası (roadmap) oluşturan açık kaynak bir platformdur.
- Öğrencinin kayıt + anket süreci
- AI ile temel profil çıkarımı (seviye / yatkın alanlar)
- Admin’in mentör ataması
- Mentörün proje havuzundan öğrenciye proje ataması
- AI destekli roadmap üretimi ve adımların onaylanması
- GitHub fork/PR akışına dayalı çalışma düzeni
Projeyi kurmadan önce sisteminizde aşağıdaki yazılımların kurulu olduğundan emin olun:
- Node.js (v18 veya üzeri)
- npm (Node.js ile birlikte gelir)
- Docker & Docker Compose
- Git
git clone https://github.com/elifgularslan/AISigner.git
→ Projeyi kendi bilgisayarına indir.
cd AISigner
→ Proje klasörüne geç.
docker compose up -d
→ PostgreSQL veritabanını arka planda başlat.
.envdosyasını oluştur
→ Ortam değişkenlerini.env.exampledosyasına göre tanımla (örnek:DATABASE_URL,NEXTAUTH_SECRET).
npm install
→ Proje bağımlılıklarını yükle (Next.js, Prisma, Argon2 vb.)
npx prisma migrate dev --name init
→ Veritabanı tablolarını oluştur ve Prisma Client’i generate et.
npm run seed
→ Test kullanıcılarını veritabanına ekle (admin, mentor, öğrenci).
npm run dev
→ Uygulamayı başlat (http://localhost:3000adresinde çalışır).
Create Database->PostgreSQL- Örnek ad:
aisigner-db - Bölge: kullanıcı kitlene en yakın bölge (TR için Frankfurt uygun)
- Oluşan connection string'i kopyala
- Outplane
Deploy New ApplicationekranındaPublic Reposeç - Repo URL'sini gir (kendi fork'un veya ana repo)
- Build yöntemi olarak
Dockerfileseç - Port:
3000
Bu repo Outplane için gerekli Docker dosyalarıyla birlikte gelir:
Dockerfile.dockerignore
Container başlangıcında migration otomatik uygulanır:
npx prisma migrate deploy
Outplane uygulamasına aşağıdaki değişkenleri ekle:
DATABASE_URL=<outplane-postgres-connection-string>
AUTH_SECRET=<uzun-rastgele-string>
NEXT_PUBLIC_APP_URL=<outplane-app-url>
NODE_ENV=production
PORT=3000AI özelliklerini de production'da kullanacaksan ek olarak:
GOOGLE_CLOUD_PROJECT=<gcp-project-id>
GOOGLE_CLOUD_LOCATION=us-central1
GOOGLE_APPLICATION_CREDENTIALS=gcp-credentials.jsonve gcp-credentials.json dosyasını Outplane tarafında güvenli dosya/secret olarak mount etmen gerekir.
- Deploy tamamlanınca
/api/healthendpointini kontrol et - Gerekirse Outplane terminalinden seed çalıştır:
npm run seedNOT: Seed sonrası test kullanıcıları
Rol Şifre Admin admin@example.com geçici_şifre Mentor mentor@example.com geçici_şifre Student student@example.com geçici_şifre
Bu kullanıcılarla
/signinüzerinden giriş yapabilir, yönlendirme ve layout guard’ları test edebilirsin.
npm installNot: Bu adımı atlarsanız, proje çalışmaz çünkü gerekli kütüphaneler (Next.js, Prisma Client, Argon2 vb.) yüklü olmaz. Komutları çalıştırırken hata alırsınız.
DATABASE_URL= "YOUR_DATABASE_URL"
NEXT_PUBLIC_APP_URL= YOUR_LOCAL_HOST_URL
AUTH_SECRET= change_me
PostgreSQL veritabanını Docker üzerinden ayağa kaldırmak için:
docker compose up -dVeri tabanı çalışıyor mu test etmek için:
docker compose ps Başarılı çıktı:
NAME COMMAND SERVICE STATUS PORTS
aisigner_db "docker-entrypoint.s…" postgres Up 5 seconds 0.0.0.0:5432->5432/tcp
npx prisma initMevcut Modeller
- User Modeli
model User {
id String @id @default(cuid())
email String @unique
name String?
lastName String?
password String //hashed password
phone String?
role Role @default(STUDENT)
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
emailVerified DateTime?
sessions Session[]
studentProfile StudentProfile? @relation("StudentUser")
menteeProfiles StudentProfile[] @relation("StudentMentor")
}
enum Role {
ADMIN
MENTOR
STUDENT
}
- Session Modeli
model Session {
id String @id @default(cuid())
sessionToken String @unique
userId String
expires DateTime
user User @relation(fields: [userId], references: [id], onDelete: Cascade)
}- StudentProfile Modeli
model StudentProfile {
id String @id @default(cuid())
userId String @unique
user User @relation("StudentUser", fields: [userId], references: [id], onDelete: Cascade)
birthYear Int?
experienceLevel String
interests String[]
goals String?
availability String?
mentorId String?
mentor User? @relation("StudentMentor", fields: [mentorId], references: [id])
assignedProjects AssignedProject[]
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
}- ProjectTemplate Modeli
model ProjectTemplate{
id String @id @default(cuid())
title String
description String //md formatı
track String[] //["web" , "mobile"]
difficulty Difficulty
assignedProjects AssignedProject[]
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
}
enum Difficulty{
HARD
MEDIUM
EASY
}
- AssignedProject Modeli
model AssignedProject {
id String @id @default(cuid())
studentProfileId String
projectTemplateId String
status AssignmentStatus @default(PENDING)
studentProfile StudentProfile @relation(fields: [studentProfileId], references: [id])
projectTemplate ProjectTemplate @relation(fields: [projectTemplateId], references: [id])
roadmap Roadmap?
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
}
enum AssignmentStatus {
PENDING
IN_PROGRESS
COMPLETED
}- Roadmap Modeli
model Roadmap {
id String @id @default(cuid())
assignedProjectId String @unique
assignedProject AssignedProject @relation(fields: [assignedProjectId], references: [id], onDelete: Cascade)
title String
status RoadmapStatus @default(DRAFT)
steps RoadmapStep[]
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
}
model RoadmapStep {
id String @id @default(cuid())
roadmapId String
roadmap Roadmap @relation(fields: [roadmapId], references: [id], onDelete: Cascade)
order Int
title String
description String
resources String[]
estimatedHours Int?
status StepStatus @default(TODO)
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
}İlk migration'ı oluştur ve uygula ve Prisma Client'i generate et
npx prisma migrate dev --name init
npx prisma generate
- Tablolar oluştu mu?
docker exec -it aisigner_db bash -c "psql -U postgres -d aisigner -c '\dt'"
- User tablosu yapısı doğru mu?
docker exec -it aisigner_db bash -c "psql -U postgres -d aisigner -c '\d \"User\"'"
Prisma Studio ile Görsel Test
- http://localhost:5555 adresinde web arayüzü açılacak, users tablosunu görebiliyor musun?
npx prisma studio
Prisma Client dosyalarının oluştuğunu kontrol et
ls node_modules/.prisma/client/
TypeScript tip dosyalarını kontrol et
ls node_modules/@prisma/client/
Otomatik olarak Seed'i çalıştırarak (önerilen yöntem):
npm run seedEkstra Kontrol: Kullanıcı sayısı Seed script’in doğru çalışıp çalışmadığını kontrol etmek için kullanın . Örneğin sonucu → admin, mentor, student kullanıcıları başarıyla eklenmiş demektir.
docker exec -it aisigner_db bash -c "psql -U postgres -d aisigner -c 'SELECT COUNT(*) FROM \"User\"'"Veya Prisma Studio ile görsel olarak
npx prisma studio
- +Add record butonuna bas
- verileri gir
- save e bas
Veya terminalden
docker exec -it aisigner_db psql -U postgres -d aisigner -c "
INSERT INTO \"User\" (email, password, role)
VALUES ('test@example.com', 'geçici_şifre', 'STUDENT')
"
NOT: gerçek projede şifre hashlenmeli
- Docker container'ının çalıştığından emin ol:
docker ps
-
.env dosyasındaki DATABASE_URL'i kontrol et
-
Önceki migration'ları resetle:
npx prisma migrate reset
🔹 Seed (Örnek Kullanıcıları Ekleme)
-
Bu adımlar, Lokal geliştirme sırasında veritabanına hızlıca test edilebilecek 3 örnek kullanıcı eklemek için kullanılır.Seed script’i idempotent çalışır, yani aynı script tekrar tekrar çalıştırıldığında kullanıcılar çoğalmaz.
-
Şifreler güvenli şekilde argon2 ile hashlenir.
-
Prisma Client kullanılarak veritabanına bağlantı sağlanır.
Seed Script Çalıştırma
Seed’i çalıştırmak için terminalden proje klasöründe şu komutu çalıştır:
npm run seed
Script çalıştığında terminalde şöyle bir çıktı görürsün:
✅ ADMIN user created: admin@example.com
✅ MENTOR user created: mentor@example.com
✅ STUDENT user created: student@example.com
Seed process completed! 3 users added!
Bu projede kimlik doğrulama altyapısı NextAuth ile kurulmuştur. Prisma adapter kullanılarak session verileri veritabanında saklanır. Cookie ayarları SameSite=Lax olarak tanımlanmıştır.
Dosya: src/lib/auth/nextauth.ts
Veritabanı bağlantısını test etmek için:
Tarayıcıda: http://localhost:3000/api/health
veya
Terminalde:
curl http://localhost:3000/api/health
Beklenen çıktı:
{
"status": "ok",
"db": "connected",
"timestamp": "2025-09-03T21:44:00.000Z"
}Eğer veritabanı bağlantısı koparsa, status: "error" ve db: "disconnected" döner.
GET /api/health
Bu endpoint SELECT 1 sorgusu ile bağlantıyı kontrol eder.
200 OK→ Bağlantı sağlıklı500 ERROR→ Bağlantı başarısız
Bu modül, öğrencinin kayıt sonrası onboarding sürecini ve profil özetini yönetir.
features/student/ui/OnboardingForm.tsx→ Çok adımlı form bileşenifeatures/student/models/onboarding.ts→ Zod doğrulama şemalarıfeatures/student/server/onboarding.ts→saveOnboarding(data)server actionfeatures/student/server/profileSummary.ts→ AI profil analizi (getProfileSummary) + yedek mock fonksiyonu (getMockProfileSummary)features/student/ui/ProfileSummaryCard.tsx→ Profil özeti bileşeniapp/(student)/student-dashboard/page.tsx→ Öğrenci dashboard sayfası
- Öğrenci
OnboardingFormüzerinden kişisel bilgilerini, deneyim seviyesini ve hedeflerini girer. - Form submit edildiğinde
saveOnboarding()ile veritabanınaStudentProfileolarak kaydedilir. - Ardından
getProfileSummary()ile Gemini AI özeti oluşturulur (hata durumunda mock fallback kullanılır). - Öğrenci
student-dashboardsayfasına yönlendirilir ve profil özeti + proje durumu gösterilir.
Yeni gelen bir geliştirici aşağıdaki adımları izleyerek M2 sürecini uçtan uca test edebilir:
-
npm run devile projeyi başlat -
http://localhost:3000/signin üzerinden test kullanıcısı ile giriş yap:
- E-posta:
student@example.com - Şifre:
geçici_şifre
- E-posta:
-
Oturum açıldıktan sonra http://localhost:3000/student-onboarding sayfasına git.
-
Formu 3 adımda doldur:
- Kişisel Bilgiler
- Deneyim Seviyesi
- Öğrenme Hedefleri
-
“Gönder” butonuna basıldığında veriler veritabanına kaydedilir (
StudentProfile) -
Ardından
student-dashboardsayfasına yönlendirilirsin -
Dashboard’da:
- Hoşgeldin mesajı
- Profil özeti (mock AI ile)
- Proje durumu (“Henüz proje atanmadı” mesajı)
Onboarding sonrası veriyi doğrulamak için npx prisma studio komutuyla veritabanını görsel olarak inceleyebilirsiniz.
getProfileSummary()fonksiyonu Gemini AI ile profil analizi yapar. Hata durumundagetMockProfileSummary()yedek fonksiyonu devreye girer.
Bu modül, admin ve mentor rollerinin temel işlevlerini kapsar: kullanıcı yönetimi, proje şablonu kontrolü ve öğrenci–proje eşleşmesi.
-
User
- Roller:
ADMIN,MENTOR,STUDENT - Mentor–öğrenci ilişkisi:
- Bir mentorun birden fazla öğrencisi olabilir (
StudentProfile.mentorIdüzerinden). - Bir öğrencinin tek mentor ilişkisi vardır.
- Bir mentorun birden fazla öğrencisi olabilir (
- Roller:
-
StudentProfile (M2’de tanımlandı, M3 ile genişletildi)
- Yeni ilişkiler:
mentorId→ Mentor ile bağlantı.assignedProjects→ Öğrenciye atanmış projeler listesi.
- Yeni ilişkiler:
-
ProjectTemplate
- Admin tarafından tanımlanan proje şablonları.
- Alanlar:
id,title,description (md),difficulty (enum: EASY, MEDIUM, HARD),track (string[]). - İlişki:
assignedProjectsile bağlantılı.
-
AssignedProject
- Mentorun, öğrencisine atadığı projeleri tutar.
- Alanlar:
id,studentProfileId,projectTemplateId,status. - Statü enum:
PENDING,IN_PROGRESS,COMPLETED. - İlişkiler:
studentProfile→ Öğrenciye bağlı.projectTemplate→ Proje şablonuna bağlı.
Amaç
Admin tüm kullanıcıları görüntüleyebilir, rollerini değiştirebilir ve mentor ataması yapabilir.
Dosya Yapısı
- Dosya:
src/features/admin/server/user.tsgetAllUsers()→ Tüm kullanıcıları ve ilişkili profil bilgilerini döndürür.getMentors()→ Sadece mentor rolündeki kullanıcıları listeler.updateUserRole(userId, role)→ Kullanıcının rolünü günceller.assignMentor(studentId, mentorId)→ Öğrenciye mentor atar.
- Dosya:
app/(admin)/admin-dashboard/page.tsx→ Admin UI
Gerçekleştirilenler
- Kullanıcı listesi tablosu.
- Rol değiştirme butonu.
- Mentor atama dropdown.
- Değişiklikler Prisma üzerinden anında DB’ye yansır.
Amaç
Admin proje şablonu ekleyebilir, güncelleyebilir, silebilir, listeleyebilir.
Dosya Yapısı
- Dosya:
src/features/projects/server/templates.ts - Fonksiyonlar:
listTemplates()→ Tüm şablonları listeler (createdAt desc).createTemplate(data)→ Yeni şablon oluşturur.updateTemplate(id, data)→ Şablonu günceller.deleteTemplate(id)→ Şablonu siler.getTemplateById(id)→ Şablonu id ile getirir.
- Alanlar:
difficulty:EASY | MEDIUM | HARDtrack:string[]description: Markdown destekli içerik `
- Dosya:
app/(admin)/admin-dashboard/projects/page.tsx→ UI
Gerçekleştirilenler
- Yeni proje ekleme formu.
- Listeleme tablosu.
- Düzenleme & silme işlemleri.
- Açıklama MD formatında saklanır.
trackalanı çoklu seçim olarak oluşturuldu.
Amaç
Mentor yalnızca kendi öğrencilerini görebilir ve onlara proje atayabilir.
Dosya Yapısı
- Dosya:
app/(mentor)/mentor-dashboard/page.tsx→ Öğrenci listesi - Dosya:
app/(mentor)/mentor-dashboard/[studentId]/page.tsx→ Öğrenci profili + proje atama - Dosya:
features/mentors/server/actions.ts→getMentorStudents(),getStudentDetail(),assignProjectToStudent(),updateProjectStatus()
Gerçekleştirilenler
- Mentor dashboard’da yalnızca kendi öğrencileri listelenir.
- Öğrenci detay sayfasında profil bilgileri ve proje şablonları gösterilir.
- “Projeyi Ata” butonu →
AssignedProjectkaydı oluşturur. - Öğrencinin dashboard’unda proje listesi görünür.
- Admin dashboard üzerinden tüm kullanıcıları görür.
- Kullanıcının rolünü veya mentorunu güncelleyebilir.
- Admin proje şablonlarını ekleyip düzenleyebilir.
- Mentor dashboard’da sadece kendisine atanmış öğrencileri görür.
- Öğrenci detayına girip uygun projeyi seçer ve atar.
- Atanan proje öğrencinin dashboard’unda görünür.
Yeni gelen bir geliştirici aşağıdaki adımları izleyerek M3 sürecini uçtan uca test edebilir:
npm run devile projeyi başlat.- http://localhost:3000/signin üzerinden admin veya mentor hesabı ile giriş yap.
- http://localhost:3000/admin-dashboard
- Kullanıcı listesi tablosunu görüntüle.
- Rol değiştirme butonunu test et.
- Öğrenciler için mentor atama dropdown’unu kullan.
- http://localhost:3000/admin-dashboard/projects
- Yeni proje şablonu ekleme formunu doldur ve kaydet.
- Listeleme tablosunda eklenen şablonun göründüğünü doğrula.
- Düzenleme ve silme işlemlerini test et.
- Markdown açıklamasının DB’de saklandığını ve UI’da render edildiğini kontrol et.
- http://localhost:3000/mentor-dashboard
- Yalnızca kendisine atanmış öğrencilerin listelendiğini doğrula.
- Öğrenci detay sayfasına git:
- Öğrenci profil özetini görüntüle.
- Proje şablonları listesinden seçim yap ve “Projeyi Ata” butonuna bas.
- Atanan projenin öğrencinin dashboard’unda göründüğünü doğrula.
- http://localhost:3000/student-dashboard
- Onboarding sonrası profil özetini görüntüle.
- Mentor tarafından atanmış projelerin listelendiğini kontrol et.
- Admin: Kayıtlı kullanıcıları görür, mentör atar, proje şablonlarını yönetir.
- Mentör: Kendisine atanan öğrenciyi görür, proje atar, roadmap’i onaylar/düzenler.
- Öğrenci: Anketi doldurur, atanan projeyi ve görevlerini takip eder, fork/PR akışında çalışır.
- Öğrenci kayıt olur ve anketi tamamlar.
- AI, öğrencinin seviyesini ve yatkın alanlarını çıkarır (özet).
- Admin, uygun mentörü atar.
- Mentör, proje havuzundan uygun bir proje seçer.
- AI, proje + öğrenci profiline göre bir roadmap üretir (mentör onaylar/düzenler).
- Roadmap adımları GitHub issue/PR döngüsü ile yürütülür.
- Uygulama: Next.js 15 (App Router), TypeScript, TailwindCSS
- Sunucu uçları: Next.js Route Handlers (REST) + Server Actions
- Kimlik doğrulama: NextAuth (Credentials provider, JWT strategy)
- Veritabanı: PostgreSQL + Prisma ORM
- AI servisi: Google Vertex AI (Gemini) — profil analizi, proje önerisi ve roadmap üretimi
- UI: shadcn/ui + Radix UI
Detaylı katkı rehberi için CONTRIBUTING.md dosyasına bakın.
- Fork → branch → PR akışı ile katkı verin.
- Küçük ve odaklı PR’lar tercih edilir.
MIT
Yaklaşım: Feature‑based.
src/
app/ # Next App Router (route segmentleri)
(public)/ # kayıt/anket, landing vb.
(student)/ # öğrenci alanı
(mentor)/ # mentor alanı
(admin)/ # admin alanı
api/ # (gerekirse) route handlers
features/
auth/
ui/ # sayfa ve bileşenler (UI-only)
server/ # server actions, service, repo katmanı
models/ # Zod şemaları, tipler, domain modelleri
lib/ # yardımcı fonksiyonlar (yalnızca feature içi)
hooks/ # client hooks
components/ # feature-özel küçük bileşenler
student/...
mentor/...
admin/...
lib/ # app-geneli yardımcılar (fetcher, auth guard)
styles/ # global css/tailwind
prisma/
schema.prisma # yalnızca veritabanı şeması (Prisma)
- Şemalar (schemas):
- Veritabanı şeması yalnızca
prisma/schema.prismaiçinde tutulur. - Uygulama/doğrulama şemaları (Zod) ilgili feature altında
models/içinde tanımlanır.
- Veritabanı şeması yalnızca
- Dışa Açık API: Route Handlers →
features/<feature>/serverfonksiyonlarını çağırır. UI bu katmana doğrudan erişmez. - İsimlendirme: Dosya/klsr: kebab-case, React bileşenleri: PascalCase, tip/şema:
PascalCase, env anahtarları:SCREAMING_SNAKE_CASE. - İçe Aktarım:
@/*alias (mutlak import); feature dışından içeri bağımlılık minimum. - Stil/UI: Tailwind + shadcn/ui. Bileşenler erişilebilirlik (a11y) kurallarına uyar.
- Durum Yönetimi: Öncelik server actions; gerekli yerde minimal client state. (İleride React Query opsiyonel.)
- Güvenlik: Server-only işlemler Route Handler/Server Action’da kalır; gizli anahtarlar client’a sızmaz. HttpOnly cookie, SameSite=Lax.
- Kod Kalitesi: TypeScript strict, ESLint + Prettier zorunlu; küçük ve odaklı PR.
- Commit/Branch: Conventional Commits (
feat:,fix:,chore:…), branch:feat/<scope>-kısa-açıklama. - PR Kuralları: “Ne değişti?” + “Nasıl test edilir?” zorunlu; ekran görüntüsü/gif teşvik edilir.
Uygulama Next.js App Router mimarisiyle yapılandırılmıştır. Dosya sistemi route, rol ve işlev bazlı organize edilmiştir.
├── prisma/
│ ├── schema.prisma # Veritabanı modeli tanımları (User, Session, Role)
│ ├── migrations/ # Prisma migration dosyaları
├── public/ # Statik dosyalar (favicon, resimler vs.)
├── scripts/
│ └── seed.ts # Test kullanıcılarını ekleyen seed script
├── src/
│ ├── app/
│ │ ├── (admin)/ # Admin'e özel route grubu
│ │ │ ├── admin-dashboard/
| | | ├ |── projects/ # Proje şablonu yönetim ekranları
│ │ │ └── layout.tsx # Admin layout guard (RBAC kontrolü)
│ │ ├── (mentor)/ # Mentör'e özel route grubu
│ │ │ ├── mentor-dashboard/
| | | | ├──[studentId]
│ │ │ └── layout.tsx
│ │ ├── (student)/ # Öğrenci'ye özel route grubu
| | | ├── student-dashboard/
| | | |
| | | ├── student-onboarding/# Öğrenci kayıt/karşılama süreci
│ │ │ └── layout.tsx
│ │ ├── (auth)/ # Giriş / Kayıt / Çıkış sayfaları
│ │ │ ├── signin/
│ │ │ │ ├── page.tsx # Giriş formu
│ │ │ │ └── actions.ts # Giriş işlemi (server action)
│ │ │ ├── signup/
│ │ │ │ ├── page.tsx # Kayıt formu
│ │ │ │ └── actions.ts # Kayıt işlemi
│ │ │ ├── signout/
│ │ │ │ └── SignoutButton.tsx
│ │ ├── api/
│ │ │ ├── auth/
│ │ │ │ └── [...nextauth]/route.ts # NextAuth endpoint
│ │ │ ├── health/
│ │ │ │ └── route.ts # Veritabanı bağlantı kontrolü
│ │ │── debug/
│ │ │ ├── layout.tsx
│ │ │ └── page.tsx
├── components/
│ ├── DebugNavbar.tsx # Oturum bilgisi gösteren debug bileşeni
│ └── SessionProvider.tsx # NextAuth session sağlayıcısı (client context)
├── features/
│ |└── auth/modules/
│ | └── user.ts # Auth işlemleri ve Zod şemaları
│ ├── student/ui/
│ │ ├── OnboardingForm.tsx # Çok adımlı öğrenci onboarding formu
│ │ └── ProfileSummaryCard.tsx # Profil özeti bileşeni (AI + mock fallback)
│ ├── student/models/
│ │ └── onboarding.ts # Zod doğrulama şemaları (kişisel, deneyim, hedef)
│ ├── student/server/
│ │ ├── onboarding.ts # `saveOnboarding(data)` server action
│ │ └── profileSummary.ts # `getProfileSummary()` + `getMockProfileSummary()` fonksiyonu
|
├── lib/
│ ├── auth/
│ │ ├── nextauth.ts # NextAuth konfigürasyonu
│ │ ├── guard.ts # API route auth guard fonksiyonu
│ │ ├── prisma.ts # Prisma client instance
│ └── db.ts # Prisma veritabanı erişimi
├── types/
│ └── next-auth.d.ts # NextAuth tip genişletmeleri (Session, JWT, User)
- Next.js 15 + TS + Tailwind iskeleti, README ve lisans.
Veritabanı altyapısı: PostgreSQL (Docker Compose) + Prisma kurulumu
UserveRolemodeli tanımlandı- Prisma singleton (
src/lib/db.ts) ile bağlantı yönetimi sağlandı
Seed sistemi:
npx prisma db seedile 1 admin, 1 mentor, 1 öğrenci oluşturuluyor- Şifreler hashlenmiş (
argon2) ve veritabanına kaydediliyor - Test kullanıcıları:
admin@example.com,mentor@example.com,student@example.com
Kimlik doğrulama (Auth):
- NextAuth kullanıldı (Lucia önerisi değerlendirildi)
src/app/api/auth/[...nextauth]/route.tsiçinde yapılandırıldı- Oturum yönetimi:
getServerSession(authOptions) - Giriş/kayıt akışı tamamlandı
RBAC (Role-Based Access Control):
- Rol bazlı layout guard’ları:
src/app/(admin|mentor|student)/layout.tsx session.user.rolekontrolü ile yönlendirme sağlanıyor- Giriş yapılmamış kullanıcılar
/signinsayfasına yönlendiriliyor
Healthcheck endpoint:
GET /api/health→ veritabanı bağlantısını kontrol eder- JSON çıktısı:
{ status, db, timestamp } - README’ye açıklayıcı not eklendi
Hızlı Başlangıç rehberi:
git clone → docker compose up -d → .env → migrate → seed → devadımları- README’de eksiksiz ve birebir uygulanabilir şekilde belgelendi
Çok adımlı anket formu:
features/student/ui/OnboardingForm.tsxiçinde ShadCN bileşenleriyle oluşturuldu- Adımlar: Kişisel Bilgiler → Deneyim → Hedefler
- Doğrulama:
features/student/models/onboarding.tsiçinde Zod şemaları - Progress bar ve stepper ile kullanıcı yönlendirmesi sağlandı
Veri kaydı (Server Action):
features/student/server/onboarding.ts→saveOnboarding(data)fonksiyonuprisma/schema.prisma→StudentProfilemodeli:userId,experienceLevel,interests,goals,availability,birthYear- Idempotent kayıt: aynı kullanıcıya tekrar çalıştırıldığında veri güncellenir
- Başarılı işlem sonrası redirect:
/app/(student)/student-dashboard
Profil özeti (Gemini AI):
features/student/server/profileSummary.ts→getProfileSummary()fonksiyonu (Gemini AI ile analiz, hata durumunda mock fallback)- Örnek response:
{ level, tracks, summary, recommendations } - UI:
features/student/ui/ProfileSummaryCard.tsxbileşeni ile gösterilir
Dashboard entegrasyonu:
app/(student)/student-dashboard/page.tsx→ Öğrenci verisi veritabanından çekilir- Hoşgeldin mesajı, profil özeti ve proje durumu gösterilir
- Proje henüz atanmadıysa bilgilendirici mesaj render edilir
- Admin: kullanıcı listesi, rol/mentör atama ekranı.
- Proje Havuzu (Admin): şablon CRUD, markdown editörü, zorluk/track alanları.
- Mentor: öğrenci detayında öneri sıralaması ile proje seçimi.
- AI ile roadmap taslağı üret; mentor düzenleyip yayınlar (yalnızca taslak aşaması, görevleştirmeyi sonraya bırakabiliriz).
- Dokümantasyon: fork → branch → PR akışı,
ghCLI yönergeleri. - (Opsiyon) PR/Issue read‑only durumlarını uygulamada göstermek için webhook/cron okuma taslağı.
- Öğrenci/Mentor yorum alanları (uygulama içi), ilerleme yüzdesi, bildirim taslağı.
- CI (lint/typecheck/test/build), e2e test iskeleti, güvenlik/gizlilik gözden geçirme.
Not: Bu roadmap yön göstericidir. Her milestone küçük PR’lara bölünmelidir; detaylı “tasklandırma” issue’larda yapılacaktır.



