WallpaperMachine
당신이 사랑하는 배경화면, 맥에서 새롭게 만나보세요
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
인생의 주요 이벤트마다 필요한 계산과 정보를 한곳에서 해결해주는 사이트. Phase 1은 출산·육아 하나만 끝까지 다룹니다. • 프로필을 한 번 입력하면 모든 계산기가 자동으로 채워집니다. • 결과 숫자만 던지지 않고 계산 과정을 단계별로 펼쳐서 보여줍니다. • 모든 숫자에 근거 조문과 기준일이 붙습니다. • 계산만이 아니라 판정(자격 여부)과 최적화(최선의 선택)까지 합니다. 프로필은 브라우저의 localStorage에만 저장되고 서버로 전송되지 않습니다. 모든 계산은 브라우저 안에서 끝납니다. 이 약속을 깨는 코드(프로필을 fetch·서버액션에 싣는 코드)를 추가하지 마세요. 딱 하나 예외가 '둘이 같이 쓰기'(커플 가계부)입니다. 사용자가 직접 켠 경우에만 가계부가 서버를 거칩니다. 그때도 브라우저에서 AES-GCM으로 잠근 뒤 올라가고, 푸는 열쇠(핀 6자리 + 방 열쇠)는 서버로 가지 않습니다. 서버에 남는 건 뜻 없는 방 번호와 잠긴 덩어리뿐입니다.README 전문 보기 ↗
인생의 주요 이벤트마다 필요한 계산과 정보를 한곳에서 해결해주는 사이트. Phase 1은 출산·육아 하나만 끝까지 다룹니다.
프로필은 브라우저의 localStorage에만 저장되고 서버로 전송되지 않습니다. 모든 계산은 브라우저 안에서 끝납니다. 이 약속을 깨는 코드(프로필을 fetch·서버액션에 싣는 코드)를 추가하지 마세요.
딱 하나 예외가 가계부 계정입니다. 사용자가 아이디와 핀으로 계정을 만든 경우에만 가계부가 서버에 저장됩니다. 그때도 브라우저에서 AES-GCM으로 잠근 뒤 올라가고, 핀은 서버로 가지 않습니다.
lib/account/crypto.ts 한 곳에서만 합니다.lib/account/client.ts와 app/api/vault/뿐입니다.lib/ledger/*와 lib/profile/*에는 여전히 fetch·서버액션을 넣지 마세요.
나가는 길이 한 곳이어야 어디서 새는지 찾을 자리가 하나로 유지됩니다.app/api/vault/route.ts)keySalt를 열쇠에 섞습니다 — 로그인 성공해야 받습니다VAULT_PEPPER(환경변수)를 증표 해시에 섞습니다 — 저장소만 유출돼도 핀을 못 찍습니다VAULT_PEPPER가 둘 다 유출되면 6자리는 버티지 못합니다. 처리방침에 그대로 적었습니다./app 라우트
/components UI (계산기 셸, 타임라인, 프로필)
/lib/calculators 순수 함수. UI를 import하지 않는다.
/lib/rules 룰 로더 (이벤트 날짜 기준 연도 선택)
/lib/profile 프로필 스키마 + localStorage
/rules/<연도>/*.json 기준값. 로직 파일에 숫자를 하드코딩하지 않는다.
/tests 모든 계산기는 테스트 필수
/content/childcare/<slug>.ts 에 Article 하나를 export 하고 content/index.ts 배열에 넣으면
목록·본문·사이트맵에 자동으로 붙습니다. 본문은 블록 배열이고 인라인 표기는 **굵게** 와
[글자](주소) 만 씁니다.
글에 숫자를 적을 때는 계산기와 같은 근거를 basisRuleIds 에 적어 두세요. 글 하단에 근거 조문과
확인일이 자동으로 붙습니다.
세법·고시는 매년 바뀝니다. /rules/<연도>/ 에 새 JSON을 추가하고 lib/rules/loader.ts의
레지스트리에 한 줄 더하면 끝입니다. 계산 로직은 건드리지 않습니다.
모든 룰 파일은 meta에 effectiveFrom / source / sourceUrl / verifiedAt / verifiedBy를
반드시 갖습니다. verifiedAt이 6개월을 넘기면 결과 화면에 "기준값 확인 필요" 배지가 자동으로 뜹니다.
pnpm install
pnpm dev
pnpm test # 계산 로직 테스트
pnpm typecheck
.env.example을 복사해 값을 채웁니다. 값이 비어 있으면 해당 스크립트를 아예 넣지 않으므로,
로컬 개발 중에는 전부 비워둬도 됩니다.
| 환경변수 | 쓰임 |
|---|---|
NEXT_PUBLIC_SITE_URL | sitemap.xml, robots.txt, canonical, OG 태그의 기준 도메인. 비우면 Vercel 배포 주소를 자동으로 씁니다 |
NEXT_PUBLIC_GA_ID | GA4 측정 ID. 없으면 GA 스크립트를 넣지 않음 |
NEXT_PUBLIC_GSC_VERIFICATION | Search Console HTML 태그 인증값 |
NEXT_PUBLIC_ADSENSE_CLIENT | AdSense 퍼블리셔 ID. 넣으면 /ads.txt가 자동 생성됨 |
NEXT_PUBLIC_ADSENSE_SLOT_HOME / _HUB | 광고 단위 슬롯 ID. 비우면 그 자리에 광고가 안 나옴 |
UPSTASH_REDIS_REST_URL / UPSTASH_REDIS_REST_TOKEN | 가계부 계정 저장소. 비우면 로그인만 꺼지고 나머지는 그대로 돌아감 |
VAULT_PEPPER | 핀 증표에 섞는 서버 전용 값. 아무 긴 랜덤 문자열. 한 번 정하면 절대 바꾸지 마세요 — 바꾸면 기존 계정이 전부 안 열립니다 |
로그인해서 어느 기기에서든 같은 가계부를 보려면 저장소가 필요합니다.
UPSTASH_REDIS_REST_URL과 UPSTASH_REDIS_REST_TOKEN을 복사VAULT_PEPPER를 긴 랜덤 문자열로 정합니다 (openssl rand -base64 32)VAULT_PEPPER를 바꾸면 기존 계정의 로그인이 전부 실패합니다. 한 번 정하고 두세요.
값을 안 넣으면 /api/vault가 503과 안내문을 돌려주고, 화면은 로그인 칸을 감춥니다.
pnpm build).NEXT_PUBLIC_SITE_URL을 그 도메인으로 바꿉니다. 이 값이 틀리면
sitemap과 canonical이 전부 엉뚱한 주소를 가리킵니다.측정 ID(G-로 시작)를 NEXT_PUBLIC_GA_ID에 넣으면 끝입니다. IP는 익명 처리되고,
계산기에 입력한 값은 어떤 형태로도 이벤트에 싣지 않습니다. 이 원칙을 깨는 코드를 넣지 마세요.
<meta name="google-site-verification" content="...">의
content 값만 NEXT_PUBLIC_GSC_VERIFICATION에 넣습니다.https://<도메인>/sitemap.xml을 제출합니다. /me는 개인 설정 화면이라
robots.txt에서 크롤링을 막아뒀습니다.심사 전에 확인할 것:
NEXT_PUBLIC_ADSENSE_CLIENT를 넣고 배포한 뒤 https://<도메인>/ads.txt가 열리는지 확인합니다./privacy)이 접속 가능한지 확인합니다. 쿠키·GA·AdSense 항목이 이미 들어 있습니다._SLOT_ 변수는 비워두면 광고 자리가 렌더링되지 않습니다.광고는 계산 결과 영역 안에 넣지 않습니다. 결과와 광고가 섞이면 이 사이트가 파는 유일한 것, 곧 신뢰가 사라지기 때문입니다.