Synaplan
Open-source AI platform for companies: self-hosted AI agents, GDPR-compliant chatbot widget, RAG knowledge base, WhatsApp and Outlook AI, MCP, multi-model routing. Docker, Kubernetes or hosted in Germ
翻訳待ち
No updates detected yet. GitHub releases will appear here.
Loading the full README. The saved excerpt is shown below.
아주대 심리학과 학생회 · 과방 대여 장부 과방 물품의 남은 수량 확인, 대여·반납 기록(사진 포함), 연체 알림 메일을 제공하는 웹앱입니다. • 스택: Next.js 16 (App Router) · React 19 · Tailwind 4 · Firebase (Auth / Firestore / Storage) · Nodemailer(Gmail) · Vercel(Cron) • 학생: Google 로그인 → 대여(사진 + 개인정보 동의) → 반납(사진) • 관리자: PIN 로그인 → 물품·공지·파비콘 관리, 현황, 창고, 전체 기록(사진) 전체 목록과 설명은 .env.example에 있습니다. 배포 시 반드시 설정할 것: 권장: ADMIN_SESSION_SECRET, RETENTION_DAYS=180, NEXT_PUBLIC_CONTACT_*, (학교 계정 전용으로 전환 시) ALLOWED_EMAIL_DOMAIN + NEXT_PUBLIC_ALLOWED_EMAIL_DOMAIN 모든 데이터 접근은 서버 API(Admin SDK)를 거치므로 브라우저 직접 접근은 막아 둡니다.Read the full README ↗
과방 물품의 남은 수량 확인, 대여·반납 기록(사진 포함), 연체 알림 메일을 제공하는 웹앱입니다.
npm install
cp .env.example .env.local # 값 채우기
npm run dev # http://localhost:3000
| 명령 | 설명 |
|---|---|
npm run build | 프로덕션 빌드 |
npm run lint | ESLint |
npm run typecheck | 라우트 타입 생성 + TypeScript 검사 |
npm test | 시간/기한 계산 단위 테스트 (Node 22.6+) |
node scripts/test-late-return-email.mjs | 지각 반납 메일 테스트 발송 |
전체 목록과 설명은 .env.example에 있습니다. 배포 시 반드시 설정할 것:
| 변수 | 없으면 |
|---|---|
ADMIN_PIN | 관리자 로그인 불가 (기본값 없음) |
CRON_SECRET | 연체 알림 크론이 실행되지 않음 |
FIREBASE_* | 앱 전체 동작 안 함 |
GMAIL_USER, GMAIL_APP_PASSWORD, ADMIN_EMAIL | 메일 발송 안 함 |
ADMIN_EMAIL은 최초 기본값입니다. 관리 탭 → "알림 받을 메일"에서 한 번 저장하면 그 뒤로는 Firestore(settings/adminEmails)의 목록이 쓰이며, 재배포 없이 바로 반영됩니다.
권장: ADMIN_SESSION_SECRET, RETENTION_DAYS=180, NEXT_PUBLIC_CONTACT_*, (학교 계정 전용으로 전환 시) ALLOWED_EMAIL_DOMAIN + NEXT_PUBLIC_ALLOWED_EMAIL_DOMAIN
모든 데이터 접근은 서버 API(Admin SDK)를 거치므로 브라우저 직접 접근은 막아 둡니다.
firebase/firestore.rulesfirebase/storage.rules — 사진은 관리자만 /api/photos/… 로 열람app/
page.tsx 재고 (홈)
rent/ return/ 대여 · 반납
admin/ status/ storage/ records/ 관리자 화면
api/
rentals/ POST 대여(로그인) · GET 전체(관리자)
rentals/[id]/return 반납 (본인 또는 관리자)
me/ 내 대여 목록 + 지난 입력값
items/ storage/ notice/ favicon/ 관리자 CRUD
admin-emails/ 알림 받을 관리자 메일 목록 (관리자)
storage/[id]/move 창고 → 재고 이동 (트랜잭션)
photos/[filename] 사진 프록시 (관리자)
admin/login PIN 로그인 (서명 쿠키, 15분 5회 제한)
cron/overdue 매일 09:00 KST 연체 알림 + 보관기간 지난 기록 삭제
lib/
store.ts Firestore 접근 (대여·반납·창고 이동은 트랜잭션)
time.ts KST 기준 기한 계산·표시 (서버/브라우저 동일 결과)
admin.ts 관리자 세션 서명·검증, 로그인 시도 제한
email.ts 메일 템플릿 (사용자 입력은 모두 이스케이프)
photos.ts 업로드 검증(파일 헤더) · 비공개 저장 · 프록시 읽기
image-compress.ts 업로드 전 브라우저에서 1600px JPEG로 축소
validate.ts 서버 입력 검증