尚未检测到更新。GitHub 发布版本后会显示在这里。
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证制作者的介绍仅有上面的一句话。 更多详情请阅读仓库 README。 仓库 README ↗
正在加载完整 README。
查看完整 README ↗담임·교과교사를 위한 디지털 교무수첩입니다. 기존 GAS 자리배치 앱을 바탕으로 UI와 기능을 확장했으며, 순수 HTML/CSS/바닐라 JavaScript로 구성합니다.
학번 가로·세로순 배치, 같은 성별 우선, 자리 복원·교탁 시점, 학생 팝업 출결 등록, 성장형 칭찬, 홈 백업, 일정 드래그·삭제와 Google 일정 전체 가져오기를 포함합니다.
index.html 화면과 메뉴
style.css 테마 및 반응형 레이아웃
app.js 앱 기능과 로컬 저장 로직
manifest.webmanifest PWA 설치 정보
sw.js 서비스 워커 (오프라인 실행)
icon.svg / icon-maskable.svg
vercel.json 캐시 헤더
assets/ 공개 테마·아이콘 이미지
guide/ 사용 설명서 이미지
api/usage.js 익명 방문 통계 API
vendor/ AI 비서용 Anthropic SDK 브라우저 번들 (@anthropic-ai/sdk 0.132.1, esbuild로 묶음)
tools/ 검사·공개 파일 미리보기·배포 준비 도구
학생·학급·좌석·출결·상담 등 교무 자료는 기본적으로 현재 브라우저의 localStorage에 저장됩니다. 자리배치의 주요 저장 키는 seatArrangement_v3입니다.
익명 방문 통계만 Upstash Redis에 저장합니다. Today는 당일 순 방문 브라우저 수, Total은 누적 접속 횟수이며 통계에 학생 자료는 포함하지 않습니다. Google 동기화를 직접 켜면 선택한 일정 항목만 본인 Google 계정에도 저장됩니다. 교무 자료 전체를 기기 간 동기화하는 기능은 아닙니다.
AI 비서는 사용자 본인의 Claude API 키(tongAiApiKey_v1)를 이 브라우저에만 저장하고, 대화는 브라우저에서 Anthropic API로 바로 보냅니다. 키와 대화 내용은 T-ong 서버와 데이터 백업 코드에 포함되지 않습니다.
정기적으로
홈 → 데이터 백업에서 자료를 백업해 따로 보관하세요. 학생 원본 기록·백업, 개인 일정, 환경변수, OAuth 토큰, Android 서명키는 GitHub에 올리지 않습니다.
도메인이 다르므로 자동 이전되지 않습니다.
설정 → 데이터 백업 → 코드 생성 → 복사설정 → 데이터 백업 → 가져오기에 붙여넣기file://로 열면 절대경로가 동작하지 않으므로 반드시 HTTP 서버로 띄웁니다.
node tools/preview-server.js
이후 http://localhost:4321 접속. localhost에서는 서비스 워커를 등록하지 않습니다 — 캐시가 수정사항을 가리는 것을 막기 위해서입니다.
이 미리보기 서버는 공개 앱 파일만 제공합니다. 방문 통계 API는 실행하지 않으며, Google OAuth 및 서버 API는 운영 환경과 별도 설정이 필요할 수 있습니다.
배포본은 npm run build로 만들어지는 dist/ 폴더입니다.
npm install
npm run build
node tools/test-pose-game-link.js
node tools/test-pose-game-link.js --built
python -m http.server 4322 --directory dist # 빌드 결과 확인
build.js가 하는 일:
app.js | javascript-obfuscator로 난독화 (식별자 16진수화, 문자열 배열 base64, 제어흐름 평탄화, 더미코드 삽입) |
style.css | 주석 제거 + 공백 압축 |
index.html | 주석 제거 + 들여쓰기 제거 |
sw.js | 캐시 버전을 내용 해시로 자동 교체 — 수동으로 버전을 올릴 필요가 없습니다 |
guide/, assets/, 아이콘, manifest | 그대로 복사 |
개발자 도구를 방해하는 옵션(
debugProtection,selfDefending)은 일부러 켜지 않았습니다. 정상 사용자에게 피해가 갈 수 있고 보호 효과도 크지 않습니다.난독화는 복사를 어렵게 만들 뿐 완전히 막지는 못합니다. 브라우저에 전달된 코드는 원리상 항상 복원할 수 있습니다. 알고리즘을 확실히 숨기려면 서버로 옮겨야 하지만, 그러면 오프라인 동작과 "서버에 아무것도 보내지 않는다"는 장점을 잃습니다.
npx vercel deploy --prod
vercel.json에 buildCommand: npm run build, outputDirectory: dist가 설정되어 있어
Vercel이 배포할 때마다 난독화 빌드를 자동으로 실행합니다. 원본 소스는 업로드되지만 서빙되지 않습니다.
현재 운영 주소: https://t-ong.vercel.app
기존 **https://seattong.vercel.app**은 별도 서비스이며 이 프로젝트의 수정·배포 대상이 아닙니다. 배포 전에 vercel project inspect --non-interactive로 연결된 대상이 t-ong인지 확인합니다. tools/prepare-tong-public-release.js는 이미 연결된 T-ong 프로젝트 정보를 검사하고 공개 파일만 새 배포 준비 폴더로 복사합니다.
Android 앱은 같은 운영 웹사이트를 여는 TWA 방식입니다. .well-known/assetlinks.json의 인증서 지문은 공개 검증 정보이며 비밀 서명키가 아닙니다. 현재 테스트용 인증과 Play 정식 출시용 인증은 구분해야 합니다. 웹 메뉴 업데이트와 Google Play 업로드·심사·출시는 별도 절차입니다.
dist/, tmp/, node_modules/, 개인 문서·키·환경변수는 커밋하지 않습니다. 설명서의 v67 실습 이미지는 가상 학생·가상 일정으로 생성했습니다. 일부 기존 브라우저 회귀 검사는 제작 PC의 Playwright 경로를 사용하므로 다른 PC에서는 실행 환경을 맞춰야 합니다.
참고:
J:\내 드라이브는 Google Drive 가상 드라이브라npm install이 실패할 수 있습니다(EBADF/EPERM). 로컬에서 빌드해야 한다면 다른 경로에 설치한 뒤NODE_PATH로 연결하세요. Vercel 빌드 서버에서는 문제없이 동작합니다.
cdn.sheetjs.com의 SheetJS를 사용합니다. 학교 망에서 CDN이 차단되면
엑셀 업로드/다운로드가 동작하지 않으므로, 그 경우 라이브러리를 프로젝트 안에 내려받아
index.html의 <script src>를 로컬 경로로 바꾸면 됩니다.