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... }, }, ])