Easy-to-manage touch screens
무료 오픈소스 터치스크린으로 USB 설정 가이드, 드래그‑드롭 편집기, 로컬 제어를 제공하며 Home Assistant용으로 제작되었습니다
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
Digital invitations and events platform for the Egyptian market. Hosts create an event page, share a digital invitation, collect RSVPs, run a temporary shared photo gallery (Standard tier) and QR check-in at the door (Premium tier).
Next.js 16 App Router (single app on Vercel) · Supabase (Postgres, Auth with Google, Storage) · Drizzle ORM · Tailwind CSS v4 + shadcn/ui (Radix, RTL) · zod v4 · motion · next-intl (Arabic-first, bilingual).README 전문 보기 ↗Digital invitations and events platform for the Egyptian market. Hosts create an event page, share a digital invitation, collect RSVPs, run a temporary shared photo gallery (Standard tier) and QR check-in at the door (Premium tier).
.ics download at /e/<slug>/event.ics, and a live countdown in the hero.Next.js 16 App Router (single app on Vercel) · Supabase (Postgres, Auth with Google, Storage) · Drizzle ORM · Tailwind CSS v4 + shadcn/ui (Radix, RTL) · zod v4 · motion · next-intl (Arabic-first, bilingual).
npm install # also copies the QR scanner wasm into public/wasm
cp .env.example .env.local # then fill in the values below
npm run db:migrate # creates tables, RLS policies, triggers and storage buckets
npm run db:seed # inserts the package tiers
npm run dev # http://localhost:3000
Either point .env.local at the hosted da3wety-dev project (checklist below) or run the Supabase CLI stack locally (supabase start, then use the URL/keys/connection strings it prints; supabase/config.toml is committed). For local development without Google OAuth, set DEV_LOGIN_ENABLED=true and create a password host:
node --env-file=.env.local scripts/create-dev-host.mjs # [email protected] / local-dev-password
node --env-file=.env.local scripts/create-dev-host.mjs [email protected] pw # custom credentials
Then sign in at /login with the dev-login form. Add the email to ADMIN_EMAILS to reach /admin.
Checks: npm run typecheck, npm run lint, npm run test, npm run build. The PostgREST RLS integration test (tests/integration) is skipped unless you run it against a real project: RUN_INTEGRATION=1 node --env-file=.env.local node_modules/vitest/vitest.mjs run tests/integration.
Create two projects, da3wety-dev and da3wety-prod (region eu-central-1, Frankfurt). Repeat the steps for each; step 6 is dev-only.
sb_publishable_…) and the secret key (sb_secret_…) into .env.local.DATABASE_URL and the session pooler URL (port 5432) into DATABASE_MIGRATION_URL.http://localhost:3000 and https://da3wety.com, and the redirect URI https://<project-ref>.supabase.co/auth/v1/callback. Paste the client id/secret into Authentication → Providers → Google and enable it.https://da3wety.com; Redirect URLs: http://localhost:3000/**, https://da3wety.com/auth/callback, https://*-<vercel-team>.vercel.app/**.npm run db:migrate then npm run db:seed.If the migration cannot insert into storage.buckets (permissions differ between projects), create the buckets in the dashboard: event-assets (public, 5 MB, image/jpeg,image/png,image/webp) and event-photos (private, 3 MB, same MIME types).
See .env.example. SUPABASE_SECRET_KEY, DATABASE_URL, CRON_SECRET, ADMIN_EMAILS and DEV_LOGIN_ENABLED are server-only. ADMIN_EMAILS is a comma-separated list of Google accounts that become admins on first login.
Import the repo as a Vercel project (framework: Next.js, build npm run build). Node 20+.
Environment variables (Production → prod Supabase project, Preview → dev project): every key in .env.example. NEXT_PUBLIC_SITE_URL must be https://da3wety.com in Production (it is baked into QR payloads and share links). Keep DEV_LOGIN_ENABLED unset/false in Production; the route also refuses to run when NODE_ENV=production.
CRON_SECRET: Vercel calls /api/cron/cleanup-galleries daily at 03:00 UTC (vercel.json) with Authorization: Bearer $CRON_SECRET. The route fails closed (401) without it. Verify after the first deploy:
curl -H "Authorization: Bearer $CRON_SECRET" https://da3wety.com/api/cron/cleanup-galleries
# {"ok":true,"claimed":0,"purged":0,"objectsRemoved":0,"rowsDeleted":0,"staleReservations":0,"errors":0}
Domain: add da3wety.com (and www → redirect). Then update the Supabase prod project: Auth → URL Configuration (Site URL + redirect URLs) and the Google OAuth client's authorized origins.
Cron on the Hobby plan runs once a day at best-effort times; that is fine for gallery cleanup. Pro gives exact schedules.
https://da3wety.com/login with a real account; that account listed in ADMIN_EMAILS and /admin reachable.curl above returns ok:true on production./e/<slug> link into WhatsApp and the Facebook Sharing Debugger; the OG image should show the cover photo and the honoree names./scan/<token> on both (iOS needs the "start camera" tap); reduced-motion setting skips the animation./e/<slug>: accessibility, best practices and SEO at 100. Performance is bounded by the two Arabic font families (~300 KB) plus React; see Notes.npm audit reports a moderate advisory in esbuild pulled in by drizzle-kit's dev loader. It only affects the drizzle-kit dev process, never the deployed app.public/wasm folder is generated at install time from zxing-wasm and is git-ignored.src/lib/validation/ except state.ts (ESLint enforces it): zod is ~390 KB and belongs in server actions only. Pure phone helpers for the client live in src/lib/phone.ts.font-normal on the invitation h1) saves ~100 KB if the heading weight is acceptable.