This document explains how to create a branch for feature development and submit a PR.
- Use
type/descriptionformat (e.g.,feat/add-button,fix/date-filter)
- Format:
type: commit message(English recommended)
feat: New featurefix: Bug fixdocs: Documentation changesstyle: Code formatting, semicolons, etc. (no functional changes)refactor: Code refactoring (variable renaming, etc.)test: Adding/modifying tests (no functional changes)chore: Build tasks, package management, etc. (no functional changes)
-
Clone the repository.
gh repo clone zenato/puppeteer-renderer cd puppeteer-renderer -
Enable the package manager. Skip this step if
pnpmis already enabled.# Node.js 24.0.0 or higher corepack enable corepack prepare pnpm@latest --activate # Or npm install -g pnpm
-
Install dependencies.
pnpm install
-
Create a working branch. (Follow branch naming conventions)
git checkout -b feat/new-feature
-
Start development.
pnpm dev
-
Once development is complete, commit your changes. (English recommended)
git add . git commit -m "feat: add new feature"
-
Create a Pull Request.
gh pr create --title "feat: add new feature" --body "Description here"
- Prettier: Code formatting rules must be followed
- Consistency: Apply Prettier to all TypeScript files
- Type Safety: Utilize TypeScript strict mode
- Functional Programming: Prefer pure functions when possible
- Top: External modules (npm packages)
- Bottom: Internal modules (project files)
- No Blank Lines: No blank lines between import blocks
- No Comments: Do not add comments to import statements
import pino from 'pino'
import dotenv from 'dotenv'
import { config } from './config'
import { logger } from './logger'
import { LoginCredentials } from './types'- File names: kebab-case (e.g.,
availability.ts) - Variables/Functions: camelCase (e.g.,
availableDates) - Constants: UPPER_SNAKE_CASE (e.g.,
USER_NAME) - Types/Interfaces: PascalCase (e.g.,
LoginCredentials)
- Comments: Use only for business logic that is difficult to explain through code itself
- Error Handling: Prefer try-catch
- Async Processing: Use async/await, avoid Promise.then() chaining