뽀각코 ( Pogakco )
- 프론트엔드 : React, TypeScript
- 백엔드 : node.js, Express
- 팀 : 4인 개발 ( 본인 포함 FE 2인, BE 2인 )
- 개발 기간 : 2024-06-24 ~ 2024-07-19 ( 26일 )
- 깃허브 : https://github.com/Pogakco
- 배포 주소 : https://pogakco.site/
👏🏻 더 집중하고 싶으신가요? POGAKCO(뽀각코)를 만나보세요!
POGAKCO는 같은 타이머(=뽀모도로)를 통해 학습 사이클을 공유하고 생산성을 극대화할 수 있는 협업 서비스입니다.
자신만의 학습 스타일에 맞게 집중 시간, 쉬는 시간, 큰 휴식 시간, 그리고 뽀모도로 사이클 횟수를 설정하여 타이머를 생성하세요!
설정된 타이머는 다른 사용자와 실시간으로 공유됩니다!
함께하면 더 집중할 수 있고, 효율적인 학습 환경을 조성할 수 있는 POGAKCO로 여러분의 집중력을 높여보세요!
- UX,UI 디자인
- 메인 페이지, 상세 페이지, Modal 구현
- 방 생성, 참여, 삭제, 조회 API 연결
- 공유 타이머 기능 구현
- 실시간 참여중인 유저 기능 구현
import { SOCKET_TIMER_STATUS } from "@/constants/socket";
import { ItimerStatus } from "@/models/timer.model";
export const getTimerTime = (
differenceTime: number,
focusTime: number,
shortBreakTime: number,
totalCycles: number,
longBreakTime: number,
playFocusAlarm: () => void,
playShortBreakAlarm: () => void,
playLongBreakAlarm: () => void,
playEndAlarm: () => void
): ItimerStatus => {
const cycleDuration = focusTime + shortBreakTime;
const totalCycleTime = cycleDuration * totalCycles;
const totalCycleAndLongBreakTime = totalCycleTime + longBreakTime;
if (differenceTime >= totalCycleAndLongBreakTime) {
if (isEndTime()) playEndAlarm();
return {
status: SOCKET_TIMER_STATUS.END,
timerData: SOCKET_TIMER_STATUS.END_POINT
};
} else if (differenceTime >= totalCycleTime) {
if (isLongBreakTime(differenceTime, totalCycleTime)) playLongBreakAlarm();
return {
status: SOCKET_TIMER_STATUS.LONG_BREAK_TIME,
timerData: totalCycleAndLongBreakTime - differenceTime
};
}
const remainderTime = differenceTime % cycleDuration;
if (remainderTime < focusTime) {
if (isFocusTime(remainderTime)) playFocusAlarm();
return {
status: SOCKET_TIMER_STATUS.FOCUS_TIME,
timerData: focusTime - remainderTime
};
} else {
if (isShortBreakTime(remainderTime, focusTime)) playShortBreakAlarm();
return {
status: SOCKET_TIMER_STATUS.SHORT_BREAK_TIME,
timerData: cycleDuration - remainderTime
};
}
};
const isFocusTime = (remainderTime: number) => {
return remainderTime === 0;
};
const isShortBreakTime = (remainderTime: number, focusTime: number) => {
return remainderTime === focusTime;
};
const isLongBreakTime = (differTime: number, totalTime: number) => {
return differTime === totalTime;
};
const isEndTime = () => {
return true;
};
집중시간🤔 | 휴식시간😪 | 대 휴식시간😴 |
---|---|---|
![]() | ![]() | ![]() |
- 서버의 역할을 클라이언트에 위임함으로 부하를 줄일 수 있었고 성능적 이점을 얻을 수 있었다.
- 결과적으로 접근 방식을 달리 하여 더 많은 사용자를 수용할 수 있게 되었다.
1. 명확한 문서화
2. 코어타임을 활용한 지속적인 소통
3. Git Project를 통한 칸반보드 업무 관리
1. FE-BE, FE-FE 협업 스킬
2. SocketIO, tanstackQuery 등 새로운 기술의 습득
1. 기능이 우선시 되어진 코드
2. 부족한 타입스크립트 능력
1. 문서화 기술 향상
2. 커밋 관리
3. 더 완벽한 뽀각코