Easy-to-manage touch screens
Free, open-source touch screens. Guided USB setup, a drag-and-drop editor and local control. Made for Home Assistant.
أنشئ صفحة مناسبتك، أرسل الدعوة على واتساب، وتابع ردود الضيوف من مكان واحد.
Translation pending
LifestyleTypeScript · JavaScriptGitHub @dalyDev-jsOnlineOwner 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
Loading the full README. The saved excerpt is shown below.
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).Read the full 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.