← Screenshot to Code

Screenshot to Code

Ekran görüntüsünü Claude, GPT-4o veya Gemini ile HTML, React veya Vue koduna çeviren self-hosted yapay zeka aracı. PicToFrontend platformunun açık kodlu çekirdeği.

FastAPINext.js 16StreamingSelf-Hosted
4
AI Modeli
3
Framework
237
Story Point
10/60
Rate Limit (sn)
MIT lisansı · self-hosted · Docker ile tek komut deploy

Proje Hakkında

Screenshot to Code (kod adı: PicToFrontend), bir tasarım ekran görüntüsünü, web sayfası URL\'ini veya yazılı bir prompt\'u doğrudan üretime hazır frontend koduna çeviren self-hosted bir araçtır. Kullanıcı kendi API anahtarını getirir; sunucu sadece bir köprü görevi görür ve anahtarı saklamaz. Streaming yanıt sayesinde kullanıcı kodu yazılırken görür; iteratif "revise" akışı ile session bağlamını koruyarak çıktı düzeltilir. MVP\'den platforma geçiş 3 sprint × 2 hafta üzerinden planlanmıştır (toplam 237 story point).

Özellikler

4 AI Modeli

Claude 3.5 Sonnet, GPT-4o, GPT-4o Mini ve Gemini 1.5 Flash arasında geçiş — her biri farklı kalite/maliyet noktası.

Gerçek Zamanlı Streaming

Kod, karakter karakter yazılır gibi gelir; tüm yanıtın bitmesini beklemeden ön izleme yapılır.

3 Framework Desteği

HTML, React veya Vue çıktısı seç — sistem prompt'u seçime göre uyarlanır.

Çoklu Giriş Modu

Screenshot, URL veya text prompt ile başla — sekmeli arayüz.

Iteratif İyileştirme

"Revise" ile önceki çıktının bağlamını koruyarak yeniden üretim — session bazlı bağlam.

Kredi Sistemi

Her model farklı kredi maliyeti (1–2–3–5); negatif bakiye yarış durumuna karşı koruma.

Self-Hosted

API anahtarları sadece AI sağlayıcıya iletilir, sunucuda saklanmaz; kullanım yerinde kontrol edilir.

Karşılaştırma Modu

Aynı görselden iki ayrı varyant üretip yan yana karşılaştır — A/B değerlendirme.

Desteklenen AI Modelleri

4 farklı sağlayıcıdan model — kullanıcı kendi API anahtarını getirir

ModelSağlayıcıKrediTahmini MaliyetEn İyi Kullanım
GPT-4o MiniOpenAI1~$0.001Hızlı / basit UI
Gemini 1.5 FlashGoogle2~$0.007Düşük maliyet + iyi kalite
GPT-4oOpenAI3~$0.024Dengeli üretim
Claude 3.5 SonnetAnthropic5~$0.035En iyi UI sonuçları

Maliyetler tek üretim için tahmini; gerçek tutar input/output token sayısına göre değişir.

Çalışma Akışı — Adım Adım

Görselden frontend kodu çıktısına 5 adım

01

Görseli/URL'i Yükle

Kullanıcı PNG, JPG, WEBP veya GIF dosyasını yükler ya da bir web adresi girer. Backend MIME tipini, dosya boyutunu (max 20 MB) ve URL'in özel IP/localhost olmadığını (SSRF koruması) doğrular.

02

Model + Framework Seç

Açılır menüden 4 AI modeli ve HTML/React/Vue/Bootstrap çıktısı seçilir. Sistem prompt'u framework seçimine göre uyarlanır; kredi maliyeti modele göre hesaplanır.

03

API Anahtarını Ver

Kullanıcı kendi OpenAI / Anthropic / Google API anahtarını girer. Anahtar format kontrolünden geçer (sk-, sk-ant-, AIza-) ve sadece o istek için sağlayıcıya iletilir; sunucuda saklanmaz.

04

Streaming Üretim

Backend FastAPI üzerinden sağlayıcıya streaming çağrı yapar. Yanıt parça parça frontend'e text/plain olarak akar. Kullanıcı kodu yazılırken görür; istediği an iptal edebilir.

05

Düzenle / İyileştir

Çıktı yerleşik kod editöründe görünür (syntax highlight). "Revise" butonu ile session bağlamı korunarak yeniden üretim yapılır; son 5 versiyon arasında geçiş yapılabilir.

Sistem Mimarisi

Üç katman: Frontend (Next.js) · Backend (FastAPI) · DevOps (Docker + Cloudflare)

Frontend

Next.js 16 + React 19 + TypeScript + Tailwind v4

App Router yapısı; sekmeli giriş (Screenshot/URL/Text), state machine (idle / sending / streaming / success / error), syntax highlight kod editörü, varyant karşılaştırma sekmesi.

lucide-reactreact-tweettailwindcss/postcsseslint-config-next
Backend

FastAPI 0.115 + Python 3.11 + uvicorn

Streaming endpoint'ler (/api/generate, /from-url, /from-text), Pydantic ile tipli payload, SQLite + JWT auth (python-jose + passlib), in-app rate limit (10 req/60 sn/IP), Langfuse observability.

anthropic >= 0.49openai 1.55aiohttp 3.11aiosqlite 0.20langfuse >= 3.0
DevOps

Docker + docker-compose + Nginx + Cloudflare

docker-compose.yml + docker-compose.staging.yml ile çoklu ortam; Nginx reverse proxy + HTTPS; Cloudflare Pages frontend; CI: lint + test + e2e + smoke.

Dockerfile (frontend & backend)Nginx + HSTSwrangler.toml.github/workflows

API Endpoint\'leri

Backend FastAPI üzerinde yayınlanan REST + streaming yüzeyleri

GET/healthServis durumu kontrolü
GET/api/modelsDesteklenen modeller + metadata (provider, cost, context_window)
POST/api/generateImage upload + framework seçimi → streaming kod üretimi
POST/api/generate/from-urlURL'den screenshot çekip kod üret
POST/api/generate/from-textText prompt ile kod üret
GET/api/metricsRequest count, error rate, latency metrikleri

Sprint Yol Haritası

MVP\'den platforma · 6 hafta + sürdürülebilir genişleme

Sprint 1

Core Stabilizasyon + Güvenli Üretim Akışı

TamamlandıHafta 1–2 · 52 SP
  • Pydantic ile tipli payload şeması (GenerateRequest, GenerateChunk, GenerateError)
  • Standart hata formatı: {type, code, message}
  • Upload validasyonu: MIME tipi, 20 MB sınırı, timeout
  • Streaming resource cleanup (finally bloğu ile güvenli kapanış)
  • IP tabanlı rate-limit middleware → 429
  • UI durum makinesi: idle / sending / streaming / success / error
  • CORS sıkılaştırma: wildcard kaldırıldı, izinli origin listesi
  • Log maskeleme: API key sk-*** olarak gizleniyor
Sprint 2

Kritik Özellik Eşleşmesi

TamamlandıHafta 3–4 · 102 SP
  • POST /api/generate/from-url endpoint'i + URL screenshot helper
  • POST /api/generate/from-text endpoint'i (text prompt girişi)
  • session_id ile iteratif iyileştirme / geçmiş bağlamı
  • 3+ yeni model + zenginleştirilmiş /api/models metadata
  • Sekmeli çoklu giriş modu (Screenshot / URL / Text)
  • "Revise" butonu — bağlamı koruyarak yeniden üretim
  • Bootstrap framework eklenmesi
  • URL güvenlik filtresi: localhost, private IP, blacklist
Sprint 3

Ürün Olgunlaştırma + Dağıtım Hazırlığı

Devam EdiyorHafta 5–6 · 83 SP
  • WebSocket katmanı (feature flag'li, HTTP fallback korunur)
  • /api/models metadata: provider, cost, context_window
  • Kod post-process modülü: normalize, temizleme
  • Session bazlı commit/version geçmişi (son 5 versiyon)
  • Varyant karşılaştırma UI (Current / Variant B sekmeli)
  • Kod editörü: syntax highlight + düzenlenebilir alan
  • Docker + docker-compose yeniden eklendi
  • CI pipeline: lint + test + e2e + smoke
  • Yük testleri: 100 görsel isteği, başarı oranı + latency
  • Güvenli dağıtım hardening checklist (HTTPS, CORS, rate-limit, log redaction)
Sprint 4

Platform Genişlemesi

PlanlandıPlanlanan
  • Tam değerlendirme framework: A/B test + pairwise comparison
  • Advanced observability: Langfuse trace + cost tracking
  • Kullanıcı hesapları + kalıcı kredi sistemi
  • Ekran kaydı / video girişi backend desteği
  • Figma / Sketch entegrasyonu
  • Export: ZIP arşiv + GitHub repo oluşturma
  • DALL-E / Stable Diffusion ile görsel üretimi entegrasyonu

Güvenlik Sertleştirme

Self-hosted ürünün üretime alımı için 8 zorunlu kontrol

CORS Kısıtlaması

Wildcard (*) yok. ALLOWED_ORIGINS env değişkeniyle yalnızca üretim domain'ine izin verilir; allow_credentials=True bilinçli origin listesiyle birlikte kullanılır.

Rate Limit (10/60 sn)

IP başına dakika başına 10 istek; aşıldığında 429 Too Many Requests döner. Nginx katmanı ek koruma için planlandı.

SSRF Koruması

URL endpoint'leri localhost, 127.x, 10.x, 172.16-31.x, 192.168.x ve 169.254.x (cloud metadata) IP'lerini bloklar; metadata.google.internal gibi bilinen hostname'ler engelli.

Dosya Yükleme Whitelist

Sadece image/png, jpeg, webp, gif kabul edilir; max 20 MB. İçerik diske yazılmaz, doğrudan AI sağlayıcısına iletilir.

API Key Gizliliği

Anahtarlar sunucuda saklanmaz, sadece istek sırasında provider'a iletilir. Loglarda mask_api_key() ile sk-ant-*** şeklinde gizlenir.

Session Güvenliği

Session ID'leri UUIDv4 (öngörülemez); bellek içi tutulur, max 10 tur sonra geçersiz; TTL bazlı süresi dolma planlandı.

Docker Hardening

Container'lar non-root user (appuser/nextjs); read-only root filesystem ve --cap-drop=ALL üretimde planlanan adımlar arasında.

HTTPS + HSTS

Reverse proxy seviyesinde TLS termination, otomatik Let's Encrypt yenilemesi; HSTS max-age=31536000 ve HTTP→HTTPS 301 yönlendirme.

Yerel Kurulum

Self-hosted çalışır. API anahtarınız kullanım yerinden çıkmaz.

# Backend
cd backend && pip install -r requirements.txt
uvicorn main:app --reload
# Frontend
cd frontend && npm install && npm run dev
# Veya Docker ile:
docker-compose up

MIT lisansı · API anahtarı sunucuda saklanmaz