Version: 1.0
Applies to: All Automatos projects (web + mobile)
Effective Date: October 2025
This document defines how branches and commits are named across all Automatos repositories.
Our goals:
Automatos follows GitFlow as the branching strategy and Semantic Commits for message formatting.
Branches must follow this format:
<type>/<project-prefix>-<issue-number>-<short-description>
| Purpose | Example | Notes |
|---|---|---|
| Feature | feature/FW-31-setup-ci-cd |
Adds or enhances functionality |
| Bug Fix | fix/QL-12-sidebar-freeze |
Resolves a defect |
| Hotfix | hotfix/FW-49-login-failure |
Urgent patch directly into main |
| Chore | chore/FW-27-lint-config |
Code maintenance or refactor |
| Release | release/1.3.0 |
Used only for deployment prep |
| Prefix | Description |
|---|---|
feature/ |
New feature or enhancement |
fix/ |
Bug or issue fix |
hotfix/ |
Production patch |
chore/ |
Maintenance, tooling, or dependency changes |
release/ |
Stable version branch |
Automatos uses Semantic Commit Messages with Issue linkage.
<type>(<scope>): <short summary> [<emoji>] [<issue-ref>]
| Field | Description | Example |
|---|---|---|
type |
The purpose of the commit (see below) | feat, fix, chore |
scope |
The specific module, feature, or component | auth, ui, api |
summary |
A concise summary of the change (max 72 chars) | add Google login button |
issue-ref |
The linked GitHub Issue in parentheses | (#31) |
| Type | Description | Example |
|---|---|---|
| feat | Introduces a new feature | feat(auth): add Google login (#31) |
| fix | Bug fix | fix(ui): resolve sidebar scroll freeze (#24) |
| chore | Routine maintenance, build setup, deps | chore(devops): update CI workflow (#12) |
| refactor | Code improvement without behavior change | refactor(api): simplify user fetch logic (#18) |
| docs | Documentation updates | docs(readme): add setup instructions (#22) |
| style | Formatting, whitespace, etc. | style(ui): format components with Prettier (#19) |
| test | Adding or modifying tests | test(auth): add login unit tests (#35) |
| perf | Performance improvements | perf(api): optimize DB queries (#41) |
| revert | Reverts a previous commit | revert: remove broken login (#37) |
feat(auth): add Google sign-in support (#31)
fix(navbar): correct alignment on mobile (#42)
chore(ci): integrate EAS build step in pipeline (#55)
docs(api): document user endpoints (#66)
GitMoji can be used sparingly for readability, or if you want to make things a little more boujee. They must be placed after the colon, before the message, and should not replace semantic types.
| Type | Emoji | Example |
|---|---|---|
| feat | ✨ | feat(ui): ✨ add dark mode toggle (#12) |
| fix | 🐛 | fix(auth): 🐛 correct token refresh logic (#48) |
| docs | 📝 | docs(readme): 📝 add environment setup guide (#3) |
| chore | 🧹 | chore(repo): 🧹 cleanup old workflows (#8) |
| refactor | ♻️ | refactor(api): ♻️ simplify user model (#29) |
| perf | ⚡ | perf(images): ⚡ optimize asset loading (#20) |
| test | ✅ | test(auth): ✅ add login validation tests (#5) |
Every commit must reference its issue number using the (#issueNumber) format.
feat(auth): add token refresh support (#12)feat(auth): add token refresh support FW-12feat(auth): add token refresh support (12)This ensures automated tools like changelog generators, release notes, and issue auto-closing work correctly.
Create a branch:
git checkout -b feature/FW-31-setup-ci-cd
Make commits:
git commit -m "feat(ci): add EAS build step to pipeline (#31)"
git commit -m "chore(ci): configure cache for dependencies (#31)"
Push & open a PR:
PR title:
FW-31 | Setup CI/CD Pipeline (#31)
On merge:
| Benefit | Description |
|---|---|
| Traceability | Each commit directly linked to an issue |
| Automation Ready | Works with semantic-release / changesets |
| Readable History | Consistent human-friendly structure |
| Future Scalability | Compatible with label-based pipelines and CI gates |
| Professionalism | Matches conventions used by orgs like Render, Expo, and Netlify |
| Sexiness | Things must be sexy even if they’re actually junk |
| Element | Rule | |
|---|---|---|
| Branch | <type>/<prefix>-<issue>-<desc> |
|
| Commit | <type>(<scope>): <summary> (#issue) |
|
| PR Title | <prefix>-<issue> | <summary> (#issue) |
|
| GitMoji | Optional — keep minimal and relevant |
feature/FW-31-setup-ci-cd
feat(ci): add EAS build step to pipeline (#31)
FW-31 | Setup CI/CD Pipeline (#31)
| Mistake | Why It’s Wrong | |
|---|---|---|
FW-31: Setup CI/CD Pipeline |
Missing semantic type; automation-unfriendly | |
fix: bug fixed |
No issue reference or context | |
feature: add auth |
Invalid type (should be feat) |
|
feat: add stuff |
Vague, unclear message | |
chore: merge branch |
No merges to be committed manually; should be squash or rebase |
This is the first edition of how we’ll we be writing commits with potentially many updates to come as we scale insha’Allah. I’ve chosen this particular style for 2 main reasons:
I’ll be following this with another standardization on our entire dev process. For now, please follow this 🤗
In short:
Every branch and commit should be machine-readable, human-understandable, and automation-friendly.
A perfect commit history tells the story of the product — clean, contextual, and consistent.