Yazı yükleniyor...
Yazı yükleniyor...

Yazılım geliştirirken hepimiz aynı sıkıntıyı yaşıyoruz: gerçekçi test verisi bulmak. Faker.js gibi kütüphaneler var ama statik ve sınırlılar. ChatGPT'ye "bana 50 tane e-ticaret siparişi üret" desen, güzel bir JSON döndürür ama tutarlılık sıfır—bir müşteri adı "John Doe" iken email'i "alice@example.com" olabiliyor.
Hem AI'ın esnekliğini, hem de tip güvenliğini bir araya getiren, polyglot çıktı (JSON → SQL → CSV) alabileceğin ve privacy-first bir mock data aracına ihtiyacım vardı. Mockator tam da bunu çözmek için doğdu.
Mockator = Mock + Generator
Üç ana hedefim vardı:
MockatorProvider ile global stateAPI route (/api/generate) sadece bir proxy gibi davranır:
// Kullanıcı kendi key'ini header'da gönderiyor
const provider = request.headers.get("x-provider"); // openai, anthropic, etc.
const apiKey = request.headers.get("x-api-key");
// AI SDK ile stream başlatıyoruz
const result = await streamText({
model: client(modelId),
system: systemPrompt, // "Sen bir Mock Data Generator'sın..."
prompt: userPrompt,
temperature: 0.5,
});
return result.toTextStreamResponse();
Key point: Hiçbir key sunucuda saklanmaz. Direkt provider'a iletilir.
AI'dan her zaman JSON alıyoruz. Sonra kullanıcı SQL veya CSV tab'ine tıkladığında, browser'da instant transform yapıyoruz:
// lib/transformers.ts
export function jsonToSql(json: any[], tableName = "mock_data"): string {
// INSERT INTO mock_data (id, name) VALUES (1, 'Alice');
}
export function jsonToCsv(json: any[]): string {
// id,name\n1,Alice
}
Avantaj: Ekstra network request yok, anlık dönüşüm.
// MockatorProvider
const [providerKeys, setProviderKeys] = useState<ProviderKeys>({});
// No useEffect, no localStorage!
// Keys sadece memory'de, tab kapatılınca kayboluyorlar
API anahtarları hassas bilgi. Browser'da bile persist etmemeli. Yeni yaklaşım:
useState ile memory'deDesktop'ta yan yana split panel, mobilde dikey stack:
// Workbench.tsx
<div className="flex-1 overflow-hidden flex flex-col md:flex-row">
{/* Desktop: Horizontal ResizablePanel */}
<div className="hidden md:flex flex-1">
<ResizablePanel>Input</ResizablePanel>
<ResizableHandle />
<ResizablePanel>Output</ResizablePanel>
</div>
{/* Mobile: Vertical Stack */}
<div className="flex md:hidden flex-col">
<InputPanel />
<OutputPanel />
</div>
</div>
Tailwind'in responsive class'larıyla (md:, sm:) tüm layout otomatik adapt oluyor.
TypeScript interface paste ediyorsun:
interface User {
id: number;
name: string;
email: string;
role: "admin" | "user";
}
AI bunu anlayıp tip güvenliğine uygun veri üretiyor.
"Generate 10 e-commerce orders with customer name, total price, status, and date"
Boom. 10 satır realistic data.
Vercel AI SDK sayesinde, data chunk chunk geliyor. Monaco Editor'de canlı yazılıyor—sanki terminalde console.log izliyormuş gibi.
Bir provider pahalıya gelirse, başka birine geç:
Dropdown'dan seç, key'ini gir, ready.
mockator.com/s/e-commerce-v1 gibi linklerle schema paylaş.streamText ile hem OpenAI, hem Anthropic, hem de Groq'u aynı API'yle kullanabiliyorsun. Provider switching trivial oluyor.
Başta "backend'de SQL üreteyim" diye düşündüm. Sonra fark ettim ki:
Syntax highlighting, line numbers, copy/paste—hepsi out-of-the-box. @monaco-editor/react paketi ile 5dk setup.
git push
# Vercel otomatik deploy ediyor
Edge runtime + ISR sayesinde global'de hızlı. Cold start yok.
Proje GitHub'da: github.com/berkinduz/mockator
Sorularınız veya feedback için: berkinduz.com/en/about
Mockator, AI ile pratik tool geliştirmenin güzel bir örneği. Fancy değil, ama daily workflow'da gerçek problem çözüyor:
Bir sonraki test data ihtiyacında Faker.js yerine Mockator'ı dene. 🚀