Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
27 commits
Select commit Hold shift + click to select a range
20bd449
feat: profile 프로젝트 생성
jiji-hoon96 Oct 23, 2025
02746ce
feat: 더미데이터로 ui 구현
jiji-hoon96 Oct 23, 2025
3963663
chore: swiper 세팅
jiji-hoon96 Oct 25, 2025
695d5ca
feat: profile ui 형태 수정
jiji-hoon96 Oct 25, 2025
4488f98
feat: Layout 컴포넌트 생성 및 하위 페이지 생성
jiji-hoon96 Oct 25, 2025
fc6c3aa
feat: header 적용, 백버튼 구현
jiji-hoon96 Oct 25, 2025
c308735
feat: 하위 페이지 스타일 수정
jiji-hoon96 Oct 25, 2025
50a491d
feat: shared button 생성
jiji-hoon96 Oct 25, 2025
67bf858
feat: 커버 UI 수정
jiji-hoon96 Oct 25, 2025
ae4f4d1
feat: tanstack query default setting
jiji-hoon96 Oct 25, 2025
ded9c50
feat: v2 api 연결
jiji-hoon96 Oct 26, 2025
1a75902
chore: babel plugin 세팅
jiji-hoon96 Oct 27, 2025
6f1678e
feat: profile 페이지에 api 연결
jiji-hoon96 Oct 27, 2025
69d0621
feat: meta 컴포넌트 분리
jiji-hoon96 Oct 27, 2025
bbd11fd
fix: 에러코드 수정
jiji-hoon96 Oct 27, 2025
86762d4
feat: 하위페이지에 api 연결
jiji-hoon96 Oct 27, 2025
43bcf41
chore: tanstack query 세팅
jiji-hoon96 Nov 1, 2025
a6af99c
feat: youtube duration 추가
jiji-hoon96 Nov 1, 2025
5254145
feat: 지난 공연 duration 추가
jiji-hoon96 Nov 1, 2025
41742df
feat: 개행조건 추가
jiji-hoon96 Nov 1, 2025
e08785f
feat: styled import 방식 변경
jiji-hoon96 Nov 1, 2025
cba5636
feat: 바텀 시트 생성
jiji-hoon96 Nov 1, 2025
6d5072f
feat: 프로필 복사 추가
jiji-hoon96 Nov 1, 2025
617bcf0
feat: 유저 정보 없을때 처리
jiji-hoon96 Nov 1, 2025
bd39c1f
Merge branch 'develop' of https://github.com/Nexters/boolti-web into …
jiji-hoon96 Nov 1, 2025
60f7f55
fix: type-check 오류 수정
jiji-hoon96 Nov 1, 2025
b36c625
fix: type-check 오류 수정
jiji-hoon96 Nov 1, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
80 changes: 80 additions & 0 deletions .pnp.cjs

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

24 changes: 24 additions & 0 deletions apps/profile/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
# Logs
logs
*.log
npm-debug.log*
yarn-debug.log*
yarn-error.log*
pnpm-debug.log*
lerna-debug.log*

node_modules
dist
dist-ssr
*.local

# Editor directories and files
.vscode/*
!.vscode/extensions.json
.idea
.DS_Store
*.suo
*.ntvs*
*.njsproj
*.sln
*.sw?
54 changes: 54 additions & 0 deletions apps/profile/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
# Profile - 불티 프로필 페이지

사용자 프로필을 보여주는 웹 애플리케이션입니다.

## URL 구조

- 프로필 페이지: `https://profile.boolti.in/{username}`
- 개발 서버: `https://profile.dev.boolti.in:8082/{username}`

## 개발 서버 실행

```bash
# 루트 디렉토리에서
yarn workspace profile dev

# 또는 turbo 사용
turbo dev --filter=profile
```

## 빌드

```bash
# 루트 디렉토리에서
yarn workspace profile build

# 또는 turbo 사용
turbo build --filter=profile
```

## 기술 스택

- React 18
- TypeScript
- Vite
- Emotion (CSS-in-JS)
- React Router v6
- React Helmet Async

## 사용하는 공통 패키지

- `@boolti/ui`: 공통 UI 컴포넌트
- `@boolti/api`: API 호출 로직
- `@boolti/icon`: 아이콘 컴포넌트

## 디렉토리 구조

```
src/
├── components/ # 재사용 가능한 컴포넌트
├── pages/ # 페이지 컴포넌트
├── App.tsx # 라우팅 설정
├── main.tsx # 앱 진입점
└── index.css # 전역 스타일
```
28 changes: 28 additions & 0 deletions apps/profile/index.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
<!doctype html>
<html lang="ko">
<head>
<meta charset="UTF-8" />
<link rel="icon" type="image/svg+xml" href="/favicon.svg" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />

<!-- SEO -->
<meta name="description" content="불티 프로필 페이지" />
<meta property="og:type" content="website" />
<meta property="og:site_name" content="불티" />
<meta property="og:title" content="불티 프로필" />
<meta property="og:description" content="불티 프로필 페이지" />
<meta property="og:image" content="https://profile.boolti.in/og-image.png" />

<!-- Twitter Card -->
<meta name="twitter:card" content="summary_large_image" />
<meta name="twitter:title" content="불티 프로필" />
<meta name="twitter:description" content="불티 프로필 페이지" />
<meta name="twitter:image" content="https://profile.boolti.in/og-image.png" />

<title>불티 프로필</title>
</head>
<body>
<div id="root"></div>
<script type="module" src="/src/main.tsx"></script>
</body>
</html>
40 changes: 40 additions & 0 deletions apps/profile/package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,40 @@
{
"name": "profile",
"private": true,
"version": "0.0.0",
"type": "module",
"scripts": {
"dev": "vite",
"build": "tsc && vite build",
"lint": "TIMING=1 eslint . --ext ts,tsx",
"lint:fix": "TIMING=1 eslint . --ext ts,tsx --fix",
"type-check": "tsc --noEmit",
"preview": "vite preview"
},
"dependencies": {
"@babel/runtime": "^7.28.4",
"@boolti/api": "*",
"@boolti/icon": "*",
"@boolti/ui": "*",
"@emotion/react": "^11.11.3",
"@emotion/styled": "^11.11.0",
"@tanstack/react-query": "^5.90.5",
"date-fns": "^3.6.0",
"react": "^18.2.0",
"react-dom": "^18.2.0",
"react-helmet-async": "^2.0.5",
"react-router-dom": "^6.22.3",
"swiper": "^12.0.3",
"the-new-css-reset": "^1.11.2"
},
"devDependencies": {
"@boolti/eslint-config": "*",
"@boolti/typescript-config": "*",
"@emotion/babel-plugin": "^11.11.0",
"@types/react": "^18.2.43",
"@types/react-dom": "^18.2.17",
"@vitejs/plugin-react": "^4.2.1",
"typescript": "^5.2.2",
"vite": "^5.0.8"
}
}
4 changes: 4 additions & 0 deletions apps/profile/public/favicon.svg
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
55 changes: 55 additions & 0 deletions apps/profile/src/App.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
import './index.css';
import 'the-new-css-reset/css/reset.css';
import 'swiper/css';

import { BooltiUIProvider } from '@boolti/ui';
import { QueryClientProvider } from '@boolti/api';
import { createBrowserRouter, RouterProvider } from 'react-router-dom';
import { HelmetProvider } from 'react-helmet-async';

import ProfilePage from './pages/ProfilePage';
import NotFound from './components/NotFound';
import { ProfilePastShowsPage } from './pages/ProfilePastShowsPage';
import { ProfileVideosPage } from './pages/ProfileVideosPage';
import { ProfileLinkPage } from './pages/ProfileLinkPage';
import { Suspense } from 'react';

const router = createBrowserRouter([
{
path: '/:userCode',
element: <ProfilePage />,
errorElement: <NotFound />,
},
{
path: '/:userCode/shows',
element: <ProfilePastShowsPage />,
},
{
path: '/:userCode/videos',
element: <ProfileVideosPage />,
},
{
path: '/:userCode/links',
element: <ProfileLinkPage />,
},
{
path: '/',
element: <NotFound />,
},
]);

const App = () => {
return (
<QueryClientProvider>
<BooltiUIProvider>
<HelmetProvider>
<Suspense fallback={null}>
<RouterProvider router={router} />
</Suspense>
</HelmetProvider>
</BooltiUIProvider>
</QueryClientProvider>
);
};

export default App;
37 changes: 37 additions & 0 deletions apps/profile/src/components/Header/Header.styles.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
import { mq_lg } from '@boolti/ui';
import styled from '@emotion/styled';

const Header = styled.div<{ hasTitle: boolean }>`
height: 68px;
display: flex;
align-items: center;
padding: 0 20px;
color: ${({ theme }) => theme.palette.grey.g10};
justify-content: ${({ hasTitle }) => (hasTitle ? 'space-between' : 'flex-end')};

${mq_lg} {
padding: 0;
}
`;

const Left = styled.div`
display: flex;
align-items: center;
`;

const BackButton = styled.button`
cursor: pointer;
`;

const HeaderTitle = styled.p`
${({ theme }) => theme.typo.sh2};
color: ${({ theme }) => theme.palette.grey.g10};
margin-left: 12px;
`;

export default {
Header,
Left,
BackButton,
HeaderTitle,
};
Loading
Loading