diff --git a/.github/ISSUE_TEMPLATE/bug.yml b/.github/ISSUE_TEMPLATE/bug.yml deleted file mode 100644 index 4cf5eb1d..00000000 --- a/.github/ISSUE_TEMPLATE/bug.yml +++ /dev/null @@ -1,43 +0,0 @@ -name: ๐Ÿž Bug -description: ๋ฒ„๊ทธ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‚˜์š”? -title: '[fix] ' -labels: ['๐Ÿž BugFix'] -projects: ['KFE3-bootup-SAJO/145'] -body: - - type: textarea - id: bug-description - attributes: - label: ๐Ÿž ์„ค๋ช… - description: ๋ฒ„๊ทธ์— ๋Œ€ํ•œ ์„ค๋ช…์„ ์ž‘์„ฑํ•ด ์ฃผ์„ธ์š”. - validations: - required: true - - type: textarea - id: bug-simulation - attributes: - label: ๐Ÿ’ป ๋ฒ„๊ทธ ์‹œ๋ฎฌ๋ ˆ์ด์…˜ - description: ๋ฒ„๊ทธ๋ฅผ ๋ฐœ๊ฒฌํ•œ ์ƒํ™ฉ์„ ๋‹จ๊ณ„๋ณ„๋กœ ์ž‘์„ฑํ•ด ์ฃผ์„ธ์š”. - validations: - required: true - - type: textarea - id: bug-solution - attributes: - label: ๐Ÿ’ก ํ•ด๊ฒฐ ๋ฐฉ๋ฒ• - description: ํ•ด๊ฒฐ ๋ฐฉ๋ฒ•์„ ์•Œ๊ณ  ์žˆ๋‹ค๋ฉด ์ž‘์„ฑํ•ด ์ฃผ์„ธ์š”. - validations: - required: false - - type: textarea - id: bug-os - attributes: - label: ๐ŸŒ ํ™˜๊ฒฝ - description: ๋ฒ„๊ทธ๊ฐ€ ๋ฐœ์ƒํ•œ ํ™˜๊ฒฝ์— ๋Œ€ํ•ด ์ž‘์„ฑํ•ด ์ฃผ์„ธ์š”. - placeholder: | - OS: macOS 14.5 - validations: - required: false - - type: textarea - id: bug-more - attributes: - label: ๐Ÿ“ ๋ฉ”๋ชจ - description: ๋” ํ•˜๊ณ  ์‹ถ์€ ๋ง์ด ์žˆ๋‹ค๋ฉด ์ž‘์„ฑํ•ด ์ฃผ์„ธ์š”. - validations: - required: false diff --git a/.github/ISSUE_TEMPLATE/feature.yml b/.github/ISSUE_TEMPLATE/feature.yml deleted file mode 100644 index 52a6b2ac..00000000 --- a/.github/ISSUE_TEMPLATE/feature.yml +++ /dev/null @@ -1,29 +0,0 @@ -name: โœจ Feature -description: ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์ด๋‚˜ ๋ช…์„ธ๊ฐ€ ์žˆ๋‚˜์š”? -title: '[feat] ' -labels: ['โœจ Feature'] -projects: ['KFE3-bootup-SAJO/145'] -body: - - type: textarea - id: feature-description - attributes: - label: ๐Ÿ“„ ์„ค๋ช… - description: ์ƒˆ๋กœ์šด ๊ธฐ๋Šฅ์— ๋Œ€ํ•œ ์„ค๋ช…์„ ์ž‘์„ฑํ•ด ์ฃผ์„ธ์š”. - placeholder: ์ž์„ธํ•˜๊ฒŒ ์ž‘์„ฑํ•˜๊ธฐ! - validations: - required: true - - type: textarea - id: feature-todo - attributes: - label: โœ… ํ•ด์•ผ ํ•  ์ผ - description: ํ•ด์•ผ ํ•  ์ผ์— ๋Œ€ํ•œ Tasks๋ฅผ ์ž‘์„ฑํ•ด ์ฃผ์„ธ์š”. - placeholder: ์ตœ๋Œ€ํ•œ ์„ธ๋ถ„ํ™”ํ•ด์„œ ์ž‘์„ฑ! (์ฒดํฌ๋ฐ•์Šค ํ™œ์šฉํ•˜๊ธฐ) - validations: - required: true - - type: textarea - id: feature-memo - attributes: - label: ๐Ÿ“ ๋ฉ”๋ชจ - description: ๋” ํ•˜๊ณ  ์‹ถ์€ ๋ง์ด ์žˆ๋‹ค๋ฉด ์ž‘์„ฑํ•ด ์ฃผ์„ธ์š”. - validations: - required: false diff --git a/.github/ISSUE_TEMPLATE/test.yml b/.github/ISSUE_TEMPLATE/test.yml deleted file mode 100644 index 50c07590..00000000 --- a/.github/ISSUE_TEMPLATE/test.yml +++ /dev/null @@ -1,52 +0,0 @@ -name: ๐Ÿงช test -description: ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•˜๊ฑฐ๋‚˜ ๊ธฐ์กด ํ…Œ์ŠคํŠธ ์ฝ”๋“œ๋ฅผ ๋ฆฌํŒฉํ† ๋งํ•ฉ๋‹ˆ๋‹ค. -title: '[๐Ÿงช test] ' -labels: ['๐Ÿงช test'] -body: - - type: textarea - id: test-description - attributes: - label: ๐Ÿงช ํ…Œ์ŠคํŠธ ์š”์•ฝ - description: | - ํ…Œ์ŠคํŠธ ๋Œ€์ƒ(๊ธฐ๋Šฅ/๋ชจ๋“ˆ/ํ™”๋ฉด)๊ณผ ๋ชฉ์ (ํ…Œ์ŠคํŠธ๊ฐ€ ํ•„์š”ํ•œ ์ด์œ , ํ…Œ์ŠคํŠธ๋กœ ํ™•์ธํ•˜๊ณ  ์‹ถ์€ ๋‚ด์šฉ)์„ ์ž์„ธํžˆ ์ž‘์„ฑํ•ด ์ฃผ์„ธ์š”. - - - placeholder: - validations: - required: true - - type: textarea - id: test-os - attributes: - label: ๐Ÿงช ํ…Œ์ŠคํŠธ ํ™˜๊ฒฝ - description: | - ํ…Œ์ŠคํŠธ ํ…Œ์ŠคํŠธ ํ™˜๊ฒฝ(OS / ๋ธŒ๋ผ์šฐ์ € / ๋ฒ„์ „ / ์„œ๋ฒ„ ๋ฐฑ์—”๋“œ ๋“ฑ)์„ ์ž์„ธํžˆ ์ž‘์„ฑํ•ด ์ฃผ์„ธ์š”. - - - placeholder: - validations: - required: true - - type: textarea - id: test-case - attributes: - label: ๐Ÿงช ํ…Œ์ŠคํŠธ ์‹œ๋‚˜๋ฆฌ์˜ค - description: | - ํ…Œ์ŠคํŠธ ํ…Œ์ŠคํŠธ ํ™˜๊ฒฝ(OS / ๋ธŒ๋ผ์šฐ์ € / ๋ฒ„์ „ / ์„œ๋ฒ„ ๋ฐฑ์—”๋“œ ๋“ฑ)์„ ์ž์„ธํžˆ ์ž‘์„ฑํ•ด ์ฃผ์„ธ์š”. - - - placeholder: - validations: - required: true - - type: textarea - id: test-case - attributes: - label: ๐Ÿงช ํ…Œ์ŠคํŠธ ๊ฒฐ๊ณผ - description: | - ์˜ˆ์ƒ ๊ฒฐ๊ณผ์™€ ์‹ค์ œ ํ…Œ์ŠคํŠธ ๊ฒฐ๊ณผ๋ฅผ ์ž‘์„ฑํ•ด ์ฃผ์„ธ์š”. - - - placeholder: - validations: - required: true - - type: textarea - id: test-more - attributes: - label: ๐Ÿ“ ๋ฉ”๋ชจ - description: ๋” ํ•˜๊ณ  ์‹ถ์€ ๋ง์ด ์žˆ๋‹ค๋ฉด ์ž‘์„ฑํ•ด ์ฃผ์„ธ์š”. - validations: - required: false diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml deleted file mode 100644 index a7f4b78d..00000000 --- a/.github/workflows/ci.yml +++ /dev/null @@ -1,61 +0,0 @@ -name: CI (FSD + Supabase/Prisma) - -on: - push: - branches: [main, develop] - pull_request: - branches: [main, develop] - -jobs: - build: - runs-on: ubuntu-latest - steps: - - name: Checkout - uses: actions/checkout@v4 - - - name: Setup pnpm - uses: pnpm/action-setup@v4 - with: - version: 10.11.1 - run_install: false - - - name: Setup Node.js - uses: actions/setup-node@v4 - with: - node-version: 20 - - - name: Install dependencies - run: pnpm install --frozen-lockfile - - - name: Lint (all) - run: pnpm turbo lint - - - name: Typecheck (all) - run: pnpm turbo typecheck - - # - name: Test (all) - # run: pnpm turbo test - - - name: Build (all) - run: pnpm turbo build - - - name: Build Storybook (ui) - run: pnpm --filter=ui build-storybook - - # Prisma, Supabase ๋ฐฑ์—”๋“œ Step (์ฃผ์„ ํ•ด์ œ์‹œ) - # - name: Prisma Format & Validate - # run: | - # cd backend/prisma - # pnpm prisma format - # pnpm prisma validate - - # - name: Prisma Migrate Check (optional) - # run: | - # cd backend/prisma - # pnpm prisma migrate diff --from-empty --to-schema-datamodel schema.prisma - - # - name: Supabase Functions Lint/Test (optional) - # run: | - # cd backend/supabase - # pnpm lint - # pnpm test diff --git a/apps/web/.github/workflows/cron-auction.yml b/.github/workflows/cron-auction.yml similarity index 80% rename from apps/web/.github/workflows/cron-auction.yml rename to .github/workflows/cron-auction.yml index 06000ce7..dc7edd73 100644 --- a/apps/web/.github/workflows/cron-auction.yml +++ b/.github/workflows/cron-auction.yml @@ -1,4 +1,3 @@ -# ๋ฐฐํฌ ํ›„ ๋„๋ฉ”์ธ ์„ค์ • ํ•„์š” name: Create Scheduled Auctions on: @@ -12,7 +11,7 @@ jobs: steps: - name: Call auction creation endpoint run: | - curl -X GET "https://your-domain.com/api/cron/create-auctions" \ + curl -X GET "https://bider.vercel.app/api/cron/create-auction" \ -H "Content-Type: application/json" \ -H "User-Agent: GitHub-Actions-Cron" \ --fail-with-body \ diff --git a/apps/web/.github/workflows/cron-resolve-auction.yml b/.github/workflows/cron-resolve-auction.yml similarity index 80% rename from apps/web/.github/workflows/cron-resolve-auction.yml rename to .github/workflows/cron-resolve-auction.yml index 16fe2efc..abdf7ef0 100644 --- a/apps/web/.github/workflows/cron-resolve-auction.yml +++ b/.github/workflows/cron-resolve-auction.yml @@ -1,4 +1,3 @@ -# ๋ฐฐํฌ ํ›„ ๋„๋ฉ”์ธ ์„ค์ • ํ•„์š” name: Resolve Ended Auctions on: @@ -12,7 +11,7 @@ jobs: steps: - name: Call auction creation endpoint run: | - curl -X GET "https://your-domain.com/api/cron/resolve-auctions" \ + curl -X GET "https://bider.vercel.app/api/cron/resolve-auction" \ -H "Content-Type: application/json" \ -H "User-Agent: GitHub-Actions-Cron" \ --fail-with-body \ diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml new file mode 100644 index 00000000..0321eff0 --- /dev/null +++ b/.github/workflows/release.yml @@ -0,0 +1,136 @@ +name: Auto Release + +on: + push: + branches: [deploy] + workflow_dispatch: + inputs: + version_type: + description: 'Version type (major, minor, patch)' + required: false + default: 'auto' + type: choice + options: + - auto + - major + - minor + - patch + +permissions: + contents: write + pull-requests: write + +concurrency: + group: release-${{ github.ref }} + cancel-in-progress: false + +jobs: + release: + name: Auto Release + runs-on: ubuntu-latest + if: >- + !contains(github.event.head_commit.message, 'skip-release') && + !contains(github.event.head_commit.message, 'chore: bump version') + + steps: + - name: Checkout code + uses: actions/checkout@v4 + with: + fetch-depth: 0 + token: ${{ secrets.RELEASE_TOKEN }} + + - name: Setup pnpm + uses: pnpm/action-setup@v2 + with: + version: latest + + - name: Setup Node.js + uses: actions/setup-node@v4 + with: + node-version: '18' + cache: 'pnpm' + + - name: Install dependencies + run: pnpm install --frozen-lockfile + + - name: Check if release is needed + id: check-release + run: | + LAST_TAG=$(git describe --tags --abbrev=0 2>/dev/null || echo "") + if [ -z "$LAST_TAG" ]; then + echo "need_release=true" >> $GITHUB_OUTPUT + echo "No previous tags found, creating first release" + else + COMMITS_SINCE_TAG=$(git rev-list $LAST_TAG..HEAD --count) + echo "Commits since last tag: $COMMITS_SINCE_TAG" + if [ "$COMMITS_SINCE_TAG" -gt 0 ]; then + echo "need_release=true" >> $GITHUB_OUTPUT + echo "Found $COMMITS_SINCE_TAG new commits, release needed" + else + echo "need_release=false" >> $GITHUB_OUTPUT + echo "No new commits since last tag, skipping release" + fi + fi + + - name: Generate release notes + id: release-notes + if: steps.check-release.outputs.need_release == 'true' + run: | + if [ "${{ github.event_name }}" = "workflow_dispatch" ] && [ "${{ github.event.inputs.version_type }}" != "auto" ]; then + export FORCE_VERSION_TYPE="${{ github.event.inputs.version_type }}" + fi + node scripts/generate-release-notes.cjs + + - name: Update package.json version + if: steps.check-release.outputs.need_release == 'true' + run: | + VERSION_NUMBER=$(echo ${{ steps.release-notes.outputs.NEW_VERSION }} | sed 's/^v//') + pnpm version $VERSION_NUMBER --no-git-tag-version + git config --local user.email "action@github.com" + git config --local user.name "GitHub Action" + git add package.json + git commit -m "chore: bump version to ${{ steps.release-notes.outputs.NEW_VERSION }}" + + - name: Create and push tag + if: steps.check-release.outputs.need_release == 'true' + run: | + # Check if tag already exists + if git rev-parse ${{ steps.release-notes.outputs.NEW_VERSION }} >/dev/null 2>&1; then + echo "Tag ${{ steps.release-notes.outputs.NEW_VERSION }} already exists, skipping tag creation" + else + git tag ${{ steps.release-notes.outputs.NEW_VERSION }} + git push origin ${{ steps.release-notes.outputs.NEW_VERSION }} + echo "Created and pushed tag ${{ steps.release-notes.outputs.NEW_VERSION }}" + fi + git push origin deploy + + - name: Create GitHub Release + if: steps.check-release.outputs.need_release == 'true' + uses: ncipollo/release-action@v1 + with: + tag: ${{ steps.release-notes.outputs.NEW_VERSION }} + name: Release ${{ steps.release-notes.outputs.NEW_VERSION }} + body: ${{ steps.release-notes.outputs.RELEASE_NOTES }} + draft: false + prerelease: false + allowUpdates: true + token: ${{ secrets.RELEASE_TOKEN }} + + - name: Upload release notes as artifact + if: steps.check-release.outputs.need_release == 'true' + uses: actions/upload-artifact@v4 + with: + name: release-notes-${{ steps.release-notes.outputs.NEW_VERSION }} + path: release_notes.md + + - name: Summary + if: steps.check-release.outputs.need_release == 'true' + run: | + echo "๐ŸŽ‰ Release ${{ steps.release-notes.outputs.NEW_VERSION }} created successfully!" >> $GITHUB_STEP_SUMMARY + echo "๐Ÿ“‹ Release notes have been generated and attached to the release." >> $GITHUB_STEP_SUMMARY + echo "๐Ÿ”— View the release: ${{ github.server_url }}/${{ github.repository }}/releases/tag/${{ steps.release-notes.outputs.NEW_VERSION }}" >> $GITHUB_STEP_SUMMARY + + - name: No release needed + if: steps.check-release.outputs.need_release == 'false' + run: | + echo "โ„น๏ธ No release needed - no new commits since last tag." >> $GITHUB_STEP_SUMMARY diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 00000000..5d2b133c --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,77 @@ +# Changelog + +All notable changes to this project will be documented in this file. + +The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), +and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). + +## [Unreleased] + +## [2.0.0] - 2025-07-22 + +### โš  Breaking Changes + +- ๋ฉ”์ด์ € ๋ฆด๋ฆฌ์ฆˆ ํŠธ๋ฆฌ๊ฑฐ์šฉ ๋นˆ ์ปค๋ฐ‹ + +### โœจ Added + +- ๊ฒฝ๋งค ์ƒํ’ˆ ์Šค์ผ€์ค„๋Ÿฌ ๋กœ์ง ๋ณ‘๋ ฌ ์ฒ˜๋ฆฌ ์ ์šฉ +- ๊ฒฝ๋งค ์ƒํ’ˆ ์Šค์ผ€์ค„๋Ÿฌ์— ๋ฐฐํฌ URL ๋ฐ˜์˜ +- ๊ฑฐ๋ž˜ ํฌ๋ง ์žฅ์†Œ ๊ธฐ๋Šฅ: ๋“ฑ๋ก, ์ˆ˜์ •, ์ƒ์„ธํŽ˜์ด์ง€ ๋ฐ˜์˜ +- ์ƒํ’ˆ ๋“ฑ๋ก ์‹œ ๋งˆ๊ฐ ์‹œ๊ฐ„ 1์‹œ๊ฐ„ ์ดํ›„ ์ œํ•œ ์ถ”๊ฐ€ +- ์ƒํ’ˆ๋ชฉ๋ก, ํ™ˆ, ๊ฒ€์ƒ‰ ํ•„ํ„ฐ๋ง ๋ฐ ๋ฌดํ•œ์Šคํฌ๋กค +- ์ž…์ฐฐ ํ˜„ํ™ฉํŒ ๋ฐ ์ตœ๊ณ  ์ž…์ฐฐ๊ฐ€ ํ‘œ์‹œ +- ์ž…์ฐฐ ์‹ค์‹œ๊ฐ„ ๋ฐ˜์˜ (realtime ์ ์šฉ) +- GoogleMapView ์ปดํฌ๋„ŒํŠธ ๊ฐœ์„  +- Switch ์ปดํฌ๋„ŒํŠธ, ํˆดํŒ, ์นดํ…Œ๊ณ ๋ฆฌ ํ‘œ์‹œ ๋“ฑ UI ๊ธฐ๋Šฅ + +### ๐Ÿ› Fixed + +- Vercel์—์„œ ๋ฐœ์ƒํ•˜๋Š” ๋ Œ๋”๋ง/ํƒ€์ž…/๋ผ์šฐํŒ… ๊ด€๋ จ ์—๋Ÿฌ ๋Œ€์‘ +- ํšŒ์›๊ฐ€์ž…, ๋น„๋ฐ€๋ฒˆํ˜ธ ํŽ˜์ด์ง€ vercel ์—๋Ÿฌ ์ˆ˜์ • +- ์ž˜๋ชป๋œ import, ์ค‘๋ณต onSubmit ํ•ธ๋“ค๋Ÿฌ ์ œ๊ฑฐ +- ์ƒํ’ˆ ์ƒํƒœ ์—…๋ฐ์ดํŠธ ๋กœ์ง ์˜ค๋ฅ˜ ์ˆ˜์ • +- pnpm-lock ์ถฉ๋Œ ํ•ด๊ฒฐ + +### โ™ป๏ธ Refactored + +- ์„œ๋ฒ„ ์„ธ์…˜ ๊ธฐ๋ฐ˜ ์œ ์ € ์ธ์ฆ/๋ณดํ˜ธ ํŽ˜์ด์ง€ ์ฒ˜๋ฆฌ +- splash, ๋กœ๊ทธ์ธ/ํšŒ์›๊ฐ€์ž…/๋น„๋ฒˆ์ฐพ๊ธฐ ๋“ฑ ๋กœ์ง ๋ถ„๋ฆฌ +- ๋ฏธ๋“ค์›จ์–ด ๋ฆฌํŒฉํ† ๋ง ๋ฐ ๊ฒฝ๋กœ ์„ค์ • ๊ฐœ์„  +- ๋น„๋ฐ€๋ฒˆํ˜ธ ์žฌ์„ค์ • ํŽ˜์ด์ง€ ๋ฐ ์ธ์ฆ ํ๋ฆ„ ๊ฐœ์„  +- Google Map ์žฌ์‚ฌ์šฉ์„ฑ ํ–ฅ์ƒ +- tanstack query ๊ธฐ๋ฐ˜ ์ƒํ’ˆ CRUD ๋กœ์ง ๋ถ„๋ฆฌ ๋ฐ ์ ์šฉ + +### ๐Ÿงน Chore + +- CI ์„ค์ • ํ…Œ์ŠคํŠธ ๋ฐ ์ˆ˜์ • +- ์Šคํ”Œ๋ž˜์‹œ ์ด๋ฏธ์ง€ ๋ฐ ์•„์ด์ฝ˜ ๋‹ค์ค‘ ์ ์šฉ (iOS/Android) +- Sentry ๋ฐ PWA ์„ค์ • ์ถ”๊ฐ€ +- ํƒ€์ž… ๋ถ„๋ฆฌ ๋ฐ global CSS ๋ณ€์ˆ˜ ์ˆ˜์ • + +### ๐Ÿงพ Documentation + +- README ๋ฐ ์ด์Šˆ ํ…œํ”Œ๋ฆฟ ์ˆ˜์ • + +### ๐ŸŽจ Design + +- ์ด๋ฏธ์ง€ ๋งˆํฌ์—… ๋ฐ ์ƒ์„ธํŽ˜์ด์ง€ ์ด๋ฏธ์ง€ ํฌ๊ธฐ ๊ณ ์ • +- ์ž…์ฐฐ ์™„๋ฃŒ ํŽ˜์ด์ง€ UI + +### ๐Ÿ”ง Other + +- Zustand persist ์„ค์ • ์ˆ˜์ • +- ์ž˜๋ชป๋œ merge ๋ฐ console.log ์ œ๊ฑฐ +- ๊ธฐ๋Šฅ hotfix ๋ฐ ํŽ˜์ด์ง€๋ณ„ ์Šคํƒ€์ผ ๊ฐœ์„  + +## [1.0.0] - 2025-07-18 + +### Added + +- ํšŒ์›๊ฐ€์ž…, ๋กœ๊ทธ์ธ, ๋น„๋ฐ€๋ฒˆํ˜ธ ์žฌ์„ค์ • ๊ธฐ๋Šฅ +- ์œ„์น˜์„ค์ • ๊ธฐ๋Šฅ +- ๊ฒฝ๋งค ๋ฆฌ์ŠคํŠธ ์กฐํšŒ, ๊ฒ€์ƒ‰ ๊ธฐ๋Šฅ +- ๊ฒฝ๋งค ์ƒ์„ธ ์กฐํšŒ ๊ธฐ๋Šฅ +- ์ž…์ฐฐ, ์ถœํ’ˆ ๊ธฐ๋Šฅ +- ์ถœํ’ˆ ์ˆ˜์ •, ์‚ญ์ œ ๊ธฐ๋Šฅ +- ๋‚˜์˜ ๊ฒฝ๋งค ์กฐํšŒ ๊ธฐ๋Šฅ diff --git a/README.md b/README.md index 448a7a8c..751d1175 100644 --- a/README.md +++ b/README.md @@ -1,76 +1,94 @@ -# E2E +# Bider โ€” ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ๊ฒฝ๋งค์žฅ -๊ธฐ๊ฐ„ 3์ฃผ / ์ธ์› 5๋ช… +> **๋” ๊ฐ€๊นŒ์ด, ๋” ๊ณต์ •ํ•˜๊ฒŒ, ๋” ์žฌ๋ฏธ์žˆ๊ฒŒ!** +> ๋ฐ˜๊ฒฝ 5km ์•ˆ ์ง„์งœ ๋‚ด ์ด์›ƒ๊ณผ ์ฆ๊ธฐ๋Š” ์ƒˆ๋กœ์šด ์ค‘๊ณ  ๊ฒฝ๋งค ํ”Œ๋žซํผ -## 4์กฐ ๋™์› +[๐Ÿ‘‰ ์„œ๋น„์Šค ๋ฐ”๋กœ๊ฐ€๊ธฐ](https://bider.vercel.app/) -| [](https://github.com/kwons0) | [](https://github.com/choiyoungae) | [](https://github.com/minok9708) | -| :---------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------------: | :------------------------------------------------------------------------------------------------------------------------: | -| ๊ถŒ์„œ์˜ | ์ตœ์˜์•  | ๊น€๋ฏผ์˜ฅ | -| [@kwons0](https://github.com/kwons0) | [@goldegg127](https://github.com/goldegg127) | [@minok9708](https://github.com/minok9708) | +--- + +## ๐Ÿ’ก ๊ธฐํš ์˜๋„ + +์ค‘๊ณ ๊ฑฐ๋ž˜๋Š” ๋งŽ์ง€๋งŒ, **๊ฐ€๊นŒ์šด ์ด์›ƒ๋ผ๋ฆฌ ๋ฏฟ๊ณ  ๊ฑฐ๋ž˜ํ•˜๊ธฐ์—” ์•„์‰ฌ์›€**์ด ์žˆ์—ˆ์Šต๋‹ˆ๋‹ค. +๋˜ํ•œ ํฅ์ • ๊ณผ์ •์—์„œ ์ƒ๊ธฐ๋Š” **๋ฒˆ๊ฑฐ๋กœ์›€๊ณผ ๋ถˆํˆฌ๋ช…ํ•จ**๋„ ์ค„์ด๊ณ  ์‹ถ์—ˆ์Šต๋‹ˆ๋‹ค. + +> **โ€œ๋” ๊ฐ€๊นŒ์ด, ๋” ๊ณต์ •ํ•˜๊ฒŒ, ๋” ์žฌ๋ฏธ์žˆ๊ฒŒ!โ€** + +๊ทธ๋ž˜์„œ **Bider**๋Š” ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ์ด์›ƒ๊ณผ, +๊ฐ€์žฅ ์Šค๋งˆํŠธํ•œ ๋ฐฉ์‹์œผ๋กœ ๊ฑฐ๋ž˜ํ•˜๋Š” **์ƒˆ๋กœ์šด ์ค‘๊ณ  ๊ฒฝ๋งค ๊ฒฝํ—˜**์„ ๋ชฉํ‘œ๋กœ ํ•ฉ๋‹ˆ๋‹ค. + +--- + +## ๐Ÿš€ Bider๊ฐ€ ์ œ๊ณตํ•˜๋Š” ๊ฐ€์น˜ + +- ๐Ÿ“ **๊ทผ๊ฑฐ๋ฆฌ ์‹ ๋ขฐ** โ€” ๋ฐ˜๊ฒฝ 5km ์ œํ•œ์œผ๋กœ ์ง„์งœ ๋‚ด ๋™๋„ค ๊ฑฐ๋ž˜ +- โš–๏ธ **๊ณต์ •ํ•œ ๊ฐ€๊ฒฉ** โ€” ์ž…์ฐฐ ์‹œ์Šคํ…œ์„ ํ†ตํ•œ ํ•ฉ๋ฆฌ์ ์ธ ๊ฑฐ๋ž˜ +- ๐Ÿ“Š **ํˆฌ๋ช…ํ•œ ์ •๋ณด** โ€” ์‹ค์‹œ๊ฐ„ ์ž…์ฐฐ ํ˜„ํ™ฉ ํ™•์ธ +- ๐Ÿ—บ๏ธ **์ง๊ด€์  ํƒ์ƒ‰** โ€” ์ง€๋„ ์ค‘์‹ฌ UI์™€ ๋ฆฌ์ŠคํŠธ ๋ทฐ ์ง€์› +- ๐ŸŽฎ **์ฆ๊ฑฐ์šด ๊ฒฝํ—˜** โ€” ํฌ์ธํŠธ, ์ œ์•ˆํ•˜๊ธฐ, ์‹œํฌ๋ฆฟ ๊ฒฝ๋งค ๋“ฑ ์žฌ๋ฏธ ์š”์†Œ + +--- + +## โœจ ํ•ต์‹ฌ ๊ธฐ๋Šฅ + +### ๐Ÿ“ ์œ„์น˜ ๊ธฐ๋ฐ˜ ๊ฑฐ๋ž˜ -| [](https://github.com/haruyam15) | [](https://github.com/hayoon-shin) | -| :-------------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------------: | -| ๋ฐฐํ•˜์€ | ์‹ ํ•˜์œค | -| [@haruyam15](https://github.com/haruyam15) | [@hayoon-shin](https://github.com/hayoon-shin) | +- ํšŒ์›๊ฐ€์ž… ํ›„ **์œ„์น˜ ๋“ฑ๋ก** ํ•„์ˆ˜ +- ๋ฐ˜๊ฒฝ **5km** ์ด๋‚ด ์ƒํ’ˆ๋งŒ ์กฐํšŒ ๊ฐ€๋Šฅ +- ๊ฐ€๊นŒ์šด ์ด์›ƒ๊ณผ๋งŒ ๊ฑฐ๋ž˜ ์„ฑ์‚ฌ โ†’ ์‹ ๋ขฐ๋„ ๋†’์€ ๊ฑฐ๋ž˜ -
-
+### โš–๏ธ ์ž…์ฐฐ ๊ฒฝ๋งค ์‹œ์Šคํ…œ -### ์ง„ํ–‰ ํ๋ฆ„: +- ํฅ์ • ์—†์ด **์ž…์ฐฐ ๊ธฐ๋ฐ˜ ์ตœ์ข…๊ฐ€ ๊ฒฐ์ •** +- ๋ˆ„๊ตฌ๋‚˜ ๋™๋“ฑํ•œ ์กฐ๊ฑด์—์„œ ์ฐธ์—ฌ ๊ฐ€๋Šฅ -1. ๊ธฐํš ๋ถ„์„ & MVP ๊ธฐ๋Šฅ ์ •์˜, ์„ค๊ณ„ - - ์‚ฌ์šฉ์ž ๋ฌธ์ œ ์ •์˜ - - ๊ธฐ๋Šฅ ํ๋ฆ„ ๋ฐ ์ƒํƒœ ์ •์˜ - - ๊ธฐ๋Šฅ ์•„์ด๋””์–ด ๋„์ถœ - - MVP ๊ธฐ๋Šฅ ์„ ์ • +### ๐Ÿ“Š ์‹ค์‹œ๊ฐ„ ์ž…์ฐฐ ํ˜„ํ™ฉํŒ -2. MVP ๊ธฐ๋Šฅ ๊ตฌํ˜„ - - ํ•ต์‹ฌ ๊ธฐ๋Šฅ ๊ตฌํ˜„ - - ์ƒํƒœ๊ด€๋ฆฌ ๋ฐ API ์—ฐ๋™ +- ์ƒˆ๋กœ์šด ์ž…์ฐฐ ๋ฐœ์ƒ ์‹œ **์ฆ‰์‹œ ๋ฐ˜์˜** +- ์ž…์ฐฐ ์‹œ๊ฐ„ยท๊ธˆ์•ก์„ ์‹ค์‹œ๊ฐ„ ์—…๋ฐ์ดํŠธ -3. ์ตœ์ข… ์ ๊ฒ€ ๋ฐ ๊ฐœ์„ , ๋ฐœํ‘œ์ค€๋น„ - - ์ฝ”๋“œ๋ฆฌ๋ทฐ ๋ฐ ๋ฉ˜ํ†  ํ”ผ๋“œ๋ฐฑ ๋ฐ˜์˜ ๋ฐ ๊ฐœ์„  - - ํŒ€ ๋ณ„ ํšŒ๊ณ  ๋ฐ ๋ฌธ์„œํ™” ํ•„์š” ๋‚ด์šฉ ์ •๋ฆฌ +### ๐Ÿ—บ๏ธ ์ง€๋„ + ๋ฆฌ์ŠคํŠธ ๋ทฐ -
-
+- **Google Maps API** ๊ธฐ๋ฐ˜ ์ง€๋„ UI +- ๋งˆ์ปค๋กœ ์ฃผ๋ณ€ ์ƒํ’ˆ ์ง๊ด€์  ํ™•์ธ +- ๋ฆฌ์ŠคํŠธ ์ „ํ™˜ + ๋‹ค์–‘ํ•œ ํ•„ํ„ฐ/์ •๋ ฌ ์ง€์› + +### ๐ŸŽฎ ํฌ์ธํŠธ ์‹œ์Šคํ…œ + +- ์„œ๋น„์Šค ํ™œ๋™์œผ๋กœ ํฌ์ธํŠธ ์ ๋ฆฝ +- ์‹œํฌ๋ฆฟ ๊ฒฝ๋งค ์—ด๋žŒ, ์ œ์•ˆํ•˜๊ธฐ ๋“ฑ์— ์‚ฌ์šฉ +- ํฌ์ธํŠธ ๋‚ด์—ญ ์กฐํšŒ/๊ด€๋ฆฌ ๊ฐ€๋Šฅ + +### ๐Ÿ’ก ์ œ์•ˆํ•˜๊ธฐ + +- **์ฆ‰์‹œ ๊ฑฐ๋ž˜ ์ œ์•ˆ** ๊ธฐ๋Šฅ +- 100ํฌ์ธํŠธ ์‚ฌ์šฉ โ†’ ์ œ์•ˆ ๋“ฑ๋ก +- ์ถœํ’ˆ์ž ์ˆ˜๋ฝ ์‹œ ์ฆ‰์‹œ ๋‚™์ฐฐ & ๊ฒฝ๋งค ์ข…๋ฃŒ + +### ๐Ÿ•ต๏ธโ€โ™‚๏ธ ์‹œํฌ๋ฆฟ ๊ฒฝ๋งค + +- ์ž…์ฐฐ ํ˜„ํ™ฉ ์ˆจ๊น€ โ†’ ์ข…๋ฃŒ ์‹œ ๋‚™์ฐฐ +- 500ํฌ์ธํŠธ ์‚ฌ์šฉ โ†’ 10๋ถ„๊ฐ„ ์ตœ๊ณ ์ž…์ฐฐ๊ฐ€ ์—ด๋žŒ ๊ฐ€๋Šฅ + +### ๐Ÿ’ฌ ์ฑ„ํŒ… & ๐Ÿ”” ์•Œ๋ฆผ + +- ๋‚™์ฐฐ์ž โ†” ์ถœํ’ˆ์ž **1:1 ์ฑ„ํŒ…** +- ๊ฑฐ๋ž˜ ์‹œ๊ฐ„/์žฅ์†Œ ์กฐ์œจ +- ํ‘ธ์‹œ ์•Œ๋ฆผ์œผ๋กœ ์ž…์ฐฐยท์ œ์•ˆยท์ฑ„ํŒ… ๋“ฑ ์ด๋ฒคํŠธ ์ „๋‹ฌ + +--- + +## ๐Ÿ”‘ ํ…Œ์ŠคํŠธ ๊ณ„์ • + +ID : biderTester@gmail.com
+PW : abcd1234
+์ง์ ‘ ํšŒ์›๊ฐ€์ž…ํ•ด๋„ ๋˜์ง€๋งŒ, **๋ฐ˜๊ฒฝ 5km ์ œํ•œ** ๋•Œ๋ฌธ์— ํ…Œ์ŠคํŠธ ๊ณ„์ •์œผ๋กœ ์ฒดํ—˜ํ•˜๋Š” ๊ฑธ ๊ถŒ์žฅํ•ด์š”. --- -### ๊ฐ€์žฅ ๊ฐ€๊นŒ์šด ๊ฒฝ๋งค์žฅ, Bider - -์ง€์—ญ๊ธฐ๋ฐ˜ ์ค‘๊ณ ๊ฑฐ๋ž˜ ๊ฒฝ๋งค ์„œ๋น„์Šค - -- ํšŒ์› - - ํšŒ์›๊ฐ€์ž… - - ๋กœ๊ทธ์ธ - - ์•„์ด๋”” ์ฐพ๊ธฐ / ๋น„๋ฐ€๋ฒˆํ˜ธ ์žฌ์„ค์ • - - ํšŒ์› ์ •๋ณด ์ˆ˜์ • - - ์ด๋ฉ”์ผ ์ธ์ฆ - - ์œ„์น˜ ์„ค์ • - - ๋งˆ์ดํŽ˜์ด์ง€ - - ๋‚ด๊ฐ€ ์ถœํ’ˆ / ์ž…์ฐฐํ•œ ๋‚ด์—ญ - - splash ํ™”๋ฉด - - ~~์•Œ๋ฆผ ํ‚ค์›Œ๋“œ ๊ด€๋ฆฌ~~ - -- ์ƒํ’ˆ - - ์ƒํ’ˆ ๋ชฉ๋ก - - ์ƒํ’ˆ ๋“ฑ๋ก - - ์ƒํ’ˆ ์ •๋ณด ์ˆ˜์ •/์‚ญ์ œ - - ~~๊ฒ€์ƒ‰~~ - - ~~์ƒํ’ˆ ์ฐœ~~ - -- ๊ฒฝ๋งค - - ์ž…์ฐฐ - - ๋‚™์ฐฐ, ํŒจ์ฐฐ - - ์œ ์ฐฐ - - ~~์ž…์ฐฐ ํ˜„ํ™ฉํŒ~~ - -- ์ฑ„ํŒ… - - ~~1:1 ์ฑ„ํŒ…~~ - -- ์•Œ๋ฆผ - - ~~์ž…์ฐฐ/๋‚™์ฐฐ ์•Œ๋ฆผ~~ - - ~~์ฑ„ํŒ… ์•Œ๋ฆผ~~ - - ~~ํ‚ค์›Œ๋“œ ์•Œ๋ฆผ~~ +## ๐Ÿ‘ฉ๐Ÿปโ€๐Ÿ’ป ์„œ๋น„์Šค ๊ฐœ๋ฐœ์ž + +| [](https://github.com/kwons0) | [](https://github.com/minok9708) | [](https://github.com/haruyam15) | [](https://github.com/choiyoungae) | +| :---------------------------------------------------------------------------------------------------------------------: | :------------------------------------------------------------------------------------------------------------------------: | :-------------------------------------------------------------------------------------------------------------------------: | :---------------------------------------------------------------------------------------------------------------------------: | +| ๊ถŒ์„œ์˜ | ๊น€๋ฏผ์˜ฅ | ๋ฐฐํ•˜์€ | ์ตœ์˜์•  | +| [@kwons0](https://github.com/kwons0) | [@minok9708](https://github.com/minok9708) | [@haruyam15](https://github.com/haruyam15) | [@choiyoungae](https://github.com/choiyoungae) | diff --git a/apps/storybook/stories/Switch.stories.tsx b/apps/storybook/stories/Switch.stories.tsx new file mode 100644 index 00000000..2145976e --- /dev/null +++ b/apps/storybook/stories/Switch.stories.tsx @@ -0,0 +1,46 @@ +import { Switch } from '@repo/ui/components/Switch/Switch'; +import type { Meta, StoryObj } from '@storybook/react-vite'; + +const meta: Meta = { + title: 'Components/Switch', + component: Switch, + args: { + checked: false, + }, + argTypes: { + checked: { + control: 'boolean', + description: 'Switch ์ƒํƒœ (On/Off)', + }, + disabled: { + control: 'boolean', + description: '๋น„ํ™œ์„ฑํ™” ์—ฌ๋ถ€', + }, + onCheckedChange: { + action: 'checkedChange', + description: '์ฒดํฌ ์ƒํƒœ๊ฐ€ ๋ณ€๊ฒฝ๋  ๋•Œ ์‹คํ–‰๋˜๋Š” ํ•จ์ˆ˜', + }, + }, +}; + +export default meta; +type Story = StoryObj; + +export const Default: Story = { + args: { + checked: false, + }, +}; + +export const Checked: Story = { + args: { + checked: true, + }, +}; + +export const Disabled: Story = { + args: { + disabled: true, + checked: true, + }, +}; diff --git a/apps/web/.gitignore b/apps/web/.gitignore index f886745c..68ba2448 100644 --- a/apps/web/.gitignore +++ b/apps/web/.gitignore @@ -34,3 +34,6 @@ yarn-error.log* # typescript *.tsbuildinfo next-env.d.ts + +# Sentry Config File +.env.sentry-build-plugin diff --git a/apps/web/app/(base)/category/page.tsx b/apps/web/app/(base)/category/page.tsx index 497aa103..3392dc40 100644 --- a/apps/web/app/(base)/category/page.tsx +++ b/apps/web/app/(base)/category/page.tsx @@ -1,7 +1,12 @@ import Category from '@/features/category/ui/Category'; +import { Suspense } from 'react'; const CategoryPage = () => { - return ; + return ( + + + + ); }; export default CategoryPage; diff --git a/apps/web/app/(base)/chat/page.tsx b/apps/web/app/(base)/chat/page.tsx new file mode 100644 index 00000000..ddd1db83 --- /dev/null +++ b/apps/web/app/(base)/chat/page.tsx @@ -0,0 +1,13 @@ +import ChatListPageContent from '@/features/chat/list/ui/ChatListPageContent'; +import ReactQueryProvider from '@/shared/providers/ReactQueryProvider'; +import React from 'react'; + +const ChatListPage = () => { + return ( + + + + ); +}; + +export default ChatListPage; diff --git a/apps/web/app/(base)/layout.tsx b/apps/web/app/(base)/layout.tsx index 133f645e..6215357e 100644 --- a/apps/web/app/(base)/layout.tsx +++ b/apps/web/app/(base)/layout.tsx @@ -5,7 +5,7 @@ const BaseLayout = ({ children }: { children: React.ReactNode }) => { return ( <>
-
{children}
+
{children}