launch.json 규격
Product Hunt 제출 폼을 기준으로, 조코헌트 항목까지 한 파일에 담습니다.
위치
launch.json은 사이트의 .well-known/launch.json에 둡니다. 이 파일이 있는 폴더가 기준 주소이고, 기준 주소 하나가 전시 하나입니다. Autohunt는 핑한 주소의 폴더부터 한 단계씩 위로 올라가며 파일을 찾고, 도메인 루트에서 멈춥니다.
| 경우 | 핑한 주소 → 기준 주소 |
|---|---|
| 경우루트 사이트 | 핑한 주소 → 기준 주소핑https:// |
| 경우GitHub 프로젝트 페이지 | 핑한 주소 → 기준 주소핑https:// |
소유는 links.website로 확인합니다. 이 주소가 기준 주소로 시작해야 합니다. 이미지의 상대 경로는 기준 주소를 기준으로 풀고, 다른 출처의 웹사이트나 이미지 주소는 받지 않습니다.
주소는 비교 전에 정리합니다. 호스트는 소문자와 퓨니코드로 바꾸고, 기본 포트와 끝의 점, 쿼리와 해시는 뗍니다. www가 붙은 주소와 붙지 않은 주소는 다른 출처입니다.
필드
기본 언어는 영어(PH 기준)이고, 한국어 문구는 i18n.ko에 둡니다.
| 필드 | 형식 | 제한 | 필수 | Product Hunt | 조코헌트 |
|---|---|---|---|---|---|
| Main info | |||||
| 필드name | 형식string | 제한1–40자 | 필수필수 | Product HuntName of the launch | 조코헌트제품 이름 |
| 필드tagline | 형식string | 제한1–60자 | 필수필수 | Product HuntTagline | 조코헌트한 줄 소개 |
| 필드description | 형식string | 제한1–500자(260자 이내 권장) | 필수필수 | Product HuntDescription | 조코헌트설명 |
| 필드links.website | 형식HTTPS URL | 제한200과 <title>, 기준 주소로 시작 | 필수필수 | Product HuntLinks (first) | 조코헌트웹사이트 |
| 필드links.github | 형식URL | null | 제한— | 필수선택 | Product HuntLinks | 조코헌트GitHub |
| 필드links.other | 형식URL[] | 제한— | 필수선택 | Product HuntLinks | 조코헌트— |
| 필드openSource | 형식boolean | 제한— | 필수선택 | Product HuntIs this an open source project? | 조코헌트— |
| 필드x | 형식string | null | 제한x.com/ 뒤 핸들 | 필수선택 | Product HuntX account of the launch | 조코헌트— |
| 필드phTags | 형식string[] | 제한0–3개 | 필수권장 | Product HuntLaunch tags | 조코헌트— |
| 필드firstComment | 형식string | null | 제한— | 필수권장 | Product HuntFirst comment | 조코헌트— |
| Images and media | |||||
| 필드media.thumbnail | 형식path | URL | 제한정사각 240px 이상, PNG·JPEG·GIF·WebP, 2,097,152바이트 이하 | 필수필수 | Product HuntThumbnail | 조코헌트로고 |
| 필드media.gallery | 형식(path | URL)[] | 제한1–8장, 1270:760 ±2% | 필수필수 | Product HuntGallery | 조코헌트스크린샷 |
| 필드media.video | 형식YouTube/ | 제한— | 필수권장 | Product HuntVideo / Loom | 조코헌트데모 영상 |
| 필드media.interactiveDemo | 형식URL | null | 제한— | 필수선택 | Product HuntInteractive demo | 조코헌트— |
| Makers | |||||
| 필드makers[] | 형식{ name, x?, github?, producthunt?, email?, role? }[] | 제한name 필수 | 필수권장 | Product HuntMakers | 조코헌트메이커 |
| 필드submitterIsMaker | 형식boolean | 제한— | 필수선택 | Product HuntDid you work on this product? | 조코헌트— |
| Extras | |||||
| 필드pricing | 형식"free" | "paid" | "freemium" | 제한— | 필수권장 | Product HuntPricing | 조코헌트가격 모델 |
| 필드promo | 형식{ offer, code, expires } | null | 제한셋 다 채우거나 null | 필수선택 | Product HuntPromo code | 조코헌트— |
| 필드launchDate | 형식YYYY-MM-DD | null | 제한미래 날짜는 그날(KST)부터 전시 | 필수선택 | Product HuntLaunch date | 조코헌트— |
| Autohunt·조코헌트 전용 | |||||
| 필드categories | 형식enum[] | 제한14개 중 1개 이상, 중복 없음 | 필수필수 | Product Hunt— | 조코헌트카테고리 |
| 필드stage | 형식"idea" | "development" | "beta" | "launched" | 제한— | 필수선택 | Product Hunt— | 조코헌트단계 |
| 필드feedbackWanted | 형식enum[] | 제한UX, 가격, 아이디어 검증, 네이밍, 마케팅, GTM | 필수선택 | Product Hunt— | 조코헌트받고 싶은 피드백 |
| 필드draft | 형식boolean | 제한true면 수집하지 않음 | 필수선택 | Product Hunt— | 조코헌트— |
| 필드i18n.ko | 형식{ tagline?, description?, firstComment? } | 제한같은 제한 | 필수권장 | Product Hunt— | 조코헌트한국어 문구 |
글자 수는 코드 포인트로 셉니다. 한글 한 자와 이모지 하나가 각각 1입니다. promo의 셋 다 채우기와 같은 출처 규칙은 JSON Schema로는 표현하지 못해 서버만 검사합니다.
전체 예시
POLICY의 예시 그대로입니다. MCP autohunt_get_guide의 examplePayload와 같은 값입니다.
{ "$schema": "https:// autohunt. flowoodz. com/ schema/ launch. v1. json", "version": 1, "name": "Loupecast", "tagline": "Free, open- source Screen Studio alternative for macOS", "description": "A free, open- source Screen Studio alternative for macOS. It records your screen and zooms toward each click. ", "links": { "website": "https:// dunzkoi. github. io/ loupecast/ en/ ", "github": "https:// github. com/ dunzkoi/ loupecast", "other": [] }, "openSource": true, "x": "flowoodzx", "phTags": [ "Open Source", "Design Tools", "GIFs" ], "categories": [ "크리에이터 도구" ], "pricing": "free", "stage": "launched", "promo": null, "firstComment": "I wanted click- zoom screen recordings on macOS for free, so I built Loupecast in the open. ", "media": { "thumbnail": "/ launch/ thumbnail. png", "gallery": [ "/ launch/ gallery- 1. png", "/ launch/ gallery- 2. png", "/ launch/ gallery- 3. png" ], "video": null, "interactiveDemo": null }, "makers": [ { "name": "Dun Z", "x": "flowoodzx", "producthunt": null, "github": "dunzkoi", "role": "maker" } ], "submitterIsMaker": true, "feedbackWanted": [ "UX", "아이디어 검증" ], "launchDate": null, "i18n": { "ko": { "tagline": "macOS용 무료 오픈소스 Screen Studio 대안", "description": "macOS용 무료 오픈소스 Screen Studio 대안입니다. 화면을 녹화하면서 클릭한 곳으로 확대합니다. ", "firstComment": "macOS에서 클릭 확대 녹화를 무료로 쓰고 싶어서 Loupecast를 공개로 만들었습니다. " } }}넓은 화면에서는 오른쪽에 고정해 두었습니다.
검사 규칙
오류가 하나라도 있으면 전시하지 않습니다. 경고는 전시를 막지 않습니다. 메시지마다 고칠 방법이 함께 나옵니다.
오류
required필수 값이 없습니다: version, name, tagline, description, links.website, categories, media.thumbnail, media.gallery, makers[].name.
invalid_typeinvalid_value형식이 틀렸거나 허용 목록에 없는 값입니다(version은 1, pricing, stage, feedbackWanted).
too_longname 40자, tagline 60자, description 500자를 넘었습니다. i18n.ko도 같고, 글자는 코드 포인트로 셉니다.
too_many_tagsphTags가 3개를 넘습니다.
categories_emptycategory_unknowncategory_duplicatecategories가 비었거나, 14개에 없는 값이 있거나, 같은 값이 두 번 있습니다.
promo_partialpromo의 offer, code, expires 중 일부만 채웠습니다.
date_formatpromo.expires나 launchDate가 실제 날짜인 YYYY-MM-DD가 아닙니다.
website_not_httpslinks.website가 https:// 주소가 아닙니다.
website_not_ownedlinks.website가 기준 주소로 시작하지 않습니다.
website_statuswebsite_no_title웹사이트가 200을 돌려주지 않거나 <title>이 있는 HTML이 아닙니다(배포된 사이트를 검사할 때).
video_unrecognizedmedia.video가 YouTube(watch, youtu.be, shorts, embed)나 Loom(share, embed) 주소가 아닙니다.
thumbnail_not_squarethumbnail_too_small썸네일이 정사각형이 아니거나 240px보다 작습니다.
gallery_emptygallery_too_many갤러리가 비었거나 8장을 넘습니다.
gallery_ratio갤러리 이미지 비율이 1270:760에서 2% 넘게 벗어났습니다.
image_typeimage_too_largeimage_no_sizeimage_fetch_failed바이트로 본 형식이 PNG·JPEG·GIF·WebP가 아니거나, 2,097,152바이트를 넘거나, 앞 256KB 안에서 크기를 읽지 못했거나, 받지 못했습니다.
asset_other_originasset_invalid이미지가 다른 출처의 절대 주소이거나 올바른 URL이 아닙니다.
draft"draft": true입니다. 수집하지 않습니다.
경고
description_long설명이 260자를 넘습니다.
gallery_few갤러리가 3장보다 적습니다.
gallery_narrow갤러리 이미지 너비가 1270px보다 좁습니다.
video_missing데모 영상이 없습니다.
first_comment_missingfirstComment가 없습니다.
i18n_ko_missingi18n.ko의 tagline, description, firstComment 중 빈 것이 있습니다. 한국어 페이지에는 영어 값이 나갑니다.
makers_alone제출자 말고 다른 메이커가 없습니다.
ph_tag_unknownphTags 값이 내장 PH 태그 목록에 없습니다.
promo_expiredpromo.expires가 지났습니다.
pricing_missingpricing이 없습니다.
이미지 검사(형식, 크기, 가로세로)는 배포된 사이트를 검사할 때만 합니다. 초안만 넘기면 필드 규칙만 봅니다.