Repository navigation
Releases: VOID-GSM/Rels-front
Releases · VOID-GSM/Rels-front
Release list
Rels v1.2.0
Rels v1.2.0
안녕하십니까, 팀 VOID입니다.
v1.2.0을 배포합니다.
이번 릴리즈는 마감이 지난 뒤에도 신청을 받고, 개설자와 학생회가 직접 수락·거절하도록 신청 흐름을 바꿨습니다. 함께 진행하는 연사자를 등록할 수 있게 됐고, 강연 내용을 마크다운으로 쓸 수 있습니다. 한 번 로그인하면 새 탭이나 앱을 다시 열어도 로그인이 풀리지 않습니다.
🙋 대기 승인 흐름
- 마감이 지나도 신청을 받습니다. 다만 곧바로 확정되지 않고 대기자로 서며, 개설자나 학생회가 수락해야 자리가 확정됩니다
- 신청자 명단에서 대기자를 한 명씩 수락하거나 거절할 수 있습니다. 개설자와 학생회에게만 버튼이 보입니다
- 수락한 사람은 정원과 상관없이 바로 신청자로 올라갑니다. 사정을 아는 담당자의 판단을 정원보다 앞에 둡니다
- 거절한 신청은 사라지지 않고
거절한 신청목록에 남아, 누구를 이미 처리했는지 확인할 수 있습니다 - 거절된 신청자에게는 "신청이 거절되었습니다"가 표시되고 다시 신청할 수 없습니다
- 자리가 비면 대기자가 자동으로 올라가던 동작은 없어졌습니다. 자리 배정은 이제 담당자가 결정합니다
- 마감이 지난 뒤에도 아직 확정되지 않은 대기 신청은 스스로 취소할 수 있습니다. 확정된 신청 취소는 지금처럼 막힙니다
🎤 연사자 등록
- 강연을 개설하거나 수정할 때 이름 또는 학번으로 학생을 검색해 연사자를 추가할 수 있습니다. 함께 진행하는 강연을 제대로 표시하기 위한 기능입니다
- 개설자는 연사자로 자동 등록되며, 그 외에 최대 인원까지 더 넣을 수 있습니다
- 강연 상세와 목록의 강연자 줄에 연사자 전원이 학번과 함께 표시됩니다 (
2204 김지유, 2101 이수민) - 연사자로 등록된 사람은 자기 강연에 신청할 수 없고, "내가 진행하는 강연입니다"로 안내됩니다
✍️ 강연 내용 마크다운
- 강연 내용을 마크다운 문법으로 작성할 수 있습니다. 준비물 목록이나 사전 학습 링크를 정리하기 편해집니다
- 입력창에 작성 / 미리보기 탭이 생겼습니다. 저장 전에 실제로 어떻게 보이는지 확인할 수 있습니다
- 굵게·제목·목록·번호 목록·코드·링크를 넣는 서식 버튼을 붙였습니다. 문법을 외우지 않아도 됩니다
- 표, 취소선 같은 GitHub 스타일 문법과 줄바꿈 그대로 반영을 지원합니다. 엔터를 두 번 치지 않아도 줄이 나뉩니다
- 강연 상세·목록·마이페이지 모두 같은 방식으로 렌더링됩니다
🔐 로그인 유지
- 탭을 닫거나 새 탭에서 열어도 로그인이 유지됩니다. 주소를 복사해 새 탭에서 열거나, 홈 화면에 설치한 앱을 다시 켤 때마다 로그인 화면으로 튕기던 문제를 해결했습니다 (#38)
- 이전에 로그인해 둔 사용자는 다시 로그인하지 않아도 그대로 이어집니다
- 사용 중 인증이 만료되면 화면이 끊기지 않고 조용히 갱신됩니다. 작업하다 갑자기 로그인 화면으로 나가는 일이 줄어듭니다
- 여러 탭을 열어 둔 상태에서 한 탭에서 로그아웃하면 나머지 탭도 함께 로그아웃됩니다
🔧 기타
- 강연 개설·수정 폼에 신청 마감일 입력이 다시 표시됩니다
Rels v1.1.1
Rels v1.1.1
안녕하십니까, 팀 VOID입니다.
v1.1.0에서 발견된 카운트다운 표시 문제를 고친 v1.1.1을 배포합니다.
🐛 버그 수정
- 신청이 열리는 시각이 되는 순간, 카운트다운 자리에 "신청 마감"이 잠깐 떴다가 마감까지 남은 시간이 다시 흐르던 문제를 수정했습니다
- "신청 시작까지" 카운트다운이 0에 닿아 "신청 마감까지"로 바뀔 때, 이전 카운트다운이 0에 닿았던 상태가 그대로 남아 다음 1초 동안 종료 문구가 보이던 문제입니다
- 이제 세는 대상이 바뀌면 곧바로 새 기한 기준으로 다시 셉니다. 강연 상세와 홈 화면 모두 적용됩니다
Rels v1.1.0
Rels v1.1.0
안녕하십니까, 팀 VOID입니다.
첫 정식 릴리즈 이후 실제 운영에서 나온 문제들을 다듬은 v1.1.0을 배포합니다.
이번 릴리즈는 학년별 정원대로 자리가 배분되도록 신청 로직을 다시 세우고, 학생회가 강연을 승인하는 화면과 시각 입력을 사용하기 편하게 손봤습니다.
🎫 학년별 정원 기준 자리 배분
- 신청자와 대기자를 합쳐 신청한 순서대로 세운 뒤 학년별 정원을 채우는 방식으로 자리 배분을 다시 계산합니다
- 신청자가 취소하면 비는 학년을 먼저 확인하고, 그 학년 대기자 중 가장 먼저 신청한 사람이 자리를 이어받습니다
- 내 학년에 배정된 자리가 아예 없으면 신청할 수 없고, 자리가 이미 찼다면 전체 정원이 모두 찬 뒤 대기로 신청하도록 안내합니다
- 대기 신청은 강연 전체 정원이 찼을 때만 받습니다
- 신청자 명단·출석부·신청 인원수·잔여 좌석 게이지가 모두 같은 배분 결과를 기준으로 표시됩니다
- 이번 주 강연 화면에도 학년별 정원 표시와 정원 검사를 추가해 상세 화면과 같은 규칙으로 동작합니다
🏛️ 강연 승인 화면 개선
- 승인 대기 카드에서 개설자가 입력한 강연 일시·장소·정원·신청 마감·신청 시작을 모두 확인할 수 있습니다. 상세 화면으로 넘어가지 않고도 판단할 수 있습니다
- 개설자가 비워 둔 항목은 감추지 않고
미입력으로 남겨, 무엇이 빠졌는지 바로 보입니다 - 정원은 전체 인원(
전체 20명)과 학년별 인원(1학년 5명 · 2학년 5명 · 3학년 5명)을 각각 그대로 보여 줍니다 - 학생회가 승인 화면에서 강연을 바로 수정할 수 있습니다. 개설·수정 화면과 같은 폼이라 일시·마감 검증이 똑같이 적용되고, 저장하면 카드가 갱신된 내용으로 다시 접힙니다
🕒 시각 입력 개편
- 강연 시간과 신청 마감에서 오전/오후를 버튼으로 분리했습니다. 브라우저마다 다르게 그려지던 작은 오전/오후 칸에서 가장 자주 나던 실수를 줄입니다
- 시와 분은 각각 선택 목록으로 나뉘고, 분은 5분 간격으로 제공합니다. 이미 저장된 값이 간격을 벗어나면 그 값도 목록에 남아 잃지 않습니다
- 신청 마감은 날짜 칸과 시각 칸을 갈라 놓아, 날짜와 시각을 따로 고를 수 있습니다
🔧 안정성 개선
- 신청·취소가 실패하면 서버가 알려준 사유를 그대로 보여 줍니다. 16:20 이전 신청처럼 "잠시 후 다시 시도"가 답이 아닌 거절도 이유를 알 수 있습니다
- 신청자 명단이 신청 시각이 아닌 학번 순으로 밀리던 문제를 수정했습니다
- 출석부 정렬 기준을 신청 순서로 옮겨 명단과 순서를 맞췄습니다
- VAPID 키가 설정되지 않은 환경에서 알림 자동 구독 경로가 에러를 던지던 문제를 수정했습니다
📈 기타
- Google Analytics 4를 연동해 실제 이용 흐름을 확인할 수 있게 했습니다
- README에 프로젝트 구성과 기술 스택, 실행 방법을 정리했습니다
Rels v1.0.0
Rels v1.0.0
안녕하십니까, 팀 VOID입니다.
광주소프트웨어마이스터고등학교 릴레이 스터디의 전 과정을 하나의 플랫폼에서 운영하는 통합 관리 서비스 Rels의 첫 정식 릴리즈를 진행하게 되었습니다!
Rels는 학생의 강연 개설·신청·대기 관리부터 학생회의 승인·출석·공지 운영까지, 강연 개설부터 종료까지의 핵심 워크플로우를 지원합니다.
Rels 이용하러 가기 >
Rels-front 이슈 등록하기 | Rels-back 이슈 등록하기
🏗️ 아키텍처 & 기술 스택
- Next.js 16 (App Router) + React 19 + TypeScript 5 기반
- 레이어드 아키텍처 (app → components → entities → shared 단방향 의존, 도메인별 슬라이스 분리)
- TanStack Query 5 · Axios 데이터 페칭, Zustand 5 클라이언트 상태 관리
- React Hook Form 7 + Zod 4 폼 검증, Tailwind CSS 4 스타일링
- next-pwa 기반 PWA · 서비스 워커, Sonner 토스트 알림
👨🎓 학생(USER) 기능
- DataGSM OAuth 로그인 및 세션 토큰 검증, 미인증 사용자 라우트 접근 가드
- 강연 개설·상세·수정·삭제, 개설자 본인만 수정·삭제 가능하도록 권한 분기
- 정원 설정 방식 선택: 전체 정원 또는 학년별(1·2·3학년) 정원, 10~30명 범위 검증
- 강연 장소·일시 및 신청 마감 기한 설정, 제목 100자·설명 800자 실시간 글자 수 카운트
- 강연 신청·취소, 정원 초과 시 대기 신청 및 대기 순번 관리
- 신청은 7교시가 끝나는 16:20부터 열리며, 그 전에는 신청이 열리는 시각을 미리 안내
- 신청자·대기자 명단 조회 및 개별 신청 취소
- 잔여 좌석 게이지·마감 카운트다운, 신청 성공 토스트
- 홈 스포트라이트 화면과 전체 강연 목록(/lectures) 분리, 상태별 정렬 제공
- 마이페이지에서 내가 신청한 강연·내가 개설한 강연과 신청 상태(신청 완료·대기 중) 확인
- 내가 개설한 강연의 승인 진행 상황(학생회가 확인 중 · 개설 거절됨)을 마이페이지와 강연 상세에서 확인
🏛️ 학생회(ADMIN) 기능
- 학생(USER)·학생회(ADMIN) 역할 세분화 및 학생회 배지 노출
- 강연 승인: 개설 신청된 강연을 한곳에서 검토하고 수락·거절
- 거절 시 사유를 함께 남길 수 있으며, 사유는 개설자에게 그대로 전달
- 승인 전이거나 거절된 강연은 학생들에게 노출되지 않고, 개설자에게만 상태 배지로 표시
- 출석 관리: 강연 상세에서 신청자별 출석·결석·지각·미확인을 지정하고, 바뀐 인원만 모아 한 번에 저장
- 신청자 명단 복사: 명단을
1. 2204 김지유형태로 클립보드에 복사해 카카오톡·시트에 그대로 붙여넣기 - 공지 작성·수정·삭제 (공지 등록은 학생회 계정만 가능하도록 제한)
- 홈 상단 공지 배너 노출로 전교생 대상 안내 전달
- 강연 목록·상세 및 신청 현황 전반 조회
⚙️ 강연 상태 자동 처리
- 개설 미정 / 개설 확정 / 개설 불확정 / 강연 종료 4단계 상태 관리
- 신청 마감 시각 경과 후 신청자가 10명 미만이면 '개설 불확정'으로 자동 전환
- 강연 시작 시각 1시간 경과 시 '강연 종료'로 자동 전환
- 개설 확정 → 개설 미정 → 개설 불확정 → 강연 종료 순 목록 정렬
📱 PWA
- PWA 설치 배너와 기기별 설치 안내 페이지 제공, 홈 화면 설치 후 앱처럼 사용 가능
- 서비스 워커 기반 오프라인 대응 및 정적 자산 캐싱
Rels의 많은 이용 부탁드립니다!!🤗💗