Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
7 changes: 6 additions & 1 deletion .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -27,8 +27,13 @@ jobs:
steps:
- uses: actions/checkout@v3

- name: Install pnpm
uses: pnpm/action-setup@v3
with:
version: 9

- name: Install Vercel CLI
run: npm install --global vercel@latest
run: pnpm add --global vercel@latest

- name: Pull Vercel Environment Information
run: vercel pull --yes --environment=${{ env.VERCEL_ENV }} --token=${{ secrets.VERCEL_TOKEN }}
Expand Down
22 changes: 16 additions & 6 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -14,17 +14,22 @@ jobs:
- name: Checkout repository
uses: actions/checkout@v4

- name: Install pnpm
uses: pnpm/action-setup@v3
with:
version: 9

- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: "22.x"
cache: "npm"
cache: "pnpm"

- name: Install dependencies
run: npm ci
run: pnpm install --frozen-lockfile

- name: Run ESLint (includes Prettier) & TypeScript
run: npm run ci:check
run: pnpm run ci:check

build:
name: Build Verification
Expand All @@ -34,16 +39,21 @@ jobs:
- name: Checkout repository
uses: actions/checkout@v4

- name: Install pnpm
uses: pnpm/action-setup@v3
with:
version: 9

- name: Setup Node.js
uses: actions/setup-node@v4
with:
node-version: "22.x"
cache: "npm"
cache: "pnpm"

- name: Install dependencies
run: npm ci
run: pnpm install --frozen-lockfile

- name: Build Next.js application
run: npm run build
run: pnpm run build
env:
NODE_ENV: production
7 changes: 6 additions & 1 deletion .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -42,8 +42,13 @@ jobs:
steps:
- uses: actions/checkout@v3

- name: Install pnpm
uses: pnpm/action-setup@v3
with:
version: 9

- name: Install Vercel CLI
run: npm install --global vercel@latest
run: pnpm add --global vercel@latest

- name: Pull Vercel Environment Information
run: vercel pull --yes --environment=${{ env.VERCEL_ENV }} --token=${{ secrets.VERCEL_TOKEN }}
Expand Down
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -37,3 +37,6 @@ next-env.d.ts

# Sentry Config File
.sentryclirc

# Turborepo
.turbo
2 changes: 1 addition & 1 deletion .husky/commit-msg
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
npx --no -- commitlint --edit ${1}
pnpm dlx commitlint --edit ${1}
Copy link

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟡 Minor

🧩 Analysis chain

🏁 Script executed:

# Check if the file exists and view its contents
if [ -f .husky/commit-msg ]; then
  echo "=== File exists ==="
  cat -n .husky/commit-msg
else
  echo "File not found"
fi

Repository: solid-connection/solid-connect-web

Length of output: 144


🏁 Script executed:

# Check other husky hooks to see if they have similar patterns
if [ -d .husky ]; then
  echo "=== Husky hooks directory ==="
  ls -la .husky/
  echo ""
  echo "=== Content of other hooks ==="
  for file in .husky/*; do
    if [ -f "$file ] && [ ! -d "$file" ]; then
      echo "--- $file ---"
      cat "$file"
    fi
  done
fi

Repository: solid-connection/solid-connect-web

Length of output: 147


🌐 Web query:

husky commit-msg hook ${1} argument positional parameter shell quoting best practices

💡 Result:

Short best-practices for using the commit-msg hook's positional parameter ($1) with Husky

  1. Always source Husky's init first in the hook file.

    • Example top lines (generated by husky):
      #!/usr/bin/env sh
      . "$(dirname -- "$0")/_/husky.sh"
    • Reason: ensures Husky wiring and correct working dir/behavior. [3]
  2. Treat $1 as a filename — not the message text — and quote it.

    • Read safely: commit_message="$(< "$1")" or commit_message="$(cat "$1")".
    • Don’t use unquoted $1 (echo $1) — it breaks with spaces/newlines. [2][3]
  3. Validate presence defensively.

    • Use ${1:?Missing commit message file} or test -f "$1" and fail with a clear error if absent. [2]
  4. When adding the hook via shell/echo/ npm scripts, escape the dollar or use single quotes so $1 is evaluated at runtime (hook), not when creating the file.

    • Good: echo 'npx --no -- commitlint --edit $1' > .husky/commit-msg
    • If double quotes are required, escape: echo "npx --no -- commitlint --edit $1" > .husky/commit-msg. [1][4]
  5. Use commitlint / other tools with --edit "$1" (or "${1}") so they read the temporary commit message file.

    • Example inside .husky/commit-msg: npx --no -- commitlint --edit "$1". [1][4]
  6. Windows caveat

    • Windows shell/encoding differences require care: use proper quoting/UTF-8 and follow platform notes in commitlint/husky docs (use backtick-escaping in some docs/examples). [1]

References

  • Commitlint local setup & Husky examples (shows echo "npx --no -- commitlint --edit $1"). [1]
  • Git commit-msg hook behavior / read the commit message file and examples for quoting ($1). [2]
  • Git hooks docs: commit-msg receives one parameter — path to the temp message file. [3]
  • Practical Husky + commitlint examples and quoting notes. [4]

1) 인자 경로는 따옴표로 감싸주세요.

$1에는 깃이 전달한 커밋 메시지 파일의 경로가 담깁니다. 따옴표 없이 사용하면 경로에 공백이 있을 때 명령이 깨질 수 있습니다.

🔧 제안 수정
-pnpm dlx commitlint --edit ${1}
+pnpm dlx commitlint --edit "$1"
📝 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
pnpm dlx commitlint --edit ${1}
pnpm dlx commitlint --edit "$1"
🤖 Prompt for AI Agents
In @.husky/commit-msg at line 1, The commit hook uses an unquoted positional
parameter ${1} which will break if the commit message path contains spaces;
update the hook invocation (the line that runs pnpm dlx commitlint --edit ${1})
to wrap the argument in quotes so the positional parameter is passed as a single
argument (e.g., --edit "${1}"), ensuring the commit message file path with
spaces is handled correctly.


4 changes: 2 additions & 2 deletions .husky/pre-push
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
echo "🔍 Running lint check before push..."
npm run lint
pnpm run lint

echo "🔍 Running type check before push..."
npm run typecheck
pnpm run typecheck

echo "✅ All checks passed!"
9 changes: 9 additions & 0 deletions .npmrc
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
# Next.js 호환성을 위한 설정
shamefully-hoist=true
auto-install-peers=true
strict-peer-dependencies=false

# 기본 설정
registry=https://registry.npmjs.org/
enable-pre-post-scripts=true
lockfile=true
41 changes: 39 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -9,10 +9,47 @@
- Prettier
- Vercel

## Prerequisites

- Node.js 22.x
- pnpm 9.x or later

## Installation

This project uses pnpm as the package manager.

```bash
# Install pnpm globally
npm install -g pnpm

# Install dependencies
pnpm install
```

## Commands

```bash
npm run dev
# Development server
pnpm run dev

npm run lint
# Build for production
pnpm run build

# Linting
pnpm run lint

# Type checking
pnpm run typecheck

# Format code
pnpm run format
```

## Migration from npm

If you have an existing clone:

```bash
rm -rf node_modules package-lock.json
pnpm install
```
File renamed without changes.
File renamed without changes.
File renamed without changes.
26 changes: 26 additions & 0 deletions apps/web/.eslintignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
# Dependencies
node_modules

# Build outputs
.next
out
build
dist

# Generated files
*.min.js
*.min.css
next-env.d.ts

# Cache
.cache
.turbo

# Coverage
coverage

# Vercel
.vercel

# Documentation
클로드.md
134 changes: 134 additions & 0 deletions apps/web/.eslintrc.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,134 @@
/**
* ESLint 설정 파일
* Next.js + TypeScript 프로젝트용
*
* 주요 설정:
* - TypeScript 파서 사용
* - Next.js 및 TypeScript 권장 규칙 적용
* - Prettier와의 충돌 방지
*/
module.exports = {
root: true,
parser: "@typescript-eslint/parser",
parserOptions: {
ecmaVersion: "latest",
sourceType: "module",
project: "./tsconfig.json",
},
env: {
browser: true,
es2021: true,
node: true,
},
plugins: ["@typescript-eslint", "prettier"],
extends: [
// Next.js 기본 설정
"next",
// Next.js TypeScript 설정 (plugin:@typescript-eslint/recommended 기반)
"next/typescript",
// TypeScript ESLint 권장 규칙
"plugin:@typescript-eslint/recommended",
// Prettier를 ESLint 규칙으로 실행
"plugin:prettier/recommended",
],
overrides: [
{
// 설정 파일들은 TypeScript 프로젝트에 포함되지 않으므로 project 옵션 비활성화
env: {
node: true,
},
files: [".eslintrc.{js,cjs}", "*.config.{js,mjs,ts}"],
parserOptions: {
sourceType: "script",
project: null,
},
},
],
rules: {
// ==========================================
// React 관련 규칙
// ==========================================

// JSX 사용 시 React import 불필요 (React 17+)
"react/react-in-jsx-scope": "off",

// JSX 허용 파일 확장자
"react/jsx-filename-extension": [1, { extensions: [".js", ".jsx", ".tsx"] }],

// defaultProps 필수 여부 비활성화
"react/require-default-props": "off",

// 함수 컴포넌트는 화살표 함수로 정의
"react/function-component-definition": [1, { namedComponents: "arrow-function" }],

// ==========================================
// Import 관련 규칙
// ==========================================

// import 순서는 Prettier 플러그인에서 처리
"import/order": "off",

// import 시 파일 확장자 생략 (warning으로 설정)
"import/extensions": "off",

// 단일 export 시 default export 권장 (warning)
"import/prefer-default-export": "off",

// ==========================================
// 일반 JavaScript 규칙
// ==========================================

// console.log 허용 (개발 편의)
"no-console": "off",

// alert 허용
"no-alert": "off",

// 정의 전 사용 허용 (TypeScript에서 처리)
"no-use-before-define": "off",

// 미사용 변수 - 기본 규칙 비활성화 (TypeScript 규칙과 충돌 방지)
"no-unused-vars": "off",

// ==========================================
// TypeScript 관련 규칙
// ==========================================

// 미사용 변수 경고 (TypeScript용 - 기본 규칙 대신 사용)
"@typescript-eslint/no-unused-vars": "warn",

// any 타입 사용 경고 (error -> warn)
"@typescript-eslint/no-explicit-any": "warn",

// any 타입 관련 규칙 (경고로 설정)
"@typescript-eslint/no-unsafe-assignment": "warn",
"@typescript-eslint/no-unsafe-member-access": "warn",
"@typescript-eslint/no-unsafe-return": "warn",
"@typescript-eslint/no-unsafe-call": "warn",
"@typescript-eslint/no-unsafe-argument": "warn",

// ==========================================
// 접근성 (a11y) 관련 규칙
// ==========================================

// label과 control 연결 규칙 비활성화
"jsx-a11y/label-has-associated-control": "off",

// 클릭 이벤트에 키보드 이벤트 필요 (경고)
"jsx-a11y/click-events-have-key-events": "warn",

// 정적 요소에 이벤트 핸들러 (경고)
"jsx-a11y/no-static-element-interactions": "warn",
},
settings: {
"import/parsers": {
"@typescript-eslint/parser": [".ts", ".tsx"],
},
"import/resolver": {
typescript: {
alwaysTryTypes: true,
project: "./tsconfig.json",
},
},
},
};
31 changes: 31 additions & 0 deletions apps/web/.next/app-build-manifest.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
{
"pages": {
"/global-error": [
"static/chunks/webpack.js",
"static/chunks/main-app.js",
"static/chunks/app/global-error.js"
],
"/(home)/page": [
"static/chunks/webpack.js",
"static/chunks/main-app.js",
"static/chunks/app/(home)/page.js"
],
"/(home)/layout": [
"static/chunks/webpack.js",
"static/chunks/main-app.js",
"static/chunks/app/(home)/layout.js"
],
"/layout": [
"static/chunks/webpack.js",
"static/chunks/main-app.js",
"static/css/styles.css",
"static/chunks/styles.js",
"static/chunks/app/layout.js"
],
"/not-found": [
"static/chunks/webpack.js",
"static/chunks/main-app.js",
"static/chunks/app/not-found.js"
]
}
}
19 changes: 19 additions & 0 deletions apps/web/.next/build-manifest.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
{
"polyfillFiles": [
"static/chunks/polyfills.js"
],
"devFiles": [],
"ampDevFiles": [],
"lowPriorityFiles": [
"static/development/_buildManifest.js",
"static/development/_ssgManifest.js"
],
"rootMainFiles": [
"static/chunks/webpack.js",
"static/chunks/main-app.js"
],
"pages": {
"/_app": []
},
"ampFirstPages": []
}
1 change: 1 addition & 0 deletions apps/web/.next/cache/eslint/.cache_sbj16r

Large diffs are not rendered by default.

Binary file not shown.
Binary file not shown.
1 change: 1 addition & 0 deletions apps/web/.next/package.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{"type": "commonjs"}
1 change: 1 addition & 0 deletions apps/web/.next/react-loadable-manifest.json
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
{}
Loading