Bitirme projesi kapsamında geliştirilen, görev atama, ilerleme takibi, performans puanlama ve raporlama özellikleri sunan web tabanlı bir görev yönetimi ve çalışan performans ölçüm sistemidir. Sistem, modüler ve genişletilebilir bir mimariyle tasarlanmıştır.
- Özellikler
- Teknoloji Yığını
- Kurulum
- Yapılandırma
- API Dokümantasyonu
- Kullanım
- Proje Yapısı
- Önemli Notlar
- JWT tabanlı güvenli authentication sistemi
- Kullanıcı kayıt ve giriş işlemleri
- Token bazlı oturum yönetimi
- Otomatik token yenileme ve güvenli çıkış
- Çoklu proje desteği
- Proje oluşturma ve yönetimi
- Proje liderliği sistemi (sadece proje sahibi üye davet edebilir)
- Kullanıcılar sadece üyesi oldukları projeleri görebilir
- Proje bazlı görev ve takım organizasyonu
- Email bazlı takım üyesi davet etme
- Gerçek zamanlı davet bildirimleri
- Davet kabul/reddetme mekanizması
- Kabul edilen davetler otomatik olarak kullanıcıyı projeye ekler
- Proje bazlı takım üyesi listeleme
- Her üyenin görev istatistikleri
- Proje bazlı dashboard
- Gerçek zamanlı görev istatistikleri
- Toplam görev sayısı
- Devam eden görevler
- Tamamlanan görevler
- Takım üyesi sayısı
- Performans metrikleri
- Filtrelenebilir raporlar
- Görev oluşturma, düzenleme ve silme
- Görev durumu takibi (pending, in-progress, completed)
- Drag & Drop ile görev durumu değiştirme (Kanban Board)
- Sütunlar arası sürükle-bırak desteği
- Görev öncelik seviyeleri
- Görev atama ve takibi
- Proje bazlı görev filtreleme
- Node.js - Runtime environment
- Express.js - Web framework
- MongoDB - NoSQL veritabanı
- Mongoose - ODM (Object Data Modeling)
- JWT - Token-based authentication
- bcrypt - Password hashing
- dotenv - Environment variable management
- React 19.2.0 - UI kütüphanesi
- Vite - Build tool ve dev server
- React Router DOM 7.12.0 - Client-side routing
- Axios - HTTP client
- @dnd-kit - Drag and drop kütüphanesi (Kanban board için)
- Lucide React - Modern icon kütüphanesi
- CSS Modules - Component-scoped styling
- Context API - State management
- Node.js (v18 veya üzeri)
- MongoDB (v6 veya üzeri)
- npm veya yarn
git clone <repository-url>
cd task-performance-systemcd backend
npm installbackend klasöründe .env dosyası oluşturun:
PORT=5000
MONGODB_URI=mongodb://localhost:27017/task-performance-system
JWT_SECRET=your-super-secret-jwt-key-change-this-in-production
NODE_ENV=development# Windows
mongod
# macOS/Linux
sudo systemctl start mongodbnpm run dev
# veya
node index.jsBackend http://localhost:5000 adresinde çalışacaktır.
cd frontend
npm installnpm run devFrontend http://localhost:5173 adresinde çalışacaktır.
| Variable | Açıklama | Varsayılan |
|---|---|---|
| PORT | Backend port numarası | 5000 |
| MONGODB_URI | MongoDB bağlantı string'i | mongodb://localhost:27017/task-performance-system |
| JWT_SECRET | JWT token şifreleme anahtarı | - (zorunlu) |
| NODE_ENV | Çalışma ortamı | development |
API base URL: frontend/src/services/api.js dosyasında tanımlıdır:
const api = axios.create({
baseURL: "http://localhost:5000/api",
});Yeni kullanıcı kaydı
Request Body:
{
"name": "John Doe",
"email": "john@example.com",
"password": "securepassword123"
}
Response:
{
"success": true,
"token": "jwt-token",
"user": { "_id": "...", "name": "...", "email": "..." }
}Kullanıcı girişi
Request Body:
{
"email": "john@example.com",
"password": "securepassword123"
}
Response:
{
"success": true,
"token": "jwt-token",
"user": { "_id": "...", "name": "...", "email": "..." }
}Mevcut kullanıcı bilgileri (Requires Auth)
Headers: { "Authorization": "Bearer <token>" }
Response:
{
"success": true,
"data": { "_id": "...", "name": "...", "email": "..." }
}Kullanıcının üyesi olduğu projeleri listele (Requires Auth)
Response:
{
"success": true,
"data": [
{
"_id": "...",
"name": "Project Name",
"description": "Project Description",
"createdBy": { "_id": "...", "name": "...", "email": "..." },
"members": ["userId1", "userId2"],
"createdAt": "2026-01-14T10:00:00.000Z"
}
]
}Yeni proje oluştur (Requires Auth)
Request Body:
{
"name": "New Project",
"description": "Project description"
}
Response:
{
"success": true,
"data": {
"_id": "...",
"name": "New Project",
"description": "Project description",
"createdBy": "userId",
"members": ["userId"]
}
}Kullanıcıyı projeye davet et (Requires Auth, Only Project Leader)
Request Body:
{
"email": "user@example.com",
"projectId": "projectId"
}
Response:
{
"_id": "...",
"email": "user@example.com",
"projectId": { "_id": "...", "name": "..." },
"invitedBy": { "_id": "...", "name": "...", "email": "..." },
"status": "pending",
"createdAt": "2026-01-14T10:00:00.000Z"
}Kullanıcının bekleyen davetlerini listele (Requires Auth)
Response:
[
{
"_id": "...",
"email": "user@example.com",
"projectId": { "_id": "...", "name": "..." },
"invitedBy": { "_id": "...", "name": "..." },
"status": "pending",
"createdAt": "2026-01-14T10:00:00.000Z"
}
]Daveti kabul et (Requires Auth)
Response:
{
"invitation": { ... },
"project": {
"_id": "...",
"name": "...",
"description": "...",
"members": [...]
}
}Daveti reddet (Requires Auth)
Response:
{
"_id": "...",
"status": "rejected",
...
}Projeye ait görevleri listele (Requires Auth)
Yeni görev oluştur (Requires Auth)
Kullanıcıları listele (Requires Auth)
Kullanıcı detaylarını getir (Requires Auth)
Proje bazlı rapor getir (Requires Auth)
Response:
{
"success": true,
"data": {
"project": { "_id": "...", "name": "...", "description": "..." },
"totalTasks": 10,
"completedTasks": 5,
"inProgressTasks": 3,
"pendingTasks": 2,
"completionRate": 50,
"memberStats": [...]
}
}Kullanıcı performans raporu (Requires Auth)
- Uygulamayı açın:
http://localhost:5173 - "Register" sayfasından yeni hesap oluşturun
- Email ve şifre ile giriş yapın
- Dashboard'da "+ Proje Oluştur" butonuna tıklayın
- Proje adı ve açıklama girin
- Proje otomatik olarak oluşturulur ve sizin aktif projeniz olur
- "Team" sayfasına gidin
- "+ Üye Ekle" butonuna tıklayın (sadece proje lideri görür)
- Davet edilecek kişinin email adresini girin
- Davet gönderilir
- Sağ üstteki bildirim ikonuna tıklayın
- Bekleyen davetleri görün
- ✓ ile kabul edin veya ✕ ile reddedin
- Kabul edilen proje otomatik olarak proje listenize eklenir
- Üst bardaki proje sekmelerinden projeyi seçin
- Dashboard otomatik olarak seçili projeye göre güncellenir
- Görev istatistiklerini görüntüleyin
task-performance-system/
├── backend/
│ ├── config/
│ │ └── database.js # MongoDB bağlantı yapılandırması
│ ├── controllers/
│ │ ├── authController.js # Auth işlemleri
│ │ ├── projectController.js # Proje CRUD
│ │ ├── taskController.js # Görev CRUD
│ │ ├── userController.js # Kullanıcı işlemleri
│ │ └── invitationController.js # Davet sistemi
│ ├── middleware/
│ │ └── auth.js # JWT doğrulama middleware
│ ├── models/
│ │ ├── User.js # Kullanıcı şeması
│ │ ├── Project.js # Proje şeması
│ │ ├── Task.js # Görev şeması
│ │ └── Invitation.js # Davet şeması
│ ├── routes/
│ │ ├── authRoutes.js # Auth endpoint'leri
│ │ ├── projectRoutes.js # Proje endpoint'leri
│ │ ├── taskRoutes.js # Görev endpoint'leri
│ │ ├── userRoutes.js # Kullanıcı endpoint'leri
│ │ └── invitationRoutes.js # Davet endpoint'leri
│ ├── .env # Environment variables
│ ├── index.js # Ana server dosyası
│ └── package.json
│
├── frontend/
│ ├── public/ # Static dosyalar
│ ├── src/
│ │ ├── assets/ # Görseller ve static kaynaklar
│ │ ├── components/
│ │ │ ├── Dashboard.jsx # Dashboard sayfası
│ │ │ ├── TaskBoard.jsx # Görev tahtası (Drag & Drop)
│ │ │ ├── TaskCard.jsx # Görev kartı component
│ │ │ ├── Team.jsx # Takım sayfası
│ │ │ ├── Reports.jsx # Raporlar sayfası
│ │ │ ├── Landing.jsx # Açılış/Ana sayfa
│ │ │ ├── Login.jsx # Giriş sayfası
│ │ │ ├── Register.jsx # Kayıt sayfası
│ │ │ ├── Sidebar.jsx # Yan menü
│ │ │ ├── TopBar.jsx # Üst bar (proje seçici)
│ │ │ ├── MainLayout.jsx # Ana layout
│ │ │ ├── ProtectedRoute.jsx # Route guard
│ │ │ ├── ProjectCreateModal.jsx # Proje oluşturma modal
│ │ │ ├── TaskCreateModal.jsx # Görev oluşturma modal
│ │ │ ├── InvitationModal.jsx # Davet gönderme modal
│ │ │ ├── NotificationPanel.jsx # Bildirim paneli
│ │ │ └── Toast.jsx # Bildirim toast component
│ │ ├── context/
│ │ │ ├── AuthProvider.jsx # Auth context
│ │ │ └── useAuth.js # Auth hook
│ │ ├── services/
│ │ │ ├── api.js # Axios instance
│ │ │ ├── authService.js # Auth API çağrıları
│ │ │ ├── projectService.js # Proje API çağrıları
│ │ │ ├── dashboardService.js # Dashboard API
│ │ │ ├── teamService.js # Takım API
│ │ │ └── invitationService.js # Davet API
│ │ ├── styles/ # CSS dosyaları
│ │ ├── App.jsx # Ana uygulama component
│ │ ├── main.jsx # Entry point
│ │ └── index.css # Global stiller
│ ├── index.html
│ ├── vite.config.js
│ └── package.json
│
└── README.md
- JWT token ile güvenli authentication
- Password hashing (bcrypt)
- Protected routes (frontend ve backend)
- HTTP-only token yönetimi
- Request interceptor ile otomatik token ekleme
- 401 hatalarında otomatik logout
- Proje bazlı yetkilendirme (sadece üyeler erişebilir)
- Proje liderliği kontrolü (sadece leader davet edebilir)
- Tüm işlemler proje bazlıdır
- Kullanıcılar sadece üyesi oldukları projeleri görebilir
- Dashboard, Team, Tasks sayfaları aktif projeye göre filtrelenir
- Her kullanıcı birden fazla projeye üye olabilir
- Proje Lideri (createdBy): Projeyi oluşturan kişi
- Takım üyesi davet edebilir
- Projeyi yönetebilir
- Proje Üyesi (members): Projeye dahil edilen kullanıcılar
- Görevleri görüntüleyebilir
- Görev oluşturabilir
- Davet gönderemez
- Email bazlı davet gönderimi
- Gerçek zamanlı bildirimler
- Aynı email'e birden fazla pending davet gönderilemez
- Zaten üye olan kullanıcılara davet gönderilemez
- Kabul edilen davetler otomatik olarak kullanıcıyı projeye ekler
- Token localStorage'da saklanır
- Her request'te otomatik olarak header'a eklenir
- Token süresi dolarsa veya geçersizse otomatik logout
- Login/Register sonrası otomatik yönlendirme
Error: connect ECONNREFUSED 127.0.0.1:27017Çözüm: MongoDB servisinin çalıştığından emin olun:
mongodBackend cors middleware'i aktif. Farklı bir port kullanıyorsanız backend/index.js dosyasındaki CORS yapılandırmasını güncelleyin.
Backend veya frontend portları kullanımdaysa .env dosyasında veya vite config'de port değiştirin.
- Fork edin
- Feature branch oluşturun (
git checkout -b feature/AmazingFeature) - Değişikliklerinizi commit edin (
git commit -m 'feat: add some AmazingFeature') - Branch'inizi push edin (
git push origin feature/AmazingFeature) - Pull Request oluşturun
Bu proje bitirme projesi kapsamında geliştirilmiştir.
Sorularınız için issue açabilirsiniz.