From e150f48b759d170ae6a19e41e5aea6470f3b5478 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Kadir=20G=C3=BCnay?= <42644031+kdrgny-dev@users.noreply.github.com> Date: Wed, 5 Aug 2026 23:27:06 +0300 Subject: [PATCH] fiyat: bantlari config'e tasi, uretim oncesi butce secimi ekle Fiyatlar prompt metninin icine gomuluydu; kendi ucretini yazmak icin buildPrompt()'un ortasindaki dort satiri duzenlemek gerekiyordu. README zaten burayi "degistirmen muhtemel yer" diye isaret ediyordu. - shared/config/pricing.ts eklendi. PRICE_BANDS dort kademenin kapsamini, ucretini ve CMS gerektirip gerektirmedigini tutuyor. price serbest metin, para birimi fark etmiyor. - Ayni dosyadaki BUDGET_FOCUSES uretim oncesi secilen butce secenegini tanimliyor: hepsi / ekonomik / kapsamli. Bir secenek hangi bantlari acacagini kendi listesiyle soyluyor. - Isletme sayfasinda Uret ve Yeniden Uret butonlarinin yanina secim geldi. Ayni isletmeye farkli butcelerle tekrar uretilebiliyor. - needs_cms kurali artik secilen bantlara gore kuruluyor. Butce daraltilinca "en az bir true en az bir false" kurali imkansiz hale geldigi icin, o cumle sadece iki tur bant birlikte aciksa gonderiliyor. - resolvePriceBands() bilinmeyen id'de tum bantlara donuyor; eski bir istemci ya da govdesiz istek fiyatsiz prompt uretemiyor. Prodivers Ayvalik Dalis Merkezi uzerinde dogrulandi: ekonomik -> cms=false, 500-1.200 ve 1.200-2.500 bantlari kapsamli -> cms=true, 3.000-6.000 ve 5.000-10.000 bantlari govdesiz -> karisik, tum bantlar (geriye donuk uyumlu) vue-tsc --noEmit temiz. Co-Authored-By: Claude Opus 5 --- README.md | 13 ++++-- app/components/BusinessDetail.vue | 60 +++++++++++++++++++--------- server/api/process/[id].post.ts | 4 +- server/utils/gemini.ts | 33 +++++++++++----- shared/config/pricing.ts | 66 +++++++++++++++++++++++++++++++ shared/types/business.ts | 6 +++ 6 files changed, 149 insertions(+), 33 deletions(-) create mode 100644 shared/config/pricing.ts diff --git a/README.md b/README.md index 0591e57..163cc6e 100644 --- a/README.md +++ b/README.md @@ -35,7 +35,7 @@ Fikir basit: bir esnafın kapısından "web sitenizi konuşalım mı?" diye boş Uygulama dört adımlı tek bir akış üzerine kurulu: 1. **Keşfet** — haritadan bir konum ve yarıçap ver. VibeCodingEx Google Places'a sorar, dönen işletmeleri yerele kaydeder: isim, kategori, adres, telefon, site, puan ve birkaç gerçek yorum. -2. **Üret** — bir işletmeyi açıp "üret" dersin. Gemini işletme hakkında bilinen her şeyi okuyup **2-3 ayrı yazılım/ürün fikri** çıkarır (QR menü, randevu, sadakat sistemi, kendi güncelleyebileceği bir site — e-ticaret ve muhasebe yazılımı hariç), her fikir için bir fiyat tahminiyle. +2. **Üret** — bir işletmeyi açıp "üret" dersin. Gemini işletme hakkında bilinen her şeyi okuyup **2-3 ayrı yazılım/ürün fikri** çıkarır (QR menü, randevu, sadakat sistemi, kendi güncelleyebileceği bir site — e-ticaret ve muhasebe yazılımı hariç), her fikir için bir fiyat tahminiyle. Üretmeden önce bütçe seçebilirsin: bütçe farketmez, ekonomik işler ya da kapsamlı sistemler. Aynı işletmeye farklı bütçelerle tekrar üretebilirsin. 3. **Pitch al** — aynı üretim, işletmenin kısa profilini ve kapıda okuyabileceğin, kopyala-yapıştır hazır bir satış metnini de verir. 4. **Takip et** — gezerken işletmeleri ziyaret edildi / kazanıldı / kaybedildi diye işaretle; listeyi filtrele, ara; hepsini durum rengiyle haritada gör. @@ -149,6 +149,8 @@ server/ gemini.ts – prompt kurma + structured-output ayrıştırma shared/ + config/ + pricing.ts – fiyat bantları ve bütçe seçenekleri — kendi rakamların buraya types/ business.ts – Business, ProductIdea, ReviewSnippet — tek doğruluk kaynağı usage.ts – DailyUsage tipi, sunucu ile istemci arası ortak @@ -169,7 +171,8 @@ Kendi bölgen/pazarın için değiştirmen muhtemel yerler: - **Varsayılan harita merkezi** — `app/utils/mapStyle.ts` → `DEFAULT_MAP_CENTER` / `DEFAULT_MAP_ZOOM`. Hem Keşfet haritası hem Harita sayfası buradan besleniyor; kendi şehrinin koordinatını yaz. - **Kategori listesi** — `app/utils/category.ts` → `CATEGORY_META`. Filtre dropdown'u ve ikonlar buradan gelir. Geçerli tip adları için [Google Place Types (New)](https://developers.google.com/maps/documentation/places/web-service/place-types). - **Hariç tutulanlar** — `server/utils/places.ts` → `DEFAULT_EXCLUDED_TYPES` (Google'a "hiç gösterme" dediklerimiz) ve `POST_FILTER_EXCLUDED_TYPES` (sonradan elediklerimiz). -- **AI'ın tonu ve fiyat mantığı** — `server/utils/gemini.ts` → `buildPrompt()`. Pitch'in açılış tonu, yasak fikir türleri (şu an e-ticaret/muhasebe) ve fiyat bantları (500 TL–10.000 TL arası 4 kademe) hep bu tek fonksiyonda. +- **Fiyatların kendisi** — `shared/config/pricing.ts` → `PRICE_BANDS`. Dört kademenin kapsamı ve ücreti burada; kendi rakamlarını yazman için prompt'a dokunman gerekmiyor. `price` alanı serbest metin, para birimi fark etmez. Aynı dosyadaki `BUDGET_FOCUSES` de üretim öncesi seçilen bütçe seçeneklerini tanımlar — bir seçeneği çıkarmak ya da yenisini eklemek tek satır. +- **AI'ın tonu** — `server/utils/gemini.ts` → `buildPrompt()`. Pitch'in açılış tonu ve yasak fikir türleri (şu an e-ticaret/muhasebe) bu fonksiyonda; fiyat bantları yukarıdaki config'den geliyor. - **Dil** — tüm arayüz ve prompt'lar Türkçe hardcoded; ayrı i18n katmanı yok. Başka dile çevireceksen `.vue` metinlerini ve `gemini.ts`'teki prompt'u (çıktı dilini de) güncelle. - **Renk teması** — vurgu rengi (amber) Tailwind class'ları olarak (`bg-amber-500` vb.) doğrudan yazılı; merkezi bir değişken yok. Değiştirmek için `.vue` içinde ara-değiştir. - **Yarıçap seçenekleri** — `app/pages/discover.vue` içindeki `` in `app/pages/discover.vue` has fixed 1/3/5 km. diff --git a/app/components/BusinessDetail.vue b/app/components/BusinessDetail.vue index e6ce8aa..89da902 100644 --- a/app/components/BusinessDetail.vue +++ b/app/components/BusinessDetail.vue @@ -1,5 +1,6 @@