diff --git a/src/app/paket/page.tsx b/src/app/paket/page.tsx
index bb202ba..3d8131f 100644
--- a/src/app/paket/page.tsx
+++ b/src/app/paket/page.tsx
@@ -52,6 +52,9 @@ export default function PaketPage({
Tercih danışmanları bu dönemde 1.000–3.000 TL alıyor. KolayTercih
aynı işi gerçek YÖK Atlas verisiyle, dakikalar içinde yapar.
+
+ Danışman fiyat aralığı: Armut ortalama fiyatı, Eylül 2026.
+
}>
diff --git a/src/features/liste/components/liste-cekmecesi.tsx b/src/features/liste/components/liste-cekmecesi.tsx
index 6e58f2c..e571b16 100644
--- a/src/features/liste/components/liste-cekmecesi.tsx
+++ b/src/features/liste/components/liste-cekmecesi.tsx
@@ -46,7 +46,11 @@ import { RISK_ETIKET, type RiskSeviyesi } from "@/lib/risk";
import { bolumBazAdi, turkishSlugify } from "@/lib/slug";
import { olay } from "@/lib/analitik";
import { CihazCifti, IsletimSistemiLogosu } from "./cihaz-ikonlari";
-import { sonucaGitIste } from "../hooks/use-tercih-profili";
+import {
+ profilToplamaAc,
+ sonucaGitIste,
+ useTercihProfili,
+} from "../hooks/use-tercih-profili";
import { useOturumDurumu } from "../liste-oturum-sinyali";
import { useGirisUrl } from "../liste-giris-url";
import {
@@ -92,8 +96,10 @@ export function ListeCekmecesi() {
const doluluk = Math.round((liste.length / MANUEL_LISTE_MAX) * 100);
// Profilsiz + ile eklenenlerin riski henüz hesaplanmamıştır; alt kart
- // olmayan bir analizi "hazır" diye duyurmasın.
- const riskEksik = liste.some((t) => t.risk == null);
+ // olmayan bir analizi "hazır" diye duyurmasın. Profil varken null risk,
+ // programın taban sırası olmadığındandır — sıra istemek yanlış olur.
+ const profil = useTercihProfili();
+ const riskEksik = !profil && liste.some((t) => t.risk == null);
function programaEkleGit() {
cekmeceKapat();
@@ -278,16 +284,30 @@ export function ListeCekmecesi() {
: "Her seçimin yerleşme riski hazır — son kararı sen ver."}
-
+ ) : (
+
+
+ Listemde aç
+
+
+
+ )}
diff --git a/src/features/liste/liste-store.ts b/src/features/liste/liste-store.ts
index e1e2b00..0216cd3 100644
--- a/src/features/liste/liste-store.ts
+++ b/src/features/liste/liste-store.ts
@@ -152,6 +152,9 @@ export function sunucuylaBirlestir(sunucuItems: ManuelTercih[]): ManuelTercih[]
liste = [...liste, ...ekler].slice(0, MANUEL_LISTE_MAX);
kaydet();
yayinla();
+ // Başka cihazda profilsiz eklenmiş kayıtlar risksiz gelir; profil lokalde
+ // zaten varsa PROFIL_DEGISTI_EVENT yayılmaz, riski burada doldur.
+ if (liste.some((t) => t.risk == null)) riskleriYenile();
return liste;
}
diff --git a/src/features/rapor/tercih-farki.ts b/src/features/rapor/tercih-farki.ts
index 0ca77c2..011f8bf 100644
--- a/src/features/rapor/tercih-farki.ts
+++ b/src/features/rapor/tercih-farki.ts
@@ -14,6 +14,7 @@
import {
PUAN_TURU_ETIKET,
UNIVERSITE_TIPI_ETIKET,
+ oncelikNormalize,
type TercihProfili,
} from "@/features/sihirbaz/sihirbaz-sabitler";
import type { RaporParams } from "./types/rapor";
@@ -69,7 +70,9 @@ export function tercihFarki(
) {
farklar.push("universiteTipi");
}
- if (kumeFarkli(params.oncelikler, s.oncelikler)) farklar.push("oncelikler");
+ if (kumeFarkli(params.oncelikler?.map(oncelikNormalize), s.oncelikler)) {
+ farklar.push("oncelikler");
+ }
return farklar;
}
@@ -107,7 +110,8 @@ export function farkSatirlari(
yeni: UNIVERSITE_TIPI_ETIKET[s.universiteTipi],
};
case "oncelikler":
- return { ...ortak, eski: liste(params.oncelikler), yeni: liste(s.oncelikler) };
+ return { ...ortak, eski: liste(params.oncelikler?.map(oncelikNormalize)),
+ yeni: liste(s.oncelikler), };
}
});
}
diff --git a/src/features/sihirbaz/sihirbaz-sabitler.ts b/src/features/sihirbaz/sihirbaz-sabitler.ts
index 8d6352d..2b9ac6a 100644
--- a/src/features/sihirbaz/sihirbaz-sabitler.ts
+++ b/src/features/sihirbaz/sihirbaz-sabitler.ts
@@ -111,7 +111,7 @@ export function sihirbazDogrula(girdi: unknown): SihirbazSecimleri | null {
p.oncelikler
// Eski kayıtlı profiller: çip adı "İş garantisi" idi (vaat diliyle
// çeliştiği için değişti); seçim kaybolmasın diye yeni ada eşlenir.
- .map((x) => (x === "İş garantisi" ? "İş bulma kolaylığı" : x))
+ .map(oncelikNormalize)
.filter(
(x): x is string =>
typeof x === "string" &&
@@ -124,6 +124,15 @@ export function sihirbazDogrula(girdi: unknown): SihirbazSecimleri | null {
return { kategoriler, iller, universiteTipi, oncelikler };
}
+/**
+ * Eski çip adı "İş garantisi" → "İş bulma kolaylığı". Kayıtlı profil ve eski
+ * rapor parametreleri eski adı taşıyabilir; karşılaştırma/gösterim öncesi
+ * yeni ada eşlenir ki ad değişikliği "tercihlerin değişmiş" diye okunmasın.
+ */
+export function oncelikNormalize(x: T): T | string {
+ return x === "İş garantisi" ? "İş bulma kolaylığı" : x;
+}
+
/** localStorage'taki ortak sıra + sihirbaz profilini güvenle doğrular. */
export function tercihProfiliDogrula(girdi: unknown): TercihProfili | null {
if (typeof girdi !== "object" || girdi === null) return null;