Thank you for your interest in contributing to DevTrack! This document provides guidelines and instructions for contributing.
- Code of Conduct
- Getting Started
- Development Setup
- Making Changes
- Coding Standards
- Testing
- Submitting Changes
This project follows a code of conduct. By participating, you are expected to uphold this code:
- Be respectful and inclusive
- Welcome newcomers
- Focus on what is best for the project
- Show empathy towards other contributors
- Fork the repository on GitHub
- Clone your fork locally
git clone https://github.com/YOUR_USERNAME/DevTrack.git cd DevTrack - Add upstream remote
git remote add upstream https://github.com/The-No-Hands-Company/DevTrack.git
cd backend
mkdir build && cd build
cmake .. -DCMAKE_BUILD_TYPE=Debug -DCMAKE_CXX_STANDARD=23
cmake --build .cd frontend
npm install
npm run electron:dev-
Create a branch for your changes
git checkout -b feature/your-feature-name
-
Make your changes following our coding standards
-
Commit your changes with descriptive messages
git commit -m "feat: add new feature"We use Conventional Commits:
feat:New featurefix:Bug fixdocs:Documentation changesstyle:Code style changesrefactor:Code refactoringtest:Test additions or changeschore:Build process or auxiliary tool changes
- Follow the C++ Core Guidelines
- Use C++23 features when appropriate
- Header guards:
#pragma once - Naming conventions:
- Classes:
PascalCase - Functions:
camelCase - Variables:
snake_case_ - Constants:
UPPER_CASE - Namespaces:
lowercase
- Classes:
Example:
#pragma once
namespace devtrack::models {
class ProjectManager {
public:
void addProject(const Project& project);
private:
std::vector<Project> projects_;
const int MAX_PROJECTS = 100;
};
} // namespace devtrack::models- Follow the project's ESLint configuration
- Use TypeScript for type safety
- Functional components with hooks
- Naming conventions:
- Components:
PascalCase - Functions:
camelCase - Constants:
UPPER_CASE - Files:
PascalCase.tsxfor components,camelCase.tsfor utilities
- Components:
Example:
import React from 'react';
interface ProjectCardProps {
project: Project;
onSelect: (id: number) => void;
}
export const ProjectCard: React.FC<ProjectCardProps> = ({ project, onSelect }) => {
const handleClick = () => {
onSelect(project.id);
};
return (
<div onClick={handleClick}>
<h3>{project.name}</h3>
</div>
);
};cd backend/build
ctest --output-on-failureWrite tests using Google Test:
#include <gtest/gtest.h>
#include "devtrack/models/Project.h"
TEST(ProjectTest, CreateProject) {
devtrack::models::Project project("Test", "Description");
EXPECT_EQ(project.getName(), "Test");
}cd frontend
npm test-
Push your changes to your fork
git push origin feature/your-feature-name
-
Create a Pull Request on GitHub
- Provide a clear title and description
- Reference any related issues
- Ensure all tests pass
- Add screenshots for UI changes
-
Address review feedback
- Make requested changes
- Push additional commits
- Respond to comments
- Code follows the project's style guidelines
- Self-review of code completed
- Comments added to complex code
- Documentation updated
- No new warnings generated
- Tests added/updated and passing
- Dependent changes merged and published
# Backend - run specific test
cd backend/build
ctest -R ProjectTest
# Frontend - run specific test file
cd frontend
npm test -- ProjectCard.test.tsxBackend (GDB):
cd backend/build
gdb ./bin/devtrack_serverFrontend (Chrome DevTools):
- DevTools automatically open in development mode
- Use
console.log()or debugger statements
Backend (clang-format):
cd backend
find src include -name "*.cpp" -o -name "*.h" | xargs clang-format -iFrontend (Prettier):
cd frontend
npm run formatIf you have questions or need help:
- Check existing issues
- Create a new issue with the
questionlabel - Join our discussions
By contributing, you agree that your contributions will be licensed under the same license as the project (see LICENSE).
Thank you for contributing to DevTrack! 🎉