This document outlines the development workflow and rules to keep the codebase consistent and maintainable.
- Project Setup
- Development Flow
- Branch Naming
- Branch Strategy
- Commit Convention
- Pull Requests
- What Should Not Be Committed
- Code Style
- Definition of Done
- Notes
git clone https://github.com/Abviol/scent.gitcp .env.example .envpnpm installpnpm devpnpm buildpnpm lint- Create branch from
dev - Implement changes
- Run
pnpm lint+pnpm build - Open PR targeting
dev - Merge after review/checks
Use the following convention:
type/short-description
feat: new featurefix: bug fixrefactor: code change without behavior changedocs: documentation onlystyle: formatting (no logic changes)test: adding/updating testschore: maintenance (build tools, deps, etc.)
- feat/cart-drawer
- fix/hydration-issue
- refactor/navbar-state
- docs/readme-update
- main → production
- dev → active development
PRs target dev; dev is merged into main only for releases.
We use Conventional Commits:
type(scope): subject
Body: explanation of what changed and why (optional)
Footer: links / breaking changes (optional)
feat: new featurefix: bug fixrefactor: code change without behavior changedocs: documentation onlystyle: formatting (no logic changes)test: adding/updating testschore: maintenance (build tools, deps, etc.)
What part of the app is affected.
Examples:
cartnavbarauthcheckoutapi
Short description of the change
Rules:
- imperative mood (“add”, not “added”)
- lowercase
- no period at the end
- ideally ≤ 50–72 characters
Example:
feat(cart): add drawer animation
Why and what in detail.
Implemented smooth slide-in animation using Framer Motion.
Improves UX consistency with design system.Used for metadata like:
- breaking changes
- issue references
fix(auth): prevent login crash on empty input
Closes #42or
feat(api): change response format
BREAKING CHANGE: response now returns `userData` instead of `user`feat(cart): add drawer animation
Implemented slide-in cart drawer with focus trap and escape handling.
Improves accessibility and aligns with design specs.
Closes #18Before opening a PR:
- Ensure the branch is up to date with
dev - Run
pnpm build - Run
pnpm lint - Test changes locally
PR titles use the same format as commit messages:
type(scope): short description- Clear description
- Screenshots (if UI changes)
- All (applicable) checklist items completed
See /.github/pull_request_template.md
- console.log left in code
- commented-out code
- unused imports
- debug flags
See Code Conventions for the full coding standards applied across the codebase.
A task is considered complete when:
- Feature works as expected
- No ESLint errors
- No console errors
- Fully responsive (obligatory after the Phase 5 is reached, see README.md)
- Accessible (keyboard + ARIA where needed)
- Types are correct
- UI matches design
- Code is reviewed and clean
This project is designed as a portfolio-level production simulation.
Quality, consistency, and clarity matter more than speed.