관리자 허브

Supabase에 자동 연결됨. 관리자 암호를 입력하세요.

학생관리·대시보드에서 쓰던 그 암호예요. 안 바꿨다면 students_admin.sql 의 암호부터 설정하세요.

관리자 허브

학습 현황·학생·콘텐츠를 한 곳에서.
연결됨

기간

학생별 현황

행을 누르면 책별 상세 · 정답률 = 첫 시도에 맞힌 비율 · 출석 = 하루 학습량이 기준을 넘은 날
이름아이디닉네임정답률공부한 책 푼 회차틀린 횟수공부시간 출석통과마지막 활동

문제 유형별 정답률

빈칸형이 유독 낮으면 오답 선지를 의심해 보세요
유형정답률푼 회차 출제 항목학생 수회차당 평균

많이 틀리는 단어 (오답률 순)

출제 대비 몇 번 틀렸는지로 줄 세웁니다. 정의·오답 선지를 손볼 후보예요.

#단어오답률틀린 회차 출제 회차틀린 학생푼 학생

유닛별 난이도

정답률 낮은 순 · 단어 배치를 손볼 후보
유닛정답률통과율 평균 통과 회차학생 수시도

새 학생 추가

학생은 시험 페이지(vocab_quiz.html)에서 이 아이디 + PIN으로 로그인해요. PIN은 만들 때만 보여요(잊으면 재설정).
닉네임은 학생이 앱에서 직접 정하는 표시명이에요 — 랭킹·공지에는 실명 대신 닉네임(없으면 아이디)이 나갑니다.

학생 목록

이름아이디닉네임상태학습기록마지막 활동

🔐 보안

이 관리자 암호 하나로 전 학생의 이름·전화번호·생일이 열려요. 학생 비밀번호보다 훨씬 길어야 합니다.

이 브라우저의 암호 기억

최근 비밀번호 재설정

학생 스스로 한 재설정이에요. 본인 확인이 아이디 + 이름 + 생일이라 같은 반 친구도 셋 다 알 수 있어요. 모르는 재설정이 보이면 그 학생 암호를 바꿔 주세요.

불러오는 중…

👪 본인확인 · 보호자

휴대폰 본인확인(KCP)을 가입에 어떻게 걸지 정해요.

같은 아이는 «보호자 + 이름 + 생년월일»이 모두 같은 경우예요. 한 부모님이 아이 둘을 각각 자기 폰으로 인증해 주는 건 정상이라 막지 않아요.
자녀 수 상한은 0을 넣으면 제한 없음이고, «같은 아이만 막기»와 «표시만»에서만 걸려요 («보호자당 한 명만»은 이미 1명으로 막히고, «제한 없음»은 세지 않아요).

서버 설정 점검

본인인증은 서버 환경변수가 다 있어야 돌아요. 하나라도 비면 [휴대폰 본인인증] 이 «설정이 아직 끝나지 않았어요» 로 끝납니다. 어느 값이 비었는지 여기서 확인하세요 — 값은 표시되지 않고 이름만 나와요.

보호자별 자녀

최근 인증한 순서예요. 보호자 이름·전화번호는 가려서 보여요.

불러오는 중…

최근 인증 시도

실기기 테스트용이에요. 인증이 안 되면 어느 단계에서 깨졌는지와 KCP가 준 결과코드·메시지가 여기 남아요. KCP에 문의할 땐 주문번호를 알려 주세요.
이름·생년월일·휴대폰·CI는 여기에 나오지 않아요 — 진단에 필요 없어서 서버가 아예 빼고 줍니다.

불러오는 중…

🚫 닉네임 금칙어

학생이 닉네임을 정할 때 이 목록에 있는 표현이 들어가면 저장이 막혀요. 공백·특수문자를 지우고 검사하니 "시 발"처럼 띄어 써도 잡혀요. 완벽하진 않아요 — 새 우회 표현을 발견하면 여기서 바로 추가해 주세요.

불러오는 중…

🎬 공지사항 고정 영상

학생 앱 공지사항 맨 위에 고정으로 뜨는 영상이에요. 유튜브 주소를 넣고 저장하면 바로 반영돼요. 비우고 저장하면 영상 칸이 사라져요.

🎬 로그인 화면 영상 (오른쪽)

로그인하기 전 화면 "둘러보기"에서 위 영상과 나란히 뜨는 두 번째 영상이에요. 비우고 저장하면 그 칸이 사라지고 위 영상만 남아요.

🔔 주간 책 업데이트 알림

매주 일요일 저녁 7시에, 지난번 알린 뒤로 새로 올라온 책·유닛이 있으면 알림을 켠 학생·선생님 기기 전부에 한 번 보내요. 없으면 안 보내요.
[이번에 뭐가 나가나] 는 아무것도 보내지 않고 내용만 보여줘요 — 눌러도 «다음에 보낼 것»이 없어지지 않아요.

단어 → 한글 뜻 문제 유형 안내 영어 단어를 보여주고 알맞은 한글 뜻을 고르게 하는 유형이에요. 모든 책에서 항상 켜져 있고, 단어마다 한국어 뜻을 따로 입력해야 그 단어에서 열려요. 아래 세 가지 중 편한 방법으로 채우세요: ① 이 아래 단어 목록에서 단어를 눌러 "한국어 뜻" 칸에 입력, ② 단어 추가 / 여러 개 한꺼번에 추가 칸에 처음부터 같이 입력, ③ 시트 업로드(CSV)meaning_ko 열을 추가해서 한 번에 업로드. 한국어 뜻이 없는 단어는 그 단어만 조용히 "단어 → 뜻(영어)" 유형으로 대체돼요(에러 없음) — 그래서 책 전체에서 단 1개만 채워도 학생 화면의 유형 버튼은 열리지만, 나머지 단어에서 실제로 한글 뜻 문제가 나오게 하려면 그 단어들도 채워야 해요.

목록에서 책을 고른 뒤 움직여요. 같은 분류 안에서만 이동합니다.

분류 묶음 자체의 차례도 바꿀 수 있어요. 고른 책이 속한 분류가 움직입니다.

📖

파일을 올리면 최대 800px로 자동 리사이즈되어 저장돼요 (JPEG). 이미지 없이 이 학원에서 자체 호스팅하는 URL을 붙여도 돼요.

단어 추가

여러 개 한꺼번에 추가

엑셀/구글시트에서 단어 · 품사 · 영어뜻 · 예문 · 한국어 뜻 5칸을 복사해 아래에 붙여넣으세요 (한 줄에 한 단어, 탭으로 구분). 품사·뜻·예문·한국어 뜻은 비워도 돼요 — 한국어 뜻은 "단어 → 한글 뜻" 문제 유형에만 쓰여요. 맨 위 제목줄(headword…)은 자동으로 건너뜁니다.

시트 업로드 (CSV)

구글시트에서 파일 → 다운로드 → 쉼표로 구분된 값(.csv)으로 받은 파일을 올리면, 검사(미리보기)를 거쳐 한 번에 등록해요. 열 제목으로 인식: headword · pos · definition_en · example_sentence + 선택으로 distractor1~3(채운 단어만 빈칸 퀴즈 오답이 이 3개로 고정돼요 — 유의어가 겹쳐 정답이 여러 개 될 수 있는 단어에만 쓰세요) + 선택으로 meaning_ko(한국어 뜻 — "단어 → 한글 뜻" 문제 유형에 쓰여요. 열 제목은 meaning_ko·한국어 뜻·한글 뜻 중 아무거나 써도 인식해요). 그 외 열(플래그 등 참고용)은 자동으로 무시돼요. 행 순서가 곧 유닛 배정이에요 (1~24행 = Unit 1, 25~48행 = Unit 2 …). 한글이 깨져 보이면 엑셀 저장본 대신 구글시트에서 받은 CSV를 사용하세요.

🔍 예문 빈칸 점검

학생이 「예문 빈칸」을 골랐을 때, 예문에서 그 단어를 못 찾으면 앱은 그 문항만 말없이 「뜻 → 단어」로 바꿉니다(종이 시험지 Part 1 에서도 빠져요). 에러가 안 나서 지금까지는 학생이 말해 줘야 알 수 있었어요. 아래에 걸리는 단어를 모아 둡니다.

단어 목록

영상은 유튜브/링크로 추가해요. 영상 파일 업로드는 보안상 service_role 이 필요해 기존 admin.html 에서 하세요.

그림은 발음 mp3 와 같은 규칙이에요 — Storage word-image 버킷에 철자를 소문자로 한 파일명(happy.jpg)으로 올리면 칸을 비워 둬도 저절로 붙어요. (.png·.webp 도 찾아요. Storage 는 대소문자를 구분하니 Happy.jpg 는 안 붙어요.) 파일 이름을 다르게 썼을 때만 그 이름을 적고 «그림 저장»을 누르세요. 붙여넣기(data URL)는 안 돼요 — 목록이 무거워져 앱이 느려집니다. 학생에게는 정답을 맞힌 뒤에 보여요(먼저 보이면 답이 새요).

유닛 표지 (핵심 단어·이미지)

각 유닛의 5×5 표지 정가운데 칸에 나오는 핵심 단어와 이미지예요. 유닛은 단어 24개마다 자동으로 하나씩 생겨요. 이미지를 올리면 최대 800px로 자동 리사이즈돼서 DB에 저장돼요 — 별도 호스팅 필요 없음.

종이 시험지 만들기

유닛 하나(단어 24개)를 네 유형(단어→한글 뜻 · 예문 빈칸 · 뜻→단어 · 단어→뜻)으로 각각 24문항씩 총 96문항을 A4 한 면에 8문항씩(12장) 만들어요. '시험지 생성'을 누르면 미리보기가 뜨고 거기서 인쇄/PDF 저장을 할 수 있어요.

⚡ 발음 mp3 일괄 생성

뜻별 발음(이형태)이 아닌 평범한 단어의 기본 발음만 자동으로 만들어요. 단어 추가 · 여러 개 한꺼번에 추가 · 시트 업로드로 새 단어를 넣을 때마다 자동으로 이 생성이 같이 돌아요 — 따로 이 버튼을 누를 필요는 없고, 아래 상태 칸에 진행 상황이 표시돼요. 버튼은 그 자동 생성을 놓쳤거나 실패한 게 있을 때 수동으로 다시 돌리는 용도예요. 이형태(record, bow 같은 단어)는 바로 아래 「🔊 뜻별 발음」 카드에서 기존 방식대로 처리하세요.

🔊 뜻별 발음

발음 파일은 철자 하나당 하나예요. 그래서 present(명 ˈprezənt / 동 prɪˈzent), record, bow처럼 뜻에 따라 소리가 다른 단어는 한쪽 발음만 나갑니다.

「✨ 자동 채우기」를 먼저 누르세요. 품사를 보고 파일 이름과 문장을 알아서 만듭니다 (The [present] was right there. / They [present] it every day.). 이미 채워 둔 칸은 건드리지 않아요. 그다음 ▶ 로 들어 보고 이상한 것만 고치면 됩니다.

직접 고칠 때 지킬 것 3가지 —
· 대괄호 안 단어는 문장에 나온 그대로여야 해요([record]인데 문장엔 records → 못 찾음)
· 문장 끝에 두지 마세요. 끝 단어는 음이 떨어져서 축 처진 소리로 잘립니다
· 문장은 짧게(5~8단어). 길면 그 안에서 단어가 흐려져요

· 대괄호 없이 다른 철자만 줘도 돼요: lead(납) → led
· 비워 두면 지금과 똑같이 동작합니다(철자 파일 → 음성합성).
· 저장 뒤 mp3 만들기·올리기는 직접 하세요(자동화 안 함): python scripts/generate_audio.py --audio-keys 로 만들어 들어 보고, 괜찮으면 --upload-missing 을 붙여 올립니다. 자르려면 ffmpeg가 필요해요.

🚩 문제 신고

학생이 문제를 신고하면 여기 쌓여요. 보기는 매번 섞이니까, 신고한 순간의 보기그 직전(틀렸을 때) 보기를 함께 남겨 뒀어요. 고친 뒤 '처리완료'를 누르면 목록에서 빠져요.

📮 문의

로그인 화면·대시보드의 '💬 문의하기'로 온 문의예요. 로그인한 학생의 문의는 계정 정보로, 로그인 전(비로그인) 문의는 남겨준 이름·연락처로 표시돼요. 응답은 학생 앱 안이 아니라 직접(전화 등) 연락으로 하고, 확인했으면 '처리완료'를 눌러 목록에서 빼세요.

이용 현황 요약

가입 후 잔존율 (리텐션)

가입한 주를 1주차로 셈

가입하고 N주차에 하루라도 학습한 학생의 비율이에요. 분모에는 그 주차가 이미 지난 학생만 넣습니다 — 지난주에 가입한 학생이 12주차 미달로 잡혀 숫자가 낮아지는 걸 막기 위해서예요.

활성도 등급

최근 4주 · 주당 평균 출석일수 기준

열심 = 주 3일 이상 · 보통 = 주 1.5일 이상 · 저조 = 그 미만 · 이탈위험 = 14일 넘게 출석 0(가입 14일 미만은 아직 판단하지 않아요).

학생별 활성도

이름아이디닉네임 최근 4주 출석주 평균 마지막 출석경과등급

기준 설정

여기 숫자가 위 통계와 학생 랭킹 점수를 함께 좌우해요. 바꾸면 지난 기록도 새 기준으로 다시 계산됩니다.

맞힌 단어 개수 — 랭킹 목록에 찍히는 숫자와 순서가 같아요. 학생이 바로 납득합니다.
종합점수 — 정답률·속도·복습까지 반영하지만, 목록에는 «맞힌 단어 N개»가 찍혀서 많이 맞힌 학생이 아래에 오는 일이 생겨요. 켜려면 목록 표시도 점수로 바꿔야 합니다.

랭킹 근거 뜯어보기

점수가 어떤 재료로 나왔는지, 그 줄이 개수 순서와 얼마나 다른지

계산식

지금 이 학원에 적용된 값 그대로

두 기준 나란히 보기

화살표 = 종합점수로 세웠을 때의 순위 변동

왼쪽은 종합점수 100점 순, 오른쪽은 첫 시도 정답 개수 순이에요. 같은 학생이 두 표에서 몇 등씩 차이 나는지가 곧 «기준을 바꾸면 무슨 일이 생기는가»입니다.

불평등 진단

지금 데이터에서 자동으로 잡은 신호

산식 자체의 구조적 편향과, 그 점수를 랭킹에 적용하는 방식의 편향을 나눠서 짚습니다.

학생별 계산 근거

행을 누르면 항목별 산식과 회차·세션 원자료가 펼쳐집니다

로 표시된 항목은 «해당 없음»이에요. 그 항목은 만점에서도 빠져 100점으로 환산되므로, 만점 분모가 학생마다 다릅니다(맨 오른쪽 «환산 분모» 칸).

점수
순위
첫시도
순위
변동 이름아이디 종합
점수
학습량
/35
정답률
/30
정복
/20
유지
/15
속도
계수
첫시도
정답
맞힌
개수
출제
항목
환산
분모

리뷰 확인 · 정회원 전환

준회원이 유닛을 통과하면 리뷰를 쓸 수 있어요. 읽어 보고 정회원으로 올려 주세요.

학생에게 나가는 안내문

가입 완료 안내 · 리뷰 권한 축하 팝업 — 아래 저장 버튼 하나로 함께 저장됩니다

🎉 «리뷰 쓸 수 있어요» 팝업

본문에 {units} 를 쓰면 아래 «통과 유닛 수» 값이 그 자리에 들어갑니다. 줄바꿈은 학생 화면에도 그대로 나갑니다.
통과 유닛 수는 준회원이 «고른 첫 책»에서 통과해야 하는 유닛 수예요. 고른 책의 유닛이 그보다 적으면(예: 59단어 = 유닛 3개짜리 책) 그 책의 전체 유닛 수로 자동으로 낮춰집니다 — 안 그러면 그 학생은 리뷰를 영영 못 씁니다.

학생 화면 미리보기
🎉

📮 «가입 완료» 안내문

회원가입을 마친 직후 뜹니다. 자동 활성화가 켜져 있으면 바로 로그인된 상태로 팝업이 뜨고, 꺼져 있으면 로그인 화면 위에 «승인 대기» 안내로 뜹니다. {code} = 방금 만든 아이디, {units} = 위 통과 유닛 수.

학생 화면 미리보기 (아이디 예: dory7)

리뷰

학생 앱에는 아이디 앞 두 글자만 나갑니다 — 여기서는 누가 썼는지 다 보여요

주제

그림을 담을 word-image 안 폴더 이름이에요(소문자·숫자·하이픈만). 이 주제의 단어 그림은 전부 이 폴더 기준 파일 이름만 적으면 돼요 — 폴더는 여기서 한 번만 정합니다.

맵 편집

학생 화면과 같은 배치예요

가운데를 누르면 이 주제의 테마 그림을 올려요(학생 화면 가운데 칸), 단어를 누르면 그 단어를 고쳐요. 를 누르면 새 단어를 넣습니다(24개가 기본 한 판이고, 더 넣으면 아래로 줄이 늘어나요).

과제 내기

책과 유닛을 고르고 받을 반·학생을 정해요. 학생이 그 유닛을 다 맞혀 끝내면 자동으로 «완료» 가 됩니다 — 따로 채점하지 않아요. 과제를 낸 뒤에 푼 것만 셉니다(지난 기록으로 저절로 완료되지 않아요).

불러오는 중…
학생을 검색해 고르세요.

낸 과제