onerozbey commited on
Commit ·
3f1a576
1
Parent(s): 84ac12b
Add Next.js config files and docs
Browse files- nextjs-app/DEPLOYMENT_READY.md +120 -0
- nextjs-app/ENV_SETUP.md +36 -0
- nextjs-app/GITHUB_VERCEL_SETUP.md +138 -0
- nextjs-app/README.md +202 -0
- nextjs-app/VERCEL_DEPLOYMENT.md +89 -0
- nextjs-app/package-lock.json +0 -0
- nextjs-app/postcss.config.js +6 -0
- nextjs-app/tailwind.config.ts +39 -0
- nextjs-app/vercel.json +18 -0
nextjs-app/DEPLOYMENT_READY.md
ADDED
|
@@ -0,0 +1,120 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# 🚀 Vercel Deployment - Manuel Adımlar
|
| 2 |
+
|
| 3 |
+
## Deployment başarıyla hazır!
|
| 4 |
+
|
| 5 |
+
### ✅ Tamamlanan Adımlar:
|
| 6 |
+
1. ✅ vercel.json konfigürasyonu oluşturuldu
|
| 7 |
+
2. ✅ Production build başarılı (Build size: 92.3 kB homepage)
|
| 8 |
+
3. ✅ Environment variables template hazırlandı
|
| 9 |
+
4. ✅ Deployment dokümanları oluşturuldu
|
| 10 |
+
|
| 11 |
+
### 📋 Deployment için Yapılacaklar:
|
| 12 |
+
|
| 13 |
+
#### 1. Vercel CLI Kurulumu
|
| 14 |
+
```bash
|
| 15 |
+
npm install -g vercel
|
| 16 |
+
```
|
| 17 |
+
|
| 18 |
+
#### 2. Vercel'e Login
|
| 19 |
+
```bash
|
| 20 |
+
cd /Volumes/LaCie/borsa_uygulamasi/nextjs-app
|
| 21 |
+
vercel login
|
| 22 |
+
```
|
| 23 |
+
- Tarayıcıda açılacak sayfadan GitHub/GitLab/Bitbucket ile giriş yapın
|
| 24 |
+
|
| 25 |
+
#### 3. Environment Variables Ekle
|
| 26 |
+
|
| 27 |
+
**Vercel Dashboard'da:**
|
| 28 |
+
1. https://vercel.com adresine gidin
|
| 29 |
+
2. Project Settings → Environment Variables
|
| 30 |
+
3. Aşağıdaki 3 değişkeni ekleyin:
|
| 31 |
+
|
| 32 |
+
```
|
| 33 |
+
NEXT_PUBLIC_SUPABASE_URL=https://mitlbxlqjibfcxswgmbq.supabase.co
|
| 34 |
+
NEXT_PUBLIC_SUPABASE_ANON_KEY=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6Im1pdGxieGxxamliZmN4c3dnbWJxIiwicm9sZSI6ImFub24iLCJpYXQiOjE3NjczMjAzNjIsImV4cCI6MjA4Mjg5NjM2Mn0.La5BeCpz7s8R-LM0HKby5_925rCfVpB8qh9kC41n9Yc
|
| 35 |
+
SUPABASE_SERVICE_ROLE_KEY=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6Im1pdGxieGxxamliZmN4c3dnbWJxIiwicm9sZSI6InNlcnZpY2Vfcm9sZSIsImlhdCI6MTc2NzMyMDM2MiwiZXhwIjoyMDgyODk2MzYyfQ.TrmQ3gtqD_Pb21zKyWZTdX9FtEDUM5St9-WGcWSEf8M
|
| 36 |
+
```
|
| 37 |
+
|
| 38 |
+
#### 4. İlk Deployment
|
| 39 |
+
```bash
|
| 40 |
+
vercel
|
| 41 |
+
```
|
| 42 |
+
- Projeye isim verin (örn: borsa-app)
|
| 43 |
+
- Settings'leri onaylayın
|
| 44 |
+
|
| 45 |
+
#### 5. Production Deployment
|
| 46 |
+
```bash
|
| 47 |
+
vercel --prod
|
| 48 |
+
```
|
| 49 |
+
|
| 50 |
+
#### 6. Test Et
|
| 51 |
+
Deployment tamamlandığında size verilen URL'i test edin:
|
| 52 |
+
```bash
|
| 53 |
+
curl https://your-app.vercel.app/api/stocks?limit=3
|
| 54 |
+
```
|
| 55 |
+
|
| 56 |
+
---
|
| 57 |
+
|
| 58 |
+
## 📊 Build İstatistikleri
|
| 59 |
+
|
| 60 |
+
**Başarılı Production Build:**
|
| 61 |
+
- Homepage: 2.7 kB (92.3 kB First Load)
|
| 62 |
+
- Stock Detail: 104 kB (193 kB First Load)
|
| 63 |
+
- API Routes: Server-side (0 B client JS)
|
| 64 |
+
- Total Routes: 7
|
| 65 |
+
- Static Pages: 4
|
| 66 |
+
- Dynamic Pages: 3
|
| 67 |
+
|
| 68 |
+
**Performans Optimizasyonları:**
|
| 69 |
+
- ✅ API caching (60s)
|
| 70 |
+
- ✅ Stale-while-revalidate (300s)
|
| 71 |
+
- ✅ Edge network (Frankfurt region)
|
| 72 |
+
- ✅ Automatic HTTPS
|
| 73 |
+
- ✅ DDoS protection
|
| 74 |
+
|
| 75 |
+
---
|
| 76 |
+
|
| 77 |
+
## 🔍 Alternatif: GitHub Integration
|
| 78 |
+
|
| 79 |
+
### Otomatik Deployment için:
|
| 80 |
+
|
| 81 |
+
1. GitHub'da yeni repo oluştur
|
| 82 |
+
2. Kodu push et:
|
| 83 |
+
```bash
|
| 84 |
+
cd /Volumes/LaCie/borsa_uygulamasi/nextjs-app
|
| 85 |
+
git init
|
| 86 |
+
git add .
|
| 87 |
+
git commit -m "Initial commit: BIST stock analysis app"
|
| 88 |
+
git remote add origin https://github.com/YOUR_USERNAME/borsa-app.git
|
| 89 |
+
git push -u origin main
|
| 90 |
+
```
|
| 91 |
+
|
| 92 |
+
3. Vercel dashboard'da:
|
| 93 |
+
- "Import Project" → GitHub seç
|
| 94 |
+
- Repository'yi seç
|
| 95 |
+
- Environment variables ekle
|
| 96 |
+
- Deploy
|
| 97 |
+
|
| 98 |
+
Artık her `main` branch'e push otomatik production deploy olacak!
|
| 99 |
+
|
| 100 |
+
---
|
| 101 |
+
|
| 102 |
+
## 📈 Sonraki Adımlar
|
| 103 |
+
|
| 104 |
+
Deployment tamamlandıktan sonra:
|
| 105 |
+
- [ ] Custom domain ekle (opsiyonel)
|
| 106 |
+
- [ ] Analytics kontrol et
|
| 107 |
+
- [ ] Performance monitoring
|
| 108 |
+
- [ ] Error tracking setup
|
| 109 |
+
- [ ] Supabase Edge Functions (cron jobs)
|
| 110 |
+
- [ ] HuggingFace ML model integration
|
| 111 |
+
|
| 112 |
+
---
|
| 113 |
+
|
| 114 |
+
## 💡 Notlar
|
| 115 |
+
|
| 116 |
+
- **Local geliştirme:** `npm run dev` (localhost:3000)
|
| 117 |
+
- **Production build test:** `npm run build && npm start`
|
| 118 |
+
- **Environment:** Vercel otomatik .env.local'i production'a taşımaz
|
| 119 |
+
- **Database:** Supabase zaten production'da, ek kurulum gerekmez
|
| 120 |
+
- **Region:** Frankfurt (fra1) - Türkiye'ye en yakın
|
nextjs-app/ENV_SETUP.md
ADDED
|
@@ -0,0 +1,36 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# BIST Stock Analysis Platform - Environment Variables
|
| 2 |
+
|
| 3 |
+
## Required Variables
|
| 4 |
+
|
| 5 |
+
### Supabase Configuration
|
| 6 |
+
```bash
|
| 7 |
+
NEXT_PUBLIC_SUPABASE_URL=https://mitlbxlqjibfcxswgmbq.supabase.co
|
| 8 |
+
NEXT_PUBLIC_SUPABASE_ANON_KEY=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
|
| 9 |
+
SUPABASE_SERVICE_ROLE_KEY=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
|
| 10 |
+
```
|
| 11 |
+
|
| 12 |
+
## Optional Variables
|
| 13 |
+
|
| 14 |
+
### HuggingFace API (for Advanced Sentiment Analysis)
|
| 15 |
+
```bash
|
| 16 |
+
HUGGINGFACE_API_KEY=hf_your_key_here
|
| 17 |
+
```
|
| 18 |
+
|
| 19 |
+
**How to get HuggingFace API key:**
|
| 20 |
+
1. Sign up at https://huggingface.co
|
| 21 |
+
2. Go to Settings → Access Tokens
|
| 22 |
+
3. Create a new token with "Read" permissions
|
| 23 |
+
4. Add to Vercel: Settings → Environment Variables
|
| 24 |
+
|
| 25 |
+
**Note:** If not provided, the app will use rule-based sentiment analysis as fallback.
|
| 26 |
+
|
| 27 |
+
## Vercel Deployment
|
| 28 |
+
|
| 29 |
+
Add these environment variables in Vercel Dashboard:
|
| 30 |
+
- Settings → Environment Variables
|
| 31 |
+
- Add each variable for: Production, Preview, Development
|
| 32 |
+
|
| 33 |
+
### Current Setup Status
|
| 34 |
+
✅ Supabase configured
|
| 35 |
+
✅ ML Predictions working (no API key needed)
|
| 36 |
+
⏳ HuggingFace (optional - fallback enabled)
|
nextjs-app/GITHUB_VERCEL_SETUP.md
ADDED
|
@@ -0,0 +1,138 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# 🚀 GitHub ve Vercel Deployment Rehberi
|
| 2 |
+
|
| 3 |
+
## ⚠️ Önemli: Repository Henüz Oluşturulmamış
|
| 4 |
+
|
| 5 |
+
GitHub repository'si `https://github.com/veteroner/borsanew` henüz mevcut değil.
|
| 6 |
+
|
| 7 |
+
## 📋 Adım Adım GitHub + Vercel Deployment
|
| 8 |
+
|
| 9 |
+
### 1️⃣ GitHub Repository Oluştur
|
| 10 |
+
|
| 11 |
+
**Seçenek A: GitHub Web Interface**
|
| 12 |
+
1. https://github.com/new adresine git
|
| 13 |
+
2. Repository name: `borsanew`
|
| 14 |
+
3. Description: `BIST Stock Analysis App - Next.js 14 + Supabase + PostgreSQL`
|
| 15 |
+
4. Public/Private seç
|
| 16 |
+
5. ❌ **README, .gitignore, license EKLEME** (zaten var)
|
| 17 |
+
6. "Create repository" tıkla
|
| 18 |
+
|
| 19 |
+
**Seçenek B: GitHub CLI**
|
| 20 |
+
```bash
|
| 21 |
+
gh repo create veteroner/borsanew --public --source=. --remote=origin
|
| 22 |
+
```
|
| 23 |
+
|
| 24 |
+
### 2️⃣ Kodu GitHub'a Push Et
|
| 25 |
+
|
| 26 |
+
Repository oluşturduktan sonra:
|
| 27 |
+
|
| 28 |
+
```bash
|
| 29 |
+
cd /Volumes/LaCie/borsa_uygulamasi/nextjs-app
|
| 30 |
+
|
| 31 |
+
# Remote ekle (eğer Seçenek A kullandıysanız)
|
| 32 |
+
git remote add origin https://github.com/veteroner/borsanew.git
|
| 33 |
+
|
| 34 |
+
# Push et
|
| 35 |
+
git branch -M main
|
| 36 |
+
git push -u origin main
|
| 37 |
+
```
|
| 38 |
+
|
| 39 |
+
### 3️⃣ Vercel'e Bağla
|
| 40 |
+
|
| 41 |
+
#### **Vercel Dashboard'dan:**
|
| 42 |
+
|
| 43 |
+
1. https://vercel.com adresine git
|
| 44 |
+
2. "Add New..." → "Project"
|
| 45 |
+
3. "Import Git Repository"
|
| 46 |
+
4. GitHub'ı seç ve authorize et
|
| 47 |
+
5. `veteroner/borsanew` repository'sini seç
|
| 48 |
+
6. Framework Preset: **Next.js** (otomatik seçilecek)
|
| 49 |
+
7. Root Directory: `./` (default)
|
| 50 |
+
8. Environment Variables ekle:
|
| 51 |
+
|
| 52 |
+
```env
|
| 53 |
+
NEXT_PUBLIC_SUPABASE_URL=https://mitlbxlqjibfcxswgmbq.supabase.co
|
| 54 |
+
|
| 55 |
+
NEXT_PUBLIC_SUPABASE_ANON_KEY=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6Im1pdGxieGxxamliZmN4c3dnbWJxIiwicm9sZSI6ImFub24iLCJpYXQiOjE3NjczMjAzNjIsImV4cCI6MjA4Mjg5NjM2Mn0.La5BeCpz7s8R-LM0HKby5_925rCfVpB8qh9kC41n9Yc
|
| 56 |
+
|
| 57 |
+
SUPABASE_SERVICE_ROLE_KEY=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJzdXBhYmFzZSIsInJlZiI6Im1pdGxieGxxamliZmN4c3dnbWJxIiwicm9sZSI6InNlcnZpY2Vfcm9sZSIsImlhdCI6MTc2NzMyMDM2MiwiZXhwIjoyMDgyODk2MzYyfQ.TrmQ3gtqD_Pb21zKyWZTdX9FtEDUM5St9-WGcWSEf8M
|
| 58 |
+
```
|
| 59 |
+
|
| 60 |
+
9. "Deploy" tıkla
|
| 61 |
+
|
| 62 |
+
### 4️⃣ Deployment Bekle
|
| 63 |
+
|
| 64 |
+
- İlk build ~2-3 dakika sürer
|
| 65 |
+
- Build logs'u canlı izleyebilirsiniz
|
| 66 |
+
- ✅ Success → Production URL alırsınız
|
| 67 |
+
|
| 68 |
+
### 5️⃣ Test Et
|
| 69 |
+
|
| 70 |
+
Deployment tamamlandığında:
|
| 71 |
+
|
| 72 |
+
```bash
|
| 73 |
+
# Production API'yi test et
|
| 74 |
+
curl https://borsanew.vercel.app/api/stocks?limit=3
|
| 75 |
+
|
| 76 |
+
# Tarayıcıda aç
|
| 77 |
+
open https://borsanew.vercel.app
|
| 78 |
+
```
|
| 79 |
+
|
| 80 |
+
---
|
| 81 |
+
|
| 82 |
+
## 🔄 Continuous Deployment
|
| 83 |
+
|
| 84 |
+
Artık her `git push` otomatik deployment tetikler:
|
| 85 |
+
|
| 86 |
+
```bash
|
| 87 |
+
# Kod değişikliği yap
|
| 88 |
+
git add .
|
| 89 |
+
git commit -m "Update: feature description"
|
| 90 |
+
git push
|
| 91 |
+
|
| 92 |
+
# Vercel otomatik deploy edecek!
|
| 93 |
+
```
|
| 94 |
+
|
| 95 |
+
---
|
| 96 |
+
|
| 97 |
+
## ✅ Mevcut Durum
|
| 98 |
+
|
| 99 |
+
- ✅ Git repository initialized
|
| 100 |
+
- ✅ Initial commit created (84 files)
|
| 101 |
+
- ✅ .gitignore configured
|
| 102 |
+
- ⏳ **GitHub repository oluşturulmalı**
|
| 103 |
+
- ⏳ **Code push edilmeli**
|
| 104 |
+
- ⏳ **Vercel integration yapılmalı**
|
| 105 |
+
|
| 106 |
+
---
|
| 107 |
+
|
| 108 |
+
## 🆘 Sorun Giderme
|
| 109 |
+
|
| 110 |
+
### "Repository not found" hatası
|
| 111 |
+
- GitHub'da repository'yi oluşturmayı unutmuş olabilirsiniz
|
| 112 |
+
- URL'i kontrol edin: `https://github.com/veteroner/borsanew`
|
| 113 |
+
- Private repo ise access token gerekebilir
|
| 114 |
+
|
| 115 |
+
### Push authentication hatası
|
| 116 |
+
```bash
|
| 117 |
+
# SSH kullan (önerilen)
|
| 118 |
+
git remote set-url origin git@github.com:veteroner/borsanew.git
|
| 119 |
+
git push -u origin main
|
| 120 |
+
|
| 121 |
+
# VEYA Personal Access Token kullan
|
| 122 |
+
git remote set-url origin https://YOUR_TOKEN@github.com/veteroner/borsanew.git
|
| 123 |
+
git push -u origin main
|
| 124 |
+
```
|
| 125 |
+
|
| 126 |
+
### Vercel build hatası
|
| 127 |
+
- Environment variables'ları kontrol et
|
| 128 |
+
- Build logs'u incele
|
| 129 |
+
- Local'de `npm run build` test et
|
| 130 |
+
|
| 131 |
+
---
|
| 132 |
+
|
| 133 |
+
## 📞 Yardım
|
| 134 |
+
|
| 135 |
+
Herhangi bir adımda takılırsanız:
|
| 136 |
+
1. GitHub repository'nin gerçekten oluşturulduğunu doğrulayın
|
| 137 |
+
2. Git credentials'larınızı kontrol edin
|
| 138 |
+
3. Vercel dashboard'da "Import" butonunu kullanın
|
nextjs-app/README.md
ADDED
|
@@ -0,0 +1,202 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# BIST Analiz - Next.js Uygulaması
|
| 2 |
+
|
| 3 |
+
Modern, performanslı borsa analiz platformu - Next.js 14, Supabase ve TypeScript ile geliştirildi.
|
| 4 |
+
|
| 5 |
+
## 🚀 Özellikler
|
| 6 |
+
|
| 7 |
+
- ✅ **Gerçek Zamanlı Veri**: Supabase PostgreSQL ile hızlı veri erişimi
|
| 8 |
+
- ✅ **Teknik Analiz**: RSI, MACD, Bollinger Bands ve 15+ gösterge
|
| 9 |
+
- ✅ **ML Tahminleri**: RandomForest, XGBoost, LightGBM modelleriyle fiyat tahminleri
|
| 10 |
+
- ✅ **Interaktif Grafikler**: Recharts ile profesyonel fiyat grafikleri
|
| 11 |
+
- ✅ **Responsive Tasarım**: Mobil ve desktop uyumlu Tailwind CSS
|
| 12 |
+
- ✅ **Type-Safe**: TypeScript ile tip güvenliği
|
| 13 |
+
- ✅ **Fast Performance**: Next.js 14 App Router, Server Components
|
| 14 |
+
|
| 15 |
+
## 📦 Kurulum
|
| 16 |
+
|
| 17 |
+
### 1. Bağımlılıkları Yükle
|
| 18 |
+
|
| 19 |
+
```bash
|
| 20 |
+
npm install
|
| 21 |
+
# veya
|
| 22 |
+
yarn install
|
| 23 |
+
```
|
| 24 |
+
|
| 25 |
+
### 2. Environment Variables
|
| 26 |
+
|
| 27 |
+
`.env.local` dosyasını oluşturun:
|
| 28 |
+
|
| 29 |
+
```bash
|
| 30 |
+
cp .env.local.example .env.local
|
| 31 |
+
```
|
| 32 |
+
|
| 33 |
+
Supabase bilgilerinizi ekleyin:
|
| 34 |
+
|
| 35 |
+
```env
|
| 36 |
+
NEXT_PUBLIC_SUPABASE_URL=your_supabase_url
|
| 37 |
+
NEXT_PUBLIC_SUPABASE_ANON_KEY=your_supabase_anon_key
|
| 38 |
+
SUPABASE_SERVICE_ROLE_KEY=your_service_role_key
|
| 39 |
+
```
|
| 40 |
+
|
| 41 |
+
### 3. Development Server
|
| 42 |
+
|
| 43 |
+
```bash
|
| 44 |
+
npm run dev
|
| 45 |
+
```
|
| 46 |
+
|
| 47 |
+
Tarayıcınızda açın: [http://localhost:3000](http://localhost:3000)
|
| 48 |
+
|
| 49 |
+
## 🏗️ Proje Yapısı
|
| 50 |
+
|
| 51 |
+
```
|
| 52 |
+
nextjs-app/
|
| 53 |
+
├── src/
|
| 54 |
+
│ ├── app/ # Next.js 14 App Router
|
| 55 |
+
│ │ ├── api/ # API Routes
|
| 56 |
+
│ │ │ ├── stocks/ # Hisse verileri
|
| 57 |
+
│ │ │ └── movers/ # Günlük hareket edenler
|
| 58 |
+
│ │ ├── stocks/[symbol]/ # Hisse detay sayfası
|
| 59 |
+
│ │ ├── layout.tsx # Root layout
|
| 60 |
+
│ │ └── page.tsx # Ana sayfa
|
| 61 |
+
│ ├── components/ # React bileşenleri
|
| 62 |
+
│ │ ├── Navigation.tsx # Navbar
|
| 63 |
+
│ │ ├── StockList.tsx # Hisse listesi
|
| 64 |
+
│ │ ├── StockDetail.tsx # Hisse detayı
|
| 65 |
+
│ │ ├── PriceChart.tsx # Fiyat grafiği
|
| 66 |
+
│ │ ├── TechnicalIndicators.tsx
|
| 67 |
+
│ │ ├── MLPredictions.tsx
|
| 68 |
+
│ │ ├── MarketOverview.tsx
|
| 69 |
+
│ │ └── TopMovers.tsx
|
| 70 |
+
│ ├── lib/
|
| 71 |
+
│ │ ├── supabase.ts # Supabase client
|
| 72 |
+
│ │ └── utils.ts # Yardımcı fonksiyonlar
|
| 73 |
+
│ └── types/
|
| 74 |
+
│ └── index.ts # TypeScript tipleri
|
| 75 |
+
├── public/ # Static files
|
| 76 |
+
├── package.json
|
| 77 |
+
├── tsconfig.json
|
| 78 |
+
├── tailwind.config.ts
|
| 79 |
+
└── next.config.js
|
| 80 |
+
```
|
| 81 |
+
|
| 82 |
+
## 🔌 API Endpoints
|
| 83 |
+
|
| 84 |
+
### GET /api/stocks
|
| 85 |
+
Tüm hisselerin özet bilgilerini döner (stock_summary view)
|
| 86 |
+
|
| 87 |
+
### GET /api/stocks/[symbol]
|
| 88 |
+
Belirli bir hissenin detaylı bilgilerini döner:
|
| 89 |
+
- Hisse bilgisi
|
| 90 |
+
- Güncel fiyat
|
| 91 |
+
- Teknik göstergeler
|
| 92 |
+
- ML tahminleri
|
| 93 |
+
|
| 94 |
+
### GET /api/stocks/[symbol]/prices?days=30
|
| 95 |
+
Belirli bir hissenin fiyat geçmişini döner
|
| 96 |
+
|
| 97 |
+
### GET /api/movers
|
| 98 |
+
Günlük en çok yükselenler ve düşenleri döner
|
| 99 |
+
|
| 100 |
+
## 🎨 Bileşenler
|
| 101 |
+
|
| 102 |
+
### Navigation
|
| 103 |
+
Uygulama navigasyonu - Piyasa, Hisseler, Tahminler, Haberler
|
| 104 |
+
|
| 105 |
+
### MarketOverview
|
| 106 |
+
Piyasa özeti - Toplam hisse, yükselenler, düşenler
|
| 107 |
+
|
| 108 |
+
### StockList
|
| 109 |
+
Hisse listesi tablosu - Filtreleme, sıralama, trend göstergeleri
|
| 110 |
+
|
| 111 |
+
### TopMovers
|
| 112 |
+
En çok yükselenler ve düşenler - Sidebar widget
|
| 113 |
+
|
| 114 |
+
### StockDetail
|
| 115 |
+
Hisse detay sayfası - Fiyat, istatistikler, grafikler
|
| 116 |
+
|
| 117 |
+
### PriceChart
|
| 118 |
+
Interaktif fiyat grafiği - Recharts ile 7G, 30G, 90G, 180G periyotları
|
| 119 |
+
|
| 120 |
+
### TechnicalIndicators
|
| 121 |
+
Teknik göstergeler - SMA, EMA, RSI, MACD, Bollinger Bands, ATR
|
| 122 |
+
|
| 123 |
+
### MLPredictions
|
| 124 |
+
Machine Learning tahminleri - Model tipi, güven skoru, tahmin aralığı
|
| 125 |
+
|
| 126 |
+
## 🚀 Deployment (Vercel)
|
| 127 |
+
|
| 128 |
+
### 1. Vercel'e Deploy
|
| 129 |
+
|
| 130 |
+
```bash
|
| 131 |
+
npm install -g vercel
|
| 132 |
+
vercel
|
| 133 |
+
```
|
| 134 |
+
|
| 135 |
+
### 2. Environment Variables Ekle
|
| 136 |
+
|
| 137 |
+
Vercel dashboard'da:
|
| 138 |
+
- Settings → Environment Variables
|
| 139 |
+
- `.env.local` içindeki tüm değişkenleri ekle
|
| 140 |
+
|
| 141 |
+
### 3. Production Build
|
| 142 |
+
|
| 143 |
+
```bash
|
| 144 |
+
npm run build
|
| 145 |
+
vercel --prod
|
| 146 |
+
```
|
| 147 |
+
|
| 148 |
+
## 📊 Performans
|
| 149 |
+
|
| 150 |
+
- **Streamlit**: ~2-5 saniye yükleme, her işlemde yeniden render
|
| 151 |
+
- **Next.js**: ~100-300ms ilk yükleme, sonrası anlık
|
| 152 |
+
- **Kazanç**: 10-20x hızlanma
|
| 153 |
+
|
| 154 |
+
## 🔐 Güvenlik
|
| 155 |
+
|
| 156 |
+
- Row Level Security (RLS) Supabase'de aktif
|
| 157 |
+
- Environment variables .gitignore'da
|
| 158 |
+
- Type-safe API calls
|
| 159 |
+
- Client-side validation
|
| 160 |
+
|
| 161 |
+
## 📝 Geliştirme Notları
|
| 162 |
+
|
| 163 |
+
### Veri Kaynağı
|
| 164 |
+
Supabase PostgreSQL database:
|
| 165 |
+
- 10 tablo (stocks, stock_prices, technical_indicators, ml_predictions, vb.)
|
| 166 |
+
- Partitioned stock_prices (yıllara göre)
|
| 167 |
+
- 3 view (latest_stock_prices, daily_movers, stock_summary)
|
| 168 |
+
|
| 169 |
+
### Styling
|
| 170 |
+
Tailwind CSS utility-first framework:
|
| 171 |
+
- Custom color palette (primary, success, danger)
|
| 172 |
+
- Responsive breakpoints (sm, md, lg, xl)
|
| 173 |
+
- Dark mode ready
|
| 174 |
+
|
| 175 |
+
### Type Safety
|
| 176 |
+
TypeScript interfaces tüm veri modelleri için:
|
| 177 |
+
- Stock, StockPrice, TechnicalIndicator
|
| 178 |
+
- MLPrediction, NewsArticle
|
| 179 |
+
- LatestStockPrice, StockSummary
|
| 180 |
+
|
| 181 |
+
## 🛠️ Teknolojiler
|
| 182 |
+
|
| 183 |
+
- **Frontend**: Next.js 14, React 18, TypeScript
|
| 184 |
+
- **Styling**: Tailwind CSS
|
| 185 |
+
- **Charts**: Recharts
|
| 186 |
+
- **Database**: Supabase (PostgreSQL)
|
| 187 |
+
- **Icons**: Lucide React
|
| 188 |
+
- **Deployment**: Vercel
|
| 189 |
+
|
| 190 |
+
## 📄 License
|
| 191 |
+
|
| 192 |
+
MIT
|
| 193 |
+
|
| 194 |
+
## 🤝 Katkıda Bulunma
|
| 195 |
+
|
| 196 |
+
Pull request'ler kabul edilir. Büyük değişiklikler için lütfen önce bir issue açın.
|
| 197 |
+
|
| 198 |
+
---
|
| 199 |
+
|
| 200 |
+
**Geliştirici**: BIST Analiz Ekibi
|
| 201 |
+
**Versiyon**: 0.1.0
|
| 202 |
+
**Tarih**: 2 Ocak 2026
|
nextjs-app/VERCEL_DEPLOYMENT.md
ADDED
|
@@ -0,0 +1,89 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
# Vercel Deployment Rehberi
|
| 2 |
+
|
| 3 |
+
## 🚀 Deployment Adımları
|
| 4 |
+
|
| 5 |
+
### 1. Vercel CLI Kurulumu
|
| 6 |
+
```bash
|
| 7 |
+
npm install -g vercel
|
| 8 |
+
```
|
| 9 |
+
|
| 10 |
+
### 2. Vercel'e Giriş
|
| 11 |
+
```bash
|
| 12 |
+
cd nextjs-app
|
| 13 |
+
vercel login
|
| 14 |
+
```
|
| 15 |
+
|
| 16 |
+
### 3. Environment Variables Ayarla
|
| 17 |
+
|
| 18 |
+
Vercel dashboard'da Project Settings → Environment Variables:
|
| 19 |
+
|
| 20 |
+
```env
|
| 21 |
+
NEXT_PUBLIC_SUPABASE_URL=https://mitlbxlqjibfcxswgmbq.supabase.co
|
| 22 |
+
NEXT_PUBLIC_SUPABASE_ANON_KEY=<anon-key-buraya>
|
| 23 |
+
SUPABASE_SERVICE_ROLE_KEY=<service-role-key-buraya>
|
| 24 |
+
```
|
| 25 |
+
|
| 26 |
+
### 4. İlk Deployment
|
| 27 |
+
```bash
|
| 28 |
+
vercel --prod
|
| 29 |
+
```
|
| 30 |
+
|
| 31 |
+
## 🔧 Production Build Test
|
| 32 |
+
|
| 33 |
+
Deployment öncesi local test:
|
| 34 |
+
```bash
|
| 35 |
+
npm run build
|
| 36 |
+
npm start
|
| 37 |
+
```
|
| 38 |
+
|
| 39 |
+
## 📊 Deployment Checklist
|
| 40 |
+
|
| 41 |
+
- [x] Database schema deployed (Supabase)
|
| 42 |
+
- [x] Stock data migrated (21 stocks)
|
| 43 |
+
- [x] Price data loaded (2,688 records)
|
| 44 |
+
- [x] Technical indicators calculated (21 records)
|
| 45 |
+
- [x] Next.js app running locally
|
| 46 |
+
- [ ] Production build successful
|
| 47 |
+
- [ ] Environment variables configured
|
| 48 |
+
- [ ] Vercel deployment successful
|
| 49 |
+
- [ ] Production URL accessible
|
| 50 |
+
- [ ] API endpoints working
|
| 51 |
+
- [ ] Database connections verified
|
| 52 |
+
|
| 53 |
+
## 🌐 Post-Deployment
|
| 54 |
+
|
| 55 |
+
### Custom Domain (Opsiyonel)
|
| 56 |
+
```bash
|
| 57 |
+
vercel domains add yourdomain.com
|
| 58 |
+
```
|
| 59 |
+
|
| 60 |
+
### Monitor Logs
|
| 61 |
+
```bash
|
| 62 |
+
vercel logs
|
| 63 |
+
```
|
| 64 |
+
|
| 65 |
+
### Analytics
|
| 66 |
+
- Vercel Analytics otomatik aktif
|
| 67 |
+
- Real User Monitoring (RUM) mevcut
|
| 68 |
+
|
| 69 |
+
## 🔄 Continuous Deployment
|
| 70 |
+
|
| 71 |
+
GitHub repo bağlandığında:
|
| 72 |
+
- `main` branch → Production
|
| 73 |
+
- `develop` branch → Preview
|
| 74 |
+
- Pull requests → Preview deployments
|
| 75 |
+
|
| 76 |
+
## 📈 Performance Optimization
|
| 77 |
+
|
| 78 |
+
vercel.json'da tanımlı:
|
| 79 |
+
- API caching (60s)
|
| 80 |
+
- Static generation
|
| 81 |
+
- Edge network (Frankfurt)
|
| 82 |
+
- Stale-while-revalidate
|
| 83 |
+
|
| 84 |
+
## 🔐 Security
|
| 85 |
+
|
| 86 |
+
- Environment variables encrypted
|
| 87 |
+
- HTTPS otomatik
|
| 88 |
+
- DDoS protection built-in
|
| 89 |
+
- Rate limiting available
|
nextjs-app/package-lock.json
ADDED
|
The diff for this file is too large to render.
See raw diff
|
|
|
nextjs-app/postcss.config.js
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
module.exports = {
|
| 2 |
+
plugins: {
|
| 3 |
+
tailwindcss: {},
|
| 4 |
+
autoprefixer: {},
|
| 5 |
+
},
|
| 6 |
+
}
|
nextjs-app/tailwind.config.ts
ADDED
|
@@ -0,0 +1,39 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
import type { Config } from 'tailwindcss'
|
| 2 |
+
|
| 3 |
+
const config: Config = {
|
| 4 |
+
content: [
|
| 5 |
+
'./src/pages/**/*.{js,ts,jsx,tsx,mdx}',
|
| 6 |
+
'./src/components/**/*.{js,ts,jsx,tsx,mdx}',
|
| 7 |
+
'./src/app/**/*.{js,ts,jsx,tsx,mdx}',
|
| 8 |
+
],
|
| 9 |
+
theme: {
|
| 10 |
+
extend: {
|
| 11 |
+
colors: {
|
| 12 |
+
primary: {
|
| 13 |
+
50: '#f0f9ff',
|
| 14 |
+
100: '#e0f2fe',
|
| 15 |
+
200: '#bae6fd',
|
| 16 |
+
300: '#7dd3fc',
|
| 17 |
+
400: '#38bdf8',
|
| 18 |
+
500: '#0ea5e9',
|
| 19 |
+
600: '#0284c7',
|
| 20 |
+
700: '#0369a1',
|
| 21 |
+
800: '#075985',
|
| 22 |
+
900: '#0c4a6e',
|
| 23 |
+
},
|
| 24 |
+
success: {
|
| 25 |
+
light: '#10b981',
|
| 26 |
+
DEFAULT: '#059669',
|
| 27 |
+
dark: '#047857',
|
| 28 |
+
},
|
| 29 |
+
danger: {
|
| 30 |
+
light: '#ef4444',
|
| 31 |
+
DEFAULT: '#dc2626',
|
| 32 |
+
dark: '#b91c1c',
|
| 33 |
+
},
|
| 34 |
+
},
|
| 35 |
+
},
|
| 36 |
+
},
|
| 37 |
+
plugins: [],
|
| 38 |
+
}
|
| 39 |
+
export default config
|
nextjs-app/vercel.json
ADDED
|
@@ -0,0 +1,18 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
{
|
| 2 |
+
"buildCommand": "npm run build",
|
| 3 |
+
"devCommand": "npm run dev",
|
| 4 |
+
"installCommand": "npm install",
|
| 5 |
+
"framework": "nextjs",
|
| 6 |
+
"regions": ["fra1"],
|
| 7 |
+
"headers": [
|
| 8 |
+
{
|
| 9 |
+
"source": "/api/(.*)",
|
| 10 |
+
"headers": [
|
| 11 |
+
{
|
| 12 |
+
"key": "Cache-Control",
|
| 13 |
+
"value": "s-maxage=60, stale-while-revalidate=300"
|
| 14 |
+
}
|
| 15 |
+
]
|
| 16 |
+
}
|
| 17 |
+
]
|
| 18 |
+
}
|