Easy-to-manage touch screens
무료 오픈소스 터치스크린으로 USB 설정 가이드, 드래그‑드롭 편집기, 로컬 제어를 제공하며 Home Assistant용으로 제작되었습니다
메이커가 쓴 소개는 위의 한 줄이 전부입니다. 더 자세한 내용은 저장소 README에서 읽을 수 있습니다. 저장소 README ↗
README 전체를 불러오는 중입니다.
README 전문 보기 ↗Esnaf (berber, kuaför, güzellik salonu, oto yıkama, halı saha…) için online randevu ve takvim yönetimi.
| Klasör | Ne var |
|---|---|
supabase/ | Veritabanı şeması (schema.sql) ve testleri |
web/ | Next.js sitesi: tanıtım, işletme arama, randevu sayfası, işletme paneli, PWA |
mobile/ | Expo (React Native) iOS/Android uygulaması |
Web ve mobil aynı Supabase veritabanını kullanır. Randevu kuralları (boş saat hesabı, çakışma engeli, iptal) veritabanındaki fonksiyonlardadır; iki uygulama da aynı kuralı kullanır.
Supabase panelinde SQL Editor'ü açın, supabase/schema.sql dosyasının tamamını yapıştırıp çalıştırın.
Dosya eski tabloları silip yeni şemayı kurar; istediğiniz kadar tekrar çalıştırılabilir.
Şemayı Supabase'e göndermeden yerelde denemek için:
npm install
npm run test:db
Supabase ayarları:
https://ALAN-ADINIZ/auth/callback ve geliştirme için http://localhost:3000/auth/callback ekleyin.Supabase'in kendi e-posta servisi saatte birkaç e-posta gönderir ve sadece proje ekibine teslim eder; gerçek kullanıcılar için Resend SMTP kullanın:
smtp.resend.com, Port 465,
Username resend, Password: Resend API anahtarı, Sender email: EMAIL_FROM'daki adres, Sender name SiftahGo.supabase/email-templates içindeki dosyaları yapıştırın
(Confirm signup → confirm-signup.html, Reset password → reset-password.html,
Change email address → change-email.html; güvenlik bildirimleri: Password changed → password-changed.html,
Email address changed → email-changed.html). Bağlantılar /auth/confirm'e gider; e-posta başka cihazda
veya mobil uygulamadan kayıttan sonra açılsa da çalışır.Google Cloud Console > APIs & Services > OAuth consent screen: uygulama adı SiftahGo,
destek e-postası; kapsamlar email, profile, openid. Yayın durumunu In production yapın.
Credentials > Create credentials > OAuth client ID > Web application. Authorized redirect URIs:
https://SUPABASE-PROJE.supabase.co/auth/v1/callback
Supabase > Authentication > Sign In / Providers > Google: açın, Client ID ve Client Secret'ı yapıştırın.
Supabase > Authentication > URL Configuration > Redirect URLs: mobil uygulama için siftahgo://auth/callback ekleyin.
Android'de uygulama içi giriş için aynı projede Create credentials > OAuth client ID > Android: paket adı
com.siftahgo.app, SHA-1 olarak APK'yı imzalayan anahtarınki (npx eas-cli credentials -p android). Web istemcisinin
kimliği mobile/eas.json'da EXPO_PUBLIC_GOOGLE_WEB_CLIENT_ID'dir; Android istemcisinin kimliği bir yere yazılmaz.
Android'de Google hesabı uygulamanın içinde seçilir; Android istemcisi yoksa ya da Play Hizmetleri yoksa giriş tarayıcıda açılır.
cd web
cp .env.example .env.local # değerleri doldurun
npm install
npm run dev
R2 bucket'ı için herkese açık erişim (r2.dev veya özel alan adı) açık olmalı ve adresi
CLOUDFLARE_R2_PUBLIC_URL değişkenine yazılmalı. Görseller sunucu üzerinden yüklendiği için CORS ayarı gerekmez.
İşletmeler ücretli paketle çalışır; aktif paketi olmayan işletme yayında görünmez ve randevu almaz.
Paket adları, fiyatları ve personel sınırları veritabanındaki plans tablosundadır
(Supabase > Table Editor > plans); değiştirdiğinizde site ve ödeme tutarı birlikte güncellenir.
SUPABASE_SERVICE_ROLE_KEY, PAYTR_MERCHANT_ID, PAYTR_MERCHANT_KEY, PAYTR_MERCHANT_SALT,
PAYTR_TEST_MODE (1 = test ödemesi, canlıda 0).https://ALAN-ADINIZ/api/paytr/callbackRandevu alınınca işletmeye ve müşteriye, işletme onaylayınca veya iptal edince müşteriye, müşteri iptal edince
işletmeye e-posta gider; müşteriye randevudan önce hatırlatma gönderilir (önceden alınan randevuya 24 saat,
aynı gün alınana 2 saat kala). Müşteri e-postası girişli kullanıcıda hesap e-postasıdır; misafir randevu
formunda isteğe bağlı yazar. E-postalar veritabanındaki notifications kuyruğuna girer, /api/notifications
kuyruğu boşaltır.
RESEND_API_KEY, EMAIL_FROM (örn. SiftahGo <[email protected]>),
CRON_SECRET (uzun, rastgele bir metin), NEXT_PUBLIC_APP_URL.select cron.schedule(
'siftahgo-bildirimler',
'* * * * *',
$$
select net.http_get(
url := 'https://ALAN-ADINIZ/api/notifications',
headers := jsonb_build_object('Authorization', 'Bearer CRON_SECRET_DEĞERİNİZ'),
timeout_milliseconds := 30000
);
$$
);
Görevi kaldırmak için: select cron.unschedule('siftahgo-bildirimler');. Gönderilemeyen e-postalar
5 kez denenir; durumlarını Table Editor > notifications'ta (status, last_error) görebilirsiniz.
여기까지가 README 앞부분입니다. 나머지는 원문에서 읽을 수 있습니다. README 전문 보기 ↗