Easy-to-manage touch screens
무료 오픈소스 터치스크린으로 USB 설정 가이드, 드래그‑드롭 편집기, 로컬 제어를 제공하며 Home Assistant용으로 제작되었습니다
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
Guest list and RSVP, built to the spec in
docs/wedding-platform-spec.md.
This is V1. It exists to get invitations out and RSVPs back without a
spreadsheet — the only part of the plan with a deadline that cannot move.
Vendors, budget, the inbox and seating are V2 and V3, and deliberately absent.README 전문 보기 ↗Guest list and RSVP, built to the spec in
docs/wedding-platform-spec.md.
This is V1. It exists to get invitations out and RSVPs back without a spreadsheet — the only part of the plan with a deadline that cannot move. Vendors, budget, the inbox and seating are V2 and V3, and deliberately absent.
Next.js 15 (App Router) · Supabase (Postgres, Auth) · TypeScript · Tailwind
extension/) that sends any
image on the web to a board, live, and a Pinterest import for boards you
already have. How to use all of it is at /moodboards/help, in the app —
the questions it answers get asked while looking at the screen, usually on
a phone.npm install
cp .env.example .env.local # every value is explained in the file
supabase start # or point at a hosted project
supabase db reset # applies migrations and the dev seed
node scripts/ensure-bucket.mjs # the private moodboards storage bucket
npm run dev
ensure-bucket.mjs is idempotent and has to be run once per environment. It
is a script rather than a migration on purpose: a migration touching storage
could not be applied to the bare PostgreSQL cluster verify-migrations.sh
builds. Skip it and image uploads fail with "Storage isn't reachable".
No Supabase project exists yet — the migrations have only ever been applied to
throwaway local clusters. See docs/HANDOFF.md for what that means and what to
do about it.
Set up SPF, DKIM and DMARC on the sending domain and let it warm up. Without them a hundred invitations land in spam and you find out from a relative. This takes days and sits directly in front of the one immovable deadline in the project, so do it early.
npm run typecheck # strict, with noUncheckedIndexedAccess
npm test # 287 unit tests
./scripts/verify-migrations.sh # 167 SQL assertions on a throwaway cluster
npm run build
verify-migrations.sh builds its own PostgreSQL cluster, applies a small
Supabase shim, runs every migration and the seed, then executes the SQL test
suite. No Docker, no network, no Supabase CLI — CI runs it on every push. It
must not run as root, because initdb refuses.
src/
app/
(planner)/ signed-in screens: dashboard, guests, ranking, invitations
rsvp/[token]/ public RSVP — no login, one household per token
m/[token]/ public moodboard — no login, one board per token
w/ public site
api/ cron, CSV exports, the clipper endpoint, Pinterest OAuth
components/
lib/ ranking, tokens, CSV, timezone, formatting, Supabase clients
net/ the one module allowed to fetch a URL somebody else chose
server/
actions/ every write in the app
queries/ every read
rsvp/ token resolution and throttling
supabase/
migrations/ schema, RLS, views
tests/ tenancy and derived-value assertions
seed.sql two weddings — a tenancy test with one tenant proves nothing
extension/ the Chrome MV3 clipper. Not part of the Next.js build.
docs/
wedding-platform-spec.md the amended spec, V1 through V3
specs/ one spec per feature, with its open questions
HANDOFF.md current state and what to pick up next
Tenancy is a foreign key, not a convention. Every tenant table carries
wedding_id, every parent carries a redundant unique (id, wedding_id), and
children reference (parent_id, wedding_id). Attaching a guest in one wedding
to a household in another is a foreign key violation — even for the service
role, which bypasses RLS entirely.
The service role client bypasses RLS, and every caller scopes itself. The
public RSVP path (a token resolved to one household), the cron sender, the FX
rate cache, moodboard storage, and the moodboard share and clip-token paths (a
token resolved to one board or one wedding). Everything a signed-in
collaborator does goes through src/lib/supabase/server.ts, so the database
stays the thing enforcing access. src/lib/supabase/admin.ts lists all five
and why each one is allowed.
The moodboards bucket is private and has no storage policies at all. That
is what keeps storage.objects out of every migration, which is what lets
verify-migrations.sh apply the whole set to a bare PostgreSQL cluster. The
consequence: object paths are derived from ids the server has already
checked (storageObjectPath()), never accepted from a client. A client that
could name its own path could name somebody else's.
More, including the traps that have already cost time, in docs/HANDOFF.md.