feat(katalog+tasarim): devlet/vakıf tür sayfaları, tür çipleri link; kayıtlı-sıra satırı şişko ve sade
All checks were successful
Deploy / deploy (push) Successful in 5m1s

- /universiteler/devlet ve /universiteler/vakif: şehir sayfası iskeleti,
  haritada bu türden üniversitesi olan her il turuncu (yakınlaşma yok), üç
  özet kartı, şehir çipleri (sayfa içi çapa), şehir şehir §4.15 satırları,
  öteki türe geçiş hapı; metadata + sitemap.
- TurCipi tek kaynak: devlet/vakıf çipi tür sayfasına link (sonuç, listem,
  tadımlık, bölüm, şehir/tür satırları); üniversite sayfası tür hapı ve
  /universiteler başlıkları da link. UniSatirlari ortak dosyada: ad, tür ve
  il ayrı linkler.
- Kompakt profilli satır (DESIGN.md §10.9): iri kupa kutusu + text-3xl/4xl
  sıra, text-xl/2xl başlık, 48 px buton; telefonda alt alta, lg'de tek satır.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
This commit is contained in:
bilalgursen
2026-09-24 15:53:54 +03:00
parent a0e94bc024
commit a43c045828
17 changed files with 606 additions and 109 deletions

View File

@@ -35,3 +35,39 @@ export const UNITUR_ETIKET: Record<string, { cip: string; cumle: string }> = {
*/
export const uniturDevletMi = (unitur: string | null | undefined) =>
unitur === "DEVLET";
/**
* Tür sayfaları (/universiteler/devlet, /universiteler/vakif; DESIGN.md
* §4.18). Bilal, 24 Eyl 2026: "vakıf ve devlet de tıklanabilir olmalı".
* Vakıf MYO'lar vakıf sayfasında sayılır; KKTC ve yurt dışının tür sayfası
* yoktur (şehir sayfalarında zaten ayrı öbek).
*/
export const TUR_SAYFALARI = {
devlet: {
slug: "devlet",
ad: "Devlet Üniversiteleri",
tekil: "devlet üniversitesi",
uniturler: ["DEVLET"],
},
vakif: {
slug: "vakif",
ad: "Vakıf Üniversiteleri",
tekil: "vakıf üniversitesi",
uniturler: ["VAKIF", "VAKIF MYO"],
},
} as const;
export type TurSlug = keyof typeof TUR_SAYFALARI;
export const turSlugMu = (s: string): s is TurSlug => s in TUR_SAYFALARI;
/** Ham unitur'dan tür sayfası adresi; tür sayfası olmayanlarda null. */
export function turSayfaHref(unitur: string | null | undefined): string | null {
if (!unitur) return null;
for (const t of Object.values(TUR_SAYFALARI)) {
if ((t.uniturler as readonly string[]).includes(unitur)) {
return `/universiteler/${t.slug}`;
}
}
return null;
}