Thank you for your interest in contributing to LiftShift! We welcome contributions from everyone. This document provides guidelines and instructions for contributing.
- Code of Conduct
- Getting Started
- Development Setup
- How to Contribute
- Reporting Bugs
- Suggesting Enhancements
- Pull Request Process
- Coding Standards
- Commit Messages
This project is committed to providing a welcoming and inspiring community for all. Please read and respect our code of conduct:
- Be respectful and inclusive
- Be patient and constructive
- Focus on what is best for the community
- Show empathy towards other community members
- Node.js v18 or higher
- npm v9 or higher
- Git
- A text editor (VS Code recommended)
-
Fork the repository
# Visit https://github.com/aree6/LiftShift # Click "Fork" button
-
Clone your fork
git clone https://github.com/<your-username>/LiftShift.git cd LiftShift
-
Add upstream remote
git remote add upstream https://github.com/aree6/LiftShift.git
-
Install dependencies
npm install
-
Start the development server
npm run dev
The app will be available at
http://localhost:3000
We appreciate all types of contributions:
- Bug Fixes - Fix bugs and issues
- Features - Add new functionality
- Documentation - Improve docs and README
- Performance - Optimize code and improve performance
- Tests - Add or improve test coverage
- Refactoring - Improve code quality and structure
- Check if the bug has already been reported in Issues
- Try to reproduce with the latest code
- Collect information about the bug
Create an issue with:
- Clear title - Briefly describe the issue
- Description - Detailed explanation of the problem
- Steps to Reproduce - Exact steps to reproduce the issue
- Expected Behavior - What should happen
- Actual Behavior - What actually happened
- Screenshots - If applicable
- Environment - Browser, OS, Node version, etc.
Example:
Title: Volume chart not rendering on Safari
Description:
The volume chart component fails to render on Safari browser.
Steps to Reproduce:
1. Open the app
2. Select your platform
3. Complete setup (Hevy login/CSV or Strong CSV)
4. Reproduce the issue
2. Go to Dashboard tab
3. Observe the volume chart area
Expected: Chart displays with data
Actual: Empty white space where chart should be
Environment: Safari 17.1, macOS 14.0, Node 18.17.0
- Check if feature already exists or has been suggested
- Describe the specific problem the enhancement solves
- List examples of how the feature would be used
Create an issue with:
- Clear title - Brief description of feature
- Current Behavior - Describe current functionality
- Desired Behavior - Describe desired functionality
- Possible Implementation - Optional technical suggestions
- Use Cases - Why this feature is needed
Example:
Title: Add export to PDF functionality
Current Behavior:
Users can only view their analytics in the app.
Desired Behavior:
Add ability to export workout summaries as PDF reports.
Use Cases:
- Share training progress with coaches
- Create training records for personal backup
- Print for physical training logs
- Create an issue describing what you'll work on
- Get feedback from maintainers before starting major work
- Create a branch:
git checkout -b feature/your-feature-name
- Keep commits focused - One feature/fix per commit
- Write clear commit messages - See Commit Messages
- Test your changes - Run the app and verify functionality
- Keep code clean - Follow Coding Standards
-
Push to your fork
git push origin feature/your-feature-name
-
Create Pull Request
- Go to the original repository
- Click "New Pull Request"
- Select your branch
- Fill out the PR template
-
PR Description Should Include
- Link to related issue:
Fixes #123 - Description of changes
- Screenshots/GIFs if UI changes
- Testing instructions
- Any breaking changes
- Link to related issue:
-
Respond to Feedback
- Be open to constructive criticism
- Make requested changes
- Respond to reviewer comments
- Use descriptive branch names:
feature/add-pr-trackingnotfix/stuff - Keep PRs focused - don't bundle unrelated changes
- Rebase and squash commits before merging:
git rebase -i upstream/main - Ensure CI passes (when available)
- All conversations should be resolved
- Use strict mode - declare types explicitly
- Use interfaces for object shapes
- Avoid
anytype - use generics or union types instead - Keep functions small and focused
// Good
interface WorkoutData {
date: Date;
volume: number;
}
function calculateVolume(sets: Set[]): number {
return sets.reduce((total, set) => total + set.volume, 0);
}
// Avoid
function calculateVolume(sets: any): any {
return sets.reduce((total: any, set: any) => total + set.volume, 0);
}- Use functional components with hooks
- Keep components focused and reusable
- Extract complex logic to utilities
- Use meaningful prop names
- Add JSDoc comments for complex components
// Good
interface CardProps {
title: string;
children: React.ReactNode;
}
/**
* Reusable card component for consistent layout
*/
export function Card({ title, children }: CardProps) {
return (
<div className="bg-slate-800 rounded-lg p-4">
<h3 className="font-bold text-lg">{title}</h3>
{children}
</div>
);
}- Use Tailwind CSS classes
- Keep component styles consistent with existing design
- Use spacing and color system from Tailwind
- Avoid inline styles
- Files: kebab-case for files (
csv-parser.ts,Dashboard.tsx) - Functions: camelCase (
calculateVolume,parseCSV) - Classes: PascalCase (
WorkoutParser,Analytics) - Constants: UPPER_SNAKE_CASE (
DEFAULT_CSV_DATA,MAX_FILE_SIZE) - Types/Interfaces: PascalCase (
WorkoutSet,ExerciseStats)
<type>(<scope>): <subject>
<body>
<footer>
feat:New featurefix:Bug fixdocs:Documentation changesstyle:Code style changes (formatting, etc.)refactor:Code refactoringperf:Performance improvementstest:Adding or updating testschore:Build, dependencies, tooling
feat(dashboard): add volume trend chart
Implement a new chart component that visualizes total training volume
over time. Users can now easily track their training intensity.
Fixes #42
fix(csv-parser): handle missing weight fields gracefully
- Add validation for missing weight_kg column
- Default to 0 for cardio exercises
- Add unit test for edge case
Fixes #38
docs: update deployment instructions for Netlify + Render
- Check existing issues and discussions
- Ask in GitHub Discussions
- Open a new issue with the question tag
Thank you for contributing! Your efforts help make LiftShift better for everyone. 🙏