[The-julge]는 매칭 플랫폼의 기본 기능을 중심으로 한 웹 애플리케이션입니다. 조건을 입력해 일자리를 검색하는 기능을 통해 매칭 플랫폼의 핵심 요소를 이해하고 구현 능력을 향상시킵니다. 사용자는 원하는 일자리에 지원하고, 근무 승인을 받는 기능을 통해 매칭 과정에 대한 실습을 할 수 있습니다.
고서영 | 박원현 | 이나경 | 차경훈 |
---|
2025년 04월 22일 - 2025년 05월 09일
https://the-julge-team3.netlify.app/
pnpm run dev
📦
├─ .github
│ ├─ ISSUE_TEMPLATE
│ │ ├─ etc-template.md
│ │ ├─ 🐞-bug-report-template.md
│ │ └─ 🔍-feature-issue.md
│ └─ pull_request_template.md
├─ .gitignore
├─ .vscode
│ └─ settings.json
├─ README.md
├─ eslint.config.mjs
├─ next.config.ts
├─ package-lock.json
├─ package.json
├─ pnpm-lock.yaml
├─ postcss.config.js
├─ public
│ ├─ assets
│ │ ├─ dummy
│ │ ├─ icons
│ │ │ ├─ chevron
│ │ │ │ ├─ chevron-outline.svg
│ │ │ │ └─ chevron.svg
│ │ │ ├─ map.svg
│ │ │ ├─ notification.svg
│ │ │ └─ search.svg
│ │ └─ images
│ │ ├─ arrow_up.svg
│ │ ├─ arrow_up_gray.svg
│ │ ├─ arrow_up_red_30.svg
│ │ ├─ arrow_up_red_40.svg
│ │ ├─ blur-placeholder.jpg
│ │ ├─ camera.svg
│ │ ├─ check.svg
│ │ ├─ clock.svg
│ │ ├─ clock_gray.svg
│ │ ├─ close.svg
│ │ ├─ delete_red.svg
│ │ ├─ ellipse.svg
│ │ ├─ logo.svg
│ │ ├─ map.svg
│ │ ├─ map_gray.svg
│ │ ├─ notification.svg
│ │ ├─ phone.svg
│ │ ├─ placeholder.png
│ │ ├─ select_arrow.svg
│ │ └─ vector.svg
│ ├─ fonts
│ │ ├─ SpoqaHanSansNeo-Bold.ttf
│ │ ├─ SpoqaHanSansNeo-Bold.woff
│ │ ├─ SpoqaHanSansNeo-Bold.woff2
│ │ ├─ SpoqaHanSansNeo-Regular.ttf
│ │ ├─ SpoqaHanSansNeo-Regular.woff
│ │ └─ SpoqaHanSansNeo-Regular.woff2
│ └─ temp-restaurant.jpg
├─ src
│ ├─ app
│ │ ├─ (auth)
│ │ │ ├─ login
│ │ │ │ └─ page.tsx
│ │ │ └─ signup
│ │ │ ├─ components
│ │ │ │ ├─ MemberTypeRadioInput.tsx
│ │ │ │ └─ RadioButton.tsx
│ │ │ └─ page.tsx
│ │ ├─ (main)
│ │ │ ├─ layout.tsx
│ │ │ ├─ notices
│ │ │ │ ├─ [noticeId]
│ │ │ │ │ └─ page.tsx
│ │ │ │ └─ components
│ │ │ │ ├─ PaginatedNoticeList.tsx
│ │ │ │ └─ RecommendedNotices.tsx
│ │ │ ├─ page.tsx
│ │ │ ├─ profile
│ │ │ │ └─ worker
│ │ │ │ └─ [id]
│ │ │ │ ├─ components
│ │ │ │ │ ├─ ApplicationTable.tsx
│ │ │ │ │ └─ ProfileCard.tsx
│ │ │ │ ├─ page.tsx
│ │ │ │ └─ register
│ │ │ │ └─ page.tsx
│ │ │ └─ shops
│ │ │ ├─ [shopId]
│ │ │ │ ├─ edit
│ │ │ │ │ ├─ components
│ │ │ │ │ │ ├─ ImageUploader.tsx
│ │ │ │ │ │ └─ ShopEditForm.tsx
│ │ │ │ │ ├─ hooks
│ │ │ │ │ │ └─ useShopEdit.ts
│ │ │ │ │ └─ page.tsx
│ │ │ │ ├─ notices
│ │ │ │ │ ├─ [noticeId]
│ │ │ │ │ │ ├─ applications
│ │ │ │ │ │ │ ├─ components
│ │ │ │ │ │ │ │ └─ ApplicationTable.tsx
│ │ │ │ │ │ │ └─ page.tsx
│ │ │ │ │ │ └─ edit
│ │ │ │ │ │ └─ page.tsx
│ │ │ │ │ └─ register-notice
│ │ │ │ │ └─ page.tsx
│ │ │ │ ├─ page.tsx
│ │ │ │ └─ register
│ │ │ │ ├─ components
│ │ │ │ │ ├─ ImageUploader.tsx
│ │ │ │ │ └─ ShopRegisterForm.tsx
│ │ │ │ ├─ hooks
│ │ │ │ │ └─ useShopRegister.ts
│ │ │ │ └─ page.tsx
│ │ │ └─ new
│ │ │ └─ page.tsx
│ │ ├─ dummyApplication.ts
│ │ ├─ globals.css
│ │ ├─ layout.tsx
│ │ └─ providers.tsx
│ ├─ components
│ │ ├─ Button
│ │ │ ├─ Button.tsx
│ │ │ └─ ModalButton.tsx
│ │ ├─ Card
│ │ │ ├─ EmptyCard.tsx
│ │ │ ├─ NoticeRegisterCard.tsx
│ │ │ ├─ RegisterCard.tsx
│ │ │ └─ ShopOverview.tsx
│ │ ├─ FallbackImage
│ │ │ └─ FallbackImage.tsx
│ │ ├─ FilterPanel
│ │ │ └─ FilterPanel.tsx
│ │ ├─ GNB
│ │ │ ├─ GlobalHeader.tsx
│ │ │ ├─ NotificationPanel.tsx
│ │ │ └─ SearchBar.tsx
│ │ ├─ IconText
│ │ │ ├─ IconText.tsx
│ │ │ └─ IconTextList.tsx
│ │ ├─ Input
│ │ │ ├─ Input.tsx
│ │ │ ├─ InputField.tsx
│ │ │ ├─ NoticeSelectInput.tsx
│ │ │ └─ SelectInput.tsx
│ │ ├─ Modal
│ │ │ ├─ AlertModal.tsx
│ │ │ ├─ ApplyModal.tsx
│ │ │ ├─ Modal.tsx
│ │ │ ├─ RegisterModal.tsx
│ │ │ └─ useApplyModal.tsx
│ │ ├─ Notice
│ │ │ ├─ NoticeCard.tsx
│ │ │ ├─ NoticeCardView.tsx
│ │ │ ├─ NoticeList.tsx
│ │ │ └─ PayBadge.tsx
│ │ ├─ Pagination
│ │ │ ├─ ChevronButton.tsx
│ │ │ ├─ PageButton.tsx
│ │ │ └─ Pagination.tsx
│ │ ├─ Section
│ │ │ └─ Section.tsx
│ │ ├─ Shop
│ │ │ └─ ShopInfo.tsx
│ │ ├─ ShopCard
│ │ │ ├─ ShopAction.tsx
│ │ │ ├─ ShopCategory.tsx
│ │ │ ├─ ShopDescription.tsx
│ │ │ ├─ ShopImage.tsx
│ │ │ ├─ ShopInfoCard.tsx
│ │ │ ├─ ShopLocation.tsx
│ │ │ └─ ShopName.tsx
│ │ ├─ ShopItem
│ │ │ ├─ ShopItem.tsx
│ │ │ └─ ShopItemSchemas.tsx
│ │ ├─ ShopNotices
│ │ │ └─ ShopNotices.tsx
│ │ └─ Table
│ │ ├─ StatusButton.tsx
│ │ ├─ Table.tsx
│ │ └─ TableSchemas.tsx
│ ├─ contexts
│ │ └─ AuthContext.tsx
│ ├─ hooks
│ │ ├─ api
│ │ │ ├─ useAlertService.ts
│ │ │ ├─ useApplications.ts
│ │ │ ├─ useAuthentication.ts
│ │ │ ├─ useImageUpload.ts
│ │ │ ├─ useNoticeService.tsx
│ │ │ ├─ useParsedNoticeQuery.tsx
│ │ │ ├─ useShopService.ts
│ │ │ └─ useUserService.ts
│ │ └─ usePagination.ts
│ ├─ lib
│ │ ├─ axios.ts
│ │ ├─ constants
│ │ │ ├─ addressOptions.ts
│ │ │ └─ foodCategory.ts
│ │ ├─ getQueryString.ts
│ │ ├─ imageAssets.ts
│ │ ├─ react-query.ts
│ │ └─ shopApi.ts
│ ├─ mock
│ │ └─ noticeData.ts
│ ├─ styles
│ │ └─ dummy
│ ├─ types
│ │ ├─ ShopTypes.ts
│ │ ├─ api
│ │ │ ├─ application.ts
│ │ │ ├─ notice.ts
│ │ │ ├─ notification.ts
│ │ │ ├─ shop.ts
│ │ │ └─ user.ts
│ │ └─ common.ts
│ └─ utils
│ └─ dummy
├─ tailwind.config.js
└─ tsconfig.json
대상 | 규칙 | 예시 |
---|---|---|
폴더명 | 파스칼케이스(PascalCase) | UserProfile.tsx |
함수명/변수명 | 카멜케이스(carmelCase) | userList |
환경 변수 | 대문자 + 스네이크케이스 | LOGIN_CONTENT |
브렌치 종류 | 네이밍 규칙 | 예시 |
---|---|---|
기능 개발 | feature/{task} | feature/component |
버그 수정 | fix/{bug} | fix/component |
문서 수정 | docs/{readme} | docs/readme-file |
태그 | 의미 |
---|---|
feat | 새로운 기능 추가 |
fix | 버그 수정 |
docs | 문서 수정 |
style | 포멧팅, 세미콜론 누락 등 |
refactor | 리팩토링 |
test | 테스트 코드 추가 |
chore | 설정, 빌드 변경 등 |
- ✨ [Feat] 프로필 상세 페이지 구현
- 🐛 [Fix] 공고 필터 오류 수정
- ♻️ [Refactor] API 훅 리팩토링