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 · PLpgSQLGitHub @chayobi03-cyberOnlineOwner 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.
우리 가족만 쓰는 프라이빗 성장 다이어리 PWA. Next.js (App Router) + Supabase. 1. Supabase 프로젝트를 만들고 supabase/migrations/ 안의 SQL을 순서대로 실행합니다 (Supabase SQL Editor에 붙여넣거나 supabase db push 사용). 2. .env.local.example을 .env.local로 복사하고 프로젝트 URL/anon key를 채웁니다. 3. 개발 서버 실행: 4. 가족 중 한 명이 /signup에서 아이디 + 닉네임 + 비밀번호로 가입 후 "새 가족 만들기"로 가족을 만들면 6자리 초대 코드가 발급됩니다(가족 피드 화면 상단에 표시). 나머지 가족은 /signup → "초대 코드로 참여하기"로 그 코드를 입력해 합류합니다. 가입은 열려 있지만, 초대 코드를 모르면 남의 가족 기록에 접근할 수 없습니다 (RLS로 private-first가 강제됨).Read the full README ↗
우리 가족만 쓰는 프라이빗 성장 다이어리 PWA. Next.js (App Router) + Supabase.
supabase/migrations/ 안의 SQL을 순서대로 실행합니다
(Supabase SQL Editor에 붙여넣거나 supabase db push 사용)..env.local.example을 .env.local로 복사하고 프로젝트 URL/anon key를 채웁니다.npm run dev
/signup에서 아이디 + 닉네임 + 비밀번호로 가입 후
"새 가족 만들기"로 가족을 만들면 6자리 초대 코드가 발급됩니다(가족 피드
화면 상단에 표시). 나머지 가족은 /signup → "초대 코드로 참여하기"로 그
코드를 입력해 합류합니다. 가입은 열려 있지만, 초대 코드를 모르면 남의
가족 기록에 접근할 수 없습니다 (RLS로 private-first가 강제됨).이메일 주소는 전혀 쓰지 않습니다 — 가입 시 내부적으로 무작위 placeholder
이메일을 만들어 Supabase Auth에 등록하고, login_identities 테이블이
"아이디 → 그 placeholder 이메일"을 매핑해 로그인 화면에서 아이디+비밀번호로
로그인할 수 있게 해줍니다 (supabase/migrations/0002_name_based_auth.sql,
0004_separate_username_nickname.sql). 이메일 확인(confirm email) 절차는
DB 트리거로 즉시 처리되므로 Supabase 대시보드의 이메일 인증 설정과 무관하게
항상 동작합니다.
아이디(로그인용, login_identities.username)와 닉네임(가족 피드 등에
보이는 이름, profiles.name)은 별개입니다 — 설정 탭에서 닉네임을 바꿔도
로그인 아이디는 그대로예요.
src/app/(app)/ — 로그인 후 화면 (오늘/달력/가족/앨범/설정, 기록 작성·수정, 도전 모드, 개인 공간)src/app/login/, src/app/signup/ — 로그인/가입src/app/onboarding/ — 가입 직후 가족 생성/참여 화면src/app/(app)/trips/, src/lib/trip/ — 가족 여행 플래너 (홈의 "가족 여행" 카드로 진입, 하단 탭 아님). 여행 정의는 trips.def(JSON), 일차별 편집본은 trip_day_items, 장소별 진행 기록은 trip_progress. 가족 구성원 모두가 읽고 쓰는 공유 데이터이며(0014_family_trips.sql), 일정 엔진은 src/lib/trip/engine.ts. 동시 편집은 updated_at 기반 낙관적 잠금(충돌 시 최신 데이터에 재적용, src/lib/trip/cas.ts). 순수 로직은 npm run test:unit(Vitest)로 검증. 화면은 trip-view.tsx(지도+목록 한 페이지, 낙관적 반영 use-trip-state.ts), 지도는 Leaflet + OpenStreetMap 타일. 소감·별점은 trip_progress, 사진은 trip_photos + 비공개 버킷 trip-media(브라우저에서 줄여 직접 업로드, 0015_trip_reviews_and_photos.sql), 여행 요약은 src/lib/trip/summary.ts의 결정론적 계산(AI 호출 없음)src/app/actions.ts — 서버 액션 (기록 생성/수정, 리액션, 댓글, 가족 생성/참여, 목표, 일정, 로그아웃)src/lib/supabase/ — 브라우저/서버/미들웨어용 Supabase 클라이언트supabase/migrations/ — DB 스키마 + RLS (private-first) + 초대 코드 조회 함수public/manifest.webmanifest, public/sw.js — PWA 매니페스트 + 오프라인 셸 캐싱포함: 로그인, 오늘 기록(카테고리 5종 + 한 줄 + 사진 최대 5장 + 공개범위, 이후 수정 가능 — 사진은 나중에 추가만 가능하고 삭제는 아직 없음), 월간 캘린더(가족 구성원별 작성 표시 포함), 가족 피드 + 리액션 + 댓글, 가족 목표(부모/아이 누구나, 응원 카운트), 캘린더 일정(미용실/약속 등), 사진 앨범(본인 + 가족이 공개한 사진 모아보기).
목표는 결과 달성 압박이 아니라 "사소한 것도 응원받는" 걸 목적으로 해서, 가족간 순위나 벌점은 없고 응원(👏) 카운트만 누적됩니다.
홈 화면에는 "🎁 모은 아이템"도 있습니다 — 기록/목표 활동에 따라 정해진
규칙으로만 아이템이 해금돼요 (src/lib/items.ts). 랜덤 뽑기는 PRD의
게임화 원칙(도파민 자극용 랜덤 보상 금지)과 맞지 않아서 의도적으로 배제
했습니다.
가족 구성원마다 /room/[userId] 개인 공간(미니홈피 느낌)이 있고,
설정에서 나무/별자리/행성/색모음집 중 자기 세계관을 직접 고를 수 있습니다
(가족 전체가 하나로 통일할 필요 없음). 공간에는 모은 아이템과 목표가
표시되는데, 본인이 아닌 경우 그 사람이 가족에게 공개한 것만 보입니다 —
get_item_stats가 별도 권한 체크 없이 기존 RLS에 그대로 얹혀 동작하는
구조라, 다른 사람 공간을 봐도 그 사람의 비공개 기록은 절대 새지 않습니다.
"도전 모드"(연속 기록 일수에 따라 동물이 자라는 화면)는 하단 탭에는 없고 홈 화면 "🎁 모은 아이템" 옆 링크로 들어갑니다 — 하단 탭은 5개(오늘/달력/ 가족/앨범/설정)로 유지하는 게 원칙입니다 (아래 "설계 원칙" 참고).
보류 (PRD 참고): 원본/디스플레이/썸네일 리사이즈 파이프라인(현재는 원본만 업로드), Google Calendar 연동, 가족 공유 일정(현재 일정은 개인 캘린더에만 표시), 사진 삭제.
docs/design-principles.md 참고 — 비용/랜덤/RLS/
스토리지 RLS/비정규화 필드 동기화/E2E 타임아웃/하단 탭바 개수에 대한 원칙을
정리해뒀습니다. CLAUDE.md에서 임포트하고 있어서 새 세션에서도 항상 로드돼요.
main입니다. main에 병합되면 Vercel이 프로덕션으로 배포합니다 (다른 브랜치는 미리보기 배포).