From 641ef9c3dab1dba0eb1cac578faaf0ac61f5a6d2 Mon Sep 17 00:00:00 2001 From: Mehmet Demir Date: Sun, 26 Apr 2026 13:21:39 +0300 Subject: [PATCH 01/20] Update README.md with Turkish translation Translated README content to Turkish. --- README.md | 44 ++++++-------------------------------------- 1 file changed, 6 insertions(+), 38 deletions(-) diff --git a/README.md b/README.md index 64635f1..156e879 100644 --- a/README.md +++ b/README.md @@ -1,46 +1,14 @@ -# GitReverse +# GitReverse Turkish (Translated by mehmetdemir-tr) https://github.com/user-attachments/assets/f0cdb7b2-c6f0-4483-8a01-153170479f2e -Turn a **public GitHub repository** into a **single synthetic user prompt** that someone might paste into Cursor, Claude Code, Codex, etc. to vibe code the project from scratch. +Bir **Geliştirilmeye açık GitHub deposunu** birisinin Cursor, Claude Code, Codex vb. uygulamalara yapıştırarak projeyi sıfırdan kodlayabileceği **tek sentetik yapay zeka istem satırına** dönüştürün. -The app pulls **repo metadata**, a **root file tree** (depth 1), and the **README**, then uses an LLM via [OpenRouter](https://openrouter.ai/) to produce one short, conversational prompt grounded in that context. +Bu uygulama, **repo meta verilerini**, bir **kök dosya ağacını** (derinlik yani depth 1) ve **README** dosyasını alır; ardından [OpenRouter](https://openrouter.ai/) aracılığıyla bir LLM kullanarak bu bağlamda temellendirilmiş kısa ve sohbet tarzında bir istem satırı oluşturur. -Paste a GitHub URL or `owner/repo` on the home page. You can also open **`/owner/repo`** (e.g. `/vercel/next.js`) for a shareable link that runs the same flow. +Ana sayfaya bir Github URL'si veya 'owner/repo' (sahip/depo) yazın. Aynı iş akışını çalıştıran paylaşılabilir bir bağlantı için **'/sahip/depo'** (ör. '/vercel/next.js) adresinide açabilirsiniz. -GitHub-style **`/owner/repo/tree/...`** URLs on this site **redirect to `/owner/repo`** so they do not 404. The reverse flow still uses the whole repo for now; **subfolder-aware** context (scoped to that path) is planned for a later change. - -## Stack - -Next.js (App Router), React, TypeScript, Tailwind CSS, GitHub API, OpenRouter. - -## Configuration - -Copy `.env.example` to `.env.local`. You need **`OPENROUTER_API_KEY`**. Optional: `OPENROUTER_MODEL` (defaults to `google/gemini-2.5-pro`), `GITHUB_TOKEN` for better GitHub rate limits, and Supabase env vars from the example file if you want server-side caching. - -### Custom reverse (optional) - -For **deep / focus** prompts, run the **custom_reverse** service (separate TypeScript project; see its `README`; `pnpm dev`, default port **3001**) locally or deploy it to your own backend. In `.env.local` set: - -`CUSTOM_REVERSE_SERVICE_URL=http://localhost:3001` - -Successful runs are stored in Supabase (`custom_prompt_cache`) when `SUPABASE_URL` and `SUPABASE_PUBLISHABLE_KEY` are set—they are **not** shown in the public library. - -Then enable **Custom reverse** on the home page and describe what to reverse-engineer. - -## Development - -```bash -pnpm install -pnpm dev -``` - -Open [http://localhost:3000](http://localhost:3000). - -```bash -pnpm build -pnpm start -pnpm lint -``` +Bu sitedeki GitHub tarzı **'/owner/repo/tree/...'** URL'leri, 404 hatası vermemeleri için Shout out to [GitIngest](http://github.com/coderamp-labs/gitingest) for inspiration. + From 1673ce34996162d65838045e92092e548447adda Mon Sep 17 00:00:00 2001 From: Mehmet Demir Date: Sun, 26 Apr 2026 13:31:15 +0300 Subject: [PATCH 02/20] =?UTF-8?q?README.md=20G=C3=BCncellemesi?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 48 ++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 46 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 156e879..89b8e7f 100644 --- a/README.md +++ b/README.md @@ -8,7 +8,51 @@ Bu uygulama, **repo meta verilerini**, bir **kök dosya ağacını** (derinlik y Ana sayfaya bir Github URL'si veya 'owner/repo' (sahip/depo) yazın. Aynı iş akışını çalıştıran paylaşılabilir bir bağlantı için **'/sahip/depo'** (ör. '/vercel/next.js) adresinide açabilirsiniz. -Bu sitedeki GitHub tarzı **'/owner/repo/tree/...'** URL'leri, 404 hatası vermemeleri için +Bu sitedeki GitHub tarzı **'/owner/repo/tree/...'** URL'leri, 404 hatası vermemeleri için **`/owner/repo`** adresine yönlendirilir. Ters akış şimdilik hala tüm depoyu kullanmaktadır; **alt klasörleri algılayan** bağlam (o yolun kapsamına dahil) daha sonraki bir güncellemede eklenecektir. -Shout out to [GitIngest](http://github.com/coderamp-labs/gitingest) for inspiration. +## Yığın (Stack) +Next.js (Uygulama Yönlendiricisi), React, TypeScript, Tailwind CSS, Github API Ve OpenRouter. + +## Yapılandırma +`.env.example` dosyasını `.env.local` dosyasına kopyalayın. **`OPENROUTER_API_KEY`**'e ihtiyacınız var. İsteğe bağlı: `OPENROUTER_MODEL` (varsayılan olarak `google/gemini-2.5-pro`), daha iyi GitHub hız sınırları için `GITHUB_TOKEN` ve sunucu tarafında önbellekleme istiyorsanız örnek dosyadaki Supabase ortam değişkenleri. + +### Özel ters yönlendirme (isteğe bağlı) + + + +**deep / focus** istemleri için, **custom_reverse** hizmetini (ayrı bir TypeScript projesi; `README` dosyasına bakın; `pnpm dev`, varsayılan bağlantı noktası **3001**) yerel olarak çalıştırın veya kendi arka ucunuza dağıtın. `.env.local` dosyasında şunu ayarlayın: + + + +`CUSTOM_REVERSE_SERVICE_URL=http://localhost:3001` + + + +`SUPABASE_URL` ve `SUPABASE_PUBLISHABLE_KEY` ayarlandığında başarılı çalıştırmalar Supabase'de (`custom_prompt_cache`) saklanır; bunlar genel kütüphanede **görünmez**. + + + +Ardından ana sayfada **Özel tersine çevirme** seçeneğini etkinleştirin ve neyin tersine mühendislik yapılacağını açıklayın. + + + +## Geliştirme + + +```bash + +pnpm install + +pnpm dev + +``` + + + +[http://localhost:3000](http://localhost:3000) adresini açın. + + +[GitIngest](http://github.com/coderamp-labs/gitingest)'e fikir ve ilham için teşekkürler! :) + +***Çeviri: mehmetdemir-tr (Mehmet Demir)*** From 4ebb91676a52be2a35b777135ceff213ee2c5af9 Mon Sep 17 00:00:00 2001 From: Mehmet Demir Date: Sun, 26 Apr 2026 13:33:07 +0300 Subject: [PATCH 03/20] Updated --- next.config.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/next.config.ts b/next.config.ts index e9ffa30..9fc09aa 100644 --- a/next.config.ts +++ b/next.config.ts @@ -1,7 +1,7 @@ import type { NextConfig } from "next"; const nextConfig: NextConfig = { - /* config options here */ + /* Yapılandırma ayarları buraya! */ }; export default nextConfig; From 7e403fd25a955c843eb1826a24152209c52e5611 Mon Sep 17 00:00:00 2001 From: Mehmet Demir Date: Sun, 26 Apr 2026 13:36:29 +0300 Subject: [PATCH 04/20] Translate Next.js agent rules to Turkish --- AGENTS.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/AGENTS.md b/AGENTS.md index 8bd0e39..bc1d8f4 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -1,5 +1,5 @@ -# This is NOT the Next.js you know +# Bu Next.js DEĞİL, Biliyorsun. -This version has breaking changes — APIs, conventions, and file structure may all differ from your training data. Read the relevant guide in `node_modules/next/dist/docs/` before writing any code. Heed deprecation notices. +Bu Sürümde uyumsuz değişiklikler bulunmaktadır — API'ler, kurallar ve dosya yapısı, eğitim verilerinizden farklı olabilir. Herhangi bir kod yazmadan önce `node_modules/next/dist/docs/` ilgili kılavuzu **okuyun.** Kullanımdan kaldırılacak özelliklere ilişkin uyarıları dikkate alın. From ad65d001ae6fb5b076dac8469c6bcb448c5e07aa Mon Sep 17 00:00:00 2001 From: Mehmet Demir Date: Sun, 26 Apr 2026 13:39:38 +0300 Subject: [PATCH 05/20] Translate .gitignore comments to Turkish --- .gitignore | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/.gitignore b/.gitignore index 7b8da95..d1cf3ce 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,6 @@ -# See https://help.github.com/articles/ignoring-files/ for more about ignoring files. +# Dosyaları yok sayma hakkında daha fazla bilgi için https://help.github.com/articles/ignoring-files/ adresini ziyaret edin. -# dependencies +# dependencies / bağımlılıklar /node_modules /.pnp .pnp.* @@ -10,27 +10,27 @@ !.yarn/releases !.yarn/versions -# testing +# testing / Testler /coverage # next.js /.next/ /out/ -# production +# production / Yayınlama /build -# misc +# misc / diğerleri .DS_Store *.pem -# debug +# debug / hata ayıklama npm-debug.log* yarn-debug.log* yarn-error.log* .pnpm-debug.log* -# env files (can opt-in for committing if needed) +# env files (can opt-in for committing if needed) / env dosyaları (gerekirse commit işlemine dahil edilebilir) .env* !.env.example From 9aa1ab463e3626784bca28ed760d624b0cf9130e Mon Sep 17 00:00:00 2001 From: Mehmet Demir Date: Sun, 26 Apr 2026 13:41:01 +0300 Subject: [PATCH 06/20] Update instructions in .env.example to Turkish --- .env.example | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.env.example b/.env.example index 466eb65..a1f8f78 100644 --- a/.env.example +++ b/.env.example @@ -1,4 +1,4 @@ -# Copy to .env.local and fill in values. See README for provider setup. +# .env.local'a kopyalayın ve değerleri doldurun. Daha Fazlası için README dosyasını okuyun.. # --- Supabase (optional: response caching is off if these are empty) --- SUPABASE_URL= From 5105e7cc10fea7cfc975e3ffc39036aac5dbc384 Mon Sep 17 00:00:00 2001 From: Mehmet Demir Date: Sun, 26 Apr 2026 13:42:27 +0300 Subject: [PATCH 07/20] Translate comment to Turkish in file-tree-formatter --- lib/file-tree-formatter.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/file-tree-formatter.ts b/lib/file-tree-formatter.ts index 91c4f69..784e2b2 100644 --- a/lib/file-tree-formatter.ts +++ b/lib/file-tree-formatter.ts @@ -1,5 +1,5 @@ /** - * Formats GitHub file tree data into a readable directory structure. + * GitHub dosya ağacı verisini okunabilir formata dönüştürür. */ interface FileTreeItem { From cb090dc9a727057eead21877c3e208a42b4a7fcd Mon Sep 17 00:00:00 2001 From: Mehmet Demir Date: Sun, 26 Apr 2026 13:45:17 +0300 Subject: [PATCH 08/20] Translate comments in focus-fingerprint.ts to Turkish --- lib/focus-fingerprint.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/lib/focus-fingerprint.ts b/lib/focus-fingerprint.ts index f71e6e8..d57f09d 100644 --- a/lib/focus-fingerprint.ts +++ b/lib/focus-fingerprint.ts @@ -1,9 +1,9 @@ import { createHash } from "node:crypto"; -/** MD5 hex of UTF-8 focus — must match `md5(focus::text)` in Postgres (`focus_fingerprint`). */ +/** UTF-8 formatındaki focus öğesinin MD5 onaltılık değeri — Postgres’teki `md5(focus::text)` ile eşleşmelidir (`focus_fingerprint`). */ export function focusFingerprint(focus: string): string { return createHash("md5").update(focus, "utf8").digest("hex"); } -/** Upstream / cache key for Deep Reverse. */ +/** Deep Reverse için akış / önbellek anahtarı. */ export const DEEP_REVERSE_FOCUS = "[deep] whole codebase"; From fdfcd5937a82f56b1808b2cfb03e76b675b42cfb Mon Sep 17 00:00:00 2001 From: Mehmet Demir Date: Sun, 26 Apr 2026 13:46:06 +0300 Subject: [PATCH 09/20] Update comment language in GitHub API client --- lib/github-client.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/github-client.ts b/lib/github-client.ts index 0571e09..21d9cb4 100644 --- a/lib/github-client.ts +++ b/lib/github-client.ts @@ -1,5 +1,5 @@ /** - * GitHub API Client — native fetch. + * GitHub API İstemcisi - Native Fetch */ const GITHUB_API = "https://api.github.com"; From 52a009adcda86aebc2561c67a58728e42eeb6f53 Mon Sep 17 00:00:00 2001 From: Mehmet Demir Date: Sun, 26 Apr 2026 13:46:57 +0300 Subject: [PATCH 10/20] Translate comment to Turkish in home-example-repos.ts --- lib/home-example-repos.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/home-example-repos.ts b/lib/home-example-repos.ts index 65b14f8..98f19ef 100644 --- a/lib/home-example-repos.ts +++ b/lib/home-example-repos.ts @@ -1,6 +1,6 @@ import { normalizeRepoSegment, parseGitHubRepoInput } from "@/lib/parse-github-repo"; -/** Hero “Try example repos” — excluded from view-count tracking so usage stats stay representative. */ +/** Hero “Örnek Depoları deneyin” — görüntüleme sayımı izlemesinden hariç tutulmuştur; böylece kullanım istatistikleri temsil edici kalır.*/ export const HOME_EXAMPLES = [ { label: "Next.js", url: "https://github.com/vercel/next.js" }, { label: "Openclaw", url: "https://github.com/openclaw/openclaw" }, From 681f787849c42bf4cc4567a1d9eb85c56c0090b8 Mon Sep 17 00:00:00 2001 From: Mehmet Demir Date: Sun, 26 Apr 2026 13:49:02 +0300 Subject: [PATCH 11/20] Translate comments to Turkish Updated comments to Turkish for localization. --- lib/parse-github-repo.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/lib/parse-github-repo.ts b/lib/parse-github-repo.ts index 2654b03..9e40804 100644 --- a/lib/parse-github-repo.ts +++ b/lib/parse-github-repo.ts @@ -20,7 +20,7 @@ export function parseGitHubRepoInput( return { owner: parts[0], repo: withoutGit(parts[1]) }; } } catch { - // fall through to owner/repo form + // Sahip/Depo formuna doğru düş } const parts = s.split("/").filter(Boolean); @@ -31,12 +31,12 @@ export function parseGitHubRepoInput( return null; } -/** Strip trailing `.git` for path validation (URL segment may include it). */ +/** Yol Doğrulaması (.git) (URL parçası bunu dahil edebilir). */ export function normalizeRepoSegment(repo: string): string { return repo.trim().replace(/\.git$/i, ""); } -/** Validates dynamic route segments for `/[owner]/[repo]`. */ +/** `/[owner]/[repo]` için dinamik yol parçalarını doğrular. */ export function isValidGitHubRepoPath(owner: string, repo: string): boolean { const o = owner.trim(); const r = normalizeRepoSegment(repo); From 9d961f6d9fd9183bce7b80a670f1bd663709ab53 Mon Sep 17 00:00:00 2001 From: Mehmet Demir Date: Sun, 26 Apr 2026 13:49:55 +0300 Subject: [PATCH 12/20] Translate Supabase client comment to Turkish Updated comment to provide a Turkish translation. --- lib/supabase.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/supabase.ts b/lib/supabase.ts index 6816278..0e93d6d 100644 --- a/lib/supabase.ts +++ b/lib/supabase.ts @@ -2,7 +2,7 @@ import { createClient, type SupabaseClient } from "@supabase/supabase-js"; let cached: SupabaseClient | null = null; -/** Server-side Supabase client; returns null if env is not configured (cache disabled). */ +/** Sunucu Tarafı Supabase istemcisi; ortam ayarlanmamışsa "null" döner. (cache disabled). */ export function getSupabase(): SupabaseClient | null { const url = process.env.SUPABASE_URL?.trim(); const key = process.env.SUPABASE_PUBLISHABLE_KEY?.trim(); From a2bf3a7220cebcab779e973b76d781a09e45fae0 Mon Sep 17 00:00:00 2001 From: Mehmet Demir Date: Sun, 26 Apr 2026 13:53:39 +0300 Subject: [PATCH 13/20] Translate system prompt to Turkish --- lib/system-prompt.ts | 36 ++++++++++++++++++------------------ 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/lib/system-prompt.ts b/lib/system-prompt.ts index d8b2a81..ee7d852 100644 --- a/lib/system-prompt.ts +++ b/lib/system-prompt.ts @@ -1,32 +1,32 @@ /** - * System prompt: synthesize one user-facing prompt from repo context (README, tree, metadata). + * Sistem Promptu: depo içeriğinden kullanıcıya yönelik komut istemi oluşturma. (README, tree, metadata). */ -export const SYSTEM_PROMPT = `You are an expert at inferring how people actually prompt modern coding agents. +export const SYSTEM_PROMPT = `Sen modern kodlama ajanlarının insanların gerçekte nasıl prompt yazdığını çıkarsamada uzmansın. -## Task +## Görev -You are given **repository metadata**, a **root file tree** (depth 1), and the **README** for a public GitHub project. Output **one synthetic user message**: the kind of prompt a **non-technical or lightly technical** person might paste into Cursor, Claude Code, Codex, ChatGPT code mode, or v0 to get this project built in one "vibe coding" pass. +Sana bir public GitHub projesinin repository metadatası, kök dosya ağacı (1. derinlik) ve README dosyası verilecek. Bir sentetik kullanıcı mesajı yaz: Cursor, Claude Code, Codex, ChatGPT kod modu veya v0 gibi araçlara tek bir "vibe coding" geçişinde bu projeyi yaptırmak için teknik olmayan ya da hafif teknik bir kişinin yapıştırabileceği türden bir prompt. -## What the output must be +## Çıktının özellikleri -- **Plain language.** Sounds like a real request ("Build me…", "I want…"), not an architecture doc. -- **Outcome focused.** Describe what the app or library should *do* for a user using words a normal person would use. -- **Honest scope.** Only claim features or stacks you infer from the README and tree you received. If the README was missing, empty, or uninformative, say so implicitly by keeping claims vague or limited to what the metadata suggests. -- **Length:** about **120 to 200 words**, usually one short paragraph or a few tight sentences. Not a bullet list of file paths or dependencies. -- **Tone:** natural and conversational. Use contractions when they fit. No preamble ("Sure, here is…"), no meta ("As an AI…"), no filler. +- Sade dil. Gerçek bir istek gibi ses çıkarsın ("Bana şunu yap…", "İstiyorum ki…"), mimari belge gibi değil. +- Sonuç odaklı. Uygulamanın ya da kütüphanenin kullanıcı için ne yapacağını sıradan bir insanın kullanacağı kelimelerle anlat. +- Dürüst kapsam. Sadece README'den ve ağaçtan çıkarsadığın özellikleri ya da teknoloji yığınlarını öne sür. README eksikse, boşsa ya da bilgi vermiyorsa bunu dolaylı olarak yansıt; iddiaları muğlak bırak ya da yalnızca metadatanın ima ettikleriyle sınırla. +- Uzunluk: yaklaşık 120 ile 200 kelime, genellikle kısa bir paragraf ya da birkaç sıkı cümle. Dosya yolları veya bağımlılıkların madde listesi olmasın. +- Ton: doğal ve sohbet havasında. Uygun düştüğünde kısaltma kullan. Giriş cümlesi yok ("Tabii, işte…"), meta yorum yok ("Bir yapay zeka olarak…"), dolgu yok. -## What to avoid +## Kaçınılacaklar -- Dumping framework jargon, exact package names, or folder structure unless the README clearly shows the user cared about that. -- Writing agent *system* instructions, markdown specs, or pseudo-code blocks. -- Inventing features that are not supported by the evidence in the context. +- README'de kullanıcının önemsediği açıkça gösterilmiyorsa framework jargonu, tam paket adları veya klasör yapısı dökme. +- Ajan sistem talimatları, markdown spesifikasyonları veya sözde kod blokları yazma. +- Bağlamdan desteklenmeyen özellikler icat etme. -## Context you can assume about tools +## Araçlar hakkında varsayılabilecek bağlam -Many agents today can **search the web**, **read docs**, and iterate in the IDE. It is fine for the synthetic prompt to include **one short line** like "look up current docs online if you need to" when that matches how people actually work. Do not turn the whole prompt into a product tutorial. +Günümüzdeki pek çok ajan web'de arama yapabilir, dokümantasyon okuyabilir ve IDE içinde iterasyon yapabilir. İnsanların gerçekten böyle çalıştığıyla örtüşüyorsa, sentetik prompta "gerekirse güncel dokümanlara internetten bakabilirsin" gibi kısa bir satır eklemek uygundur. Promptun tamamını ürün anlatısına dönüştürme. -## Output format +## Çıktı formatı -Reply with **only** the synthetic user message. No title, no quotes around it, no explanation before or after. +Yalnızca sentetik kullanıcı mesajını yaz. Başlık yok, etrafında tırnak yok, önce ya da sonra açıklama yok. `; From 7998656de2ef9ed3e2e11b8389c48310a5f03485 Mon Sep 17 00:00:00 2001 From: Mehmet Demir Date: Sun, 26 Apr 2026 13:58:55 +0300 Subject: [PATCH 14/20] Translate history page text to Turkish --- components/history-page.tsx | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/components/history-page.tsx b/components/history-page.tsx index d61bdd8..5a652ff 100644 --- a/components/history-page.tsx +++ b/components/history-page.tsx @@ -49,9 +49,9 @@ function isHistoryEntry(x: unknown): x is HistoryEntry { const gt = (x as HistoryEntry).lastGenerationType; if ( gt !== undefined && - gt !== "quick" && - gt !== "deep" && - gt !== "manual" + gt !== "hızlı" && + gt !== "derin" && + gt !== "manuel" ) { return false; } @@ -64,15 +64,15 @@ function isHistoryEntry(x: unknown): x is HistoryEntry { function relativeTime(iso: string): string { const diff = Date.now() - new Date(iso).getTime(); const s = Math.floor(diff / 1000); - if (s < 60) return "just now"; + if (s < 60) return "Şimdi"; const m = Math.floor(s / 60); - if (m < 60) return `${m}m ago`; + if (m < 60) return `${m}dk önce`; const h = Math.floor(m / 60); - if (h < 24) return `${h}h ago`; + if (h < 24) return `${h}saat önce`; const d = Math.floor(h / 24); - if (d < 30) return `${d}d ago`; + if (d < 30) return `${d}gün önce`; const mo = Math.floor(d / 30); - return `${mo}mo ago`; + return `${mo}ay önce`; } export function HistoryPage() { @@ -138,7 +138,7 @@ export function HistoryPage() { History

- Your previously generated prompts. + Önceki oluşturduğunuz istemler.

@@ -146,12 +146,12 @@ export function HistoryPage() {

Loading…

) : entries.length === 0 ? (

- No history yet. Check out the{" "} + Geçmiş yok (şimdilik) şuraya bir bak:{" "} - Prompt Library + istem Kütüphanesi .

@@ -172,19 +172,19 @@ export function HistoryPage() { function generationBadge(entry: HistoryEntry): { label: string; title?: string } | null { const t = entry.lastGenerationType; if (t === "deep") { - return { label: "Deep", title: "Deep Reverse" }; + return { label: "Derin", title: "Derin Tersine Mühendislik" }; } if (t === "manual") { const f = entry.lastManualFocus?.trim(); const short = f && f.length > 48 ? `${f.slice(0, 48).trimEnd()}…` : f; return { - label: short ? `Manual: ${short}` : "Manual", - title: f ?? "Manual control", + label: short ? `Manuel: ${short}` : "Manuel", + title: f ?? "Manuel Kontrol", }; } if (t === "quick") { - return { label: "Quick", title: "Quick reverse prompt" }; + return { label: "Hızlı", title: "Hızlı tersine komut" }; } return null; } From 4425078ecc20c5bb9a3d0572a192e8a291509fdb Mon Sep 17 00:00:00 2001 From: Mehmet Demir Date: Sun, 26 Apr 2026 14:05:09 +0300 Subject: [PATCH 15/20] Translate text to Turkish in library-page.tsx --- components/library-page.tsx | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/components/library-page.tsx b/components/library-page.tsx index 760b470..67d408b 100644 --- a/components/library-page.tsx +++ b/components/library-page.tsx @@ -18,9 +18,9 @@ type SortOption = "trending" | "newest" | "oldest"; const SORT_OPTIONS: SortOption[] = ["newest", "trending", "oldest"]; const SORT_LABELS: Record = { - trending: "Trending", - newest: "Newest first", - oldest: "Oldest first", + trending: "Popüler", + newest: "En yenisi", + oldest: "En eskisi", }; const PAGE_SIZE = 24; @@ -28,15 +28,15 @@ const PAGE_SIZE = 24; function relativeTime(iso: string): string { const diff = Date.now() - new Date(iso).getTime(); const s = Math.floor(diff / 1000); - if (s < 60) return "just now"; + if (s < 60) return "şimdi"; const m = Math.floor(s / 60); - if (m < 60) return `${m}m ago`; + if (m < 60) return `${m}dk önce`; const h = Math.floor(m / 60); - if (h < 24) return `${h}h ago`; + if (h < 24) return `${h}saat önce`; const d = Math.floor(h / 24); - if (d < 30) return `${d}d ago`; + if (d < 30) return `${d}gün önce`; const mo = Math.floor(d / 30); - return `${mo}mo ago`; + return `${mo}ay önce`; } type LibraryPageProps = { @@ -132,7 +132,7 @@ export function LibraryPage({ initialData, initialTotal }: LibraryPageProps) { href="/history" className="font-semibold text-zinc-900 transition-transform hover:-translate-y-0.5" > - History + Geçmiş

- Prompt Library + İstem Kütüphanesi

- Reverse-engineered prompts from real GitHub repositories. + Tersine Mühendislikle oluşturan orijinal GitHub depolarının istemleri.

@@ -275,8 +275,8 @@ export function LibraryPage({ initialData, initialTotal }: LibraryPageProps) { {entries.length === 0 ? (
-

No prompts found

-

Try a different search term.

+

Karaya vurdun! (404)

{/* a little joke :D*/} +

Aradığın istem bulunamadı, farklı bir şey arat.

) : (
@@ -286,7 +286,7 @@ export function LibraryPage({ initialData, initialTotal }: LibraryPageProps) {
)} - {/* Load more */} + {/* Az daha yükle */} {hasMore && (
@@ -345,7 +345,7 @@ export function LibraryPage({ initialData, initialTotal }: LibraryPageProps) { > - Discord + Discord Sunucumuz
From 0aaf5dcd10d31ea89966092021076cf58e08c246 Mon Sep 17 00:00:00 2001 From: Mehmet Demir Date: Sun, 26 Apr 2026 14:14:50 +0300 Subject: [PATCH 16/20] Translate error messages and UI text to Turkish --- components/reverse-prompt-home.tsx | 64 +++++++++++++++--------------- 1 file changed, 32 insertions(+), 32 deletions(-) diff --git a/components/reverse-prompt-home.tsx b/components/reverse-prompt-home.tsx index 9bf30ef..e111abe 100644 --- a/components/reverse-prompt-home.tsx +++ b/components/reverse-prompt-home.tsx @@ -137,7 +137,7 @@ export function ReversePromptHome({ setRateLimited(true); return; } - setError(data.error ?? `Request failed (${res.status})`); + setError(data.error ?? `İstek Başarısız: (${res.status})`); return; } if (typeof data.prompt === "string") { @@ -157,7 +157,7 @@ export function ReversePromptHome({ setError("No prompt in response."); } } catch (err) { - setError(err instanceof Error ? err.message : "Request failed"); + setError(err instanceof Error ? err.message : "İstek Başarısız"); } finally { setLoading(false); setLoadKind("none"); @@ -170,7 +170,7 @@ export function ReversePromptHome({ setRateLimited(false); setPrompt(""); setCopied(false); - setManualStatusLine("Checking if it's cached…"); + setManualStatusLine("Bellektemi diye kontrol ediliyor…"); setLoadKind("custom"); setLoading(true); try { @@ -203,12 +203,12 @@ export function ReversePromptHome({ setRateLimited(true); return; } - setError(data.error ?? `Request failed (${res.status})`); + setError(data.error ?? `İstek başarısız: (${res.status})`); return; } if (typeof data.prompt === "string") { if (data.fromCache) { - setManualStatusLine("Loaded from cache"); + setManualStatusLine("Bellekten yüklendi."); await new Promise((r) => setTimeout(r, 450)); } setPrompt(data.prompt); @@ -229,7 +229,7 @@ export function ReversePromptHome({ ); } } else { - setError("No prompt in response."); + setError("Cevapta İstem Metni yok."); } return; } @@ -237,15 +237,15 @@ export function ReversePromptHome({ if (!res.ok) { try { const errData = (await res.json()) as { error?: string }; - setError(errData.error ?? `Request failed (${res.status})`); + setError(errData.error ?? `İstek başarısız: (${res.status})`); } catch { - setError(`Request failed (${res.status})`); + setError(`İstek başarısız: (${res.status})`); } return; } if (!res.body) { - setError("No response body from manual control."); + setError("Manuel Kontrolden gelen cevap gövdesi yok."); return; } @@ -299,7 +299,7 @@ export function ReversePromptHome({ ); } } else { - setError("No prompt in response."); + setError("Cevapta istem metni yok."); } } else if (event === "error") { const j = JSON.parse(dataStr) as { error?: string }; @@ -311,7 +311,7 @@ export function ReversePromptHome({ } } } catch (err) { - setError(err instanceof Error ? err.message : "Request failed"); + setError(err instanceof Error ? err.message : "İstek Başarısız"); } finally { setLoading(false); setLoadKind("none"); @@ -488,7 +488,7 @@ export function ReversePromptHome({ setCopied(true); setTimeout(() => setCopied(false), 2000); } catch { - setError("Could not copy to clipboard."); + setError("Panoya kopyalanamadı."); } } @@ -505,13 +505,13 @@ export function ReversePromptHome({ href="/library" className="font-semibold text-zinc-900 transition-transform hover:-translate-y-0.5" > - Library + Kütüphane - History + Geçmiş - GitHub + GitHub Sayfası @@ -571,14 +571,14 @@ export function ReversePromptHome({

- Repository to + Depodan ->
- Prompt + İsteme

- Reverse engineer a codebase{" "} - into a prompt - that likely created it. + Bir kod tabanını{" "} + Komut İstemine + dönüştürün.

@@ -636,10 +636,10 @@ export function ReversePromptHome({ d="M4 12a8 8 0 018-8V0C5.373 0 0 5.373 0 12h4zm2 5.291A7.962 7.962 0 014 12H0c0 3.042 1.135 5.824 3 7.938l3-2.647z" /> - Processing… + Oluşturuluyor... ) : ( - "Get Prompt" + "Komut istemini al" )} @@ -661,7 +661,7 @@ export function ReversePromptHome({ onCustomReverseCheckboxChange(e.target.checked) } /> - Manual control + Manuel Kontrol {customReverse ? (
@@ -698,7 +698,7 @@ export function ReversePromptHome({ ) : (
- Try example repos: + Örnek depoları deneyin {HOME_EXAMPLES.map(({ label, url }) => (
@@ -717,14 +717,14 @@ export function ReversePromptHome({ {rateLimited ? (
-

Sorry, we're a bit overwhelmed right now.

+

Üzgünüz, biz' şuanda baya hararetli durumdayız, sonra gel olurmu?

-

Come back in a couple of hours, or check out what others have already generated:

+

Bir kaç saat içinde geri gelin, yada zaten oluşturduğumuz komut istemlerine bakın.

- Browse the library + Kütüphaneyi gez @@ -762,7 +762,7 @@ export function ReversePromptHome({

- Reverse engineered prompt + Tersine mühendislikle oluşturulan komut

{reverseEngineeredRepo ? ( @@ -799,7 +799,7 @@ export function ReversePromptHome({ onClick={copyPrompt} className="relative z-10 rounded border-[3px] border-zinc-900 bg-[#ffc480] px-3 py-1.5 text-xs font-medium text-zinc-900 transition-transform group-hover:-translate-x-px group-hover:-translate-y-px" > - {copied ? "Copied!" : "Copy"} + {copied ? "Kopyalandı!" : "Copy"}
@@ -809,7 +809,7 @@ export function ReversePromptHome({ {!lastResultWasCustom && !loading ? (

- Want more depth?{" "} + Biraz daha derinlikmi?{" "} - Deep Reverse + Derin Tersine Mühendislik

) : null} @@ -849,7 +849,7 @@ export function ReversePromptHome({ > - Discord + Discord Sunucumuz
From a510008595db8455296a0480069bba52cb610b86 Mon Sep 17 00:00:00 2001 From: Mehmet Demir Date: Sun, 26 Apr 2026 14:17:07 +0300 Subject: [PATCH 17/20] Update description in metadata to Turkish --- app/layout.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/layout.tsx b/app/layout.tsx index 7a46845..fef2160 100644 --- a/app/layout.tsx +++ b/app/layout.tsx @@ -16,7 +16,7 @@ const geistMono = Geist_Mono({ export const metadata: Metadata = { title: "GitReverse", description: - "Turn a GitHub repository into a plain-language coding agent prompt.", + "Herhangi bir GitHub deposunu düz metin olarak hazırlanmış bir isteme dönüştürün.", }; export default function RootLayout({ From e3a3579ff95e45d958dc59f79ff05e2df1b0b987 Mon Sep 17 00:00:00 2001 From: Mehmet Demir Date: Sun, 26 Apr 2026 14:18:07 +0300 Subject: [PATCH 18/20] Update title and description to Turkish --- app/library/page.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/library/page.tsx b/app/library/page.tsx index 04f65ec..4e8548b 100644 --- a/app/library/page.tsx +++ b/app/library/page.tsx @@ -5,9 +5,9 @@ import { LibraryPage } from "@/components/library-page"; export const dynamic = "force-dynamic"; export const metadata = { - title: "Prompt Library — GitReverse", + title: "Komut Kütüphanesi — GitReverse", description: - "Browse 1,000+ reverse-engineered prompts from real GitHub repositories.", + "1,000+'den fazla oluşturulmuş komut kütüphanesini gezin.", }; const INITIAL_LIMIT = 24; From 923bc0834b5e5bd2074ddedba8655a63af46aa0e Mon Sep 17 00:00:00 2001 From: Mehmet Demir Date: Sun, 26 Apr 2026 14:18:40 +0300 Subject: [PATCH 19/20] Translate metadata titles and descriptions to Turkish --- app/history/page.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/history/page.tsx b/app/history/page.tsx index 2a41012..d835a32 100644 --- a/app/history/page.tsx +++ b/app/history/page.tsx @@ -1,8 +1,8 @@ import { HistoryPage } from "@/components/history-page"; export const metadata = { - title: "History — GitReverse", - description: "Repositories you recently viewed on GitReverse.", + title: "Geçmiş — GitReverse", + description: "GitReverse'de görüntülediğin Depoların geçmişini görüntüle.", }; export default function HistoryRoute() { From 8c112b405a5dfdf497581281bc68b5d68b98ed00 Mon Sep 17 00:00:00 2001 From: Mehmet Demir Date: Sun, 26 Apr 2026 14:20:56 +0300 Subject: [PATCH 20/20] Translate error message to Turkish Updated error message to include Turkish translation. --- app/api/increment-views/route.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/api/increment-views/route.ts b/app/api/increment-views/route.ts index ad6947b..d7a83fd 100644 --- a/app/api/increment-views/route.ts +++ b/app/api/increment-views/route.ts @@ -22,7 +22,7 @@ if ( ) { throw new Error( "[increment-views] VIEWS_IP_SALT is not set. " + - "Set a random secret (openssl rand -hex 32) in your deployment env." + "Deployment ortamında rastgele bir secret ayarlayın (openssl rand -hex 32)." ); }