Skip to content

[CHORE] 프론트엔드 개발환경 세팅#2

Open
chaeyoungwon wants to merge 5 commits into
dldusgh318:mainfrom
chaeyoungwon:feature/frontend/environment-setting
Open

[CHORE] 프론트엔드 개발환경 세팅#2
chaeyoungwon wants to merge 5 commits into
dldusgh318:mainfrom
chaeyoungwon:feature/frontend/environment-setting

Conversation

@chaeyoungwon
Copy link
Copy Markdown
Collaborator

@chaeyoungwon chaeyoungwon commented May 19, 2026

‼️ 관련 이슈

close #1

🔎 개요

프론트엔드 개발환경 초기 세팅 및 협업 환경 구성을 진행했습니다.

📝 작업 내용

  • pnpm workspace 기반 모노레포 구조 세팅
  • Next.js + TypeScript 프로젝트 초기 구성
  • Tailwind CSS 적용
  • ESLint / Prettier 설정
  • Husky + lint-staged 설정
  • GitHub Issue Template 및 PR Template 추가
  • 공통 .gitignore 설정

👀 변경 사항

  • 프론트엔드 프로젝트는 frontend 디렉토리 내부에서 실행됩니다.
  • 패키지 매니저는 pnpm을 사용합니다.
  • 커밋 시 Husky pre-commit hook이 실행됩니다.
  • Node 버전 및 pnpm 버전 통일이 필요할 수 있습니다.

Summary by CodeRabbit

  • Chores

    • Initialized project infrastructure with development tooling configuration.
    • Set up code quality standards (linting, formatting, pre-commit hooks).
    • Configured build and development environment for the frontend application.
    • Established monorepo workspace structure.
  • Documentation

    • Added project README with setup and technology stack details.
    • Created issue and pull request templates for project contribution guidelines.

Review Change Stack

@chaeyoungwon chaeyoungwon self-assigned this May 19, 2026
@coderabbitai
Copy link
Copy Markdown

coderabbitai Bot commented May 19, 2026

📝 Walkthrough

Walkthrough

The PR establishes a complete Next.js frontend development environment within a pnpm monorepo, configuring build tooling (TypeScript, ESLint, Prettier, PostCSS), git automation (Husky, lint-staged), GitHub collaboration templates, and minimal app scaffolding for ticket booking and booth reservation features.

Changes

Frontend Development Environment

Layer / File(s) Summary
Monorepo workspace foundation
festival-app/package.json, festival-app/pnpm-workspace.yaml
Root package.json delegates dev/build/lint/format scripts to the frontend workspace using pnpm --filter, and pnpm-workspace.yaml registers both frontend and backend packages with ignored built dependencies (sharp, unrs-resolver).
GitHub collaboration templates
.github/ISSUE_TEMPLATE/bug.md, .github/ISSUE_TEMPLATE/feature.md, .github/pull_request_template.md
Bug and feature issue templates provide structured prompts for error logs, task checklists, and references with Korean guidance text; pull request template includes sections for related issues, work description, change impacts, and optional screenshots.
Git and development environment configuration
.gitignore, .vscode/settings.json, .husky/pre-commit, festival-app/frontend/.gitignore
Root and frontend .gitignore files exclude Node/pnpm artifacts, build outputs, and environment files; VS Code settings point Prettier to the project-local installation; Husky pre-commit hook runs lint-staged checks on the frontend package.
Frontend package and build configuration
festival-app/frontend/package.json, festival-app/frontend/tsconfig.json, festival-app/frontend/next.config.ts
Frontend package.json pins Next.js 16, React 19, and dev tooling with scripts for dev/build/lint/format and lint-staged configuration; tsconfig.json enables strict TypeScript with ES2017 target, React JSX transform, and @/* path alias to ./src; next.config.ts provides a typed config stub.
Code quality and formatting tooling
festival-app/frontend/eslint.config.mjs, festival-app/frontend/.prettierrc, festival-app/frontend/.prettierignore, festival-app/frontend/postcss.config.mjs
ESLint flat config composes Next.js and TypeScript presets with import-sort rules; Prettier config enforces double quotes, trailing commas, 100 char print width, and Tailwind CSS plugin; Prettier and PostCSS ignore files exclude build/lock files; PostCSS config registers Tailwind CSS.
Frontend application scaffolding and documentation
festival-app/frontend/src/app/layout.tsx, festival-app/frontend/src/app/page.tsx, festival-app/frontend/src/app/globals.css, festival-app/frontend/README.md
Root layout sets Korean locale and metadata for "Hongik Festival" with full-height flex styling; home page renders an empty centered container; globals.css imports Tailwind and sets font stack; README documents app scope (ticket/booth/timeline/map features), monorepo setup, tech stack, and project directory structure.

Estimated code review effort

🎯 2 (Simple) | ⏱️ ~12 minutes

Poem

🐰 A workspace takes shape, all tidy and green,
Where Next.js and Tailwind dance clean,
Husky guards commits with linting care,
GitHub templates guide who would dare—
The frontend is ready, let the vibe coding flourish fair! 🎉

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title '[CHORE] 프론트엔드 개발환경 세팅' clearly and concisely describes the main change: frontend development environment setup, which is the primary focus of all changeset modifications.
Linked Issues check ✅ Passed The PR successfully implements all core requirements from issue #1: pnpm workspace setup [#1], Next.js/TypeScript project initialization [#1], Tailwind CSS configuration [#1], ESLint/Prettier setup [#1], Husky/lint-staged configuration [#1], .gitignore configuration [#1], and GitHub templates [#1].
Out of Scope Changes check ✅ Passed All changes are aligned with the frontend development environment setup objective. No unrelated or out-of-scope modifications were introduced; all files pertain to environment configuration, tooling, and project initialization.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing Touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests

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.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link
Copy Markdown

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

🧹 Nitpick comments (1)
.github/ISSUE_TEMPLATE/feature.md (1)

4-6: ⚡ Quick win

Remove empty front-matter defaults for title/labels.

Empty-string values add noise and can cause inconsistent issue initialization. Prefer deleting these keys or setting real defaults.

Suggested cleanup
 ---
 name: Feature
 about: 기능 개발 및 세팅 작업에 사용하는 이슈입니다.
-title: ""
-labels: ""
 assignees: chaeyoungwon
 ---
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In @.github/ISSUE_TEMPLATE/feature.md around lines 4 - 6, Remove the empty
front-matter defaults for title and labels in the ISSUE_TEMPLATE by deleting the
keys title: "" and labels: "" (or replace them with meaningful defaults) so the
template does not include empty-string values; update the YAML front-matter
section in .github/ISSUE_TEMPLATE/feature.md to either omit title and labels
entirely or set real defaults instead of "".
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In @.gitignore:
- Around line 16-18: The current .gitignore entry ".env*" unintentionally
excludes ".env.example"; update the .gitignore so example files are committed by
either replacing ".env*" with explicit runtime ignores like ".env" and
".env.local" (and any other runtime-only variants you need) or add an explicit
allow rule "! .env.example". Reference the existing pattern ".env*" and the file
name ".env.example" when making the change.

In `@frontend/.gitignore`:
- Around line 33-35: Update the .gitignore rule that currently matches ".env*"
so it does not exclude example env templates: change the pattern handling to
explicitly ignore secret env files (e.g., ".env", ".env.local",
".env.production") while allowing ".env.example" to be tracked; locate the
existing ".env*" entry in the frontend .gitignore and replace it with specific
ignore patterns and/or an explicit negation for ".env.example" to ensure example
files remain in Git.

---

Nitpick comments:
In @.github/ISSUE_TEMPLATE/feature.md:
- Around line 4-6: Remove the empty front-matter defaults for title and labels
in the ISSUE_TEMPLATE by deleting the keys title: "" and labels: "" (or replace
them with meaningful defaults) so the template does not include empty-string
values; update the YAML front-matter section in
.github/ISSUE_TEMPLATE/feature.md to either omit title and labels entirely or
set real defaults instead of "".
🪄 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: defaults

Review profile: CHILL

Plan: Pro

Run ID: ccf9bd12-1353-439f-9be2-af8098231d29

📥 Commits

Reviewing files that changed from the base of the PR and between 2555e64 and eb4b5e5.

⛔ Files ignored due to path filters (2)
  • frontend/src/app/favicon.ico is excluded by !**/*.ico
  • pnpm-lock.yaml is excluded by !**/pnpm-lock.yaml
📒 Files selected for processing (20)
  • .github/ISSUE_TEMPLATE/bug.md
  • .github/ISSUE_TEMPLATE/feature.md
  • .github/pull_request_template.md
  • .gitignore
  • .husky/pre-commit
  • .vscode/settings.json
  • frontend/.gitignore
  • frontend/.prettierignore
  • frontend/.prettierrc
  • frontend/README.md
  • frontend/eslint.config.mjs
  • frontend/next.config.ts
  • frontend/package.json
  • frontend/postcss.config.mjs
  • frontend/src/app/globals.css
  • frontend/src/app/layout.tsx
  • frontend/src/app/page.tsx
  • frontend/tsconfig.json
  • package.json
  • pnpm-workspace.yaml

Comment thread .gitignore
Comment thread festival-app/frontend/.gitignore
Copy link
Copy Markdown

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

🧹 Nitpick comments (1)
festival-app/frontend/tsconfig.json (1)

3-3: ⚡ Quick win

Consider updating the TypeScript target to a modern ES version.

The target is set to ES2017, which is quite dated for a project starting in 2026. Modern Next.js projects typically target ES2020 or later, which enables:

  • Newer language features (optional chaining, nullish coalescing, etc.)
  • Better performance characteristics
  • Alignment with current browser support

Next.js handles transpilation for older browsers automatically, so a modern target is safe.

⚡ Recommended modern target
-    "target": "ES2017",
+    "target": "ES2020",

Or even ES2022 if you want to use the latest stable ECMAScript features.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@festival-app/frontend/tsconfig.json` at line 3, Update the TypeScript
compilation target in tsconfig.json by changing the "target" setting (the
"target" key currently set to "ES2017") to a modern ES version such as "ES2020"
or "ES2022"; ensure you run the project build and tests after the change to
verify there are no unexpected issues and that Next.js transpilation behaves as
expected.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@festival-app/frontend/package.json`:
- Line 17: Package.json pins Next.js 16.2.6 which introduces breaking changes;
update code to match the new APIs by auditing and modifying any server or app
routes that use request helpers (await use of params, searchParams, cookies,
headers, draftMode), rename middleware.ts to proxy.ts if present, adjust
next/image usage to include localPatterns and new defaults, move any
experimental.turbopack settings to top-level config, remove or replace usages of
serverRuntimeConfig/publicRuntimeConfig and unstable_rootParams(), update any
single-argument revalidateTag() calls to the new signature, and change metadata
function signatures to accept async params—search the codebase for symbols like
params, searchParams, cookies, headers, draftMode, middleware.ts, next/image,
experimental.turbopack, serverRuntimeConfig, publicRuntimeConfig,
unstable_rootParams, revalidateTag, and metadata to make the required edits per
the Next.js 16 upgrade guide.

In `@festival-app/package.json`:
- Line 14: The prepare script in package.json currently runs "cd .. && husky",
which moves out of festival-app (where husky is declared) and misinitializes
hooks; change the prepare script to just run "husky" inside this package.json
(remove the "cd ..") if festival-app is the repo root, otherwise move the
"husky" dependency and the prepare script into the repository root package.json
so husky runs from the root .husky/ directory; update the "prepare" entry and
dependency placement accordingly to ensure husky initializes in the correct
location.

---

Nitpick comments:
In `@festival-app/frontend/tsconfig.json`:
- Line 3: Update the TypeScript compilation target in tsconfig.json by changing
the "target" setting (the "target" key currently set to "ES2017") to a modern ES
version such as "ES2020" or "ES2022"; ensure you run the project build and tests
after the change to verify there are no unexpected issues and that Next.js
transpilation behaves as expected.
🪄 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: defaults

Review profile: CHILL

Plan: Pro

Run ID: 3d31f5bd-d351-4579-a7d7-dba48f4d9413

📥 Commits

Reviewing files that changed from the base of the PR and between eb4b5e5 and e76393b.

⛔ Files ignored due to path filters (2)
  • festival-app/frontend/src/app/favicon.ico is excluded by !**/*.ico
  • festival-app/pnpm-lock.yaml is excluded by !**/pnpm-lock.yaml
📒 Files selected for processing (16)
  • .husky/pre-commit
  • .vscode/settings.json
  • festival-app/frontend/.gitignore
  • festival-app/frontend/.prettierignore
  • festival-app/frontend/.prettierrc
  • festival-app/frontend/README.md
  • festival-app/frontend/eslint.config.mjs
  • festival-app/frontend/next.config.ts
  • festival-app/frontend/package.json
  • festival-app/frontend/postcss.config.mjs
  • festival-app/frontend/src/app/globals.css
  • festival-app/frontend/src/app/layout.tsx
  • festival-app/frontend/src/app/page.tsx
  • festival-app/frontend/tsconfig.json
  • festival-app/package.json
  • festival-app/pnpm-workspace.yaml
✅ Files skipped from review due to trivial changes (10)
  • festival-app/frontend/src/app/page.tsx
  • festival-app/frontend/.prettierignore
  • .vscode/settings.json
  • festival-app/frontend/postcss.config.mjs
  • festival-app/frontend/.prettierrc
  • festival-app/frontend/src/app/layout.tsx
  • festival-app/frontend/src/app/globals.css
  • festival-app/frontend/.gitignore
  • festival-app/frontend/README.md
  • .husky/pre-commit

"format:check": "prettier . --check"
},
"dependencies": {
"next": "16.2.6",
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟠 Major | 🏗️ Heavy lift

🧩 Analysis chain

🌐 Web query:

What is the latest stable version of Next.js as of May 2026, and is Next.js 16.2.6 available?

💡 Result:

Latest stable Next.js version as of 2026-05-19: 16.2.6 [1][2]. Yes—Next.js 16.2.6 is available. It has a published release in the vercel/next.js GitHub releases and is published on npm as 16.2.6 [1][2].

Citations:


🌐 Web query:

React 19.2.4 compatibility with Next.js 16.2.6 requirements

💡 Result:

React 19.2.4 is compatible with Next.js 16.2.6, provided you run the React and ReactDOM packages at the matching 19.2.x minor (and, for best results, update Next.js to the 16.2.6 security/bugfix release). Next.js 16 (App Router) is explicitly aligned with React 19.2; Next.js 16’s release notes state that it uses the latest React Canary release including newly released React 19.2 features [1]. Additionally, the Next.js 16.2 line was released alongside React 19.2.4 updates (documented in a React docs repository change upgrading Next.js to 16.2 and React to 19.2.4) [2]. For the specific pairing and patch level you asked about, Next.js 16.2.6 is a patched release (security/backported bug fixes) [3][4], and Netlify’s guidance notes that Next.js apps should upgrade to the patched minor and that Next.js bundles the patched React Server Components dependency (so you generally don’t separately upgrade react-server-dom-* when using Next.js) [5]. Practical checklist for compatibility: 1) Use Next.js 16.2.6 (not an earlier 16.2.x) [3]. 2) Use react and react-dom at 19.2.4 (or at least the same 19.2.x minor) [2]. If you do this, you should not see React/Next.js peer dependency incompatibility issues caused purely by using React 19.2.4 with Next.js 16.2.6 (the two are intentionally brought together in the 16.2 upgrade to React 19.2.4) [2].

Citations:


🌐 Web query:

Next.js 16 breaking changes from Next.js 15 migration guide

💡 Result:

Next.js 16 breaking changes you’ll hit when migrating from Next.js 15 (App Router-focused), per the official v16 upgrade guide and release notes: 1) Async Request APIs: must be awaited (params, searchParams, cookies/headers/draftMode) - In Next.js 16, synchronous access is fully removed; the async Request APIs can only be accessed asynchronously.[1] - The upgrade guide calls out params, searchParams (in layouts/pages metadata-generating functions), plus cookies(), headers(), and draftMode() as breaking: code that reads them synchronously must change to await.[1] 2) Async parameters for Image metadata routes - Starting with Next.js 16, the image generating function receives params and id as promises (to align with the async Request APIs change).[1] 3) Async id parameter for sitemap generation - Starting with Next.js 16, the sitemap generating function receives id as a promise.[1] 4) middleware.ts renamed to proxy.ts - The middleware filename is deprecated and has been renamed to proxy to clarify the network boundary.[1] 5) next/image breaking behavior and defaults - Local images with query strings: now requires images.localPatterns to prevent enumeration attacks.[2][1] - Several next/image configuration defaults changed (breaking changes are listed in the v16 upgrade guide under “next/image changes”, including defaults like minimumCacheTTL, imageSizes, and qualities, plus other behavioral constraints).[1] 6) Turbopack is default (and earlier experimental location changes) - The Next.js 16 release notes state “Turbopack by default.”[2] - If you were using experimental.turbopack, that config location changed: it’s now top-level turbopack (and the old experimental location is removed).[2] 7) Config/runtime removals and related renames - Removed runtime config entries: serverRuntimeConfig and publicRuntimeConfig (use environment variables instead).[2] - experimental.dynamicIO flag renamed to cacheComponents.[2] - PPR flags removed/renamed as the feature evolves into the “Cache Components” programming model (including removal of experimental.ppr and route-level export const experimental_ppr).[2] 8) Removed/changed router metadata behavior (scroll behavior) - Automatic scroll-behavior: smooth was removed; to opt back in, add data-scroll-behavior="smooth" to the HTML document.[2] 9) Other removals called out in the release notes - Removal of unstable_rootParams() (with note that an alternative API is planned for a future minor).[2] - revalidateTag() single-argument form removed (use revalidateTag(tag, profile) for SWR, or updateTag(tag) in Actions for read-your-writes).[2] If you want, paste your key Next.js 15 versions/config (next.config.js, whether you use middleware/proxy, any custom Image domains/patterns, and whether you use generateImageMetadata/sitemap routes). I can map these breaking items directly to the exact code/config changes you’ll need.

Citations:


Next.js 16.2.6 and React 19.2.4 are confirmed compatible and currently stable.

The versions specified are valid—Next.js 16.2.6 is the latest stable release and is explicitly paired with React 19.2.4. However, Next.js 16 introduces multiple breaking changes from version 15:

  • Async Request APIs (params, searchParams, cookies, headers, draftMode) must be awaited
  • middleware.ts renamed to proxy.ts
  • next/image defaults and localPatterns requirements changed
  • Turbopack is now default; experimental.turbopack config moved to top-level
  • Removed: serverRuntimeConfig, publicRuntimeConfig, unstable_rootParams(), single-argument revalidateTag()
  • Various metadata function signatures now receive async parameters

Ensure the codebase has been updated to handle these breaking changes before deployment. Review the Next.js 16 upgrade guide for detailed migration steps.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@festival-app/frontend/package.json` at line 17, Package.json pins Next.js
16.2.6 which introduces breaking changes; update code to match the new APIs by
auditing and modifying any server or app routes that use request helpers (await
use of params, searchParams, cookies, headers, draftMode), rename middleware.ts
to proxy.ts if present, adjust next/image usage to include localPatterns and new
defaults, move any experimental.turbopack settings to top-level config, remove
or replace usages of serverRuntimeConfig/publicRuntimeConfig and
unstable_rootParams(), update any single-argument revalidateTag() calls to the
new signature, and change metadata function signatures to accept async
params—search the codebase for symbols like params, searchParams, cookies,
headers, draftMode, middleware.ts, next/image, experimental.turbopack,
serverRuntimeConfig, publicRuntimeConfig, unstable_rootParams, revalidateTag,
and metadata to make the required edits per the Next.js 16 upgrade guide.

Comment thread festival-app/package.json
"lint:fix": "pnpm --filter frontend lint:fix",
"format": "pnpm --filter frontend format",
"format:check": "pnpm --filter frontend format:check",
"prepare": "cd .. && husky"
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🔴 Critical | 🏗️ Heavy lift

Fix the Husky prepare script path navigation.

The prepare script performs cd .. before running husky, which navigates out of festival-app/ to the parent directory. This is problematic because:

  • Husky is declared as a dependency in this package.json, not the parent
  • Husky expects to initialize hooks in the repository root's .husky/ directory
  • If festival-app/ is a subdirectory of the repo, this creates confusion about where hooks should live
  • This pattern can fail in CI/CD or when installing from a clean state
🔧 Recommended fix

If festival-app/ is the repository root, remove the cd ..:

-    "prepare": "cd .. && husky"
+    "prepare": "husky"

If the repository root is the parent directory, move the husky dependency and prepare script to the root package.json instead.

📝 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.

Suggested change
"prepare": "cd .. && husky"
"prepare": "husky"
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@festival-app/package.json` at line 14, The prepare script in package.json
currently runs "cd .. && husky", which moves out of festival-app (where husky is
declared) and misinitializes hooks; change the prepare script to just run
"husky" inside this package.json (remove the "cd ..") if festival-app is the
repo root, otherwise move the "husky" dependency and the prepare script into the
repository root package.json so husky runs from the root .husky/ directory;
update the "prepare" entry and dependency placement accordingly to ensure husky
initializes in the correct location.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[CHORE] 프론트엔드 개발환경 세팅

1 participant