Files
ta1sph.info/PROJECT_MEMORY.md
T
suphicakir 809f89af08 feat: add blog with archives, pagination, search, sharing and RSS
- Content collection (one folder per post) with zod schema
- /blog, category and tag archives with /sayfa/<n>/ pagination
- Post page: breadcrumbs, date badges, share bar, TOC, DIY notice,
  code copy, license line, prev/next, BlogPosting + BreadcrumbList JSON-LD
- Sidebar: Pagefind search, categories, featured fallback, tag cloud
- Sätteri HAST plugins for figure/figcaption and external links
- Dual-theme Shiki, themed prose, RSS feed, latest posts on home
- Three sample posts marked as examples

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-10-16 01:06:07 +03:00

13 KiB
Raw Blame History

PROJECT_MEMORY — ta1sph.info

Claude'un bu proje için kalıcı hafızası. Her görev sonunda güncellenir. Kısa ve güncel tutulur. Son güncelleme: 2026-10-16 · Güncelleyen: Claude (Siteyi Kur — Aşama 4)

1. Durum

  • Aşama: 4 tamamlandı (blog altyapısı). Sıradaki: Aşama 5 — Görüntülenme sayacı.
  • Tamamlanan: Aşama 0–4. Stil önizleme yalnızca dev'de: http://localhost:4321/styleguide/.
  • Açık işler: Aşama 5–8. Sidebar "Öne Çıkan" şimdilik frontmatter featured (yoksa en yeni 3) → A5'te API ile doldurulacak (ol[data-featured]). Yasal sayfalar yok (A6). Favicon + og-default.png yok (A7); kapaksız yazılarda og:image yok. LICENSE dosyaları A6. 3 örnek yazı (örnek etiketli) kullanıcı isteyince silinecek.
  • Bilinen sorunlar: Arama (Pagefind) astro dev'de çalışmaz, yalnızca build sonrası. Kullanıcının elle başlattığı dev sunucusu yeni koleksiyonu görmüyorsa yeniden başlatılmalı.

2. Ortam

  • Astro 7.4.0 · TailwindCSS 4.3.3 (@tailwindcss/vite) · TypeScript 6 strict · zod = astro/zod (ayrı paket yok)
  • @astrojs/node 11.1.8 · mdx 8.1.0 · sitemap 3.7.4 · rss 4.0.19 · astro-icon 1.2.0 · pagefind 1.5.2
  • Yerel: Node v26.11.1, npm 12.2.0, Docker 29.8.1 · package.json engines: node >=22.22
  • Repo: yerel git (Gitea remote henüz yok; push yalnızca kullanıcı onayıyla) · Branch: main
  • Canlı: https://ta1sph.info (Dokploy, HomeServer Atlas) — henüz yayında değil

3. Dosya Haritası

  • astro.config.mjs — site/trailingSlash/static + node adapter, mdx, sitemap (/_styleguide/ hariç), astro-icon (tabler), Tailwind vite plugin
  • src/styles/global.css — tema token'ları (light/dark, data-theme), fontlar, .surface-alt (khaki bölüm), .headline, .link-strong, reduced-motion
  • src/data/site.json (ad, açıklama, nav, footer, ui metinleri, postsPerPage) · src/data/social.json (boş href → gizli) · src/lib/data.ts (zod; hata build'i kırar)
  • src/layouts/BaseLayout.astro — head (ThemeInit, Seo, RSS alternate), skip link, Header, main#main, Footer
  • src/components/ — Seo (title/desc/canonical/OG/Twitter + WebSite/Person JSON-LD graph, jsonLd prop'u ile ek düğüm), ThemeInit (FOUC önleyici inline), ThemeToggle, Header (mobil menü = native popover, JS yok), Footer (4 sütun), Container, GridLines, SectionHeading (eyebrow + kırmızı çizgi), Button (primary/secondary/link), Badge (solid/outline/category), Card, ExternalLink
  • src/data/home.json — seo, hero, sections[] (feature | cards | latestPosts); şema data.ts → home, HomeSection. Tanıtım metinleri sitelerin kendi tanıtımlarından (2026-10-16 tarandı)
  • src/pages/index.astro — sections'ı sırayla render eder; arka plan dönüşümlü (hero khaki → paper, khaki…)
  • src/components/Section.astro (tam genişlik bölüm + GridLines, alt = khaki) · src/components/home/ — Hero, FeatureSection (numara + ikon | çağrı işareti/alan adı | başlık+metin+CTA; 3 sütun grid çizgileriyle hizalı), CardGrid, LatestPosts (slot), Numeral (dev rakam ::before ile → a11y/kontrast dışı)
  • Button — external prop'u (target/rel + sr-only "yeni sekmede açılır")
  • src/content.config.ts — blog koleksiyonu (glob **/index.{md,mdx}, id = klasör adı), zod şeması (kapak varsa coverAlt zorunlu)
  • src/data/categories.json (slug/ad/açıklama/ikon) · src/data/blog.json (blog arayüz metinleri, paylaşım URL şablonları {url}/{title}); data.ts → categories, blog, fmt()
  • src/lib/posts.ts — getPosts (prod'da draft hariç, bilinmeyen kategori build'i kırar), URL yardımcıları, readingMinutes (body/200), tag/kategori sayımları, featuredPosts, adjacentPosts, chunk/pageUrl/pageParam · src/lib/dates.ts — dateBadges, formatDate (tr-TR, Europe/Istanbul), isoDay
  • src/lib/markdown-plugins.mjs — Sätteri HAST eklentileri: figurePlugin (![alt](img "Altyazı") → figure/figcaption), externalLinksPlugin (dış link → yeni sekme)
  • src/pages/blog/[...page].astro (/blog/, /blog/sayfa/n/) · blog/[slug].astro (detay + BlogPosting/BreadcrumbList JSON-LD, kod kopyala script'i) · blog/kategori/[category]/[...page].astro · blog/etiket/[tag]/[...page].astro · src/pages/rss.xml.ts
  • src/components/blog/ — BlogListing (liste düzeni + sidebar), PostCard (row/stack, kapaksızsa kategori ikonu), DateBadges, Pager, Sidebar, SearchBox (Pagefind JS API, özel UI), ShareBar, Toc, Breadcrumbs, DiyNotice
  • global.css — .article-prose (prose token eşlemesi), Shiki çift tema, .code-copy
  • src/dev/Styleguide.astro — astro.config.mjs'deki devRoutes entegrasyonu ile sadece astro dev'de /styleguide/ (_ önekli sayfalar Astro'da rota olmaz)
  • src/lib/slug.ts — Türkçe karakter dönüştürücü slugify
  • scripts/new-post.mjs — npm run new:post -- "Başlık" → src/content/blog/<slug>/index.md (draft: true); slug.ts'yi Node type-stripping ile import eder
  • src/pages/index.astro — geçici yer tutucu (Aşama 3'te değişecek)
  • docs/design-reference/ — Huemint Magazine ekran görüntüleri · CLAUDE.md → AGENTS.md + bu dosya
  • Build: astro build && pagefind --site dist/client · statik çıktı dist/client, sunucu dist/server/entry.mjs

4. Kararlar (ADR)

Tarih Karar Gerekçe
2026-10-15 Statik çıktı + @astrojs/node ile sadece /api/views dinamik "Öne çıkan = en çok okunan" için sayaç gerekli; site geri kalanı statik ve hızlı
2026-10-15 Sayaç: SQLite (better-sqlite3), volume /app/data Harici servis yok, ev sunucusunda basit ve kalıcı
2026-10-15 Arama: Pagefind Statik, sunucusuz, Türkçe destekli
2026-10-15 Harita: Leaflet + OpenStreetMap API anahtarı / ücret yok, KVKK dostu
2026-10-15 İkonlar: astro-icon + Tabler Tutarlı çizgi seti, anten kulesi ve marka ikonları mevcut
2026-10-15 Lisans: Kod MIT, içerik CC BY-SA 4.0 Kaynak gösterilerek serbest kullanım talebi
2026-10-15 Kanonik alan: apex ta1sph.info, www → 301 SEO tekilleştirme
2026-10-15 Fontlar self-host (Fontsource: Rubik + Inter) Performans + gizlilik
2026-10-16 Ek token'lar: accent-fill/on-accent-fill, accent-text (khaki'de fg'ye döner) Ölçüm: ink/red 4.46, red-strong/khaki 3.85 → küçük metin AA'yı geçmiyordu. Kırmızı zeminli butonlar ≥19px bold
2026-10-16 Astro 7 Markdown = Sätteri; eklentiler markdown.processor: satteri({ hastPlugins }) remark/rehype eklentileri bu işlemcide çalışmaz
2026-10-16 Okuma süresi post.body kelime sayısından (remark eklentisi yok) Liste sayfalarında render() gerekmez, Sätteri'de remark yok
2026-10-16 Sayfalama [...page] + sayfa/<n> (Astro paginate() değil) Spec URL'leri /blog/sayfa/n/; tek dosyada 1. sayfa + diğerleri
2026-10-16 Arama UI'ı kendi bileşenimiz (Pagefind JS API), indeks yalnızca data-pagefind-body (yazı gövdeleri) Tasarımla uyum, Türkçe metinler JSON'da
2026-10-16 Shiki github-*-high-contrast, zemin --surface Kod renkleri AA kontrastı
2026-10-16 Dekoratif dev rakamlar CSS ::before içeriği axe/Lighthouse aria-hidden metinde bile kontrast hatası veriyordu
2026-10-16 Kuruluş/site tanıtımları yalnızca sitelerin kendi ifadelerinden Uydurma bilgi yok; Telegram kartlarında açıklama yok (doğrulanmadı)
2026-10-16 Mobil menü native popover Escape/odak/light-dismiss JS'siz
2026-10-16 Pagefind CLI postbuild (astro-pagefind yok) Daha az bağımlılık; node adapter çıktısı dist/client
2026-10-16 Skill repoya kopyalanmadı, kullanıcı düzeyinde Çift kopya senkron riski
2026-10-15 Locator KN41KB99HW → 41.08307 N, 28.91094 E Harita merkezi

5. İçerik Envanteri

Slug Başlık Kategori Oluşturma Güncelleme Durum
dmr-temel-kavramlar DMR'ye Giriş: Talkgroup, Timeslot ve Color Code dmr 2026-10-01 — yayında · örnek · featured
roleler-ve-ctcss-tonu Röle Kullanırken CTCSS Tonu Neden Gerekli? roleler 2026-10-08 2026-10-15 yayında · örnek
uhf-ground-plane-anten-mantigi UHF Ground Plane Anten: Çalışma Mantığı ve Boy Hesabı antenler 2026-10-14 — yayında · örnek · diy

6. Değişiklik Günlüğü (en yeni üstte)

  • 2026-10-16 | Siteyi Kur A4 | Blog: koleksiyon, liste/kategori/etiket arşivleri + sayfalama, detay (paylaş, TOC, DIY, kod kopyala, lisans satırı), sidebar (Pagefind arama), RSS, ana sayfa son yazılar, 3 örnek yazı; axe temiz | src/content*, src/pages/blog/, src/pages/rss.xml.ts, src/components/blog/, src/lib/{posts,dates,markdown-plugins}, src/data/{blog,categories}.json, astro.config.mjs, global.css
  • 2026-10-16 | Siteyi Kur A3 | Ana sayfa: hero, 4 kuruluş, Telegram, son yazılar (boş durum), site tanıtımları; axe temiz | src/data/home.json, src/components/home/, src/components/Section.astro, src/pages/index.astro, src/lib/data.ts
  • 2026-10-16 | Siteyi Kur A2 | Token'lar, tema anahtarı, SEO bileşeni, layout, header/footer, temel bileşenler, site/social JSON, dev styleguide; axe temiz (2 tema) | src/styles/, src/components/, src/layouts/, src/data/, src/lib/data.ts, src/dev/, astro.config.mjs
  • 2026-10-16 | Siteyi Kur A1 | İskelet: Tailwind 4, mdx, sitemap, node, icon, rss, fontlar, pagefind, prettier, new:post | astro.config.mjs, package.json, scripts/, src/lib/slug.ts, src/styles/, README.md
  • 2026-10-16 | Siteyi Kur A0 | Ortam kontrolü; hafıza + docs kitten projeye kopyalandı | CLAUDE.md, PROJECT_MEMORY.md, docs/
  • 2026-10-15 | Kurulum | Skill, CLAUDE.md ve PROJECT_MEMORY.md eklendi | .claude/, CLAUDE.md, PROJECT_MEMORY.md