ARIS-in-AI-Offer
Bilingual (中文+EN) ML / LLM / diffusion / agent interview cheat sheets for AI 秋招 — generated by ARIS /interview-cheatsheet, rendered by /render-html into single-file HTML, reads anywhere — plus a CV→DB
Translation pending
아르봇(ARBOT) - ARgument chatBOT: 과학탐구 논증 수업용 AI 챗봇 (정적 프론트엔드 + 교사별 Google Apps Script 백엔드)
Translation pending
EducationJavaScript · HTMLGitHub @mrdooleeOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
The maker's introduction consists of the line above. Read the repository README for more details. Repository README ↗
Loading the full README.
Read the full README ↗**아르봇(ARBOT, ARgument chatBOT)**은 중·고등학생 대상 과학탐구 논증(Toulmin) 수업을 지원하는 AI 챗봇입니다. 구글 스프레드시트 + Apps Script(GAS)가 백엔드이고, 이 저장소는 그 백엔드를 호출하는 정적 프론트엔드입니다. 서버가 따로 학생 데이터나 API 키를 저장하지 않으므로, 여러 선생님이 이 프론트엔드 하나를 공유해서 써도 각자의 데이터는 각자의 스프레드시트에만 남습니다.
?gas=... 형태로 그 선생님의 GAS 주소가 담겨 있어서, 학생은 링크(또는 QR)를 열고 선생님이 알려 준 수업 입장 코드만 입력하면 자기 반 스프레드시트에 연결됩니다.학생 브라우저 ──POST──▶ 선생님의 GAS 웹 앱 (Apps Script, 선생님마다 각자)
▲
│ 정적 프론트엔드 (이 저장소, 모두가 공유하는 배포 1개)
│ 브라우저 localStorage에 "이 기기가 어느 GAS와 연결되어 있는지" 저장
gas-source/ — 스프레드시트에 붙는 Apps Script 코드 원본 (clasp으로 관리). Code.js가 백엔드 로직 + JSON API, Templates.js가 페르소나·루브릭 템플릿 원본, Guide.html이 시트 메뉴 📖 사용 가이드 창(시트 구조·사용법 안내).public/ — 정적 프론트엔드
index.html — 교사 관리 콘솔 (사이트 첫 화면): 1 GAS 연동 → 2 기본 설정 → 3 주제 설정 → 4 학생 배부 링크·QR(+수업 입장 코드) → 5 대화 결과 확인·분석student.html — 학생 화면: 수업 입장 코드 → 학급·모둠·주제 선택 → AI 튜터와 대화js/gasClient.js — GAS 웹 앱과 통신하는 공통 모듈, js/argu-shared.js — 캐릭터·논증 단계 등 공통 부품, js/qrcode.js — QR 생성(MIT, 외부 CDN 없이 내장), js/credit-footer.js — 두 화면 아래의 제작자 크레딧 푸터와 안내 모달, js/pick-logic.js — 결과 분석의 학급 → 주제 → 모둠 단추 선택 규칙(화면 없이 시험 가능), js/material-samples.js — 탐구 주제 예시와 주제별 탐구 자료 예시(예시 채우기)css/ — 공통 토큰, 교사 콘솔, 학생 화면 스타일server.js — public/을 서빙하는 아주 얇은 Express 정적 서버 (어떤 정적 호스팅에 올려도 무방)tests/ — 자동 테스트와 가짜 GAS 서버 (npm test)파일 → 사본 만들기로 내 드라이브에 복사합니다 (Apps Script 코드가 이미 들어 있습니다).https://script.google.com/macros/s/.../exec)을 복사해 둡니다.학급·모둠·금지어는 교사 콘솔의 기본 설정에서, 탐구 주제 목록·주제별 페르소나/루브릭 연결·탐구 자료는 주제 설정에서 입력합니다. (처음 실행하면 페르소나 세부설정, 루브릭 세부설정, 주제 세부설정 탭이 시트에 자동으로 만들어지고 템플릿 5종이 들어갑니다. 탐구 주제 목록에 저장한 주제는 주제 세부설정 탭에 한 줄씩 자동으로 만들어지고, 비워 둔 칸은 기본 줄을 따릅니다. 시트에서 목록을 직접 고쳤다면 시트 메뉴 🔄 주제 세부설정 맞추기를 누르세요.)
⚠️ 코드를 나중에 수정하면 배포 → 배포 관리 → 연필 아이콘 → 새 버전으로 다시 배포해야 반영됩니다. (clasp을 쓰면
clasp push --force후clasp deploy -i <배포 ID>)
/)에서 1 GAS 연동: 위에서 발급받은 URL 입력 → 연결 테스트 → 교사 비밀번호 입력. (비밀번호를 아직 안 정했다면 안내 카드가 먼저 나옵니다.)연동 정보(GAS URL)는 이 브라우저에만 저장됩니다. 교사 비밀번호는 이 브라우저 탭에 입력하는 동안만 임시로 남습니다.
npm install
npm start # http://localhost:3000 (교사 콘솔) / http://localhost:3000/student.html (학생 화면)
npm test # 문법 검사 + 자동 테스트 전체 (실제 시트·Gemini를 건드리지 않음)
실제 시트 없이 화면을 눌러 보려면 node tests/fake_gas_server.js 를 실행하고 http://localhost:3101/ 을 여세요. 시험용 비밀번호와 코드는 tests/fake_gas_server.js 맨 위에 있습니다. 자세한 방법은 CLAUDE.md의 Commands를 보세요.
현재 배포 구성: 이 저장소(mrdoolee/arbot-project)의 main에 푸시하면 Vercel 프로젝트 arbot-trdoolee가 public/을 자동으로 프로덕션에 배포합니다(주소: https://arbot-trdoolee.vercel.app). 설정은 vercel.json에 있고(출력 폴더 public, 아래 보안 헤더 4종, /teacher.html → / 리다이렉트), Vercel 프로젝트의 프레임워크는 Other여야 합니다(package.json·server.js를 보고 Express로 자동 감지되면 정적 사이트가 깨집니다). 이 주소는 학생에게 나눠 준 링크·QR에 들어 있으니 프로젝트 이름이나 도메인을 바꾸지 마세요. Vercel 로그인 보호(Vercel Authentication)는 프리뷰 배포에만 걸려 있어 프로덕션 주소는 학생이 그대로 열 수 있습니다. 이 저장소는 공개이니 API 키·.env·.clasprc.json은 절대 커밋하지 마세요(테스트용 값은 모두 가짜입니다).
다른 곳에 올린다면 public/을 서빙할 수 있는 곳이면 어디든 됩니다 — Vercel, Netlify, GitHub Pages, Render 무엇이든 가능합니다. 딱 한 번만 배포해두면 모든 선생님이 같은 주소를 함께 씁니다. 다음 헤더를 걸 수 있다면 같이 걸어 주세요(server.js가 하는 일과 같습니다): X-Content-Type-Options: nosniff, X-Frame-Options: DENY, Content-Security-Policy: frame-ancestors 'none', Referrer-Policy: no-referrer. 각 페이지의 연결 제한(CSP)은 HTML 안의 <meta>에 들어 있습니다.
모든 호출은 POST이고 본문은 Content-Type: text/plain의 JSON 문자열입니다(CORS 프리플라이트를 피하려는 것). GET은 상태 한 줄만 돌려줍니다. 주소창에 비밀번호·코드가 남지 않게 하려는 설계입니다.
| 구분 | action | 필요한 것 | 설명 |
|---|---|---|---|
| 공개 | testConnection | (비밀번호) | 연결 확인. 시트 이름·주소는 비밀번호가 맞을 때만 |
| 학생 입구 | getInitialData | accessCode | 학급/모둠/주제 목록과 주제별 캐릭터·제한 시간 |
| 학생 입구 | processChatMessage | accessCode | 학생 메시지 처리 (입력 검증, 금지어 차단, Gemini 호출, 기록 저장) |
| 교사 | teacherAnalyze 외 설정·분석·키·코드 관련 | pin | 설정 읽기/쓰기, 분석, API 키, 수업 입장 코드 등 |
AIza••••1234) Gemini에는 주소가 아니라 헤더로 보냅니다. 키는 스프레드시트 환경설정 B1과 API키 탭에 평문으로 있으니 스프레드시트를 공유하지 마세요.채팅기록을 백업한 뒤 비우세요.?gas= 주소는 script.google.com/…/exec 형식만 확인할 수 있어서, 남이 만든 링크가 다른 스크립트로 연결될 수 있습니다.