Skip to content
Role
Founder – 기획 · 디자인 · 풀스택 · 운영
Team
1인
Period
2026.06 – 2026.07
Tools
Next.js, TypeScript, Supabase, Python, Tailwind, Figma

창업지원 공고 × 익명 빌더 커뮤니티

Commit

요약

정부 창업지원 공고를 매일 모아 정리하는 파이프라인 위에 익명 빌더 커뮤니티를 얹어, '공고 발견 → 아이디어 검증 → 실행 기록'을 한 앱에서 잇는 모바일 우선 웹앱. 디자이너 혼자 AI 페어코딩으로 만들었습니다.

28일
기획부터 출시까지

커밋 264개 (2026.06.16 – 07.13)

11,757
누적 수집 공고

2026.09.06 기준

₩0
월 인프라 비용

외부 유료 API 없이

역할 – 기획 · 디자인 · 프론트엔드 · 백엔드 · 데이터 파이프라인 · 운영 (1인)

1 / 6
Commit 기능 소개 영상(51초) – 라이브 서비스를 휴대폰 화면 그대로 녹화했습니다. 피드 · 공고 모아보기 · 분야 필터 · 마감 임박순 정렬 · 공고 상세와 AI 요약 · 통합 검색.

개요

Commit은 창업지원 공고를 기관 계정이 올린 글처럼 다룹니다. 공고 목록과 커뮤니티 피드가 같은 골격을 쓰고, 기관 페이지는 사람의 프로필과 같은 컴포넌트로 그려집니다. 공고를 발견하고, 익명으로 아이디어를 검증받고, 실행을 기록하는 일이 하나의 타임라인에서 이어집니다.

라이브: commit.ai.kr

문제

공고를 찾는 일부터 이미 어렵습니다.

  • 출처가 흩어져 있다 – 운영 DB 기준 기관 표기만 1,722종입니다.
  • 원문이 지저분하다 – 기관명 중복, 인코딩이 깨진 "?", 제목 앞의 "(재공고)(연장)" 같은 괄호.
  • 금액이 없다 – 공고 API에는 지원금액이 없고, 금액은 별도의 사업정보 API에만 있습니다.
  • 정렬이 맞지 않다 – 대부분의 목록은 등록순인데, 공고에서 중요한 것은 마감일입니다.
  • 찾은 다음이 없다 – 실명 커뮤니티에는 설익은 아이디어를 올리기 어렵습니다.

리서치

K-Startup, 기업마당, 링커리어·위비티, 아웃스탠딩·플래텀, 디스콰이엇, 인디해커스·Product Hunt, 노션을 한 표에 놓고 비교했습니다. 결론은 "아무도 안 한다"가 아니라 "통합이 비어 있다" 였습니다. 공고를 모으는 곳, 창업 뉴스를 쓰는 곳, 만드는 과정을 공유하는 곳은 각각 있지만, 셋을 잇는 곳은 없었습니다.

데이터를 직접 들여다보며 찾은 것도 있습니다. 창업 기간·연령 필드가 "가능한 범위 전체"를 나열하는 경우가 많아, 그대로 태그를 붙이면 모든 공고에 모든 태그가 붙었습니다.

핵심 결정

  1. 01공고를 '기관 계정이 올린 글'로 다룬다

    공고 탐색과 커뮤니티를 따로 만들 이유가 없어집니다. 사람과 기관이 같은 규칙으로 글을 쓰고, 팔로우되고, 저장됩니다.

    공고 목록과 피드가 같은 컴포넌트 골격을 씁니다. 기관 페이지는 프로필 헤드를 재사용하고, 팔로우·북마크·신고도 같은 방식으로 동작합니다.

  2. 02커뮤니티 중심에서 공고 중심으로 방향을 바꾼다

    검색으로 들어오는 사람이 찾는 것은 공고였습니다. 커뮤니티는 사람이 있어야 성립하지만, 공고는 크롤러만 있으면 성립합니다.

    멘토, 수요 검증 게이트, 빌드 스코어, 광고 삽입을 걷어냈습니다. 홈은 로그인 없이 공개하고 글쓰기 같은 행동에서만 로그인을 요구해, 검색 색인 문제를 함께 풀었습니다.

  3. 03커버리지보다 정확도

    틀린 금액 하나가 맞는 금액 여러 개보다 신뢰를 더 깎는다고 봤습니다.

    금액은 확실히 매칭되는 공고에만 표시합니다 – 11,757건 중 2,595건(22.1%). 기관 로고도 파비콘 서비스가 빈 아이콘을 '성공'으로 돌려주는 문제 때문에, 손으로 확인한 로고 116곳만 씁니다.

  4. 04익명성을 약속이 아니라 스키마로 보장한다

    운영자가 마음먹어도 실명을 노출할 수 없어야 익명 커뮤니티를 믿을 수 있습니다.

    모든 테이블에 행 단위 권한(RLS)을 처음부터 걸고, 작성자 식별 정보가 빠진 공개 뷰로만 글을 읽게 했습니다. 개인정보 컬럼은 컬럼 단위 권한으로 막았습니다. 여러 사용자가 신고하면 글이 자동으로 숨겨집니다.

디자인

"토스의 정보 위계 + Threads의 타임라인." 파랑은 행동, 초록은 살아 있음을 뜻하고, 임의의 값은 쓰지 않습니다.

  • 토큰 – 타입 7단(11 / 12 / 13 / 15 / 17 / 20 / 24), 버튼 36 / 44 / 48, 라운드 8 / 12 / 16 / full, 색 토큰 15종 × 라이트·다크 2테마, Pretendard 한 가지 서체에 자간 −0.02em.
  • 행동 색과 링크 색을 나눴다 – 강조 파랑을 바꾸자 본문 속 파란 링크의 가독성이 떨어져, 버튼의 색과 글 속 링크의 색을 분리했습니다.
  • 반응형 세 벌 – 768px 미만 / 768px 이상 / 1280px 이상. 가운데 콘텐츠 640px, 오른쪽 레일 360px. 모바일 탭 타깃은 36px에서 44px로 키웠습니다.

개발

수집 파이프라인

Python 크롤러가 매일 공고를 모아 7단계로 정리합니다. 제목은 정규식 5단계로 다듬고, 같은 규칙을 과거 데이터에도 소급 적용했습니다. 알림은 고유 키로 중복 발송을 막고, 매 실행을 하트비트로 기록해 36시간 넘게 수집이 없으면 경보가 울립니다. GitHub Actions로 돌고, 추가 비용은 없습니다.

데이터베이스와 검색

Supabase(PostgreSQL) 위에 테이블 24개, 뷰·RPC 12개. 검색은 3단계로 쌓았습니다: 오타에 강한 트라이그램 검색 → pgvector 의미 검색(내장 임베딩 모델 gte-small) → 자동완성과 맞춤 가중치. RPC가 실패하면 클라이언트 쪽 결과로 대신합니다.

한계도 분명히 적어 둡니다. LLM 호출은 없습니다 – 공고 요약과 자격 진단은 규칙 기반입니다. 외부 유료 API를 썼다면 비용 때문에 검색 기능 자체를 넣지 못했을 것입니다.

규모와 시행착오

28일 동안 938개 파일이 바뀌었고(+27,927 / −6,233줄), 코드는 118개 파일 · 10,536줄, 컴포넌트 47개입니다. 시행착오 13건을 기록했습니다 – 피드에 4일치만 보이던 limit 문제, UTC와 한국 시간의 날짜 어긋남, 광고 스크립트가 미리 불러오기로만 들어가 소유권 확인이 실패한 문제 등.

출시 · 결과

11,757
누적 공고
250
지금 지원 가능한 공고
22.1%
금액이 확인된 공고

사람이 개입하는 지점

  • 자동 – Python 크롤러가 매일 공고를 모아 7단계로 정리하고, 매 실행을 하트비트로 기록합니다. 36시간 넘게 수집이 없으면 알립니다.
  • 사람 – 금액 매칭은 커버리지보다 정확도를 택했습니다. 규칙이 확신하지 못하는 공고는 숫자를 비워 두고, 사람이 원문을 보게 합니다(22.1%).
  • 아예 안 맡긴 것 – 런타임에 LLM을 부르지 않습니다. 틀릴 수 있는 자리를 만들지 않는 편이, 틀린 답을 고치는 것보다 쌉니다.

회고

  • RLS는 '어떤 행'만 통제한다. '어떤 컬럼'은 GRANT의 일이다. 익명성을 스키마로 보장하려다 배운 것입니다.
  • 외부 의존이 죽어도 화면은 살아야 한다. 검색 RPC, 로고, 금액 매칭 모두 실패했을 때의 모습을 먼저 설계했습니다.
  • 다음 할 일 – 사용자 10명에서 100명으로. 그리고 쌓인 빚: 테스트 코드 0개, 마이그레이션만으로 재현되지 않는 원격 DB, 공고 출처가 K-Startup 하나뿐이라는 점.