"어디 갈지 고민하는 시간, 이제 그만!"
친구들과 만나기로 했는데 어디를 갈지 정하느라 시간만 가고, 검색해도 원하는 결과가 안 나오는 경험, 누구나 있으시죠?
바로가기는 키워드 기반으로 하루 일정을 자동으로 추천해주는 스마트 플래너입니다. 레고 블록을 쌓듯이 큰 일정만 선택하면, AI가 세부 장소와 루트까지 알아서 짜드립니다!
- 🔍 검색의 고통: "모밀집" 검색했는데 라멘집만 나옴
- ⏰ 시간의 낭비: 어디 갈지 알아보는데 만남 시간의 절반 소모
- 🗺️ 루트의 혼란: 효율적인 동선을 짜는 게 너무 어려움
- 👥 의견 조율 지옥: 친구들 취향 맞추기가 전쟁
- ⚡ 키워드 기반 즉시 추천: "카페 → 식사 → 데이트" 선택만으로 완성
- 🧩 레고식 일정 구성: 큰 틀만 사용자가, 세부는 AI가
- 🗺️ 스마트 루트 최적화: 이동 시간을 고려한 효율적 동선
- 🎯 맞춤형 추천: 그룹 키워드 기반 모두가 만족하는 장소
- 트렌딩 핫플레이스: 지금 인기 있는 장소를 실시간 랭킹으로 표시
- 롤링 애니메이션: Framer Motion으로 구현한 부드러운 순위 변동
- 드래그 캐러셀: 터치/드래그로 탐색하는 트렌딩 일정 목록
- 키워드 기반 추천: "카페", "맛집", "데이트" 등 키워드 선택
- AI 자동 구성: 선택한 키워드에 맞는 최적의 장소 추천
- 시간표 뷰: 에브리타임처럼 직관적인 일정 시각화
- 태그 시스템: 일정별 카테고리 분류 및 필터링
- 이동 시간 계산: 장소 간 실제 이동 시간 고려
- 효율적 동선: 최단 거리 기반 순서 자동 조정
- 지도 시각화: 트리플처럼 전체 루트를 지도로 표시
- 멤버 초대: 친구들과 일정 공유
- 공동 키워드: 그룹원들의 선호도 통합 분석
- 알림 시스템: "이동할 시간이에요!" 실시간 알림
- 이메일 회원가입: 안전한 이메일 기반 계정 생성
- OAuth 로그인: Google, Kakao, Naver 소셜 로그인
- 계정 찾기: 아이디/비밀번호 찾기 및 재설정
| 카테고리 | 기술 | 버전 | 설명 |
|---|---|---|---|
| Core | React | 19.1.0 | 사용자 인터페이스 라이브러리 |
| TypeScript | 5.x | 정적 타입 시스템 | |
| Vite | 6.x | 번개같이 빠른 빌드 툴 | |
| Styling | Tailwind CSS | 4.x | 유틸리티 우선 CSS 프레임워크 |
| Emotion | 11.14.0 | CSS-in-JS 라이브러리 | |
| Material-UI | 7.2.0 | React UI 컴포넌트 | |
| Animation | Framer Motion | 12.23.22 | 프로덕션 레벨 애니메이션 |
| React Modal Sheet | 4.4.0 | 모바일 바텀 시트 | |
| Routing | React Router DOM | 7.6.3 | 클라이언트 사이드 라우팅 |
| Form | Yup | 1.6.1 | 스키마 기반 폼 검증 |
| Date | date-fns | 4.1.0 | 날짜 유틸리티 |
| React Datepicker | 8.4.0 | 날짜 선택 컴포넌트 | |
| Utils | es-hangul | 2.3.5 | 한글 처리 라이브러리 |
| clsx | 2.1.1 | 조건부 className 유틸 | |
| Dev Tools | Storybook | 9.0.12 | 컴포넌트 주도 개발 |
| Vitest | 3.2.3 | 단위 테스트 프레임워크 | |
| ESLint | 9.25.0 | 코드 품질 검사 |
- Database: MariaDB (RDB)
- API: RESTful API
- 인증: JWT + OAuth 2.0
Node.js >= 18.x
npm >= 9.x (또는 yarn >= 1.22.x)-
저장소 클론
git clone https://github.com/T-BluePot/barogagi-front.git cd barogagi-front -
의존성 설치
npm install
-
개발 서버 실행
npm run dev
브라우저에서 http://localhost:8080 접속
-
Storybook 실행
npm run storybook
브라우저에서 http://localhost:6006 접속
-
프로덕션 빌드
npm run build npm run preview # 빌드 결과 미리보기
barogagi-front/
├── .storybook/ # Storybook 설정
│ └── main.ts # Storybook 메인 설정
├── public/ # 정적 파일
│ └── vite.svg
├── src/
│ ├── assets/ # 이미지, 아이콘
│ │ └── icons/ # SVG 아이콘
│ │ ├── barogagi.svg
│ │ ├── google-circle.png
│ │ ├── kakao-circle.png
│ │ └── naver-circle.png
│ │
│ ├── components/ # 재사용 컴포넌트
│ │ ├── auth/ # 인증 관련
│ │ │ ├── common/ # 공통 (Input, Button, etc)
│ │ │ ├── signin/ # 로그인
│ │ │ ├── signup/ # 회원가입
│ │ │ ├── find/ # 계정 찾기
│ │ │ └── verify/ # 본인 인증
│ │ │
│ │ ├── common/ # 전역 공통
│ │ │ ├── buttons/ # 버튼 컴포넌트
│ │ │ ├── headers/ # 헤더 컴포넌트
│ │ │ ├── inputs/ # 입력 컴포넌트
│ │ │ └── tags/ # 태그 컴포넌트
│ │ │
│ │ ├── layout/ # 레이아웃
│ │ │ ├── Layout.tsx
│ │ │ ├── BottomModalLayout.tsx
│ │ │ └── FullScreenModalLayout.tsx
│ │ │
│ │ ├── main/ # 메인 앱
│ │ │ ├── home/ # 홈 화면
│ │ │ │ ├── HomeGreetingSection.tsx
│ │ │ │ ├── HomeContentsSection.tsx
│ │ │ │ └── contents/
│ │ │ │ ├── ContentWrapper.tsx
│ │ │ │ ├── HotPlaceSection.tsx
│ │ │ │ ├── RankingList.tsx
│ │ │ │ ├── RankingItem.tsx
│ │ │ │ ├── TrendingCarousel.tsx
│ │ │ │ ├── TrendingCarouselItem.tsx
│ │ │ │ ├── TrendingScheduleSection.tsx
│ │ │ │ └── UpcomingScheduleSection.tsx
│ │ │ └── plan/ # 일정 관리
│ │ │ ├── CourseCard.tsx
│ │ │ └── ...
│ │ │
│ │ └── modal/ # 모달
│ │ ├── CommonAlertModal.tsx
│ │ ├── CommonConfirmModal.tsx
│ │ └── FullScreenModal.tsx
│ │
│ ├── constants/ # 상수
│ │ ├── routes.ts # 라우트 경로
│ │ └── texts/ # 텍스트 상수
│ │ ├── auth/
│ │ └── main/
│ │
│ ├── hooks/ # 커스텀 훅
│ │ ├── useAppNavigation.ts
│ │ ├── useHeaderConfig.ts
│ │ └── usePhoneVerify.ts
│ │
│ ├── pages/ # 페이지
│ │ ├── auth/ # 인증 페이지
│ │ └── main/ # 메인 페이지
│ │ ├── HomePage.tsx
│ │ └── plan/
│ │
│ ├── routes/ # 라우팅
│ │ ├── AuthRoutes.tsx
│ │ └── MainRoutes.tsx
│ │
│ ├── styles/ # 스타일
│ │ ├── animations.css
│ │ └── README.md
│ │
│ ├── types/ # 타입 정의
│ │ ├── modalTypes.ts
│ │ ├── schedule.ts
│ │ └── auth/
│ │
│ ├── utils/ # 유틸리티
│ │ ├── authSchema.ts
│ │ ├── date.ts
│ │ └── regionFilter.ts
│ │
│ ├── App.tsx # 루트 컴포넌트
│ ├── main.tsx # 엔트리 포인트
│ └── globals.css # 전역 CSS
│
├── .eslintrc.js # ESLint 설정
├── .prettierrc # Prettier 설정
├── tailwind.config.js # Tailwind 설정
├── tsconfig.json # TypeScript 설정
├── vite.config.ts # Vite 설정
└── package.json # 의존성 관리
-
새 컴포넌트 생성
// src/components/example/MyComponent.tsx import React from 'react'; interface MyComponentProps { title: string; onClick?: () => void; } export const MyComponent: React.FC<MyComponentProps> = ({ title, onClick }) => { return ( <button onClick={onClick} className="typo-title-01 bg-main px-4 py-2 rounded-lg" > {title} </button> ); };
-
Storybook 스토리 작성
// src/components/example/MyComponent.stories.tsx import type { Meta, StoryObj } from '@storybook/react-vite'; import { MyComponent } from './MyComponent'; const meta: Meta<typeof MyComponent> = { title: 'Components/Example/MyComponent', component: MyComponent, tags: ['autodocs'], }; export default meta; type Story = StoryObj<typeof meta>; export const Default: Story = { args: { title: 'Click Me', }, };
Tailwind 유틸리티 우선
<div className="flex items-center gap-4 p-6 bg-main rounded-lg">
<h1 className="typo-title-01">Title</h1>
</div>커스텀 타이포그래피
typo-title-01: 대제목 (28px, Bold)typo-title-02: 중제목 (20px, Bold)typo-subtitle: 소제목 (16px, SemiBold)typo-body: 본문 (14px, Regular)typo-caption: 캡션 (12px, Regular)typo-tag: 태그 (10px, Medium)
import { useNavigate } from 'react-router-dom';
import { ROUTES } from '@/constants/routes';
const navigate = useNavigate();
navigate(ROUTES.MAIN.HOME);| 명령어 | 설명 |
|---|---|
npm run dev |
개발 서버 실행 (포트: 8080) |
npm run build |
프로덕션 빌드 생성 |
npm run preview |
빌드 결과 미리보기 |
npm run lint |
ESLint 코드 검사 |
npm run storybook |
Storybook 개발 서버 (포트: 6006) |
npm run build-storybook |
Storybook 정적 빌드 |
<type>(<scope>): <subject>
<body>
<footer>
Type
feat: 새로운 기능 추가fix: 버그 수정docs: 문서 수정style: 코드 포맷팅, 세미콜론 누락 등refactor: 코드 리팩토링test: 테스트 코드chore: 빌드, 패키지 매니저 설정 등design: CSS 등 UI 디자인 변경
예시
feat(auth): 이메일 로그인 기능 구현
- 이메일/비밀번호 검증 로직 추가
- 로그인 실패 시 에러 메시지 표시
- 로딩 상태 UI 구현
Closes #123main # 프로덕션 배포
├── develop # 개발 통합
├── feature/ # 기능 개발
├── fix/ # 버그 수정
├── design/ # UI/UX 작업
└── docs/ # 문서 작업
브랜치 네이밍
feature/login-pagefix/ranking-animationdesign/main-pagedocs/readme
파일/폴더 네이밍
- 컴포넌트:
PascalCase(MyComponent.tsx) - 유틸/훅:
camelCase(useAuth.ts) - 상수:
UPPER_SNAKE_CASE - 타입/인터페이스:
PascalCase
컴포넌트 구조
// 1. Import
import React from 'react';
import { useNavigate } from 'react-router-dom';
// 2. Type/Interface
interface Props {
title: string;
}
// 3. Component
export const MyComponent: React.FC<Props> = ({ title }) => {
// 3-1. Hooks
const navigate = useNavigate();
// 3-2. State
const [state, setState] = useState('');
// 3-3. Effects
useEffect(() => {
// ...
}, []);
// 3-4. Handlers
const handleClick = () => {
// ...
};
// 3-5. Render
return <div>{title}</div>;
};작업 중 - 추후 업데이트 예정
POST /api/auth/signup- 회원가입POST /api/auth/login- 로그인POST /api/auth/logout- 로그아웃GET /api/auth/verify- 토큰 검증
GET /api/schedules- 일정 목록 조회POST /api/schedules- 일정 생성GET /api/schedules/:id- 일정 상세 조회PUT /api/schedules/:id- 일정 수정DELETE /api/schedules/:id- 일정 삭제
POST /api/recommend- AI 기반 장소 추천GET /api/trending- 트렌딩 핫플레이스
- 프로젝트 초기 설정
- 인증 시스템 (회원가입/로그인)
- 홈 화면 UI
- 일정 생성 기본 UI
- 키워드 기반 추천 시스템
- 지도 연동
- AI 기반 장소 추천
- 루트 최적화 알고리즘
- 시간표 뷰 구현
- 그룹 멤버 초대
- 실시간 알림
- 소셜 로그인 (Google, Kakao, Naver)
- 사용자 선호도 학습
- 일정 공유 기능
- 리뷰 시스템
- 성능 최적화
- SEO 개선
- PWA 적용
- 다국어 지원
바로가기 프로젝트에 기여해주셔서 감사합니다!
- Fork 이 저장소
- 브랜치 생성 (
git checkout -b feature/AmazingFeature) - 커밋 (
git commit -m 'feat: Add some AmazingFeature') - Push (
git push origin feature/AmazingFeature) - Pull Request 생성
- 주기: 2주에 1회
- 요일: 유동적 (매주 월요일 논의)
- 방식: 온라인 또는 오프라인
- 컨벤션 가이드 최종 확정
- API 명세서 작성
- 플로우 차트 작성
- Use Case Diagram 작성
- GitHub 프로젝트 설정
- README 업데이트
T-BluePot - 열정 넘치는 개발자들의 모임
| 역할 | 담당자 | GitHub |
|---|---|---|
| 프론트엔드 | 은우 | @jeong-eun-woo |
| 프론트엔드 | 서림 | @서림 |
| 백엔드 | 효경 | @효경 |
이 프로젝트는 MIT 라이선스 하에 배포됩니다. 자세한 내용은 LICENSE 파일을 참조하세요.
이 프로젝트는 다음 오픈소스 프로젝트들의 도움을 받았습니다:
- React - UI 라이브러리
- Vite - 빌드 툴
- Tailwind CSS - CSS 프레임워크
- Framer Motion - 애니메이션
- Storybook - 컴포넌트 개발 환경
⭐ 이 프로젝트가 마음에 드셨다면 Star를 눌러주세요! ⭐
Made with ❤️ by T-BluePot Team
© 2025 Barogagi. All rights reserved.