chore: App 서비스 기초 설정#10
Conversation
|
Caution Review failedThe pull request is closed. ℹ️ Recent review info⚙️ Run configurationConfiguration used: Organization UI Review profile: CHILL Plan: Pro Run ID: ⛔ Files ignored due to path filters (1)
📒 Files selected for processing (1)
Walkthrough새 Expo 기반 React Native 앱을 Changes
Sequence Diagram(s)sequenceDiagram
participant User as User (stdin)
participant CLI as reset-project.js
participant FS as FileSystem
participant Logger as Console
User->>CLI: 실행 및 "move" or "delete" 응답
CLI->>Logger: 안내 메시지 출력
CLI->>FS: 확인/디렉터리 존재 검사(`app`,`components`,`hooks`,...)
alt 디렉터리 존재
CLI->>FS: `rename` or `rm -rf` (사용자 선택에 따라)
FS-->>CLI: 작업 결과
CLI->>Logger: 작업 로그 출력
else 없음
CLI->>Logger: 없음 메시지
end
CLI->>FS: `mkdir app` 및 템플릿 파일 쓰기 (`app/index.tsx`, `app/_layout.tsx`)
FS-->>CLI: 파일 생성 완료
CLI->>Logger: 마무리 안내 출력
Estimated code review effort🎯 3 (Moderate) | ⏱️ ~30 minutes Possibly related PRs
Suggested reviewers
Poem
🚥 Pre-merge checks | ✅ 5 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (5 passed)
✏️ Tip: You can configure your own custom pre-merge checks in the settings. ✨ Finishing Touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
Actionable comments posted: 7
🧹 Nitpick comments (2)
apps/app/tsconfig.json (1)
2-2:extends는 패키지 경로 방식으로 변경하세요.
./node_modules/...상대경로는 설치 구조 변화에 취약합니다. Expo 공식 TypeScript 가이드에서는expo/tsconfig.base로 지정할 것을 권장합니다.제안 diff
- "extends": "./node_modules/expo/tsconfig.base.json", + "extends": "expo/tsconfig.base",🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@apps/app/tsconfig.json` at line 2, Update the tsconfig "extends" value to use the package path instead of a node_modules relative path: replace the current extends entry "./node_modules/expo/tsconfig.base.json" with "expo/tsconfig.base" in your tsconfig.json so it follows Expo's recommended package reference (look for the "extends" property in the tsconfig.json file and change its value accordingly).apps/app/app.json (1)
8-8: 딥링크 스킴app은 충돌 가능성이 높아 고유값 사용을 권장합니다.Line 8은 너무 일반적인 값이라 OAuth/딥링크 콜백 충돌 위험이 있습니다. 서비스 고유 스킴으로 바꾸는 편이 안전합니다.
수정 제안
- "scheme": "app", + "scheme": "depromeet-team3-app",🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@apps/app/app.json` at line 8, 앱의 딥링크 스킴으로 너무 일반적인 "app"을 사용하고 있어 충돌 위험이 높으니 app.json의 "scheme" 값을 프로젝트 고유 식별자(예: 리버스 도메인 형식 또는 앱명 기반 스킴)로 변경하세요; 구체적으로 app.json의 "scheme" 키("scheme": "app")를 서비스 고유값으로 바꾼 뒤 관련 OAuth 리디렉션/딥링크 설정(예: 인증 콜백, Android/iOS intent/URL handler 설정)에서도 동일한 새 스킴을 사용하도록 모두 업데이트하세요.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Inline comments:
In `@apps/app/app/_layout.tsx`:
- Line 14: 현재 Stack이 모든 화면을 기본 스택으로 렌더링하고 있어 modal.tsx가 모달 프레젠테이션으로 뜨지 않습니다;
_layout.tsx에서 Stack 또는 Stack.Screen 구성을 수정해 modal 경로에 presentation: 'modal' 옵션을
명시적으로 설정하세요 — 예: 추가로 Stack.Screen 항목을 만들거나 screenOptions 콜백에서 route.name ===
'modal'일 때 options.presentation = 'modal'을 반환하여 Stack과 Stack.Screen(또는
screenOptions)에서 presentation을 'modal'로 지정하세요.
In `@apps/app/app/index.tsx`:
- Line 21: The WebView is leaving webviewDebuggingEnabled unset (defaults to
true), enabling debugging in production; update the WebView usage in
apps/app/app/index.tsx to explicitly set webviewDebuggingEnabled only in
development (e.g., webviewDebuggingEnabled={__DEV__} or using
process.env.NODE_ENV !== 'production') so that the prop is false in production
builds; locate the WebView component instance in this file and set that prop
accordingly.
- Around line 18-23: The WebView allows unrestricted navigation via back/forward
gestures and links; restrict it to the single allowed domain by adding
originWhitelist and a navigation filter callback: set originWhitelist to only
permit "https://www.naver.com" and implement onShouldStartLoadWithRequest (or
onNavigationStateChange) to validate the request.url starts with the allowed
origin (the current source uri 'https://www.naver.com/') and return true only
for that origin, otherwise return false and optionally block navigation when
allowsBackForwardNavigationGestures would otherwise allow moving off-domain.
In `@apps/app/components/ExternalLink.tsx`:
- Around line 7-22: The ExternalLink component currently overwrites any
passed-in onPress because it spreads {...rest} which may include onPress and
then assigns its own onPress; change ExternalLink to compose handlers instead:
retrieve any incoming onPress from rest (Props/ComponentProps<typeof Link>), and
in the component’s onPress implementation (the one that calls openBrowserAsync
and checks process.env.EXPO_OS), first call the incoming onPress(event) if
present, then check event.defaultPrevented and only run event.preventDefault() +
openBrowserAsync when not prevented; reference the ExternalLink function, Props,
Link, onPress, and openBrowserAsync when making the change.
In `@apps/app/README.md`:
- Around line 7-17: README.md currently shows install and start commands without
indicating they must be run from the monorepo package directory; update the top
of the file to clarify that the commands (npm install and npx expo start) should
be run from the apps/app directory (or provide the alternative root workspace
script if available), and add a short note showing the exact working directory
context so contributors won't run them from the repo root by mistake.
In `@apps/app/scripts/reset-project.js`:
- Around line 14-15: The reset script currently includes its own 'scripts'
directory in oldDirs, which risks deleting or moving the running script; update
the logic so 'scripts' is never targeted: either remove 'scripts' from the
hardcoded oldDirs array or, better, compute the current script folder (via
__dirname or process.cwd()) and filter oldDirs to exclude that basename before
any move/delete operations; apply this same exclusion where oldDirs and
exampleDir are iterated/handled (the code paths that perform deletion/moving
using oldDirs and exampleDir).
- Around line 94-96: The catch block that currently only logs the error (catch
(error) { console.error(`❌ Error during script execution: ${error.message}`) })
should also set a non-zero exit so CI detects failure; update the catch to set
process.exitCode = 1 (or call process.exit(1)) after logging the error to ensure
the script returns failure to automation tools.
---
Nitpick comments:
In `@apps/app/app.json`:
- Line 8: 앱의 딥링크 스킴으로 너무 일반적인 "app"을 사용하고 있어 충돌 위험이 높으니 app.json의 "scheme" 값을
프로젝트 고유 식별자(예: 리버스 도메인 형식 또는 앱명 기반 스킴)로 변경하세요; 구체적으로 app.json의 "scheme"
키("scheme": "app")를 서비스 고유값으로 바꾼 뒤 관련 OAuth 리디렉션/딥링크 설정(예: 인증 콜백, Android/iOS
intent/URL handler 설정)에서도 동일한 새 스킴을 사용하도록 모두 업데이트하세요.
In `@apps/app/tsconfig.json`:
- Line 2: Update the tsconfig "extends" value to use the package path instead of
a node_modules relative path: replace the current extends entry
"./node_modules/expo/tsconfig.base.json" with "expo/tsconfig.base" in your
tsconfig.json so it follows Expo's recommended package reference (look for the
"extends" property in the tsconfig.json file and change its value accordingly).
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Organization UI
Review profile: CHILL
Plan: Pro
Run ID: ad2fa283-30e2-4359-b3e4-bdecbaf8931e
⛔ Files ignored due to path filters (21)
apps/app/assets/images/android-icon-background.pngis excluded by!**/*.pngapps/app/assets/images/android-icon-foreground.pngis excluded by!**/*.pngapps/app/assets/images/android-icon-monochrome.pngis excluded by!**/*.pngapps/app/assets/images/favicon.pngis excluded by!**/*.pngapps/app/assets/images/icon.pngis excluded by!**/*.pngapps/app/assets/images/partial-react-logo.pngis excluded by!**/*.pngapps/app/assets/images/react-logo.pngis excluded by!**/*.pngapps/app/assets/images/react-logo@2x.pngis excluded by!**/*.pngapps/app/assets/images/react-logo@3x.pngis excluded by!**/*.pngapps/app/assets/images/splash-icon.pngis excluded by!**/*.pngapps/docs/app/favicon.icois excluded by!**/*.icoapps/docs/app/fonts/GeistMonoVF.woffis excluded by!**/*.woffapps/docs/app/fonts/GeistVF.woffis excluded by!**/*.woffapps/docs/public/file-text.svgis excluded by!**/*.svgapps/docs/public/globe.svgis excluded by!**/*.svgapps/docs/public/next.svgis excluded by!**/*.svgapps/docs/public/turborepo-dark.svgis excluded by!**/*.svgapps/docs/public/turborepo-light.svgis excluded by!**/*.svgapps/docs/public/vercel.svgis excluded by!**/*.svgapps/docs/public/window.svgis excluded by!**/*.svgpnpm-lock.yamlis excluded by!**/pnpm-lock.yaml
📒 Files selected for processing (26)
apps/app/.gitignoreapps/app/.vscode/extensions.jsonapps/app/.vscode/settings.jsonapps/app/README.mdapps/app/app.jsonapps/app/app/_layout.tsxapps/app/app/index.tsxapps/app/app/modal.tsxapps/app/components/ExternalLink.tsxapps/app/components/HapticTab.tsxapps/app/constants/.gitkeepapps/app/eslint.config.jsapps/app/package.jsonapps/app/scripts/reset-project.jsapps/app/tsconfig.jsonapps/docs/.gitignoreapps/docs/README.mdapps/docs/app/globals.cssapps/docs/app/layout.tsxapps/docs/app/page.module.cssapps/docs/app/page.tsxapps/docs/eslint.config.jsapps/docs/next.config.jsapps/docs/package.jsonapps/docs/tsconfig.jsonpackage.json
💤 Files with no reviewable changes (10)
- apps/docs/next.config.js
- apps/docs/app/page.module.css
- apps/docs/README.md
- apps/docs/eslint.config.js
- apps/docs/app/globals.css
- apps/docs/.gitignore
- apps/docs/tsconfig.json
- apps/docs/app/page.tsx
- apps/docs/app/layout.tsx
- apps/docs/package.json
| return ( | ||
| <SafeAreaView style={{ flex: 1 }}> | ||
| <StatusBar style="auto" /> | ||
| <Stack screenOptions={{ headerShown: false }} /> |
There was a problem hiding this comment.
🧩 Analysis chain
🌐 Web query:
expo-router v6에서 특정 라우트(modal.tsx)를 네이티브 모달로 표시하려면 _layout.tsx에 Stack.Screen+options: { presentation: "modal" } 설정이 필요한지 확인해 주세요.
💡 Result:
네. expo-router v6에서 modal.tsx를 “네이티브 모달”로 표시하려면, 해당 라우트가 포함된 Stack 레이아웃(보통 app/_layout.tsx)에서 <Stack.Screen name="modal" options={{ presentation: 'modal' }} />처럼 presentation 옵션을 설정해야 합니다. 파일을 modal.tsx로 만든 것만으로는 자동으로 모달 프레젠테이션이 적용되지 않습니다. [1]
참고로 이 설정은 Stack.Screen의 options로 “해당 라우트의 동작(React Navigation의 screen options)”을 구성하는 방식입니다. [2]
예시 (app/_layout.tsx): [1]
import { Stack } from 'expo-router';
export default function Layout() {
return (
<Stack>
<Stack.Screen name="index" />
<Stack.Screen name="modal" options={{ presentation: 'modal' }} />
</Stack>
);
}[1] [2]
🏁 Script executed:
# Check the actual content of the _layout.tsx file
find . -path "*apps/app/app/_layout.tsx" -type fRepository: depromeet/18th-team3-client
Length of output: 97
🏁 Script executed:
# List files in the apps/app/app directory to understand the routing structure
find apps/app/app -type f -name "*.tsx" -o -name "*.ts" 2>/dev/null | head -20Repository: depromeet/18th-team3-client
Length of output: 141
🏁 Script executed:
# Read the actual _layout.tsx file content
if [ -f "apps/app/app/_layout.tsx" ]; then
cat -n "apps/app/app/_layout.tsx"
fiRepository: depromeet/18th-team3-client
Length of output: 626
🏁 Script executed:
# Check the modal.tsx file to understand if it's configured as a modal
cat -n "apps/app/app/modal.tsx"Repository: depromeet/18th-team3-client
Length of output: 791
modal 라우트의 모달 프레젠테이션 설정이 필요합니다.
현재 구조에서 apps/app/app/modal.tsx는 의도적으로 모달 화면으로 구성되었지만(dismissTo 사용), _layout.tsx에 명시적인 presentation: 'modal' 옵션이 없어 일반 스택 화면으로 표시됩니다. expo-router v6에서는 네이티브 모달 동작을 보장하려면 Stack.Screen 옵션에 presentation 설정이 필수입니다.
제안 diff
- <Stack screenOptions={{ headerShown: false }} />
+ <Stack screenOptions={{ headerShown: false }}>
+ <Stack.Screen name="modal" options={{ presentation: 'modal' }} />
+ </Stack>🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@apps/app/app/_layout.tsx` at line 14, 현재 Stack이 모든 화면을 기본 스택으로 렌더링하고 있어
modal.tsx가 모달 프레젠테이션으로 뜨지 않습니다; _layout.tsx에서 Stack 또는 Stack.Screen 구성을 수정해
modal 경로에 presentation: 'modal' 옵션을 명시적으로 설정하세요 — 예: 추가로 Stack.Screen 항목을 만들거나
screenOptions 콜백에서 route.name === 'modal'일 때 options.presentation = 'modal'을
반환하여 Stack과 Stack.Screen(또는 screenOptions)에서 presentation을 'modal'로 지정하세요.
| source={{ uri: 'https://www.naver.com/' }} | ||
| allowsBackForwardNavigationGestures | ||
| cacheEnabled | ||
| webviewDebuggingEnabled | ||
| startInLoadingState | ||
| /> |
There was a problem hiding this comment.
🧩 Analysis chain
🏁 Script executed:
find . -name "index.tsx" -path "*/apps/app/app/*" -type fRepository: depromeet/18th-team3-client
Length of output: 95
🏁 Script executed:
cat -n ./apps/app/app/index.tsxRepository: depromeet/18th-team3-client
Length of output: 1138
WebView 네비게이션 출처 제한 필요 - 임의 외부 URL 이동 가능
현재 코드에서 allowsBackForwardNavigationGestures가 활성화되어 있지만, originWhitelist나 onShouldStartLoadWithRequest로 탐색을 제한하고 있지 않습니다. 이로 인해 사용자가 뒤로가기/앞으로가기 제스처나 페이지 내 링크를 통해 의도하지 않은 외부 도메인으로 네비게이션될 수 있습니다.
단일 서비스 도메인(www.naver.com)만 허용하도록 다음과 같이 수정하세요:
수정 제안
+const ALLOWED_HOSTS = new Set(['www.naver.com'])
+
export default function Page() {
return (
<KeyboardAvoidingView
style={{ flex: 1, backgroundColor: 'white' }}
behavior={Platform.OS === 'ios' ? 'padding' : 'height'}
>
<Webview
style={{ flex: 1 }}
source={{ uri: 'https://www.naver.com/' }}
+ originWhitelist={['https://*']}
+ onShouldStartLoadWithRequest={(request) => {
+ try {
+ return ALLOWED_HOSTS.has(new URL(request.url).host)
+ } catch {
+ return false
+ }
+ }}
allowsBackForwardNavigationGestures
cacheEnabled
webviewDebuggingEnabled
startInLoadingState
/>
</KeyboardAvoidingView>
)
}📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| source={{ uri: 'https://www.naver.com/' }} | |
| allowsBackForwardNavigationGestures | |
| cacheEnabled | |
| webviewDebuggingEnabled | |
| startInLoadingState | |
| /> | |
| const ALLOWED_HOSTS = new Set(['www.naver.com']) | |
| export default function Page() { | |
| return ( | |
| <KeyboardAvoidingView | |
| style={{ flex: 1, backgroundColor: 'white' }} | |
| behavior={Platform.OS === 'ios' ? 'padding' : 'height'} | |
| > | |
| <Webview | |
| style={{ flex: 1 }} | |
| source={{ uri: 'https://www.naver.com/' }} | |
| originWhitelist={['https://*']} | |
| onShouldStartLoadWithRequest={(request) => { | |
| try { | |
| return ALLOWED_HOSTS.has(new URL(request.url).host) | |
| } catch { | |
| return false | |
| } | |
| }} | |
| allowsBackForwardNavigationGestures | |
| cacheEnabled | |
| webviewDebuggingEnabled | |
| startInLoadingState | |
| /> | |
| </KeyboardAvoidingView> | |
| ) | |
| } |
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed.
In `@apps/app/app/index.tsx` around lines 18 - 23, The WebView allows unrestricted
navigation via back/forward gestures and links; restrict it to the single
allowed domain by adding originWhitelist and a navigation filter callback: set
originWhitelist to only permit "https://www.naver.com" and implement
onShouldStartLoadWithRequest (or onNavigationStateChange) to validate the
request.url starts with the allowed origin (the current source uri
'https://www.naver.com/') and return true only for that origin, otherwise return
false and optionally block navigation when allowsBackForwardNavigationGestures
would otherwise allow moving off-domain.
|
p5) 단순 의견인데 apps/app/app이 조금 헷갈릴거 같으면 apps/mobile 같이 가도 될듯, web ↔ mobile 대칭도 생길 것 같고 |
There was a problem hiding this comment.
🧹 Nitpick comments (2)
apps/app/app/index.tsx (2)
2-2:Webview→WebView대소문자 컨벤션 확인
react-native-webview패키지의 공식 export는WebView(대문자 V)입니다. 기능적으로는 default export이므로 동작하지만, 라이브러리 공식 명명과 일치시키는 것이 코드 가독성과 일관성에 좋습니다.수정 제안
-import Webview from 'react-native-webview' +import WebView from 'react-native-webview'컴포넌트 사용부도 함께 수정:
- <Webview + <WebView🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@apps/app/app/index.tsx` at line 2, Update the default import from react-native-webview to match the library's official export name: change the imported identifier Webview to WebView in the import statement at the top of the file and adjust all its usages (e.g., any JSX tags or references to Webview) to WebView so the import and component name are consistent with the package export.
11-23: WebView 오류 처리 추가 권장네트워크 오류나 로딩 실패 시 사용자에게 피드백을 제공할 수 있도록
onError또는renderErrorprop 추가를 고려해 주세요. 현재는 로딩 실패 시 빈 화면이나 기본 오류 메시지만 표시됩니다.예시
<Webview style={{ flex: 1 }} source={{ uri: 'https://www.naver.com/' }} allowsBackForwardNavigationGestures cacheEnabled webviewDebuggingEnabled={__DEV__} startInLoadingState + onError={(syntheticEvent) => { + const { nativeEvent } = syntheticEvent + console.warn('WebView error: ', nativeEvent) + }} + renderError={(errorName) => ( + <View style={{ flex: 1, justifyContent: 'center', alignItems: 'center' }}> + <Text>페이지를 불러올 수 없습니다.</Text> + </View> + )} />🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@apps/app/app/index.tsx` around lines 11 - 23, The Webview currently lacks user-facing error handling; add an onError handler and/or renderError prop on the Webview component to catch network/loading failures and display a friendly fallback UI (or set state to show a retry button) instead of a blank/default error; implement handlers referenced as onError and renderError on the Webview, use startInLoadingState to show a loader during fetch, and ensure the error view includes retry logic that re-uses the existing source URI and any relevant props.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Nitpick comments:
In `@apps/app/app/index.tsx`:
- Line 2: Update the default import from react-native-webview to match the
library's official export name: change the imported identifier Webview to
WebView in the import statement at the top of the file and adjust all its usages
(e.g., any JSX tags or references to Webview) to WebView so the import and
component name are consistent with the package export.
- Around line 11-23: The Webview currently lacks user-facing error handling; add
an onError handler and/or renderError prop on the Webview component to catch
network/loading failures and display a friendly fallback UI (or set state to
show a retry button) instead of a blank/default error; implement handlers
referenced as onError and renderError on the Webview, use startInLoadingState to
show a loader during fetch, and ensure the error view includes retry logic that
re-uses the existing source URI and any relevant props.
ℹ️ Review info
⚙️ Run configuration
Configuration used: Organization UI
Review profile: CHILL
Plan: Pro
Run ID: a464f1b0-3b2c-40aa-a7a5-573f715faaee
📒 Files selected for processing (1)
apps/app/app/index.tsx
5db8d98 to
fc80fbc
Compare
There was a problem hiding this comment.
♻️ Duplicate comments (2)
apps/app/scripts/reset-project.js (2)
94-96:⚠️ Potential issue | 🟡 Minor오류 발생 시 비정상 종료 코드 설정이 필요합니다.
Line 94-96은 현재 로그만 남기고 종료되어 자동화에서 실패를 감지하지 못할 수 있습니다.
process.exitCode = 1을 설정해주세요.수정 제안
} catch (error) { console.error(`❌ Error during script execution: ${error.message}`) + process.exitCode = 1 } }🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@apps/app/scripts/reset-project.js` around lines 94 - 96, The catch block that currently only logs the error in reset-project.js should also set a non-zero exit code so CI detects failure: inside the catch (error) handler for the main script (the top-level try/catch surrounding the script execution), after calling console.error(`❌ Error during script execution: ${error.message}`) add setting process.exitCode = 1 to ensure the process signals failure to automation systems; reference the catch (error) block in reset-project.js to locate where to add this line.
14-15:⚠️ Potential issue | 🟠 Major실행 중인
scripts디렉터리를 조작 대상에서 제외해주세요.Line 14에서
scripts를 포함하면, Line 57 이후 루프에서 실행 중인 스크립트 디렉터리를 이동/삭제하게 되어 리셋 동작이 불안정해질 수 있습니다.수정 제안
- * It deletes or moves the /app, /components, /hooks, /scripts, and /constants directories to /app-example based on user input and creates a new /app directory with an index.tsx and _layout.tsx file. + * It deletes or moves the /app, /components, /hooks, and /constants directories to /app-example based on user input and creates a new /app directory with an index.tsx and _layout.tsx file. ... -const oldDirs = ['app', 'components', 'hooks', 'constants', 'scripts'] +const oldDirs = ['app', 'components', 'hooks', 'constants']Also applies to: 56-67
🤖 Prompt for AI Agents
Verify each finding against the current code and only fix it if needed. In `@apps/app/scripts/reset-project.js` around lines 14 - 15, The reset removes or moves directories listed in oldDirs including the running scripts dir, causing instability; update the code so 'scripts' is not a target by removing 'scripts' from the oldDirs array (const oldDirs) or by filtering it out before the cleanup loop (e.g., oldDirs.filter(d => d !== 'scripts')) so the subsequent loop that moves/deletes dirs (the block that iterates oldDirs) never touches the running scripts directory; ensure exampleDir logic remains unchanged.
🤖 Prompt for all review comments with AI agents
Verify each finding against the current code and only fix it if needed.
Duplicate comments:
In `@apps/app/scripts/reset-project.js`:
- Around line 94-96: The catch block that currently only logs the error in
reset-project.js should also set a non-zero exit code so CI detects failure:
inside the catch (error) handler for the main script (the top-level try/catch
surrounding the script execution), after calling console.error(`❌ Error during
script execution: ${error.message}`) add setting process.exitCode = 1 to ensure
the process signals failure to automation systems; reference the catch (error)
block in reset-project.js to locate where to add this line.
- Around line 14-15: The reset removes or moves directories listed in oldDirs
including the running scripts dir, causing instability; update the code so
'scripts' is not a target by removing 'scripts' from the oldDirs array (const
oldDirs) or by filtering it out before the cleanup loop (e.g., oldDirs.filter(d
=> d !== 'scripts')) so the subsequent loop that moves/deletes dirs (the block
that iterates oldDirs) never touches the running scripts directory; ensure
exampleDir logic remains unchanged.
ℹ️ Review info
⚙️ Run configuration
Configuration used: Organization UI
Review profile: CHILL
Plan: Pro
Run ID: 3303e38b-c3be-4598-8c9e-920c02482125
⛔ Files ignored due to path filters (17)
apps/app/assets/images/android-icon-background.pngis excluded by!**/*.pngapps/app/assets/images/android-icon-foreground.pngis excluded by!**/*.pngapps/app/assets/images/android-icon-monochrome.pngis excluded by!**/*.pngapps/app/assets/images/favicon.pngis excluded by!**/*.pngapps/app/assets/images/icon.pngis excluded by!**/*.pngapps/app/assets/images/partial-react-logo.pngis excluded by!**/*.pngapps/app/assets/images/react-logo.pngis excluded by!**/*.pngapps/app/assets/images/react-logo@2x.pngis excluded by!**/*.pngapps/app/assets/images/react-logo@3x.pngis excluded by!**/*.pngapps/app/assets/images/splash-icon.pngis excluded by!**/*.pngapps/docs/public/file-text.svgis excluded by!**/*.svgapps/docs/public/globe.svgis excluded by!**/*.svgapps/docs/public/next.svgis excluded by!**/*.svgapps/docs/public/turborepo-dark.svgis excluded by!**/*.svgapps/docs/public/turborepo-light.svgis excluded by!**/*.svgapps/docs/public/vercel.svgis excluded by!**/*.svgapps/docs/public/window.svgis excluded by!**/*.svg
📒 Files selected for processing (24)
apps/app/.gitignoreapps/app/.vscode/extensions.jsonapps/app/.vscode/settings.jsonapps/app/README.mdapps/app/app.jsonapps/app/app/_layout.tsxapps/app/app/index.tsxapps/app/app/modal.tsxapps/app/components/ExternalLink.tsxapps/app/components/HapticTab.tsxapps/app/constants/.gitkeepapps/app/eslint.config.jsapps/app/package.jsonapps/app/scripts/reset-project.jsapps/app/tsconfig.jsonapps/docs/.gitignoreapps/docs/README.mdapps/docs/app/layout.tsxapps/docs/app/page.tsxapps/docs/eslint.config.jsapps/docs/next.config.jsapps/docs/package.jsonapps/docs/tsconfig.jsonpackage.json
💤 Files with no reviewable changes (8)
- apps/docs/eslint.config.js
- apps/docs/.gitignore
- apps/docs/next.config.js
- apps/docs/README.md
- apps/docs/tsconfig.json
- apps/docs/app/layout.tsx
- apps/docs/package.json
- apps/docs/app/page.tsx
✅ Files skipped from review due to trivial changes (11)
- apps/app/.vscode/extensions.json
- apps/app/.vscode/settings.json
- apps/app/tsconfig.json
- apps/app/eslint.config.js
- package.json
- apps/app/app/modal.tsx
- apps/app/.gitignore
- apps/app/README.md
- apps/app/app/index.tsx
- apps/app/app.json
- apps/app/package.json
🚧 Files skipped from review as they are similar to previous changes (3)
- apps/app/app/_layout.tsx
- apps/app/components/HapticTab.tsx
- apps/app/components/ExternalLink.tsx
작업 내용
apps/app프로젝트 신규 구성비고
/apps폴더 안에 web vs app으로 구분하기 위해/apps/app으로 프로젝트를 생성했는데,app router 기반이라
/apps/app/app경로가 탄생했습니다.. 허거덩한 경로 탄생혹시나 app 대신 다른 좋은 이름이 있다면 추천 부탁드립니다. 없으면 app으로 그대로 갈게요
ExternalLink,HapticTab컴포넌트와app/assets/images에 있는 이미지들은 나중에 참고용으로 사용하려고 삭제하지 않았습니다. 배포 단계에서 삭제될 예정입니다.스크린샷
close #4
Summary by CodeRabbit
새로운 기능
제거
기타