{"id":28725510,"url":"https://github.com/ppochaco/unsolved.ac","last_synced_at":"2026-04-14T15:32:07.367Z","repository":{"id":298338317,"uuid":"995874015","full_name":"ppochaco/unsolved.ac","owner":"ppochaco","description":"크롬 확장 프로그램 - 모두 풀지 않은 백준 문제 찾기","archived":false,"fork":false,"pushed_at":"2026-03-31T11:40:48.000Z","size":410,"stargazers_count":3,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-03-31T12:25:42.541Z","etag":null,"topics":["shadcn","tailwind","tanstack-react-query","typescript"],"latest_commit_sha":null,"homepage":"https://chromewebstore.google.com/detail/unsolved-ac/hejfoinpncbfalicdommcidjegciodkf","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/ppochaco.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-06-04T06:14:36.000Z","updated_at":"2026-03-31T11:40:52.000Z","dependencies_parsed_at":"2025-09-14T09:06:08.541Z","dependency_job_id":"04e364c4-bbcc-40f7-b915-1b55f0178fb2","html_url":"https://github.com/ppochaco/unsolved.ac","commit_stats":null,"previous_names":["ppochaco/unsolved.ac"],"tags_count":2,"template":false,"template_full_name":null,"purl":"pkg:github/ppochaco/unsolved.ac","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ppochaco%2Funsolved.ac","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ppochaco%2Funsolved.ac/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ppochaco%2Funsolved.ac/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ppochaco%2Funsolved.ac/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/ppochaco","download_url":"https://codeload.github.com/ppochaco/unsolved.ac/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/ppochaco%2Funsolved.ac/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31803236,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-14T11:13:53.975Z","status":"ssl_error","status_checked_at":"2026-04-14T11:13:53.299Z","response_time":153,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["shadcn","tailwind","tanstack-react-query","typescript"],"created_at":"2025-06-15T12:00:48.822Z","updated_at":"2026-04-14T15:32:07.362Z","avatar_url":"https://github.com/ppochaco.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# ![unsolved.ac icon](https://github.com/user-attachments/assets/af18dff7-050d-4986-8b84-b93cba229feb) unsolved.ac\n\nsolved.ac 문제 목록 페이지에서, 여러 사용자의 풀이 상태를 한 번에 비교해\n아직 풀지 않은 문제를 빠르게 찾도록 도와주는 Chrome Extension입니다.\n\n## 1) 해결하는 문제\n\n스터디나 팀 단위로 백준 문제를 풀 때 이런 불편이 있습니다.\n\n- 각 사용자 페이지를 번갈아 열어야 해서 시간이 오래 걸림\n- 누구는 풀었고 누구는 안 풀었는지를 한 화면에서 보기 어려움\n\n`unsolved.ac`는 solved.ac 문제 목록에 필터 UI를 통해 모두가 안 푼 문제 / 일부만 안 푼 문제 / 모두가 푼 문제를 한 눈에 확인할 수 있습니다.\n\n\u003cbr/\u003e\n\n## 2) 주요 기능\n\n![unsolved](https://github.com/user-attachments/assets/09852beb-600f-42b2-b1d1-20f3861afe39)\n\n- solved.ac 아이디 검색 후 사용자 추가\n- 사용자별 문제 수집 진행률 표시\n- 사용자 선택/해제에 따라 문제 색상 즉시 변경\n- Extension ON/OFF 토글\n- 여러 solved.ac 탭 동시 동기화\n\n\u003cbr/\u003e\n\n## 3) 빠르게 실행해보기\n\n### 3-1. 방법 A: Chrome Web Store에서 바로 사용\n\n- 설치 링크: [unsolved.ac - Chrome Web Store](https://chromewebstore.google.com/detail/unsolved-ac/hejfoinpncbfalicdommcidjegciodkf)\n- 설치 후 브라우저 우측 상단 확장 아이콘에서 `unsolved.ac`를 열어 ON으로 전환하면 바로 사용할 수 있습니다.\n\n### 3-2. 방법 B: 직접 빌드해서 로컬 로드\n\n```bash\npnpm install\npnpm build\n```\n\n1. [chrome://extensions](chrome://extensions/) 접속\n2. 우측 상단 `개발자 모드` 활성화\n3. `압축해제된 확장 프로그램을 로드합니다` 클릭\n4. 프로젝트의 `dist` 디렉토리 선택\n\n### 3-3. 사용 방법 (공통)\n\n1. [solved.ac 문제 목록 페이지](https://solved.ac/problems)로 이동\n2. 확장 프로그램 팝업에서 ON\n3. 우측 상단 필터 버튼 클릭 후 사용자 아이디 추가\n4. 문제 목록 색상으로 풀이 상태 비교\n\n\u003cbr/\u003e\n\n## 4) 프로젝트 구조\n\n```text\nsrc\n├─ components/\n│  ├─ feature/         # 도메인 기능 단위 컴포넌트\n│  └─ ui/              # 공통 UI 컴포넌트\n├─ services/\n│  ├─ api/             # solved.ac API / chrome message API\n│  └─ chrome/          # background script, content script, DOM/스타일 처리\n├─ content/            # Shadow DOM에 React 앱 마운트\n├─ types/              # 메시지/응답/도메인 타입 정의\n├─ utils/              # URL 변경 감지 등 유틸\n└─ constants/          # 상수/에러 메시지\n```\n\n\u003e 프로젝트를 아래 순서로 읽는 것을 추천합니다.\n\n1. 확장 프로그램 진입점: [`manifest.json`](https://github.com/ppochaco/unsolved.ac/blob/main/manifest.json)\n2. 메시지 라우팅: [`src/services/chrome/background-script.ts`](https://github.com/ppochaco/unsolved.ac/blob/main/src/services/chrome/content-script.ts)\n3. 페이지 주입/업데이트 흐름: [`src/services/chrome/content-script.ts`](https://github.com/ppochaco/unsolved.ac/blob/main/src/services/chrome/content-script.ts)\n4. 사용자 인터랙션: [`src/components/feature/user-filter/UserFilter.tsx`](https://github.com/ppochaco/unsolved.ac/blob/main/src/components/feature/user-filter/UserFilter.tsx)\n5. 문제 색상 계산 로직: [`src/services/chrome/content/style.ts`](https://github.com/ppochaco/unsolved.ac/blob/main/src/services/chrome/content/style.ts)\n\n\u003cbr/\u003e\n\n## 5) 데이터 흐름\n\n```mermaid\nflowchart LR\n  E[\"Background Service Worker\"] --\u003e|사용자 설정/문제 목록 저장| S[\"chrome.storage.local\"]\n  E --\u003e|열려있는 solved.ac 페이지에 변경사항 전달| T[\"TabService\"]\n  T --\u003e V[\"Content Script \"]\n  V --\u003e|필터 UI ON/OFF| D[\"Shadow DOM UI / UserFilter\"]\n  V --\u003e|문제 목록 영역 탐색| A[\"solved.ac 문제 목록 DOM\"]\n  D --\u003e|유저 검색/문제 수집 요청| E\n  E --\u003e|사용자 정보/문제 목록 조회| API[\"solved.ac API\"]\n  API --\u003e|조회 결과 반환| E\n  V --\u003e|캐싱된 데이터 조회| S\n  V --\u003e|공통 미해결/부분 미해결/해결 색상 반영| A\n```\n\n1. 사용자가 확장 화면에서 설정을 바꾸거나 아이디를 추가\n2. 확장 서비스가 데이터를 저장하고 열려 있는 solved.ac 페이지를 동기화\n3. 페이지 내 필터 기능이 최신 데이터로 UI를 갱신\n4. solved.ac 조회 결과를 바탕으로 문제 목록에 상태별 색상을 적용\n\n\u003cbr/\u003e\n\n## 6) 권한 안내\n\n\u003e 권한 범위를 최소화해, 필요한 페이지와 데이터에만 접근하도록 구성했습니다.\n\n- `storage`: 확장 ON/OFF 상태, 사용자 목록, 사용자별 문제 ID 저장\n- `host_permissions: https://solved.ac/problems*`: solved.ac 문제 목록 페이지에서만 동작\n- 로그인/인증 토큰을 수집하지 않습니다.\n- 사용자 설정 데이터는 `chrome.storage.local`에 저장됩니다.\n- 외부 전송 데이터는 solved.ac 공개 API 조회 요청(사용자 정보/문제 목록)으로 제한됩니다.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fppochaco%2Funsolved.ac","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fppochaco%2Funsolved.ac","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fppochaco%2Funsolved.ac/lists"}