First off, thank you for considering contributing to github-profile-crt! It's people like you that make open source such a great community 🎉
- Code of Conduct
- How Can I Contribute?
- Development Setup
- Code layout
- Adding a new theme
- Coding Standards
- Commit Guidelines
- Pull Request Process
- Release Process
This project and everyone participating in it is governed by our Code of Conduct. By participating, you are expected to uphold this code. Please report unacceptable behavior to stefan@desource-labs.org.
Before creating bug reports, please check the existing issues to avoid duplicates.
When creating a bug report, include:
- A clear and descriptive title
- A detailed description of the issue
- Steps to reproduce the behavior
- Expected vs actual behavior
- Screenshots or/and logs (if applicable)
- Code samples (minimal reproduction)
Example:
## Bug: Profile picture not updating after change
### Steps to Reproduce
1. Go to the profile settings page.
2. Upload a new profile picture.
3. Save changes.
### Expected Behavior
The new profile picture should be displayed immediately after saving.
### Actual Behavior
The old profile picture remains displayed until the page is refreshed.
### Environment
- OS: Windows 10Enhancement suggestions are tracked as GitHub issues. When creating an enhancement suggestion, include:
- A clear and descriptive title
- A detailed description of the enhancement
- The problem it solves or the benefit it provides
- Any relevant examples or use cases
- Fork the repo and create your branch from
main - Make your changes
- Ensure your code follows the coding standards and all commands/tests pass
- Update the documentation if necessary
- Submit your pull request!
- Node.js >=24 (see
package.jsonfor the supported range) - pnpm (this repo uses pnpm; see
packageManager)
Fork the repository and clone it to your local machine:
# Clone your fork
git clone https://github.com/YOUR_USERNAME/github-profile-crt.git
cd github-profile-crt
# Install dependencies
pnpm installCopy the template:
cp .env.example .envFill in:
GITHUB_USER— login to renderGITHUB_TOKEN— token with API access
pnpm generate:devYou should see SVGs written into examples/ by default.
Library build (Vite):
pnpm buildAction bundle build (ncc):
pnpm build:actionOr both:
pnpm build:allsrc/action.ts— GitHub Action entrypoint (inputs, git commit/push)src/config/*— config parsing and defaultssrc/github/*— GitHub GraphQL/REST clients and fetcherssrc/render/*— SVG renderer + optimizationsrc/render/themes.ts— theme definitions and light variantsdocs/— theme previews + docs pages
- Add a new theme config in
src/render/themes.ts - If you want a light variant, add a matching entry in
LIGHT_THEME_OVERRIDES - Generate locally and confirm both
*-dark.svgand*-light.svgoutput - Add a theme preview page under
docs/and link it fromdocs/themes.md
- Keep output deterministic (given the same inputs)
- Prefer small, composable functions
- Avoid “magic” state in global variables
- Keep runtime network calls minimal and well‑bounded
Formatting and linting:
pnpm lint
pnpm formatWe follow Conventional Commits:
<type>(<scope>): <subject>
<body>
<footer>
- feat: New feature
- fix: Bug fix
- docs: Documentation only
- style: Code style (formatting, missing semi-colons, etc.)
- refactor: Code change that neither fixes a bug nor adds a feature
- perf: Performance improvement
- test: Adding or updating tests
- chore: Maintenance tasks (dependencies, build, etc.)
Scopes are optional but can be used to specify the area of the codebase affected (e.g., render, github, config).
# New feature
git commit -m "feat(render): add new 'minimal' theme"
# Bug fix
git commit -m "fix(github): handle API rate limit errors gracefully"
# Documentation update
git commit -m "docs: update README with new theme examples"- Run
pnpm build— ensure the library builds without errors - Run
pnpm build:action— ensure the action bundle builds without errors - Run
pnpm lint— ensure code is properly formatted and linted - Update documentation if your changes affect usage or themes
- Add tests for new features or bug fixes
Use the repository PR template from:
Minimum content for a high-quality PR:
- Summary — what changed and why.
- Problem / Motivation — which user or maintainer pain point is solved.
- Type of change — bug/feature/docs/refactor/etc.
- Testing — exact commands and what was verified.
- Visual diff — before/after screenshots for any rendering change.
Example:
## Summary
Adjust WINAMP pointer shades to improve visibility in light mode without changing geometry.
## Problem / Motivation
Pointer caps were near-invisible on light backgrounds.
## Type Of Change
- [x] Bug fix (non-breaking)
## Testing
- pnpm lint
- pnpm typecheck
- pnpm generate:dev
- Checked generated `assets/winamp-light.svg` in GitHub light and dark themes
## Visual Diff (if applicable)
- Attached before/after screenshots in the PR description.- Automated Checks — CI runs tests and builds
- Code Review — Maintainer reviews code
- Feedback — Address review comments
- Approval — Maintainer approves PR
- Merge — PR is merged to main
Maintainers-only release flow:
- Ensure
mainis green and docs are updated. - Update
CHANGELOG.mdmanually:- Move completed items from
## [Unreleased]into a new## [X.Y.Z] - YYYY-MM-DDsection. - Keep entries short and user-facing (
Added,Changed,Fixed,Removed). - This repository does not currently auto-generate changelog entries.
- Move completed items from
- Run final validation locally:
pnpm lintpnpm typecheckpnpm build:allpnpm generate:dev
- Commit any generated/required artifacts.
- Bump version in
package.json(if needed for release tracking). - Create and push a version tag:
git checkout main
git pull --ff-only
git tag -a vX.Y.Z -m "Release vX.Y.Z"
git push origin vX.Y.Z- Create GitHub Release notes for
vX.Y.Z. - Move the major action tag (for example
v1) to the new release so users pinned to major get updates:
git tag -fa v1 -m "Update v1 to vX.Y.Z"
git push origin v1 --force- Verify Marketplace listing and sample workflow still work after release.
- 🐛 Bug fixes — Help identify and fix bugs
- ✨ New features — Propose and implement new features or themes
- 🎨 More themes — Adding more themes and light variants
- 📖 Documentation - Improving documentation and examples
- 🧪 Adding tests and improving coverage
- GitHub Discussions: Ask questions, share ideas
- Issues: Report bugs or request features
- Security: Report vulnerabilities privately
By contributing, you agree that your contributions will be licensed under the MIT License.
Your contributions make this project better for everyone. We appreciate your time and effort! ❤️
If this project helps your profile stand out, star the repo and share your theme setup