Open Net Worth
Open Net Worth는 직접 운영하는 오픈소스 개인 AI 자산 비서로, 전체 재무를 하나의 원장에 기록하고 사용자가 제어하는 AI가 관리
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
메이커가 쓴 소개는 위의 한 줄이 전부입니다. 더 자세한 내용은 저장소 README에서 읽을 수 있습니다. 저장소 README ↗
README 전체를 불러오는 중입니다.
README 전문 보기 ↗개인 웹사이트 + 퀀트 대시보드 (Next.js 16). 오른쪽 위 EN / 한국어 버튼으로 언어를 바꾼다 (쿠키에 1년 저장).
/ — 홈 (프로젝트 목록). 이름(SC)·프로젝트는 content/profile.ts 한 파일만 고치면 된다 (한국어·영어 둘 다)./quant — 오늘: PT-1 보유 종목·매도선, $5,000 계좌 vs 같은 날 SPY, 청산 성적, 다른 계좌, 후보 상위 5/quant/candidates — 스크리너 매수 후보 (필터 + 상세 + 차트)/quant/charts — 구글 시트 '차트분석' 탭처럼 종목별 차트를 아래로 쭉/quant/stock/<티커> — 종목 상세: 스크리너 판단, 재무(매출·이익 성장, 마진, ROE, 현금흐름…), 내부자 거래 90일, 패턴, 차트/quant/account — 내계좌: 구글 시트 '내계좌' 탭과 양방향 연결 (비밀번호 필요)이 리포에는 데이터가 없다. Project_1 의 매일 CI 가
python -m web_export.dashboard 로 dashboard.json 을 만들어 dashboard-data 브랜치에 덮어쓰고,
차트 캡처는 원래대로 screenshots-sp500 / screenshots-nasdaq 브랜치에 올린다.
이 사이트는 그 GitHub raw 주소만 읽는다. CI 가 끝나면 /api/revalidate 를 불러 캐시를 바로 비우고,
그게 실패해도 30분마다 새로 받는다. 그래서 두 리포의 배포는 서로 엮이지 않는다.
Project_1 (매일 CI) ──► dashboard-data 브랜치 / screenshots-* 브랜치 ──► 이 사이트가 읽기만 함
└─► POST /api/revalidate (REVALIDATE_SECRET) ──► 캐시 비움
내계좌만 예외 — 사이트가 구글 시트 '내계좌' 탭을 직접 읽고 쓴다 (서비스 계정, lib/sheets.ts).
웹에서 추가·수정·삭제하면 시트에 바로 쓰고, 시트에서 고친 값은 페이지를 새로고침하면 보인다.
웹은 입력 칸(티커·회사명·거래소·섹터·매수가·수량·매수일·메모)만 쓰고, 현재가·RSI 같은 분석 칸은
Project_1 이 매일 밤 채운다. 수정·삭제 직전에 그 줄이 아직 같은 종목인지 다시 확인해서, 그 사이 시트가 바뀌었으면 거절한다.
npm install
# Project_1 폴더에서 개발용 데이터 만들기 (차트 목록은 원격 스크린샷 브랜치에서 읽는다)
cd ../Project_1/Project_1
git fetch origin screenshots-sp500 screenshots-nasdaq
CI=1 PYTHONPATH=.:src .venv/bin/python -m web_export.dashboard \
--out ../../personal-site/dev-data/dashboard.json --charts-from-git
cd -
npm run dev # http://localhost:3000
.env.local 의 DASHBOARD_FILE=./dev-data/dashboard.json 이 있으면 파일에서, 없으면 GitHub 에서 읽는다.
(CI=1 은 Project_1 의 data/cache 에 일봉 캐시를 쓰지 않게 하려는 것. 내부자 거래는 이미 받아 둔 캐시만 읽는다)
<프로젝트이름>.vercel.app 가 생긴다. 이후 main 에 push 하면 자동 배포.이 리포 Actions → Deploy site → Run workflow 에서 고른다.
| mode | 하는 일 | 필요한 Secret |
|---|---|---|
refresh-data | 사이트 캐시만 비워 최신 dashboard.json 을 바로 보여 준다 (몇 초) | REVALIDATE_SECRET |
redeploy | Vercel 에 다시 빌드·배포를 시킨다 (1~2분) | VERCEL_DEPLOY_HOOK (Vercel → Settings → Git → Deploy Hooks) |
| 이름 | 설명 |
|---|---|
REVALIDATE_SECRET | /api/revalidate 키. Project_1 GitHub Secret·이 리포 Secret 과 같은 값 |
SITE_PASSWORD | 내계좌 비밀번호 (브라우저 기본 로그인 창, 아이디는 아무거나). 없으면 내계좌는 열리지 않는다 |
GOOGLE_SERVICE_ACCOUNT_JSON | 구글 서비스 계정 JSON 전체 (Project_1 CI 와 같은 계정). 내계좌 시트 읽기·쓰기 |
GOOGLE_SHEETS_SPREADSHEET_ID | (선택) 시트 ID. 비우면 Project_1 config 의 ID |
DASHBOARD_URL | (선택) 데이터 주소. 비우면 sean-ccho/Project_1 의 dashboard-data 브랜치 |
DASHBOARD_FILE | 로컬 파일에서 읽기 (개발용) |
SHEETS_API_BASE | 로컬 시험에서 가짜 Sheets 서버로 바꿀 때만 |
참고: dashboard.json 과 차트 이미지는 공개 리포(Project_1)에 있으므로 주소를 알면 누구나 볼 수 있다.
비밀번호는 내계좌(실제 보유 종목)만 가린다 — 내계좌 데이터는 구글 시트에만 있고 공개 리포에는 없다.
app/ 페이지 (layout, 홈, quant/*, quant/account 의 서버 액션, api/revalidate)
components/ 화면 부품 (보유 종목 패널, 평가액 차트, 후보·차트 보기, 내계좌 표, 언어 버튼 …)
lib/ 데이터 타입·불러오기·숫자 표시, i18n(문구), sheets(구글 시트), account(내계좌 줄)
content/ 홈 화면 내용
proxy.ts /quant/account 비밀번호 (Next.js 16 에서 middleware → proxy 로 이름이 바뀜)
.github/workflows/deploy.yml 손으로 갱신·배포