A step-by-step roadmap to level up your Git, coding, and open-source skills. Track your daily commits, learn professional repo practices, improve code quality, and start contributing to the developer community — one commit at a time.
-
Create a practice repo for experimenting.
-
Make at least 1 commit per day (bug fixes, README updates, refactoring).
-
Use descriptive commit messages:
type(scope): short description
Example:
feat(api): add user authentication
-
Learn branching basics: create, switch, merge, delete.
- Add a README.md with description, install instructions, usage, and license.
- Create a
.gitignore
for your language/framework. - Add a
pull_request_template.md
. - Set up GitHub Actions for linting and tests on every push.
- Add a linter (ESLint, Pylint, etc.) and fix all warnings.
- Write unit tests for at least one critical feature.
- Add Codecov (or similar) for test coverage.
- Enable branch protection rules for main branch.
- Open a small PR to an open-source repo you use.
- Comment constructively on one PR in that repo.
- Publish a GitHub Gist with a reusable snippet/tool.
- Publish a portfolio project publicly, with clean docs and a demo.
- Share your repo link in GitHub Discussions or dev communities.
- Keep making weekly commits and one PR to another repo per month.
- Learn advanced Git commands (interactive rebase, cherry-pick, bisect).
-
Clone this repo:
git clone https://github.com/devridge0/git-growth-tracker.git cd git-growth-tracker
-
Start working through the roadmap, ticking off tasks as you complete them.
Follow the format:
type(scope): short description
Types: feat
, fix
, docs
, style
, refactor
, test
, chore
Example:
feat(api): add user authentication
fix(ui): correct button alignment
docs(readme): update installation steps
- Commit small and often — your activity graph will thank you.
- Break work into meaningful commits instead of one giant commit.
- Experiment freely in your practice repo before touching important projects.
Think of this roadmap like a game:
- Each commit = XP gained
- Each merged PR = level-up
- Each new skill learned = unlocked ability
This template provides a minimal setup to get React working in Vite with HMR and some ESLint rules.
Currently, two official plugins are available:
- @vitejs/plugin-react uses Babel for Fast Refresh
- @vitejs/plugin-react-swc uses SWC for Fast Refresh
If you are developing a production application, we recommend updating the configuration to enable type-aware lint rules:
export default tseslint.config([
globalIgnores(['dist']),
{
files: ['**/*.{ts,tsx}'],
extends: [
// Other configs...
// Remove tseslint.configs.recommended and replace with this
...tseslint.configs.recommendedTypeChecked,
// Alternatively, use this for stricter rules
...tseslint.configs.strictTypeChecked,
// Optionally, add this for stylistic rules
...tseslint.configs.stylisticTypeChecked,
// Other configs...
],
languageOptions: {
parserOptions: {
project: ['./tsconfig.node.json', './tsconfig.app.json'],
tsconfigRootDir: import.meta.dirname,
},
// other options...
},
},
])
You can also install eslint-plugin-react-x and eslint-plugin-react-dom for React-specific lint rules:
// eslint.config.js
import reactX from 'eslint-plugin-react-x'
import reactDom from 'eslint-plugin-react-dom'
export default tseslint.config([
globalIgnores(['dist']),
{
files: ['**/*.{ts,tsx}'],
extends: [
// Other configs...
// Enable lint rules for React
reactX.configs['recommended-typescript'],
// Enable lint rules for React DOM
reactDom.configs.recommended,
],
languageOptions: {
parserOptions: {
project: ['./tsconfig.node.json', './tsconfig.app.json'],
tsconfigRootDir: import.meta.dirname,
},
// other options...
},
},
])