Vote on everyday decisions with friends
Translation pending
AI summary · website content
SocialPython · HTMLGitHub @suleymannsusuzOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
The maker's introduction consists of the line above. Read the repository README for more details. Repository README ↗
Loading the full README.
Read the full README ↗İnsanların kararsız kaldıkları konularda diğer kullanıcılara danıştığı basit bir anket platformu. Django (şablon tabanlı), saf HTML/CSS/JS, veritabanı olarak Supabase Postgres. Ayrıntılı plan: docs/kararsizim-proje-plani.md.
python -m venv .venv
.venv\Scripts\python.exe -m pip install -r requirements.txt
copy .env.example .env
.venv\Scripts\python.exe manage.py migrate
.venv\Scripts\python.exe manage.py createsuperuser
.venv\Scripts\python.exe manage.py runserver
.env içindeki DATABASE_URL boşsa yerelde SQLite (db.sqlite3) kullanılır. Yönetim paneli: /yonetim/.
| Değişken | Açıklama |
|---|---|
DJANGO_SECRET_KEY | Zorunlu (DJANGO_DEBUG=True iken boş bırakılabilir) |
DJANGO_DEBUG | True / False (varsayılan False) |
DJANGO_ALLOWED_HOSTS | Virgülle ayrılmış alan adları |
DJANGO_CSRF_TRUSTED_ORIGINS | Virgülle ayrılmış kaynaklar (ör. https://alanadi.com) |
DATABASE_URL | Boşsa SQLite; doluysa Postgres (Supabase) |
DATABASE_SSL_REQUIRE | Postgres için SSL zorunlu mu (varsayılan True; yerel Postgres için False) |
.venv\Scripts\python.exe manage.py test
Testler DATABASE_URL dolu olsa bile her zaman geçici SQLite üzerinde çalışır; Supabase'e bağlanmaz.
Supabase yalnızca Postgres veritabanı olarak kullanılır. Supabase Auth, anon key ve JS istemcisi kullanılmaz; tüm veri erişimi Django üzerindendir.
6543) dizesini kopyala..env dosyasındaki DATABASE_URL alanına yapıştır, [YOUR-PASSWORD] yerine parolanı yaz.
Parolada @ : / # ? % gibi özel karakterler varsa URL-kodlaması gerekir (ör. @ → %40)..env dosyası .gitignore içindedir; hiçbir zaman commit'leme.Postgres kullanılırken config/settings.py otomatik olarak CONN_MAX_AGE=0, DISABLE_SERVER_SIDE_CURSORS=True ve sslmode=require ayarlarını uygular (transaction pooling ile uyum için).
.venv\Scripts\python.exe manage.py migrate
.venv\Scripts\python.exe manage.py createsuperuser
Migrasyonlar her zaman yerelden çalıştırılır; yayın (build) adımında migrate çalıştırılmaz.
Django tabloları public şemasında oluşur. Supabase'in otomatik Data API'si bu şemayı anon key ile dışarı açabilir; bu projede Data API kullanılmadığı için iki önlemi birlikte uygula:
DO $$
DECLARE r record;
BEGIN
FOR r IN SELECT tablename FROM pg_tables WHERE schemaname = 'public' LOOP
EXECUTE format('ALTER TABLE public.%I ENABLE ROW LEVEL SECURITY', r.tablename);
END LOOP;
END $$;
Django, tabloların sahibi olan postgres rolüyle bağlandığı için RLS uygulamayı etkilemez. Yeni bir migrasyon yeni tablo oluşturursa SQL'i tekrar çalıştır. Ardından Advisors → Security Advisor sayfasında "RLS disabled" uyarısı kalmadığını doğrula.
throttle_ratelimithit tablosu IP'nin tuzlu özetini ve zaman damgasını tutar (ham IP saklanmaz). Eski kayıtlar kendiliğinden silinir. Tablo bir migrasyonla gelir; Supabase'e migrate çalıştırıp yukarıdaki RLS adımını tekrarlamak yeterli.
db.<ref>.supabase.co:5432) IPv6 gerektirebilir; kullanma.Vercel, projeyi manage.py üzerinden Django olarak tanır ve config.wsgi.application giriş noktasını WSGI_APPLICATION ayarından okur. Ek bir yapılandırma dosyası gerekmez; depodaki iki küçük dosya yeterlidir:
.python-version: Python sürümü (3.13).vercel.json: fonksiyon bölgesi fra1 (Frankfurt, Supabase'e yakın).STATIC_ROOT tanımlı olduğu için Vercel, yayın sırasında collectstatic'i kendisi çalıştırır ve dosyaları CDN'den sunar. WhiteNoise gerekmez. staticfiles/ klasörü .gitignore'dadır, depoya girmez.
| Değişken | Değer |
|---|---|
DJANGO_SECRET_KEY | Yeni ve uzun rastgele bir anahtar (Sensitive işaretle). Üretmek için: python -c "import secrets; print(secrets.token_urlsafe(60))" |
DJANGO_DEBUG | False |
DATABASE_URL | Supabase Transaction pooler bağlantı dizesi (Sensitive işaretle) |
git push otomatik yayınlanır.Alan adı için DJANGO_ALLOWED_HOSTS / DJANGO_CSRF_TRUSTED_ORIGINS gerekmez: Vercel'in VERCEL_PROJECT_PRODUCTION_URL, VERCEL_URL ve VERCEL_BRANCH_URL sistem değişkenleri otomatik kullanılır. Özel alan adı eklersen bu iki değişkene de yaz (virgülle ayrılmış; CSRF için https:// ile).
Vercel'de SECURE_SSL_REDIRECT, güvenli çerezler, HSTS (1 yıl) ve X-Forwarded-Proto ayarı otomatik açılır. Başka bir barındırmada DJANGO_SECURE=True ile aynısını aç. Yerelde DEBUG=False ile denerken bunlar kapalıdır, böylece http://localhost çalışır.
migrate çalıştır (Supabase'e) ve yeni tablo oluşuyorsa RLS adımını tekrarla.VERCEL=1, DJANGO_DEBUG=False, uzun bir DJANGO_SECRET_KEY ve VERCEL_PROJECT_PRODUCTION_URL ile python manage.py check --deploy çalıştır. Kalan iki uyarı (HSTS alt alan adları ve preload) vercel.app ortak alan adı olduğu için bilerek açık bırakılmıştır./static/ yolundan alır; statik dosya sunumu çalışmazsa stilsiz görünür.