mesh-avatar-studio
Turn one illustration into an animated 2D mesh avatar with a coding agent and a local editor
In-house generator that instantly creates detail page, thumbnail, and Instagram feed banners from Google Sheets data
AI translation
구글 시트 데이터로 상세페이지·썸네일·인스타 피드 배너를 즉시 생성하는 사내 제너레이터
DesignJavaScript · CSSGitHub @official-dearcusOnlineOwner 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.
구글 시트(ProductMaster / TemplateMaster / HeroMaster / ColorMaster) 데이터로 상세페이지 · 썸네일(1080²) · 인스타 피드(1080×1350) 배너를 브라우저에서 바로 렌더링하고 PNG(ZIP)로 내려받는 사내 도구입니다. 빌드 도구·서버·npm 설치가 필요 없습니다. 파일을 그대로 올리면 동작하는 정적 사이트입니다.Read the full README ↗
구글 시트(ProductMaster / TemplateMaster / HeroMaster / ColorMaster) 데이터로 상세페이지 · 썸네일(1080²) · 인스타 피드(1080×1350) 배너를 브라우저에서 바로 렌더링하고 PNG(ZIP)로 내려받는 사내 도구입니다.
빌드 도구·서버·npm 설치가 필요 없습니다. 파일을 그대로 올리면 동작하는 정적 사이트입니다.
.
├─ index.html ← 화면 마크업 + 로드 순서만 (13KB)
├─ api/
│ ├─ sheet.js ← 비공개 구글 시트 → CSV (서비스 계정)
│ └─ img.js ← 외부 이미지 중계 (같은 출처 + 캐시)
├─ vercel.json ← 캐시·보안 헤더
├─ robots.txt ← 검색엔진 색인 차단 (사내용)
├─ assets/
│ ├─ high-summit.woff2 ← 히어로 영문 서체 (자체 호스팅)
│ └─ logo.png ← dear.cus 로고
├─ styles/ ← 캐스케이드 순서대로 로드
│ ├─ 01-tokens.css 색 변수 · @font-face · 기본 리셋
│ ├─ 02-layout.css 3단 레이아웃 · 헤더 · 리사이저 · 블록
│ ├─ 03-controls.css 인풋 · 세그먼트 · 탭 · 스와치
│ ├─ 04-panels.css 제품군/템플릿/컬러/히어로/가격카드 패널
│ └─ 05-stage.css 미리보기 무대 · 버튼 · 경고 · 이력
└─ scripts/ ← 번호 순서 = 실행 순서
├─ 01-sheet-schema.js 시트 스키마 · CSV 파서 · 오류코드 · buildGroups
├─ 02-design-tokens.js 캔버스 규격 상수 · THEMES · OPT · LOGO
├─ 03-sample-data.js 내장 샘플 데이터(GROUPS)
├─ 04-template-meta.js 템플릿 ID ↔ 패밀리/테마 매핑
├─ 05-state-utils.js state · 포맷 유틸 · 이미지 로더(프록시 포함)
├─ 06-config-store.js 배포 기본값(PRESET) · localStorage 접속설정
├─ 07-sheet-sync.js 시트 불러오기 · 오류 표시 · 데이터소스 UI
├─ 08-panel-ui.js CORS 진단 · 편집 패널 폭 조절 · 상단 바인딩
├─ 09-hero-color.js 히어로 이미지 라이브러리 · 컬러 선택
├─ 10-group-template-ui.js 제품군/템플릿/테마 선택 UI
├─ 11-rows-picker.js 가격 카드 편집 · 제품 선택 패널
├─ 12-render-nuvola.js 누볼라 패밀리 렌더러 (상세·썸네일·피드 전부)
├─ 13-render-core.js draw() · 포맷 전환 · 미리보기
├─ 14-render-hero.js 기본 패밀리 히어로 01 / 02
├─ 15-render-thumb-feed.js 썸네일 · 피드 슬라이드 렌더러
├─ 16-render-cards.js 옵션 카드 렌더 · 줄바꿈/높이 계산
├─ 17-canvas-helpers.js trk · cover · roundRect 등 캔버스 헬퍼
├─ 18-validate.js 경고/검증 패널
├─ 19-export.js PNG 렌더 · ZIP 다운로드 (JSZip 지연 로드)
├─ 20-history-share.js 생성 이력 · 공유 코드
└─ 21-bindings-boot.js 입력 바인딩 · boot()
| 하고 싶은 일 | 열 파일 |
|---|---|
| 시트 컬럼 추가/이름 변경 | scripts/01-sheet-schema.js |
| 배포 기본 시트·프록시 URL 교체 | scripts/06-config-store.js 의 PRESET |
| 색상 테마 추가 | scripts/02-design-tokens.js 의 THEMES |
| 배너 그림이 잘못 나옴 (누볼라) | scripts/12-render-nuvola.js |
| 배너 그림이 잘못 나옴 (기본 01/02) | scripts/14-render-hero.js, 16-render-cards.js |
| 화면 색·여백 | styles/01-tokens.css (변수) |
scripts/*.js 는 모듈이 아니라 일반 스크립트입니다.
전역 스코프를 그대로 공유하기 때문에 원본 단일 파일과 동작이 완전히 같지만,
index.html 의 <script defer> 순서가 곧 실행 순서입니다.
index.html 아래쪽 스크립트 목록에도 추가해야 합니다.type="module" 로 바꾸면 전역 공유가 끊겨 전부 깨집니다.| 환경변수 | 필수 | 용도 |
|---|---|---|
GOOGLE_SA | ✅ | 서비스 계정 JSON 전체 (base64 도 인식) |
SHEET_ID | ✅ | 시트 주소의 /d/ 와 /edit 사이 문자열 |
IMG_HOSTS | 선택 | 이미지 중계를 허용할 도메인. 예 cafe24.com,dearcus.com. 비우면 전체 허용 |
환경변수를 바꾸면 재배포해야 반영됩니다.
직접 열어서 확인할 수 있습니다:
/api/sheet?tab=ProductMaster → CSV 텍스트
/api/img?u=<이미지주소 URL인코딩> → 이미지
실패하면 화면에 한글로 원인이 표시됩니다.
빌드가 없으므로 설정할 게 거의 없습니다.
index.html 이 저장소 최상단에 보여야 합니다. 폴더 안에 한 겹 더 들어가면 안 됩니다.)Other.)./ — 저장소 안에 폴더가 한 겹 더 있다면 그 폴더를 지정https://프로젝트명.vercel.app 발급이후에는 GitHub 에 커밋할 때마다 자동 재배포됩니다. (main 브랜치 → 운영, 다른 브랜치 → 미리보기 URL)
06-config-store.js 의 PRESET 에 게시 CSV URL 이 들어 있어 자동 로드됩니다)접속 설정(시트 URL·프록시 URL)은 도메인별로 브라우저에 저장됩니다.
github.io → vercel.app 으로 옮기면 저장된 값이 안 보입니다.
다만 코드에 PRESET 기본값이 있어 처음 열어도 자동으로 시트를 불러옵니다.
| 항목 | 이전 | 이후 |
|---|---|---|
| 파일 구성 | index.html 1개 (320KB, 6,786줄) | HTML 13KB + CSS 5 + JS 21 + 에셋 2 |
| 첫 화면 HTML 전송량 | 320KB (매번 전부) | 13KB |
| High Summit 폰트 | HTML 안에 base64 (50KB, 매번 재다운로드) | .woff2 37KB, 1년 캐시 |
| 로고 | JS 안에 base64 16KB | logo.png 12KB, 1년 캐시 |
| JSZip 94KB | 첫 화면에서 동기 로드(파싱 차단) | 다운로드 버튼 누를 때만 로드 |
| 한 줄 수정 시 재다운로드 | 320KB 전부 | 해당 파일만 |
렌더링 코드는 한 글자도 바꾸지 않았습니다. 캔버스 드로잉 4,786개 명령과 화면 DOM 을 원본과 비교해 완전히 동일함을 확인했습니다.
PRESET 의 시트·프록시 URL 이 공개됩니다.
민감하면 저장소를 Private 으로 두세요. (Vercel 은 Private 저장소도 무료로 배포합니다)피그마와 코드가 어긋난 곳을 찾아 표로 보여줍니다. 고치지는 않습니다.
export FIGMA_TOKEN=figd_xxxxx # 최초 1회
node tools/figma-check.mjs
토큰은 figma.com → 프로필 → 설정 → 보안 → 개인 액세스 토큰에서 만듭니다.
tools/figma-check.config.json 의 checks 를 봅니다.
expect 숫자는 코드가 쓰는 값이므로, 코드 상수를 고치면 여기도 같이 고쳐야 합니다오프라인 검사:
node tools/figma-check.mjs --json fig.json # 받아서 저장
node tools/figma-check.mjs --from fig.json # 저장한 걸로 검사