β’ νλ‘μ νΈ μ΄λ¦: Banddy β’ νλ‘μ νΈ μ€λͺ : μμ μ μ’μνλ μ¬λλ€μ μν μμ μ€μ¬ μμ μΉμ± (PWA)
-
λ°°ν¬μ£Όμ : https://www.banddy.click/
-
TestID :
-
TestPW :
| μ λ‘/μ κ·μ | μ€ν/μ΅μ€ν | μΈκ³ μ¬/λ°μΈμ | μ£Όμ΄/μ΅νμ€ |
|---|---|---|---|
![]() |
![]() |
![]() |
![]() |
| PL | FE | FE | FE |
| GitHub | GitHub | GitHub | GitHub |
- λ°νμ/λꡬ
- React 19, TypeScript 5, Vite 7, React Router 7
- λͺ¨λ λ²λ€λ§/κ°λ° μλ²: Vite
- ν¨ν€μ§ λ§€λμ : npm
- UI/μ€νμΌ
- MUI 7 + Emotion, Tailwind CSS 4
- SVG νΈλ€λ§: vite-plugin-svgr
- μν/λ°μ΄ν°
- μλ² μν: @tanstack/react-query v5
- ν΄λΌμ΄μΈνΈ μν: Zustand, Valtio
- λ€νΈμνΉ/μ€μκ°
- HTTP: Axios
- μ€μκ°: SockJS + @stomp/stompjs
- νμ§ κ΄λ¦¬
- μ μ λΆμ: ESLint 9
- νμ 체ν¬: tsc --noEmit
- νμ
/λ°°ν¬/λμμΈ
- νμ : GitHub, Notion
- λ°°ν¬: Vercel, AWS(λ°°ν¬ μ€ν¬λ¦½νΈ μ 곡, scripts/deploy-aws.sh)
- λμμΈ: Figma
- PWA
- νλ¬κ·ΈμΈ: vite-plugin-pwa (νμ¬ Service Worker μ΄μλ‘ λΉνμ±ν μν)
- νμκ°μ /λ‘κ·ΈμΈ: μ΄λ©μΌ κΈ°λ° κ°μ /λ‘κ·ΈμΈ, μΈμ μ μ§
- μ·¨ν₯ κΈ°λ° μΆμ²: μ¬μ ν μ€νΈ κ²°κ³Όλ‘ ν μΆμ²/λ§μΆ€ μ½ν μΈ μ 곡
- λ°΄λ νμ/μμΈ: λ°΄λ μ 보, ꡬμ±μ, νλ μ΄λ¦¬μ€νΈ, μ νΈ ν μ 곡
- μμΉ΄μ΄λΈ κ΄λ¦¬: μν°μ€νΈ/μ¨λ²/νΈλ μ μ₯Β·ν΄λλ§, μ¨λ² μμΈ μ‘°ν
- κ²μ/μλμμ±: μν°μ€νΈ/μ¨λ²/νΈλ κ²μ λ° μλμμ± μ§μ
- νλ‘ν κ΄λ¦¬: μκΈ°μκ°, μΈμ /λ 벨, μ νΈ μ₯λ₯΄/μν°μ€νΈ νΈμ§
- μμ μΈν°λμ : νλ‘μ°, μ’μμ, λκΈ
- μλ¦Ό μμ€ν : μΉκ΅¬μμ²/μ±ν /μμ€ν μλ¦Ό, μ½μ μ²λ¦¬
- μ€μκ° μ±ν : κ·Έλ£Ή/κ°μΈ μ±ν , STOMP/SockJS κΈ°λ°, μ½μ μν μ μ‘
- Join νλ‘μ°: λ°΄λ μμ±(곑/μ₯λ₯΄/μν°μ€νΈ), μ±ν κ°μ€, λͺ¨μ§κΈ κ΄λ¦¬
- PWA μ§ν₯: μ€νλΌμΈΒ·μ€μΉν UX μ€λΉ(ν μμ SW λΉνμ±)
- μ κ·Ό μ μ΄: λ³΄νΈ λΌμ°νΈλ‘ μΈμ¦ μꡬ κ²½λ‘ κ΄λ¦¬
βββ DEPLOYMENT.md
βββ GITHUB_SECRETS_SETUP.md
βββ README.md
βββ eslint.config.cjs
βββ index.html
βββ package-lock.json
βββ package.json
βββ tsconfig.app.json
βββ tsconfig.json
βββ tsconfig.node.json
βββ vite.config.ts
βββ documents
β βββ chat
β βββ README.md
β βββ v1.md
β βββ v2.md
β βββ v3.md
βββ public
β βββ android-chrome-192x192.png
β βββ android-chrome-512x512.png
β βββ apple-touch-icon.png
β βββ favicon.ico
β βββ fonts
β β βββ HakgyoansimBareondotumB.otf
β β βββ HakgyoansimBareondotumB.ttf
β β βββ HakgyoansimBareondotumR.otf
β β βββ ...
β βββ manifest.json
β βββ styles
β βββ style.css
βββ scripts
β βββ deploy-aws.sh
β βββ setup-aws.sh
βββ src
βββ App.css
βββ index.css
βββ main.tsx
βββ api
β βββ API.ts
βββ app
β βββ router.tsx
βββ assets
β βββ icons
β β βββ archive
β β β βββ additem.svg
β β β βββ back.svg
β β β βββ ...
β β βββ bottombar
β β β βββ chat.svg
β β β βββ home.svg
β β β βββ ...
β β βββ chat
β β βββ home
β β βββ join
β β βββ login
β β βββ my
β β βββ notification
β β βββ pretest
β β βββ profile
β β βββ setting
β β βββ ...
β βββ images
β β βββ guitar-boy.svg
β β βββ home-album1.svg
β β βββ ...
β βββ logos
β β βββ Banddy.svg
β β βββ LOGO1.svg
β β βββ ...
β βββ splash-main.png
βββ constants
β βββ index.ts
βββ features
β βββ archive
β β βββ hooks
β β β βββ useAddArtistsToFolder.ts
β β β βββ useAlbumDetail.ts
β β β βββ ...
β β βββ utils
β β βββ colorMapping.ts
β βββ band
β β βββ hooks
β β βββ keys.ts
β β βββ useBandData.ts
β βββ my
β β βββ hooks
β β βββ useProfile.ts
β βββ notification
β β βββ hooks
β β βββ useFriendRequestActions.ts
β β βββ ...
β βββ pretest
β β βββ hooks
β β βββ keys.ts
β β βββ useSurveyData.ts
β βββ profile
β β βββ hooks
β β βββ useOtherProfile.ts
β β βββ ...
β βββ setting
β βββ hooks
β βββ useAuth.ts
β βββ ...
βββ pages
β βββ Archive
β β βββ _components
β β β βββ ActionBar.tsx
β β β βββ ArchiveGrid.tsx
β β β βββ ...
β β βββ AddPage.tsx
β β βββ Album
β β β βββ AlbumDetailPage.tsx
β β β βββ ...
β β βββ ArchivePage.tsx
β β βββ Artist
β β β βββ ArtistGrid.tsx
β β β βββ ...
β β βββ Music
β β βββ _components
β β β βββ AddFolderModal.tsx
β β β βββ ...
β β βββ MusicGrid.tsx
β β βββ ...
β βββ Artist
β β βββ ArtistDetailPage.tsx
β β βββ ArtistsPage.tsx
β βββ Band
β β βββ BandChatPage.tsx
β β βββ BandDetailPage.tsx
β βββ chat
β β βββ _components
β β β βββ ChatDateDivider.tsx
β β β βββ ...
β β βββ hooks
β β β βββ useChat.ts
β β β βββ useWebSocket.ts
β β βββ ChatPage.tsx
β β βββ ChatDemoPage.tsx
β β βββ PrivateChatPage.tsx
β βββ Home
β β βββ _components
β β β βββ BandCarousel.tsx
β β β βββ ...
β β βββ BandDetailPage
β β β βββ PeoplePage.tsx
β β β βββ ...
β β βββ GuestHomePage.tsx
β β βββ HomePage.tsx
β βββ Join
β β βββ _components
β β β βββ band_recruit
β β β β βββ BandMenuContentBtn.tsx
β β β β βββ ...
β β β βββ chat
β β β βββ create_band
β β β βββ saved_band
β β β βββ JoinHeader.tsx
β β β βββ ...
β β βββ _constants
β β β βββ genres.ts
β β β βββ regions.ts
β β βββ _utils
β β β βββ parseToKoreanText.ts
β β β βββ showMembers.ts
β β βββ BandRecruit.tsx
β β βββ create_band
β β β βββ CreateBand.tsx
β β β βββ CreateBandArtist.tsx
β β β βββ ...
β β βββ CreateChat.tsx
β β βββ CreateChat2.tsx
β β βββ saved_band
β β β βββ SavedBand.tsx
β β β βββ SavedBandDetail.tsx
β β βββ JoinChangeChatInfo.tsx
β βββ Login
β β βββ _components
β β β βββ LoginInputField.tsx
β β βββ LoginPage.tsx
β βββ Manual
β β βββ ManualPage.tsx
β βββ My
β β βββ _components
β β β βββ Archive
β β β β βββ ArchiveItem.tsx
β β β β βββ ...
β β β βββ HashTagList.tsx
β β β βββ ...
β β βββ MyPage.tsx
β βββ NotFound
β β βββ NotFoundPage.tsx
β βββ Notification
β β βββ _components
β β β βββ NotificationItem.tsx
β β β βββ ...
β β βββ NotificationDetailPage.tsx
β β βββ NotificationPage.tsx
β βββ pretest
β β βββ artist
β β βββ session
β β βββ profile
β βββ Profile
β βββ _components
β β βββ ProfileActionButtons.tsx
β β βββ ...
β βββ OtherProfile.tsx
β βββ ProfileDetailPage.tsx
βββ services
β βββ WebSocketService.ts
βββ shared
β βββ components
β β βββ AuthProvider.tsx
β β βββ ChatComponents.tsx
β β βββ CommonBtn.tsx
β βββ styles
β β βββ fonts.css
β βββ ui
β β βββ atoms
β β β βββ CustomButton.tsx
β β β βββ ...
β β βββ molecules
β β β βββ TagList.tsx
β β βββ organisms
β β βββ JoinBandModal.tsx
β β βββ ProfileRequestModal.tsx
β βββ utils
β βββ authCleanup.ts
βββ store
β βββ albumApi.ts
β βββ artistApi.ts
β βββ auth.ts
β βββ ...
βββ types
β βββ album.ts
β βββ artist.ts
β βββ ...
βββ widgets
βββ Layout
βββ BottomBar.tsx
βββ Header.tsx
βββ Layout.tsx
κΈ°λ³Έ νλ μμν¬/λΌμ΄λΈλ¬λ¦¬
- React
- TypeScript
- Vite
- Vite-plugin-pwa
Style
- Tailwind CSS
State Management
- Valtio
Animation
- Framer Motion
β’ GitHub β’ Notion
banddy/
βββ public/
β βββ index.html
β βββ manifest.json
β βββ sw.js
β βββ icons/
βββ src/
β βββ assets/ # μ΄λ―Έμ§, ν°νΈ λ± μ μ νμΌ
β βββ components/ # μ¬μ¬μ© κ°λ₯ν UI μ»΄ν¬λνΈ
β βββ hooks/ # 컀μ€ν
ν
λͺ¨μ
β βββ pages/ # νμ΄μ§ μ»΄ν¬λνΈ
β βββ utils/ # κ³΅ν΅ μ νΈλ¦¬ν° ν¨μ
β βββ api/ # API ν΅μ λ‘μ§
β βββ App.tsx # λ©μΈ μ»΄ν¬λνΈ
β βββ main.tsx # μνΈλ¦¬ ν¬μΈνΈ
β βββ index.css # κΈλ‘λ² CSS
β βββ firebaseConfig.ts # Firebase μ΄κΈ°ν
βββ .gitignore
βββ package-lock.json
βββ package.json
βββ tsconfig.json
βββ README.md
β’ Main Branch: λ°°ν¬ κ°λ₯ν μν μ μ§ β’ Develop Branch: κ°λ° λ° ν μ€νΈ ν΅ν© λΈλμΉ β’ Feature/{κΈ°λ₯λͺ }: κ°λ³ κΈ°λ₯ κ°λ° λΈλμΉ
console.log("Hello Banddy!");
β’ μμ: λλ¬Έμ + μ€λ€μ΄ν¬ μΌμ΄μ€ (const MAX_USER_COUNT) β’ λ³μ λ° ν¨μ: μΉ΄λ© μΌμ΄μ€ (const isLoading) β’ μ΄λ²€νΈ νΈλ€λ¬: onμΌλ‘ μμ (onClick, onChange) β’ boolean λ°ν κ°: is, hasλ‘ μμ (isAuthenticated) β’ λ°°μ΄ λ³μ: 볡μν (const users) ⒠컀μ€ν ν : useλ‘ μμ (useUserAuth)
if (isLoading) { return 'Loading'; }
const fetchPlaylist = async () => {};
β’ ν΄λ: μΉ΄λ©μΌμ΄μ€ (components, hooks)
β’ μ»΄ν¬λνΈ: νμ€μΉΌ μΌμ΄μ€ (Playlist.jsx)
β’ κ·Έ μΈ: μΉ΄λ©μΌμ΄μ€ (useAuth.js)
type: subject
body
Type
β’ feat: κΈ°λ₯ μΆκ°
β’ fix: λ²κ·Έ μμ
β’ docs: λ¬Έμ μμ
β’ style: μ½λ ν¬λ§· μμ
β’ refactor: μ½λ 리ν©ν λ§
β’ chore: μ€μ λ° λΉλ
μμ
feat: νλ μ΄λ¦¬μ€νΈ 곡μ κΈ°λ₯ ꡬν
(μ¬μ©μκ° λ§λ νλ μ΄λ¦¬μ€νΈλ₯Ό μμ
λ―Έλμ΄λ‘ 곡μ κ°λ₯)
refactor: useAuth ν
μ΅μ ν
(λΆνμν μν μ
λ°μ΄νΈ μ κ±° λ° μ±λ₯ μ΅μ ν)




