Go to file
jwkim cb7c463f98 feat(generator): AI브리핑 폴링 안정화 + 리뷰 요약 폴백 + 브랜드 로고 (shorts_all 동기화)
- naver.py: AI 브리핑이 하단 lazy-load 되는 특성 반영 — 섹션을 뷰에 올려
  본문 불릿이 실제 로드될 때까지 스크롤·폴링(간헐 빈결과 수정).
  리뷰 크롤·요약 함수(fetch_reviews/summarize_reviews) 추가.
- main.py(3): AI 브리핑이 없는 가게는 방문자 리뷰를 긁어 Gemini로 요약해
  소재로 사용하는 폴백 추가.
- 각 엔진 fonts/brand_logo.png 추가(상단 밴드 제목 옆 로고 — 렌더에 필요).
- emile 잔여물(generator/data/emile_*) 제거.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-07-15 09:08:56 +09:00
backend feat(generator): AI브리핑 폴링 안정화 + 리뷰 요약 폴백 + 브랜드 로고 (shorts_all 동기화) 2026-07-15 09:08:56 +09:00
frontend fix: 네이버 가게명 추출(og:title) + 뷰어 재생바 노출 + 생성 진행 UI 단순화 2026-07-08 16:56:06 +09:00
.gitignore init: 썰박스(SSULBOX) 마케팅 쇼츠 플랫폼 2026-07-08 14:55:47 +09:00
README.md init: 썰박스(SSULBOX) 마케팅 쇼츠 플랫폼 2026-07-08 14:55:47 +09:00

README.md

o2o-ssulbox — 썰박스

병맛 역사 썰툰(썰박스) 마케팅 쇼츠 플랫폼. 네이버 링크/업장명만 넣으면 조선왕·삼국지·그리스로마신화 시나리오로 AI가 대본→그림→목소리→영상을 자동 생성한다. 인스타 느낌의 모바일 전용 UI(웹은 좌측 사이드바) + 계정/좋아요/댓글/크레딧 소셜 레이어.

o2o-ssulbox/
├── frontend/            React + Vite + TypeScript + Tailwind (모바일 전용 반응형)
│   └── src/             App · components · api(백엔드 /api 연동) · data · icons
└── backend/             FastAPI + SQLAlchemy(async) — API 전용
    ├── app/
    │   ├── main.py          앱·라우터·lifespan(테이블 생성 + output 동기화)
    │   ├── config.py        설정(개발 DB=SQLite, JWT, NAVER, 크레딧)
    │   ├── database.py      async 세션 + Base + TimestampMixin
    │   ├── models.py        User·Content·Like·Comment·CreditTransaction·SocialAccount
    │   ├── deps.py          현재 사용자(필수/선택) + 페이지네이션
    │   ├── security.py      JWT 발급/검증
    │   ├── credit_service.py 크레딧 충전/차감(원장)
    │   ├── content_sync.py  output 스캔 → content 반영
    │   ├── jobs.py          생성 잡(subprocess → 내장 generator)
    │   └── routers/         auth · content(피드/생성/좋아요/자동완성) · comments · credit · sns
    └── generator/           ★생성 엔진 내장(vendored, 외부 shorts_all 참조 없음)
        ├── naver.py media.py           공유 크롤러/툴박스(1벌)
        ├── fonts/ bgm/                 공용 폰트·BGM(1벌 — 3엔진 공유)
        ├── animation/                  조선왕      (character/ data/ = 시나리오별)
        ├── animation_samgukji/         삼국지
        └── animation_greekroman/       그리스로마신화

기능 (castad 백엔드에서 포팅)

  • 인증 — JWT(액세스/리프레시). 개발용 dev-login(카카오 없이). 카카오는 키 설정 후 활성.
  • 피드 — output 기반, 정렬(최신/좋아요) + 페이지네이션.
  • 좋아요 / 2-depth 댓글 — 로그인 사용자 기준.
  • 크레딧 — 가입 지급 + 영상 1편당 차감(원장 기록). 채널의 "남은 크레딧"과 연동.
  • 업장명 자동완성 — 네이버 지역검색(키 설정 시).
  • SNS 연동 — 유튜브/인스타 계정 연결·업로드(구조/엔드포인트, OAuth 키 설정 후 활성).

실행

1) 백엔드 (FastAPI, :8000)

cd backend
pip install -r requirements.txt          # sqlalchemy, aiosqlite, python-jose, ...
# GEMINI_API_KEY 는 환경변수 또는 backend/.env (예시: .env.example)
python -m uvicorn app.main:app --reload --port 8000

DB는 개발 기본 SQLite(backend/ssulbox.db, 자동 생성). 첫 실행 시 output 폴더를 스캔해 피드를 채운다.

2) 프론트 (Vite dev, :5173)

cd frontend
npm install
npm run dev            # /api·/videos 는 :8000 으로 프록시

브라우저 http://localhost:5173. 데스크톱은 좌측 사이드바, 모바일 폭에선 하단 탭바로 전환.

남은 설정(키 필요)

  • 카카오 로그인: KAKAO_* — 지금은 dev-login 사용.
  • 네이버 자동완성: NAVER_CLIENT_ID/SECRET.
  • SNS 업로드: 유튜브(Google OAuth)·인스타(Graph API) 앱 키.
  • 운영 DB: DATABASE_URL 로 MySQL 지정(패턴은 castad와 동일해 전환 용이). 좋아요는 필요 시 Redis write-behind로 확장 가능.