WallpaperMachine
당신이 사랑하는 배경화면, 맥에서 새롭게 만나보세요
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기Türkiye'den yola çıkanlar için tatil asistanı: en ucuz uçuş, vize, TL bütçe ve gün gün şehir planı.
저장소 README에서 가져옴
README 전체를 불러오는 중입니다.
README 전문 보기 ↗Kısa şehir tatili için ücretsiz, açık kaynak planlayıcı: şehri ve günleri seç, istediğin şehirden kalk; 68 şehirde görülecek yerler, gün gün plan, en ucuz uçuş ve bütçe (TL, EUR, USD ya da GBP) tek sayfada gelsin, yapay zekâ isteğe bağlı ve kendi anahtarınla.
Canlı: https://vacationist-app.vercel.app
Kısa şehir kaçamakları için planlayıcı. Açık kaynak ve tamamen ücretsiz servislerle çalışır. Repo ve paket adı vacation-assistant olarak kalır.
| Ana sayfa | Plan |
|---|---|
| Gün gün plan ve yapay zekâ paneli | Alt duraklar: Moskova Kremlini |
| Konaklama ve uçuşlar | Telefonda plan |
İngilizce arayüz (/en/plan) | İngilizce, telefonda |
Ekran görüntüleri 2026-10-29'da yerel üretim build'inden, açık temada alındı (masaüstü 1440 px, telefon 390 px; İngilizce olanlar 375 px). Uçuşlar örnek veriyle (VA_FLIGHTS_FIXTURES=1; fiyatlar gerçek değildir), yapay zekâ paneli yerel bir sahte sağlayıcıyla; gerçek anahtar kullanılmadı.
.ics olarak takvime eklenir ve yazdırılabilir./, /plan), İngilizce /en altında (/en, /en/plan). Başlıktaki TR / EN anahtarı aynı sayfayı bütün parametreleriyle öbür dilde açar; tarayıcı diline göre otomatik yönlendirme yok. İngilizce sayfada yer ve etkinlik adları İngilizce Vikipedi başlığıyla (yoksa Wikidata'nın İngilizce etiketiyle; "Sagrada Família", "Colosseum"), şehir ve havalimanı adları İngilizce, tarih ve sayılar en-GB biçiminde, bütçe varsayılan olarak EUR; yapay zekâ cevapları da arayüz dilinde.Plan, sıralama ve bütçe yapay zekâya ihtiyaç duymaz; aynı girdi her zaman aynı planı verir.
Anthropic, OpenAI ya da Google Gemini anahtarını bağlayıp planı sohbetle değiştirebilirsin ("ikinci günü daha sakin yap", "müzeleri azalt"). Panel gün gün planın yanındaki "Yapay zekâ ile planla" sekmesinden açılır: masaüstünde sağda, günler solda görünür kalır; telefonda alttan tam ekran. Anahtar yalnızca tarayıcında kalır (varsayılan sekme oturumu, istersen "Bu cihazda hatırla"); çağrılar tarayıcından doğrudan sağlayıcıya gider, sunucumuza hiç uğramaz, URL'ye yazılmaz, loglanmaz. Model yalnızca çekilmiş mekân listesinden seçer; saat, açılış ve yürüme kurallarını uygulama hesaplar.
Gemini ücretsiz katman notu: Gemini'nin ücretsiz katmanı plan sohbeti için yeterli. "Web'de ara" (uçuş fiyatı ve semte göre otel aralığı) ise ücretsiz katmanda yalnızca Gemini 2.5 modellerinde vardı ve Google bu modelleri yeni hesaplara kapattı; Gemini 3'te ücretsiz katmanda Google Search yok (2026-10-21'de kontrol edildi). Anthropic ve OpenAI'da web araması sağlayıcının kendi ücretiyle çalışır.
Her fiyat, kur ve tahmin kaynağıyla ve "tahmini" etiketiyle gösterilir. Bir kaynak cevap vermezse uygulama bunu açıkça söyler; tahmini ya da sabit değer uydurmaz. Konaklama ve günlük harcama için hazır "ortalama" yoktur: yalnızca senin girdiğin değer. Uçuş, otel ya da arama siteleri kazınmaz.
| Veri | Kaynak | Lisans / şart |
|---|---|---|
| Türk pasaportu (umuma mahsus) vize durumu (veri kodda; faz 1 arayüzünde gösterilmiyor) | Passport Index Data (Şubat 2026 sonrası), önceki sürümü ilyankou/passport-index-dataset; veri passportindex.org kaynaklı | MIT. src/data/visa-tr.json kaynak commit'ini ve tarihini taşır; npm run data:visa ile güncellenir. |
| Resmî vize bilgisi (link) | T.C. Dışişleri Bakanlığı — Türk Vatandaşlarının Tabi Olduğu Vize Uygulamaları | Yalnızca link verilir. |
| Döviz kurları | TCMB günlük kurları (döviz satış) | Kaynak olarak "TCMB" gösterilir. |
| Döviz kurları (yedek) | Frankfurter — Avrupa Merkez Bankası verisi | Ücretsiz, anahtarsız. |
| Döviz kurları (ikinci yedek) | Rates By Exchange Rate API (open access) | Kur gösterilen sayfada atıf linki zorunlu; uygulama bunu otomatik ekler. Verinin toplu olarak yeniden dağıtılması yasak. |
| Kalkış şehirleri ve havayolları | OurAirports airports.csv (tarifeli büyük ve orta havalimanları) · Türkçe adlar ve havayolu adları Wikidata'dan (havalimanı IATA kodu P238, hizmet verdiği yer P931, havayolu kodu P229) · saat dilimleri GeoNames cities1000 | OurAirports kamu malı; Wikidata CC0; GeoNames (atıf footer'da). Çok havalimanlı şehirler IATA metropol koduyla gruplanır (). , ile üretilir, ayda bir tazelenir ve yalnızca sunucuda okunur (tarayıcı ile birkaç satır alır). Travelpayouts'un statik dosyaları yeniden dağıtım izni olmadığı için kullanılmaz. |
Her fiyat, kur ve etkinlik tarihi kaynağıyla gösterilir; bir kaynak cevap vermezse uygulama bunu açıkça söyler, tahmini ya da sabit değer uydurmaz. Sayfa sonunda da kaynaklar ve lisansları listelenir.
Yayındaki sitede ziyaretler Vercel Web Analytics ile çerezsiz ve anonim sayılır.
/, /plan…), ve Vercel'in standart alanları (ülke, tarayıcı, cihaz türü, başka siteden gelindiyse referrer).src/lib/analytics.ts); custom event yok; yapay zekâ anahtarın ve sohbetin zaten sunucuya gelmez./_vercel/insights/*).src/app/layout.tsx'ten <SiteAnalytics /> satırını kaldır. Ayrıntı: docs/DEPLOY.md.Node 22 gerekir (.nvmrc).
npm ci
npm run dev
Uygulama http://localhost:3000'de açılır. Uçuşlar için .env.example'ı .env.local olarak kopyalayıp şu değişkenleri doldur (değerler yalnızca .env.local'de durur, asla commit'lenmez):
TRAVELPAYOUTS_TOKENTRAVELPAYOUTS_MARKERTRAVELPAYOUTS_PROJECT_IDToken olmadan da her şey çalışır; uçuş bölümü bilet kartları yerine Aviasales ve Google Flights linklerini gösterir.
Demo modları (yalnızca yerelde, Vercel'de çalışmaz):
VA_AI_MOCK=1 npm run dev — yapay zekâ ve web aramasını anahtarsız örnek cevaplarla açar; her sonuçta "ÖRNEK VERİ" yazar.VA_FLIGHTS_FIXTURES=1 npm run dev — token olmadan örnek uçuş verisi; sayfada "ÖRNEK VERİ · GERÇEK FİYAT DEĞİL" bandı görünür.Sık kullanılan komutlar (tam liste ve ayrıntılar AGENTS.md'de):
| Komut | Ne yapar |
|---|---|
npm run lint | ESLint (uyarı da hata sayılır) |
npm run typecheck | Route tipleri + tsc --noEmit |
npm test | Vitest birim testleri |
npm run build | Üretim derlemesi |
npm run check:bundle | Sunucuya özel veri ve token istemci paketine sızmamış mı |
npm run test:e2e | Playwright uçtan uca testleri, axe erişilebilirlik ve klavye turu dahil (önce npm run build) |
npm run data:places | Mekân verisini yeniden çeker (ağ ister, ~3 saat) |
npm run data:events | Etkinlikleri Wikidata'dan yeniden çeker (ağ ister, şehir başına ~30 sn) |
npm run data:origins | Kalkış şehirlerini OurAirports, Wikidata ve GeoNames'ten yeniden çeker (ağ ister, ~1 dk) |
npm run data:airlines | Havayolu adlarını Wikidata'dan yeniden çeker (ağ ister, birkaç saniye) |
Vercel'e kurulum, ortam değişkenleri, Travelpayouts hesabı ve aylık veri yenileme: docs/DEPLOY.md.
.nvmrc). Komutlar için AGENTS.md.src/data/places/ altında commit'lenir; elle tazelemek için npm run data:places (tüm şehirler, sırayla; yaklaşık üç saat; yarıda kalırsa aynı komut son 24 saatte çekilenleri atlayıp kaldığı yerden sürer, -- --force hepsini yeniden çeker) ya da npm run data:places -- BCN SJJ. Görülecek yer kuralları okurken uygulanır (src/lib/places/rules.ts, istisnalar src/data/place-overrides.ts); kural değiştirmek yeniden çekme gerektirmez. Tür etiketlerini ve relink istisnalarını yalnızca Wikidata'dan tazelemek için npm run data:kinds (birkaç dakika); bağlantı denetimi npm run verify:place-links..github/workflows/refresh-places.yml) değişiklik varsa yeni bir branch'e commit atıp "chore: refresh place data" PR'ı açar. Bunun çalışması için repo ayarlarında Settings → Actions → General → Workflow permissions altında "Allow GitHub Actions to create and approve pull requests" seçeneği açık olmalı..env.example'ı .env.local olarak kopyalayıp TRAVELPAYOUTS_TOKEN, TRAVELPAYOUTS_MARKER ve TRAVELPAYOUTS_PROJECT_ID'yi doldur (Vercel'de ortam değişkeni olarak). Partner link biçimini npm run verify:partner-links Travelpayouts'un partner link API'siyle karşılaştırır (ağ ister). Token yoksa uçuş bölümü kart yerine Aviasales ve Google Flights linklerini gösterir. Token olmadan arayüzü görmek için VA_FLIGHTS_FIXTURES=1 örnek veriyi açar; sayfa bunu "ÖRNEK VERİ · GERÇEK FİYAT DEĞİL" bandıyla belirtir ve bu mod Vercel'de çalışmaz.GITHUB_TOKEN ile açılan PR'lar başka workflow'ları tetiklemez; tazeleme PR'ında CI'ı merge'den önce elle çalıştır (testler tazeleme workflow'unun içinde zaten koşar).Hata bildirimi ve PR'lar memnuniyetle karşılanır.
feat/…, fix/…, docs/…, chore/…; commit mesajları İngilizce, Conventional Commits.npm run lint, npm run typecheck, npm test, npm run build, npm run check:bundle ve npm run test:e2e geçmeli.src/i18n/messages/ altındaki mesaj dosyalarından (iki dosyanın anahtarları aynı); ham renk değeri yalnızca src/app/globals.css'te.Belgeler: PRD · DESIGN · PLAN · DEPLOY · BACKLOG · AGENTS
Kod: MIT. src/data/places/ altındaki OSM türevi veri: ODbL 1.0. src/data/origins.json: OurAirports (kamu malı), Wikidata (CC0) ve saat dilimleri için GeoNames (CC BY 4.0); src/data/airlines.json: Wikidata (CC0). Open Graph kartlarındaki fontlar (assets/og/): SIL Open Font License 1.1. Her Commons fotoğrafı kendi lisansıyla, yazarı ve lisansı yanında gösterilir.
Vacationist is a free, open source planner for short city breaks. Pick one of 68 cities and your dates; it lays out the sights, a day-by-day plan, stay links, the cheapest flight from any city with an airport (Istanbul by default) and a budget (TRY, EUR, USD or GBP) on one page. Live: https://vacationist-app.vercel.app
npm ci && npm run dev; VA_AI_MOCK=1 and VA_FLIGHTS_FIXTURES=1 give keyless demos. Deploy guide: docs/DEPLOY.md.src/lib/origins/metros.tssrc/data/origins.jsonnpm run data:originssrc/data/airlines.jsonnpm run data:airlines/api/origins?q=| Uçuş fiyatları | Travelpayouts — Aviasales Data API (v3/prices_for_dates) | Partner programı; token yalnızca sunucuda (TRAVELPAYOUTS_TOKEN). Fiyatlar önbellekten, tahminidir: Aviasales kullanıcılarının son 48 saatteki aramalarında bulunmuş, bir yetişkin için gidiş-dönüş fiyatlarıdır; satın alma anındaki fiyat farklı olabilir. Her bilette "ÖNBELLEKTEN · … · TAHMİNİ" yazar ve "Güncel fiyatı gör" Aviasales'te aynı aramayı Travelpayouts partner linkiyle (tp.media, marker + proje kimliği) açar. Google Flights'a yalnızca link verilir. |
| Konaklama | Booking ve Google Hotels | Yalnızca link (API yok): şehir, giriş-çıkış tarihi ve kişi sayısı dolu arama. Google Hotels kişi sayısını linkten almıyor. Uygulama otel fiyatı göstermez; ücretsiz bir otel fiyat kaynağı yok. |
| Bütçe | Uçuş: Travelpayouts önbelleği · konaklama ve günlük harcama: kullanıcının girdiği değer · kur: yukarıdaki kur zinciri | Konaklama ve günlük harcama için hazır ya da "ortalama" değer yoktur; girilmeyen satır toplama eklenmez ve toplam "KISMİ TOPLAM" olarak işaretlenir. Değerler URL'de durur (&flight=…&stay=…&daily=…&cur=…), paylaşılan link aynı bütçeyi açar. |
| Gün gün plan | Önceden çekilmiş mekân verisi (OpenStreetMap, Wikidata, Vikipedi dil sayısı) ve bütçedeki uçuş | Yapay zekâ bağlı değilse tamamen deterministik: aynı girdi her zaman aynı planı verir. Gündüz 18:00'e kadar zamana göre dolar (en fazla 6 durak; bir yerin içindeki yerler alt durak olarak sayılmaz), akşam mekânı 19:30'da; akşama 90 dakikadan uzun boşluk "SERBEST ZAMAN" olarak görünür, uydurma durakla doldurulmaz. Ziyaret süreleri, yürüme tahmini (kuş uçuşu × 1,3 ÷ 4,5 km/s) ve gün saatleri src/lib/itinerary/config.ts'te; hepsi "tahmini" etiketli. Açılış saati bilinmeyen durakta "SAATLERİ DOĞRULA" yazar. Çıkarılan duraklar URL'de (&skip=…); plan .ics olarak indirilebilir (istemcide üretilir). |
| Yapay zekâ (isteğe bağlı) | Kullanıcının kendi anahtarıyla Anthropic, OpenAI ya da Google Gemini (ücretsiz katmanı var) | Anahtar yalnızca tarayıcıda durur (varsayılan sekme oturumu, "Bu cihazda hatırla" ile cihaz); çağrılar tarayıcıdan doğrudan sağlayıcıya gider, sunucumuza hiç uğramaz; kullanım kullanıcının hesabından ücretlendirilir. Model yalnızca çekilmiş mekân listesinden kimlikle seçer; cevap zod ile doğrulanır, liste dışı kimlikte bir kez daha sorulur, yine olmazsa deterministik plan kalır. Saat, açılış ve yürüme kurallarını uygulama hesaplar. Sohbet düzenlemeleri yapılandırılmış komutlardır (&ai=…&edit=… URL'de; anahtar asla URL'de değil). Web'de ara: modelin kendi web arama aracıyla uçuş fiyatı ve semte göre otel aralığı; Anthropic ve OpenAI'da yalnızca sağlayıcının kaynak listesindeki https sayfalara linklenen sonuçlar gösterilir, bütçenin para birimindeki karşılığı tahminidir, Travelpayouts'tan ayrı durur; Gemini'nin Google Search cevabı, kullanım koşulları gereği, kaynakları ve arama önerileriyle değiştirilmeden gösterilir (fiyat okunmaz, bütçeye kullanıcı yazar). Arama Anthropic ve OpenAI'da ayrıca ücretlendirilir; Gemini'nin ücretsiz katmanında arama yalnızca 2.5 modellerinde var ve Google bunları yeni hesaplara kapattı (ücretli katmanda ayda 5.000 arama ücretsiz). |
| Şehirler ve koordinatlar | Wikidata | CC0. |
| Mekânlar (görülecek yer, müze, restoran, bar…) | OpenStreetMap, Overpass API üzerinden | ODbL 1.0. src/data/places/ OSM'den türetilmiş bir veritabanıdır (lisans notu); "© OpenStreetMap katkıcıları" atfı listede ve haritada. Veri npm run data:places ile önceden çekilir ve ayda bir tazelenir; uygulama çalışırken Overpass'a istek atmaz. |
| "Vikipedi'de N dilde" sıralaması | Wikidata sitelinks (wbgetentities, 50'şerlik toplu istek) | CC0; tanımlayıcı User-Agent ile. |
| Önemli yerler, türleri, "içinde" bağları, kokteyl barları ve adlar | Wikidata Query Service (şehir başına birkaç küçük SPARQL sorgusu, yalnızca veri script'inde) | CC0; tanımlayıcı User-Agent ile, istekler sırayla ve geri çekilmeyle. Latin harfli ad yoksa romanizasyon kod içindeki tablolarla yapılır (ICAO Doc 9303, ELOT 743, Korece Revised Romanization…). |
| Etkinlikler | Wikidata (festival, karnaval, panayır, Noel pazarı, film ve müzik festivali serileri; npm run data:events, ayda bir) | CC0. Tarih yalnızca Wikidata'dan: edisyonun gün hassasiyetinde tarihi ya da serinin ayları ("GENELDE"); ikisi de yoksa etkinlik gösterilmez. Her kartta "Tarihleri resmî kaynaktan doğrula". |
| Şehir ve mekân fotoğrafları | Wikimedia Commons (Wikidata P18) | Yalnızca CC0, kamu malı, CC BY ve CC BY-SA. Fotoğrafçı, lisans linki ve "renkleri düzenlendi" notu şehir fotoğrafının altında, mekân fotoğraflarında ayrıntı panelinde. Meta veri önceden çekilir; görsel Commons CDN'inden gelir. |
| Harita karoları | OpenFreeMap (OpenMapTiles şeması), MapLibre GL JS ile | Ücretsiz, anahtarsız; "© OpenStreetMap katkıcıları · OpenFreeMap" atfı haritada. |