尚未检测到更新。GitHub 发布版本后会显示在这里。
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证制作者的介绍仅有上面的一句话。 更多详情请阅读仓库 README。 仓库 README ↗
正在加载完整 README。
查看完整 README ↗금융공기업·공공기관·공제회·중앙회·시중은행 채용 일정(서류 마감·필기·면접·발표)을 한 달력에서 보여주는 웹사이트입니다.
npm install
npm run dev # http://localhost:3000
npm run build # 프로덕션 빌드
npm run start # 빌드 결과 실행
src/
├─ app/ # 페이지 (Next.js App Router)
│ ├─ page.tsx # 메인: 임박 일정 + 달력 + 사이드바
│ ├─ companies/ # 기관 비교표, 기관 상세(/companies/[id])
│ ├─ board/ # 콩밭: 익명 게시판 (목록·글·글쓰기·수정·운영정책) + actions.ts
│ ├─ reviews/ # 필기 후기: 시험별 간편 투표·결과 그래프 + actions.ts
│ ├─ magazine/ # 매거진: 데일리 브리핑(/magazine)·금융 블로그(/magazine/blog)·글·RSS + actions.ts
│ ├─ admin/ # 운영자 콘솔(대시보드·매거진 편집·AI 검토 제안·콘텐츠 관리) + actions
│ ├─ api/ # 방문 수집, 파일 업로드, 자동 점검(/api/automation/*)
│ ├─ about/, privacy/ # 서비스 소개, 개인정보처리방침 (애드센스 필수)
│ ├─ sitemap.ts, robots.ts # 검색엔진용
│ └─ ads.txt/route.ts # 애드센스 ads.txt 자동 생성
├─ components/
│ ├─ calendar/ # 달력, 필터, 임박 일정, 사이드바
│ ├─ company/ # 기관 상세 패널, 타임라인, 필기·자소서 섹션
│ ├─ board/, reviews/ # 게시판·후기 화면 조각 (폼, 첨부, 표, 그래프, 운영자 버튼)
│ ├─ magazine/ # 매거진 본문 렌더러(Markdown.tsx), 섹션 탭·카드, 읽기 진행·저장
│ └─ ads/AdSlot.tsx # 광고 슬롯 (미설정 시 개발 모드에서 자리표시)
├─ data/
│ ├─ companies.ts # 기관 정보: 블라인드, 필기 구성, 경쟁률
│ └─ recruitments.ts # 채용 일정, 직렬, 자소서 항목
└─ lib/ # 타입, 날짜 유틸, 표시용 메타데이터
└─ server/ # DB 연결·스키마, 보안(IP 해시·비밀번호·운영자 세션·도배 방지), 조회 함수
/admin/login에서 로그인하면 글·댓글에 '운영자' 배지가 붙고, 공지 고정·간단한 서식(## 소제목, 굵게, - 목록, > 인용, 링크)을 쓸 수 있습니다. '운영자·관리자·금콩'이 들어간 닉네임은 일반 이용자가 쓸 수 없습니다./reviews/[기관id-날짜]), 시험일이 지나면 투표가 열립니다. 브라우저당 1회(쿠키) + 같은 IP 최대 3명으로 중복을 막고, 다시 내면 수정됩니다.
PRIORITY_DAYS) 동안은 잠급니다. 미응시자는 요약이면 충분해 아무렇게나 답할 이유가 적고, 응시자는 남들과 비교해 보려면 후기를 남기게 됩니다. 운영자는 시험 페이지 위 '방문자 화면으로 보기'(?as=visitor)로 잠긴 화면을 확인할 수 있어요.exam_talk.company_id) — 필기 후기 페이지(시험 사흘 전부터)와 기관 정보 페이지가 같은 방이고, 시험 페이지에서 쓴 글엔 '10.17 필기시험' 꼬리표. 이름은 브라우저마다 '노란콩 #27'처럼 자동, 그 기관 필기에 후기를 남긴 사람은 ✓응시. 몇 초마다 최근 목록을 서버와 맞추는 방식이라(TALK_POLL_MS, /api/talk/[기관id]) 나중에 실시간 채팅으로 바꿀 때 그 부분만 바꾸면 돼요. 금칙어·링크 1개·4초 도배 방지·차단·신고 누적 자동 가림. 운영자는 톡에서 바로 가리기('운영자에 의해 가려진 메시지')·삭제·'금콩 운영자'로 쓰기, 관리자 '실시간 톡'에서 골라서 일괄 처리.src/components/CategoryChips.tsx의 PRIMARY_CATEGORIES).src/components/feedback/Feedback.tsx)을 엽니다. 내용·근거 링크·보낸 화면이 feedback 테이블에 쌓이고 /admin의 '제보·의견'에서 처리 완료/삭제합니다(처리하면 답변용 이메일은 지워짐). 운영자로 로그인하면 콩밭 상단 띠에 '새 제보 N' 배지가 보입니다.data/uploads/ (src/lib/server/storage.ts). 운영자가 글을 완전 삭제하면 첨부도 지웁니다./board?company=fss)./admin에서 복구·삭제./admin)/admin/login에서 로그인하면 쓸 수 있습니다 (src/app/admin/(console)/).
| 메뉴 | 하는 일 |
|---|---|
| 대시보드 | 지금 접속자, 오늘·7일 방문자, 처리할 제보·신고, 최근 글·후기, 일정 데이터 빈 곳 요약 |
| 방문 통계 | 방문자·조회수·방문 횟수·머문 시간(화면이 보인 시간), 일별 그래프, 많이 본 페이지, 메뉴별 조회, 기기, 유입 경로 |
| 제보·의견 / 신고 | 받은 제보 처리 완료·삭제, 신고된 글·댓글·후기 처리 |
| 콩밭 글 / 댓글 / 필기 후기 | 전체 목록 검색·상태별 보기, 숨김·복구·삭제·완전 삭제(삭제됨 상태만)·공지 고정, 여러 개 선택해 한 번에 처리, 같은 작성자 모아 보기 |
| 차단 목록 | '작성자 차단'한 사람(IP 해시) 관리 — 차단되면 글·댓글·후기·신고 불가 (의견 보내기는 가능) |
| 일정 데이터 점검 | 필기 날짜 없음·지난 회차만·출처 약함 등 채용 데이터 빈 곳 목록 |
| 매거진 | 글쓰기·편집(서식 도구, 사진 업로드, 실시간 미리보기, 틀 불러오기, 자동 보관, Ctrl+S), 임시저장·바로 공개·예약 발행, 에디터 추천, 자동 초안 검토 |
| AI 검토 제안 | 매일 자동 점검이 올린 일정 수정·제보 처리 제안을 '지금 사이트 vs 제안' 비교와 근거 링크로 보고 승인·거절 |
방문 통계는 외부 서비스 없이 자체 수집합니다 (src/components/analytics/Tracker.tsx → /api/collect → page_views 테이블). IP는 저장하지 않고 브라우저별 무작위 ID로만 방문자를 구분하며, 운영자 본인 방문·검색 로봇·/admin 페이지는 세지 않습니다. 기록은 400일 뒤 자동 정리됩니다.
| 이름 | 설명 |
|---|---|
DATABASE_URL | 로컬은 file:data/kumkong.db(자동 생성). 배포 시 Turso 주소 libsql://… |
DATABASE_AUTH_TOKEN | Turso 토큰 (로컬 파일 DB는 불필요) |
ADMIN_PASSWORD | 운영자 로그인 비밀번호 |
ADMIN_SECRET | 운영자 세션 서명 키 (16자 이상 무작위 문자열) |
IP_SALT | IP 해시용 무작위 문자열 (한 번 정하면 바꾸지 마세요 — 바꾸면 중복 방지 기록이 초기화됨) |
BLOB_READ_WRITE_TOKEN | 첨부·매거진 사진 저장소. Vercel → Storage → Blob 을 프로젝트에 연결하면 자동으로 들어감 (로컬은 불필요) |
AUTOMATION_TOKEN | 자동 점검 에이전트가 /api/automation/* 를 부를 때 쓰는 토큰 (24자 이상) |
GITHUB_TOKEN | (선택) 승인한 일정 수정을 바로 커밋할 fine-grained 토큰 — 이 저장소 Contents 읽기·쓰기만 |
로컬 개발용 값은 .env.local에 이미 무작위로 만들어 두었습니다. 운영자 비밀번호는 그 파일에서 확인하고, 배포할 때는 새 값으로 바꿔 Vercel 환경변수에 넣으세요.
Vercel 같은 서버리스 환경은 파일이 유지되지 않으므로 로컬 SQLite 파일 대신 Turso(SQLite 호환, 무료 플랜 있음)를 씁니다.
turso db create kumkong
turso db show kumkong --url # → DATABASE_URL
turso db tokens create kumkong # → DATABASE_AUTH_TOKEN
테이블은 첫 요청 때 자동으로 만들어집니다(src/lib/server/db.ts의 SCHEMA).
libsql://…)와 토큰을 발급받습니다 (대시보드에서도 가능)..env.vercel(gitignore 대상, 운영용 무작위 값이 들어 있음)에 Turso 주소·토큰과 운영자 비밀번호를 채웁니다..env.vercel 내용을 붙여 넣습니다 (Import .env 가능).DB가 없거나 연결에 실패해도 사이트 전체가 멈추지 않습니다. 달력·기관 정보는 그대로 보이고, 콩밭·필기 후기 영역만 '준비하고 있어요' 또는 '다시 시도' 안내로 바뀝니다 (src/components/db/DbSection.tsx).
/magazine)리텐션의 중심 섹션입니다. 위쪽 탭으로 두 섹션이 나뉩니다.
/magazine): 첫 화면은 오늘의 브리핑 대표 카드(금콩 브리핑(아침판)·금콩 스터디(점심판)를 7초마다 번갈아, 썸네일 안의 화살표·점으로 넘기기(휴대폰은 밀어서도) / 위 표지 썸네일(날짜·예상 소요 시간 최대 5분)·아래 헤드라인, 누르면 그 호로)와 옆의 많이 본 기사(카드 높이에 맞춰 6건), 오늘의 용어·면접 질문과 '최근 브리핑'(앞의 이틀, 카드/목록), 지난 브리핑으로 가는 버튼. 브리핑 한 호는 날짜·판(아침판/금콩 스터디 — 점심판, 주소는 noon)마다 한 편의 뉴스레터(briefing_issues, 주소 /magazine/letter/YYYY-MM-DD/morning|noon) — 아침판은 로고(콩이·'금콩 브리핑'·판 스티커) → 오늘의 흐름 → 오늘 꼭 알아야 할 3가지 → 시간표 → 기사 6/magazine/archive)은 기간으로 호를 찾고 카테고리를 고르면 기사별로 봅니다. 운영자는 /admin/news에서 호마다 미리보기로 확인하고 '발행'(실린 기사도 함께 공개) — 아침판 퀴즈도 거기서 고칠 수 있어요. 사진은 운영자가 직접 올린 파일만(언론사 사진은 저작권 때문에 쓰지 않음)./magazine/blog): 필기 · 금공 지식 · 입문 가이드 · 면접 · 현직자 이야기. 위쪽 주제 칩 하나로 분류하고, 에디터 추천 1편 → 전체 글(최신순/인기순, 카드/목록 보기 — 고른 보기는 기억) → 옆에 많이 읽은 글. 운영자는 /admin/magazine에서 씁니다. 합격 수기·웹툰은 숨김(hidden) — src/lib/magazine-meta.ts 에서 켤 수 있습니다./magazine/rss.xml). 글별 조회수·도움돼요와 방문 통계는 운영자 화면에서 봅니다.## 소제목, **굵게**, ==형광펜==, 목록·체크리스트, > [!팁] 제목(팁·주의·요약·포인트·용어·메모 상자), 표, , 출처: [언론사](주소) — src/components/magazine/Markdown.tsx (HTML 을 그대로 넣지 않는 안전한 렌더러)/guide)는 금융 블로그 첫 글로 옮겼고, 주소는 /magazine으로 넘어갑니다.src/lib/postings.ts). 마우스를 올리면 멈추고, '움직임 줄이기' 설정이면 흐르지 않습니다.public/og/kumkong.png (1200×630). 카카오톡은 한 번 읽은 미리보기를 한동안 저장하므로, 바꾼 뒤에는 카카오 공유 디버거에서 주소를 넣고 '캐시 초기화'를 누르세요.Claude 클라우드 루틴이 scripts/automation/ROUTINE.md 지침대로 실행됩니다. 사이트를 직접 바꾸지 않고, 판단을 운영자 화면에 올립니다.
| 루틴 | 한국 시간 | 하는 일 |
|---|---|---|
| 점검 | 매일 06:30 · 12:00 · 20:00 | 승인된 일정 반영 → 새 제보 판단 → 빈 곳 있는 기관 최대 5곳 조사(72시간 안에 본 곳은 건너뜀) → 제안 |
| 금콩 브리핑(아침판) | 매일 06:00 | 기사 브리핑 초안 한 호 — 기사 6 |
| 금콩 스터디(점심판) | 매일 12:30 | 점심 공부 초안 한 호 — 오늘 아침판 기사로 숫자 3·용어 2~3(+짝꿍 비교)·논술 한 문단·면접 질문·O/X 3문제 |
/api/automation/inbox 에서 새 제보·데이터 빈 곳·최근 점검 기록·사흘 안의 채용 일정·승인된 건을 받아옵니다 (제보의 연락처·IP 는 주지 않음).apply-updates.mjs --preview). 출처 없는 날짜는 만들지 않습니다./admin/news에서 미리보기로 확인한 뒤 발행합니다 (/api/automation/issue, 금콩 스터디는 GET 으로 그날 아침판 기사를 받아 씀).
thumb): 금콩 브리핑은 그날 뉴스 주제 그림(scene: 증시·금리·환율·유가·부동산·물가·보안·반도체·무역·국채·인물 발언·기본)이 칸을 채우고 제목은 왼쪽 아래 상자(bubble·caption). 인물 발언(speech)이면 콩이가 그 인물로 변장(costume)해 연단에서 말풍선으로 말하고, 다른 그림에서도 kong(auto: 분위기가 뚜렷한 날 그림 주제 옷을 입고 반응 · on · off)으로 유연하게 등장. 금콩 스터디는 공책 템플릿 + 오늘의 논술 주제(topic). 인물 발언 말풍선은 그 판 기사에 그대로 실린 문장일 때만 받습니다(아니면 빼고 warnings). 운영자는 편집 화면의 '썸네일'에서 미리 보며 고치거나 그림을 올리고, 시사 뉴스 화면 표지(기본 / 공유 썸네일과 같은 그림 / 올린 그림)도 고릅니다./admin/proposals에서 승인하면: GITHUB_TOKEN이 있으면 즉시 recruitment-updates.json에 커밋 → Vercel 재배포(1~2분), 없으면 다음 점검 때 루틴이 커밋합니다.루틴 환경(claude.ai → 루틴 → 환경 설정)에는 KUMKONG_SITE_URL(사이트 주소)과 AUTOMATION_TOKEN을 넣고, 네트워크 접근은 기관 사이트·뉴스를 조사할 수 있게 Full 로 둡니다(기본 허용 목록은 *.vercel.app을 막습니다).
일정은 src/data/recruitments.ts, 기관 정보는 src/data/companies.ts에서 수정합니다.
status: "confirmed" — 올해 공고로 확인된 일정 (달력에 실선 칩)status: "expected" — 공고 전 전년도 기준 예상 일정 (달력에 점선 칩, '예상' 표시)YYYY-MM-DD(한국 시간), 기간은 endDate, 마감 시각은 time: "18:00"label로 구분합니다 (예: "1차 면접 ① 집단토론").sourceUrl·confidence(high = 공고문 원문 대조)를 넣으면 화면에 출처와 검증 수준이 표시됩니다.직접 정리한 기관(src/data/*.ts) 외의 기관은 리서치 JSON을 병합해 src/data/generated/*.json으로 만듭니다.
node scripts/merge-research.mjs research1.json research2.json --report report.txt
날짜 형식, 전형 순서 역전, 라벨 없는 중복 단계, 경쟁률(지원자÷채용) 불일치를 자동 검사하고 확인할 항목을 리포트로 남깁니다.
필기 날짜 추가, 새 하반기 공고 반영처럼 일부 기관만 고칠 때는 업데이트 파일을 씁니다.
node scripts/apply-updates.mjs updates1.json updates2.json --report report.txt
입력은 [{ id, found, isNewCycle, recruitment: { title, period, events, tracks, ... }, verification: { primarySource, confidence }, changes }] 형식이고, 결과는 src/data/generated/recruitment-updates.json에 쌓입니다. 화면에는 이 파일이 직접 정리한 데이터·리서치 데이터보다 우선합니다. 일정은 새로 확인한 목록으로 바뀌고, 직렬·인원·자소서 문항은 새 값이 없으면 기존 값을 유지합니다. 기존 일정이 빠지거나 출처가 충돌하면 리포트에 남습니다.
node --use-system-ca scripts/fetch-logos.mjs # 로고 없는 기관만
node --use-system-ca scripts/fetch-logos.mjs --only lh,ex
node scripts/promote-wide-logos.mjs # 정사각형에 가까운 가로형 로고를 아바타로도 사용
공식 홈페이지 아이콘과 scripts/logo-sources.json(기관 공식 CI 페이지의 심볼 이미지 URL·잘라낼 영역)을 바탕으로 public/logos/에 128px PNG를 만듭니다. 로고는 각 기관의 상표이며 기관 식별 목적으로만 표시합니다. 정식 서비스 전에는 기관별 CI 사용 지침을 확인하세요.
.env.example을 .env.local로 복사해 NEXT_PUBLIC_ADSENSE_CLIENT와 슬롯 ID 입력/ads.txt는 퍼블리셔 ID로 자동 생성됩니다광고 위치: 임박 일정 아래 배너, 사이드바 사각형 + 스크롤 고정형, 목록 보기 인피드, 기관 상세 본문 중간·하단, 콩밭 목록 인피드(10번째 글 뒤)·글 본문 아래, 필기 후기 목록 인피드·결과 그래프 아래. 기관 상세 패널(팝업) 안에는 정책상 광고를 넣지 않았습니다.
Vercel에 저장소를 연결하면 별도 설정 없이 배포됩니다. 환경변수는 Vercel 프로젝트 설정에 입력하세요.