Thank you for considering contributing! This project helps job seekers stay organized, and your contributions make it better for everyone.
Found a bug? Please open an issue with:
- Clear description of the problem
- Steps to reproduce
- Expected vs actual behavior
- Error messages from execution logs
- Your environment (Google Apps Script version, etc.)
Have an idea? Open a feature request describing:
- The feature and its benefits
- Use cases it would solve
- How you envision it working
Need help? Open a question issue and we'll help you out!
- Gmail account
- Notion account
- Google Apps Script access
- Text editor (VS Code, Sublime, etc.)
-
Fork the repository
# On GitHub, click Fork git clone https://github.com/YOUR-USERNAME/job-application-tracker.git cd job-application-tracker
-
Set up Google Apps Script
- Create a new Apps Script project
- Install clasp:
npm install -g @google/clasp - Login:
clasp login - Link to your project:
clasp create --title "Job Tracker Dev" - Push code:
clasp push
-
Test your changes
- Set up script properties (NOTION_TOKEN, NOTION_DATABASE_ID)
- Run test functions in Apps Script editor
- Check execution logs for errors
-
Create a branch
git checkout -b feature/your-feature-name
-
Make your changes
- Follow existing code style
- Add comments for complex logic
- Update README if adding features
-
Test thoroughly
- Test with real Gmail data
- Verify Notion integration works
- Check execution logs for errors
-
Commit with clear messages
git commit -m "feat: add support for new ATS platform" git commit -m "fix: handle missing email body gracefully" git commit -m "docs: update setup instructions"
-
Push and create PR
git push origin feature/your-feature-name
Then open a Pull Request on GitHub.
- Use
constandlet, avoidvar - Use camelCase for variables and functions
- Use PascalCase for classes (if any)
- Add JSDoc comments for functions
- Keep functions focused and under 50 lines when possible
/**
* Extract company name from email body
* @param {string} body - Email body text
* @returns {string|null} Company name or null if not found
*/
function extractCompanyName(body) {
const match = body.match(/company[:\s]+(.+?)(?:\n|$)/i);
return match ? match[1].trim() : null;
}Follow Conventional Commits:
feat:New featurefix:Bug fixdocs:Documentation changesrefactor:Code refactoringtest:Adding testschore:Maintenance tasks
Examples:
feat: add Indeed job URL scraping supportfix: handle emails with missing subject linesdocs: clarify Notion integration setup steps
-
Add domain to ATS_DOMAINS
const ATS_DOMAINS = [ // ... existing domains 'newjobboard.com' ];
-
Add email pattern
{ source: 'NewJobBoard', fromPatterns: ['noreply@newjobboard.com'], subjectPatterns: [ /Your application to (.+)/i, /Thanks for applying/i ], extractInfo: function(subject, body) { // Custom extraction logic let company = null; let position = null; // Extract from subject or body const match = subject.match(/Your application to (.+) at (.+)/i); if (match) { position = match[1].trim(); company = match[2].trim(); } return { company, position }; } }
-
Test with real emails
- Forward test emails to yourself
- Run the scanner
- Verify extraction works
Similar process - add to ATS_DOMAINS and EMAIL_PATTERNS.
- Email detection works for new platform
- Company and position extracted correctly
- Notion entry created successfully
- No duplicate entries created
- Status updates work correctly
- URL scraping works (if applicable)
Create test emails with various formats to ensure robust parsing.
When adding features:
- Update README.md with new functionality
- Add examples to the documentation
- Update the "Supported Platforms" section if applicable
- Include screenshots for UI changes
-
Ensure your PR:
- Has a clear description
- References related issues
- Includes test results
- Updates documentation
- Follows code style guidelines
-
PR Review:
- Maintainers will review within a few days
- Address feedback and push updates
- Once approved, it will be merged
-
After Merge:
- Your contribution will be in the next release
- You'll be added to contributors list
- Thank you! 🎉
Be respectful, inclusive, and constructive. We're all here to help job seekers succeed.
- Open a question issue
- Check existing issues for answers
- Be patient - maintainers are volunteers
Contributors are listed in:
- GitHub contributors page
- Release notes
- README (for significant contributions)
By contributing, you agree that your contributions will be licensed under the MIT License.
Thank you for making job searching easier for everyone! 🚀
If you landed a job using this tool, consider giving the repo a ⭐!