Genel Bakis

Freelance PM, serbest calisanlar icin gelistirilmis kapsamli bir proje yonetim uygulamasidir. Musterilerinizi, projelerinizi, gorevlerinizi ve calisma saatlerinizi tek bir platformdan yonetmenizi saglar.

👥

Musteri Yonetimi

Musterilerinizi takip edin, durumlarini yonetin, iletisim bilgilerini kaydedin.

📁

Proje Yonetimi

Projeleri musterilere baglayarak deadline, butce ve durum takibi yapin.

Kanban Gorev Panosu

Gorevlerinizi To Do, In Progress, Review ve Done kolonlariyla yonetin.

Zaman Takibi

Faturalabilir ve faturalanamaz saatlerinizi proje ve gorev bazinda kaydedin.

👤

Kullanici Yonetimi

Ekip uyelerini davet edin, roller atayin, musteri erisimini kontrol edin.

🛡

Guvenlik

JWT kimlik dogrulama, row-level security ve rol tabanli erisim kontrolu.

Kurulum

Docker ile Kurulum (Onerilen)

En kolay kurulum yontemi Docker Compose kullanmaktir. Tum servisler tek komutla ayaga kalkar.

Docker Desktop yukleyin

Henuz yuklemediyseniz docker.com/products/docker-desktop adresinden indirip kurun.

Projeyi klonlayin
git clone https://github.com/sokrateng/FreelanceApp.git cd FreelanceApp
Ortam degiskenlerini yapilandirin
cp .env.example .env # .env dosyasini duzenleyin
Servisleri baslatin
docker-compose up --build
Uygulamaya erisin

Frontend: http://localhost:3000 | Backend API: http://localhost:3001 | pgAdmin: http://localhost:5050

Manuel Kurulum

On kosullar: Node.js 18+, PostgreSQL 14+, npm

Backend

cd backend npm install cp .env.example .env # Veritabani bilgilerini duzenleyin npm run migrate # Veritabani tablolarini olusturun npm run dev # http://localhost:3001

Frontend

cd frontend npm install npm run dev # http://localhost:3000

Ilk Giris

🔒

Varsayilan Admin Hesabi

Alan Deger
E-posta admin@example.com
Sifre Admin123!
Onemli: Ilk giristen sonra varsayilan admin sifresini hemen degistirin!

Giris Akisi

Giris Sayfasi
E-posta + Sifre
JWT Token
Dashboard

Sistem JWT (JSON Web Token) tabanli kimlik dogrulama kullanir. Access token 1 saat, refresh token 7 gun gecerlidir.

Dashboard

Giris yaptiktan sonra karsilasiginiz ana sayfa. Tum onemli metrikleri tek bakista gorursunuz.

Ozet Kartlari

👥

Toplam Musteri

Aktif musteri sayiniz ve toplam musteri sayisi.

📁

Aktif Projeler

Devam eden proje sayiniz ve toplam proje sayisi.

Bekleyen Gorevler

To Do + In Progress + Review gorevleriniz ve tamamlanan sayisi.

Bu Hafta Saatler

Bu haftaki toplam calisma saatiniz ve bugunun saati.

Hizli Erisim Butonlari

Dashboard uzerinden tek tikla yeni musteri, proje, gorev olusturabilir veya zaman kaydedebilirsiniz.

Musteri Yonetimi

Sol menuden Clients sayfasina giderek musterilerinizi yonetebilirsiniz.

Musteri Durumlari

Durum Aciklama Badge
Active Aktif musteri, projeler devam ediyor active
Inactive Pasif musteri, su an proje yok inactive
Archived Arsivlenmis, eski musteri archived

Musteri Islemleri

Yeni Musteri Ekle

"Add Client" butonuna tiklayin. Ad, e-posta, sirket, telefon ve notlari girin.

Musteri Ara ve Filtrele

Arama kutusuyla isme gore arayin, durum filtresiyle (Active/Inactive/Archived) daraltin.

Musteri Detayini Goruntule

"View" linkine tiklayarak musteri bilgilerini, bagili projeleri gorun.

Musteri Duzenleme / Silme (Sadece Admin)

"Edit" ile bilgileri guncelleyin, "Delete" ile kaldirin.

Row-Level Security: Kullanicilar yalnizca kendilerine atanmis musterileri gorebilir. Admin tum musterileri gorur.

Proje Yonetimi

Projelerinizi musterilere baglayarak deadline, butce ve durum takibi yapin.

Proje Durumlari

Durum Aciklama Badge
Planning Planlama asamasinda, henuz baslanmadi planning
Active Aktif olarak calisiyor active
On Hold Beklemede, gecici olarak duraklatildi on hold
Completed Tamamlandi completed
Cancelled Iptal edildi cancelled

Proje Olusturma

"Add Project" butonuna tiklayin

Sadece admin kullanicilar yeni proje olusturabilir.

Proje bilgilerini girin

Proje adi, aciklama, musteri secimi, durum, butce ve deadline bilgilerini doldurun.

Projeyi takip edin

Projeler tablosunda durum, butce ve deadline bilgileriyle listelenir. Arama ve filtreleme yapabilirsiniz.

Proje Istatistikleri

Sayfa ustundeki ozet kartlarinda toplam, planlanan, aktif, bekleyen ve tamamlanan proje sayilari goruntulenir.

Gorev Yonetimi (Kanban)

Gorevler, Kanban panosu seklinde 4 kolonda goruntulenir. Gorevleri durumlar arasinda tasiyarak is akisinizi yonetin.

Kanban Panosu

To Do
API entegrasyonu
urgent
Dokumantasyon
low
In Progress
Login sayfasi
high
Review
Dashboard tasarim
medium
Done
Veritabani kurulumu
low

Oncelik Seviyeleri

Oncelik Renk Kullanim
Urgent █ Kirmizi Hemen yapilmasi gereken kritik gorevler
High █ Turuncu Oncelikli, kisa surede tamamlanmasi gereken
Medium █ Sari Normal oncelikli, planlanmis gorevler
Low █ Yesil Dusuk oncelikli, zaman oldukca yapilacak

Gorev Islemleri

"Add Task" ile yeni gorev olusturun

Baslik, aciklama, proje secimi, oncelik, tahmini saat ve bitis tarihi girin.

Durum guncelleyin

Gorev kartindaki dropdown ile durumu degistirin (To Do → In Progress → Review → Done).

Proje bazinda filtreleyin

Dropdown ile belirli bir projenin gorevlerini goruntuleyebilirsiniz.

Gorev Karti Bilgileri

Her gorev kartinda su bilgiler gorunur:

Zaman Takibi

Calisma saatlerinizi proje ve gorev bazinda kaydedin. Faturalabilir ve faturalanamaz saatleri ayri takip edin.

Zaman Istatistikleri

📊

Toplam Saat

Tum zamanlarin toplam calisma saati.

📅

Bugun

Bugunun toplam calisma saati.

📆

Bu Hafta

Bu haftanin toplam calisma saati.

📇

Bu Ay

Bu ayin toplam calisma saati.

💰

Faturalabilir

Fatura edilebilir toplam saat.

Zaman Kaydi Olusturma

"Add Time Entry" butonuna tiklayin

Zaman takibi sayfasindan veya dashboard'daki hizli erisim butonundan.

Kayit bilgilerini girin

Proje, gorev (opsiyonel), saat, tarih, aciklama ve faturalabilir mi isaretleyin.

Kayitlari yonetin

Listede proje bazinda filtreleyin, duzenleyin veya silin. Toplam ve faturalabilir saat otomatik hesaplanir.

💡
Ipucu: Her kayitta "Billable" kutusunu isaretleyerek faturalabilir saatlerinizi ayirin. Ay sonunda faturalabilir saatleri raporlayarak musterinize kolayca fatura kesin.

Kullanici Yonetimi

🔒
Bu bolum sadece Admin rolundeki kullanicilara aciktir.

Ekip uyelerinizi davet edin, rollerini atayin ve musteri erisimlerini kontrol edin.

Kullanici Davet Etme

"Invite User" butonuna tiklayin

Users sayfasindaki modal acilir.

Davet bilgilerini doldurun

Ad, soyad, e-posta, rol (Admin/User) ve atanacak musterileri secin.

Davet e-postasi gonderilir

Davet edilen kisi e-postasindaki linke tiklayarak hesabini aktive eder.

Kullanici Durumlari

Durum Aciklama
Active Davetini kabul etmis, aktif kullanici
Pending Davet gonderildi, henuz kabul etmedi
Expired Davet suresi dolmus, tekrar gonderilmeli
Inactive Hesabi deaktive edilmis

Musteri Atama

Her kullaniciya belirli musteriler atayabilirsiniz. Kullanici sadece kendisine atanan musterileri ve o musterilerin projelerini gorebilir.

"Edit Clients" butonuna tiklayin

Kullanici satirindaki Edit Clients butonu musteri atama modalini acar.

Musterileri secin

Checkbox'larla kullaniciya atanacak musterileri isaretleyin.

Kaydedin

"Save Changes" ile atamalari kaydedin. Kullanici artik sadece secili musterileri gorecektir.

Roller ve Yetkiler

Sistemde iki temel rol bulunur. Her rolun farkli yetkileri vardir.

Admin

  • Tum musterileri gorebilir
  • Tum projeleri gorebilir
  • Musteri olusturma / duzenleme / silme
  • Proje olusturma / duzenleme / silme
  • Kullanici davet etme ve yonetme
  • Kullanicilara musteri atama
  • Gorev olusturma ve yonetme
  • Zaman kaydi olusturma

User

  • Sadece atanan musterileri gorebilir
  • Sadece atanan projeleri gorebilir
  • Gorev olusturma ve yonetme
  • Zaman kaydi olusturma
  • Kendi profilini duzenleme

Profil

Sol menuden Profile sayfasina giderek kisisel bilgilerinizi goruntuleyip guncelleyebilirsiniz.

Profil Islemleri

  • Ad ve soyad guncelleme
  • E-posta guncelleme
  • Sifre degistirme
  • Hesap bilgilerini goruntuleme (rol, olusturulma tarihi)

API Referansi

Backend API, http://localhost:3001/api adresinde calisir. Tum endpoint'ler JWT token gerektirir (login haric).

Modul Endpoint Metodlar
Auth /api/auth/* POST login, register, invite, refresh, logout
Clients /api/clients/* GET (list, detail, stats), POST, PUT, DELETE
Projects /api/projects/* GET (list, detail, stats), POST, PUT, DELETE
Tasks /api/tasks/* GET (list, detail, stats), POST, PUT, DELETE
Time Entries /api/time-entries/* GET (list, detail, stats), POST, PUT, DELETE

Kimlik Dogrulama

# Login POST /api/auth/login { "email": "admin@example.com", "password": "Admin123!" } # Response { "token": "eyJhbGciOiJIUzI1NiIs...", "refreshToken": "...", "user": { "id": "...", "email": "...", "role": "admin" } } # Tum isteklerde header'a ekleyin: Authorization: Bearer <token>

Veritabani Semasi

PostgreSQL 14 kullanilir. Asagida ana tablolar ve iliskileri yer almaktadir.

Tablo Aciklama Onemli Alanlar
users Kullanici hesaplari email, role (admin/user), is_active, invite_token
clients Musteri bilgileri name, email, company, phone, status
projects Proje detaylari name, client_id, status, budget, deadline
tasks Gorev yonetimi title, project_id, status, priority, due_date, estimated_hours
time_entries Zaman kayitlari project_id, task_id, hours, date, billable, description
user_clients Kullanici-musteri eslestirmesi user_id, client_id (many-to-many)
project_clients Proje-musteri eslestirmesi project_id, client_id (many-to-many)

Iliski Diyagrami

users
user_clients
clients
projects
tasks
time_entries

Guvenlik

🔑

JWT Kimlik Dogrulama

Access token (1 saat) + Refresh token (7 gun) ile guvenli oturum yonetimi.

🔐

Sifre Hashleme

Sifreler bcrypt ile hash'lenir, duz metin olarak saklanmaz.

🛡

Rol Tabanli Erisim

Admin ve User rolleri ile farkli yetki seviyeleri.

🔒

Row-Level Security

Kullanicilar sadece atanan musterilerin verilerine erisebilir.

Davet Sistemi

Acik kayit yok, sadece admin daveti ile kullanici olusturulur.

🔨

Guvenlik Baslik

Helmet middleware ile HTTP guvenlik basliklarinin otomatik eklenmesi.

Guvenlik Onerileri

Production icin MUTLAKA yapin:
  • Varsayilan admin sifresini degistirin
  • JWT_SECRET ve JWT_REFRESH_SECRET degerlerini guclu, benzersiz anahtarlarla degistirin
  • E-posta kimlik bilgilerini .env dosyasinda tutun, docker-compose.yml icine yazmayin
  • HTTPS kullanin (reverse proxy ile)
  • Rate limiting limitlerini ihtiyaciniza gore ayarlayin