{"id":50394669,"url":"https://github.com/phun333/fp3","last_synced_at":"2026-05-30T20:03:41.436Z","repository":{"id":358544900,"uuid":"1160239342","full_name":"phun333/fp3","owner":"phun333","description":"Finding Publication Project Partner — Ostim Teknik Üniversitesi için tag tabanlı eşleştirme ve AI destekli öneriler ile öğrenci-akademisyen proje ortaklığı  │ platformu. Monorepo: Next.js, Fastify, Prisma, FastAPI, Expo.","archived":false,"fork":false,"pushed_at":"2026-05-17T21:04:41.000Z","size":6725,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-05-17T23:23:39.123Z","etag":null,"topics":["academic","better-auth","fastapi","keybert","monorepo","research-collaboration","student-professor","tag-matching","university"],"latest_commit_sha":null,"homepage":"","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/phun333.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":"AGENTS.md","dco":null,"cla":null}},"created_at":"2026-02-17T17:50:00.000Z","updated_at":"2026-05-17T21:04:45.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/phun333/fp3","commit_stats":null,"previous_names":["phun333/fp3"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/phun333/fp3","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/phun333%2Ffp3","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/phun333%2Ffp3/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/phun333%2Ffp3/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/phun333%2Ffp3/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/phun333","download_url":"https://codeload.github.com/phun333/fp3/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/phun333%2Ffp3/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":33707334,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-05-30T02:00:06.278Z","response_time":92,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["academic","better-auth","fastapi","keybert","monorepo","research-collaboration","student-professor","tag-matching","university"],"created_at":"2026-05-30T20:03:40.669Z","updated_at":"2026-05-30T20:03:41.429Z","avatar_url":"https://github.com/phun333.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cdiv align=\"center\"\u003e\n\n# 🎓 FP3 — Finding Publication Project Partner\n\n**Tag tabanlı akıllı eşleştirmeyle üniversitede proje \u0026 makale ortaklığı.**\n\nÖğrenciler ilgi alanlarına göre hocalarla, hocalar projelerine uygun öğrenci/akademisyenlerle buluşur.\nTek bir platform — keşif, başvuru, davet ve ekip kurma birlikte.\n\n\u003csub\u003eOstim Teknik Üniversitesi · `@ostimteknik.edu.tr` mail domain'i ile sınırlı\u003c/sub\u003e\n\n[![Next.js](https://img.shields.io/badge/Next.js-16-black?logo=next.js)](https://nextjs.org)\n[![Fastify](https://img.shields.io/badge/Fastify-5-000?logo=fastify)](https://fastify.dev)\n[![Prisma](https://img.shields.io/badge/Prisma-6-2D3748?logo=prisma)](https://prisma.io)\n[![Expo](https://img.shields.io/badge/Expo-SDK_54-000?logo=expo)](https://expo.dev)\n[![FastAPI](https://img.shields.io/badge/FastAPI-AI-009688?logo=fastapi)](https://fastapi.tiangolo.com)\n[![TypeScript](https://img.shields.io/badge/TypeScript-strict-3178C6?logo=typescript)](https://www.typescriptlang.org/)\n\n\u003c/div\u003e\n\n---\n\n## ✨ Öne Çıkan Özellikler\n\n| 🎯 | Özellik | Açıklama |\n|----|---------|----------|\n| 🔍 | **Akıllı Eşleştirme** | Tag + aktivite + departman skoruyla öğrenci ↔ hoca ↔ proje önerisi |\n| 🧠 | **Yerel AI Tag Önerisi** | KeyBERT + sentence-transformers ile metinden otomatik tag çıkarımı; cloud API yok |\n| 👥 | **Ekip Kurma Wizard'ı** | Hoca proje fikri yazar → AI tag önerir → öneren hoca/öğrencileri seçer → tek tıkla proje + davet |\n| 📥 | **Birleşik Gelen Kutusu** | Başvurular, talepler, davetler tek yerde — bekleyenler rozetli |\n| ✉️ | **Davet Sistemi** | Proje sahibi başkalarını davet eder; kabul → otomatik üyelik (kontenjan kontrollü) |\n| 📱 | **Web + Mobile** | Aynı backend, paylaşımlı tipler; Next.js dashboard + Expo native uygulama |\n| 🔐 | **Çift Mod Auth** | Better Auth — web cookie, mobile Bearer token |\n| 📚 | **Otomatik API Docs** | API ve AI servisi için tutarlı Scalar UI (`localhost:3001/docs`, `localhost:3002/docs`) |\n\n---\n\n## 🏗 Mimari\n\n```\n┌─────────────────────┐     ┌─────────────────────┐\n│  Next.js Web        │     │  Expo Mobile        │\n│  :3000              │     │  (Bearer auth)      │\n└──────────┬──────────┘     └──────────┬──────────┘\n           │ fetch /api/*               │ fetch /api/*\n           ▼                            ▼\n       ┌──────────────────────────────────────┐\n       │  Fastify API   :3001                  │\n       │  Better Auth · Prisma · Scalar docs  │\n       └──────┬───────────────────────┬────────┘\n              │ proxy                  │ prisma\n              ▼                        ▼\n      ┌──────────────────┐    ┌──────────────┐\n      │  Python AI       │    │ PostgreSQL    │\n      │  :3002           │    │ :5432         │\n      │  KeyBERT +       │◀───│ (Tag cache)   │\n      │  MiniLM-L6-v2    │    └──────────────┘\n      └──────────────────┘\n```\n\nDetaylı mimari → [`docs/architecture.md`](./docs/architecture.md)\n\n---\n\n## 🛠 Tech Stack\n\n| Katman | Teknoloji | Versiyon |\n|--------|-----------|----------|\n| **Monorepo** | Turborepo + pnpm workspaces | pnpm `9.15.4` |\n| **Web** | Next.js (App Router) + Tailwind v4 + shadcn/ui | `16.1.x` |\n| **API** | Fastify + Prisma + Better Auth | `5.2.x` |\n| **AI** | Python FastAPI + KeyBERT + sentence-transformers | `all-MiniLM-L6-v2` |\n| **Mobile** | Expo + Expo Router | SDK `54` |\n| **DB** | PostgreSQL | `17` (lokal Homebrew / Windows installer) |\n| **State** | TanStack Query | `5.x` |\n| **Icons** | Phosphor Icons | — |\n\n---\n\n## 🚀 Hızlı Başlangıç\n\n\u003e Windows için detaylı rehber → [`setup.md`](./setup.md) (sadece local, paylaşılmaz)\n\u003e macOS/Linux için aynı adımlar geçerlidir.\n\n```bash\n# 1. Klonla ve yükle\ngit clone https://github.com/\u003cowner\u003e/fp3.git\ncd fp3\npnpm install\n\n# 2. .env dosyalarını oluştur — örnekler:\ncp apps/api/.env.example.local apps/api/.env\n# apps/web/.env.local ve apps/ai-service/.env'i de aynı şekilde\n# (içeriği apps/api/.env.example.local'da görebilirsin)\n\n# 3. DB hazırlığı\ncd apps/api\npnpm prisma:generate\npnpm prisma:migrate\npnpm prisma:seed       # demo veri (örnek kullanıcılar dahil)\ncd ../..\n\n# 4. Python AI servisi\ncd apps/ai-service\npython -m venv .venv \u0026\u0026 source .venv/bin/activate  # win: .venv\\Scripts\\activate\npip install -r requirements.txt\ncd ../..\n\n# 5. Çalıştır\npnpm dev               # web (3000) + api (3001) + mobile\npnpm dev:ai            # ai servisi (3002) — ayrı terminal\n```\n\n### Kontroller\n```bash\ncurl http://localhost:3001/health            # API: {\"status\":\"ok\"}\ncurl http://localhost:3002/api/ai/health     # AI:  {\"status\":\"ok\",\"model_loaded\":true}\nopen http://localhost:3000                   # Web\nopen http://localhost:3001/docs              # API Docs (Scalar)\nopen http://localhost:3002/docs              # AI Docs  (Scalar)\n```\n\n---\n\n## 🔌 Port Standardı\n\n| Servis | Port | URL |\n|--------|------|-----|\n| **Web** (Next.js) | `3000` | http://localhost:3000 |\n| **API** (Fastify) | `3001` | http://localhost:3001 |\n| **AI** (FastAPI) | `3002` | http://localhost:3002 |s\n| **Postgres** | `5432` | — |\n| Expo Metro (opsiyonel) | `8081` | — |\n\nTüm portlar değişebilir — `apps/\u003cservis\u003e/.env` üzerinden override.\n\n---\n\n## 📁 Monorepo Yapısı\n\n```\nfp3/\n├── apps/\n│   ├── web/              Next.js 16 dashboard\n│   ├── api/              Fastify backend + Prisma + Better Auth\n│   ├── ai-service/       Python FastAPI (KeyBERT + embeddings)\n│   └── mobile/           Expo native app\n├── packages/\n│   ├── shared-types/     TS tipleri (User, Project, ...)\n│   ├── validation/       Zod şemaları (web/api/mobile paylaşır)\n│   └── config/           TSConfig base\n├── docs/                 Detaylı proje dokümantasyonu (bkz. aşağı)\n├── setup.md              Windows kurulum rehberi (gitignored)\n└── AGENTS.md             AI asistanları için bağlam dosyası\n```\n\n---\n\n## 📚 Dokümantasyon\n\nTüm detaylar `docs/` altında — her belgenin amacı tek satırda:\n\n| Belge | İçerik |\n|-------|--------|\n| [`docs/README.md`](./docs/README.md) | Doküman indeksi |\n| [`docs/architecture.md`](./docs/architecture.md) | Servisler, portlar, veri akışı |\n| [`docs/database.md`](./docs/database.md) | 13 tablo, ilişki diyagramı, migration politikası |\n| [`docs/api.md`](./docs/api.md) | Tüm endpoint referansı |\n| [`docs/ai-service.md`](./docs/ai-service.md) | AI algoritması ve UI entegrasyonu |\n| [`docs/auth.md`](./docs/auth.md) | Better Auth + Bearer + cookie akışları |\n| [`docs/web-app.md`](./docs/web-app.md) | Next.js sayfaları, component'ler |\n| [`docs/mobile-app.md`](./docs/mobile-app.md) | Expo route'ları, native auth detayları |\n| [`docs/features/inbox.md`](./docs/features/inbox.md) | Birleşik Gelen Kutusu |\n| [`docs/features/matching.md`](./docs/features/matching.md) | Matching wizard akışı |\n| [`docs/features/invitations.md`](./docs/features/invitations.md) | Davet sistemi |\n\n---\n\n## 🎯 Kullanım Senaryoları\n\n### Öğrenci olarak\n1. **Profil** doldur → bio'dan AI tag önerisi al → ilgi alanlarını seç\n2. **Eşleştirme** sayfasında \"Makale\" veya \"Proje\" amacını seç → en uygun hocaları listele\n3. Bir hocaya doğrudan **proje önerisi** gönder veya **açık projeye başvur**\n4. **Gelen Kutusu → Davetlerim**'de bir hocadan davet gelirse kabul/reddet\n\n### Hoca olarak\n1. **Matching → Ekip Kur** wizard'ını çalıştır: fikir + kontenjan + tag → AI önerir\n2. Önerilen hoca + öğrencileri seç → **tek tıkla proje açılır**, herkese davet gider\n3. **Gelen Kutusu** üç sekme:\n   - **Proje Başvuruları** — açık projeme başvuranlar\n   - **Öğrenci Talepleri** — bana doğrudan proje öneren öğrenciler\n   - **Davetlerim** — başkasının beni davet ettiği projeler\n4. **Projelerim** sayfasında her projenin durumunu (üye, başvuru, bekleyen davet) takip et\n\n---\n\n## 🔐 Kodlama \u0026 Convention'lar\n\n| Kural | Notlar |\n|-------|--------|\n| **TypeScript strict** | Her pakette `tsc --noEmit` |\n| **UI bileşenleri** | shadcn/ui + Tailwind v4 + Phosphor Icons |\n| **Primary renk** | Indigo (`#6366f1`) |\n| **API response** | `{ success, data?, error? }` |\n| **Pagination** | `{ data: T[], meta: { page, limit, total, totalPages } }` |\n| **Workspace import** | `@fp3/shared-types`, `@fp3/validation`, `@fp3/config` |\n| **Dil** | UI: Türkçe · Kod: İngilizce |\n| **Dosya isimleri** | kebab-case (`invite-modal.tsx`); camelCase fonksiyonlar |\n\n---\n\n## 🔧 Faydalı Komutlar\n\n```bash\n# Geliştirme\npnpm dev                    # tüm servisleri başlat (web + api + mobile)\npnpm dev:web                # sadece web\npnpm dev:api                # sadece API\npnpm dev:ai                 # sadece Python AI servisi\npnpm dev:mobile             # sadece Expo\n\n# Bakım\npnpm clean-ports            # 3000,3001,3002,8081 portlarını öldür\npnpm dev:fresh              # clean-ports + dev (yeniden başlat)\npnpm type-check             # tüm paketlerde tsc --noEmit\npnpm build                  # production build\npnpm format                 # Prettier\n\n# Database (apps/api dizininde)\npnpm prisma:generate        # Prisma Client\npnpm prisma:migrate         # migration uygula\npnpm prisma:seed            # demo veri\npnpm prisma:studio          # görsel DB editörü :5555\n```\n\n---\n\n## 🐛 Sık Karşılaşılan Sorunlar\n\n| Belirti | Çözüm |\n|---------|-------|\n| `Cannot find module @fp3/xxx` | `pnpm install` |\n| Prisma client yok | `cd apps/api \u0026\u0026 pnpm prisma:generate` |\n| Port çakışması | `pnpm clean-ports` |\n| API docs boş geliyor | tsx watch reload sorunu — `pkill -9 -f tsx` + `pnpm dev` |\n| AI servisi 503 | model henüz yüklenmedi — 10–30 sn bekle |\n| Mobile telefondan API'ye bağlanmıyor | `EXPO_PUBLIC_API_URL=http://\u003cLAN-IP\u003e:3001` ayarla |\n\nDaha fazla → [`setup.md`](./setup.md) ve `docs/`\n\n---\n\n## 🤝 Katkı\n\nProje aktif geliştirme aşamasında. Major değişiklikler için issue açıp tartışmak en sağlıklısı.\n\nPR akışı:\n1. Branch oluştur (`feat/...`, `fix/...`, `chore/...`)\n2. `pnpm type-check` ve `pnpm build` geçsin\n3. Atomik commit'ler (her commit derlenebilir + tek bir mantıksal değişiklik)\n4. PR açarken ne değiştiğini ve neden gerekli olduğunu açıkla\n\n\n---\n\n## 📜 Lisans\n\nBu proje üniversite ödevi olarak başladı; lisans henüz tanımlanmadı.\nKullanım için ekibe danış.\n\n---\n\n\u003cdiv align=\"center\"\u003e\n\n**FP3** · Made with ☕ for the Ostim Teknik Üniversitesi research community\n\n\u003c/div\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fphun333%2Ffp3","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fphun333%2Ffp3","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fphun333%2Ffp3/lists"}