CONTRIBUTING
Contributing to Wave
Thank you for considering contributing to Wave! We appreciate your interest in making this SaaS framework even better.
Table of Contents
- Code of Conduct
- How Can I Contribute?
- Development Setup
- Coding Standards
- Submitting Changes
- Reporting Bugs
- Suggesting Features
- Testing
Code of Conduct
This project and everyone participating in it is governed by our commitment to fostering an open and welcoming environment. We expect all contributors to:
- Use welcoming and inclusive language
- Be respectful of differing viewpoints and experiences
- Gracefully accept constructive criticism
- Focus on what is best for the community
- Show empathy towards other community members
How Can I Contribute?
Reporting Bugs
If you discover a bug, please:
1. Check the documentation to ensure it's not expected behavior
2. Search existing pull requests to see if it's already being addressed
3. Join the DevDojo community to discuss the issue
4. If confirmed, submit a pull request with a fix
When reporting or fixing a bug, please include:
- Clear descriptive title - Use a clear and descriptive title
- Detailed description - Provide a detailed description of the issue
- Steps to reproduce - List the exact steps to reproduce the problem
- Expected behavior - Describe what you expected to happen
- Actual behavior - Describe what actually happened
- Environment details:
- Wave version
- Laravel version
- PHP version
- Operating system
- Database (MySQL, PostgreSQL, SQLite)
- Billing provider (Stripe/Paddle)
- Screenshots - If applicable, add screenshots to help explain the problem
- Error messages - Include any relevant error messages or logs
Suggesting Features
Feature suggestions are welcome! Before suggesting a feature:
- Check the documentation to ensure the feature doesn't already exist
- Search existing pull requests to see if it's already in progress
- Join the DevDojo community to discuss your idea with other users and maintainers
When suggesting a feature via pull request, please include:
- Clear description - Explain the feature in detail
- Use case - Describe why this feature would be useful
- Examples - Provide examples of how the feature would work
- Alternatives - Describe any alternative solutions you've considered
- Documentation - Update relevant documentation to explain the new feature
Pull Requests
We actively welcome your pull requests! Here's how to submit one:
1. Fork the repository
2. Create a new branch from main (git checkout -b feature/my-feature)
3. Make your changes
4. Write or update tests as needed
5. Ensure tests pass (./vendor/bin/pest)
6. Ensure code follows style guidelines (./vendor/bin/pint --test)
7. Commit your changes with clear, descriptive messages
8. Push to your fork
9. Submit a pull request to the main branch
Development Setup
Prerequisites
- PHP 8.2 or higher
- Composer
- Node.js 18+ and npm
- SQLite, MySQL, or PostgreSQL
Installation
1. Clone your fork:
git clone https://github.com/YOUR-USERNAME/wave.git
cd wave2. Install PHP dependencies:
composer install3. Install Node dependencies:
npm install4. Set up environment:
cp .env.example .env
php artisan key:generate5. Create database:
touch database/database.sqlite # For SQLite6. Run migrations and seeders:
php artisan migrate
php artisan db:seed7. Build assets:
npm run build8. Start development server:
composer run dev # Starts server, queue, logs, and Vite Or run components separately:
php artisan serve
npm run dev
php artisan queue:listenCoding Standards
PHP Code Style
Wave follows the Laravel coding style using Laravel Pint.
- Check code style: ./vendor/bin/pint --test
- Fix code style: ./vendor/bin/pint
Key conventions:
- PSR-12 compliant
- Use type hints where possible
- Write descriptive variable and method names
- Keep methods focused and concise
- Add PHPDoc blocks for complex methods
JavaScript/CSS Style
- Follow standard JavaScript ES6+ conventions
- Use Tailwind CSS utility classes
- Avoid inline styles when possible
- Keep JavaScript minimal and maintainable
Blade Templates
- Use Blade components where appropriate
- Keep logic out of views (use Livewire or view composers)
- Follow consistent indentation (4 spaces)
- Use Blade directives (@if, @foreach) over PHP tags
Submitting Changes
Commit Messages
Write clear, concise commit messages following these guidelines:
- Use the imperative mood ("Add feature" not "Added feature")
- First line should be 50 characters or less
- Optionally add a blank line and detailed description
- Reference pull requests when relevant
Good examples:
fix: resolve subscription webhook timeout issuefeat: add user data export functionality
docs: improve billing configuration examples
test: add coverage for profile update validation
Commit types:
- feat: - New feature
- fix: - Bug fix
- docs: - Documentation changes
- style: - Code style/formatting (no functional changes)
- refactor: - Code refactoring
- test: - Adding or updating tests
- chore: - Maintenance tasks
Pull Request Guidelines
- One feature per PR - Keep pull requests focused on a single feature or fix
- Update tests - Add or update tests to cover your changes
- Update documentation - Update relevant documentation if needed
- Clean commit history - Squash commits if needed to keep history clean
- Descriptive title - Use a clear title that describes the change
- Detailed description - Explain what changes were made and why
- Screenshots - Add screenshots for UI changes
- Breaking changes - Clearly mark any breaking changes
Testing
Wave uses Pest PHP for testing.
Running Tests
Run all tests
./vendor/bin/pestRun specific test file
./vendor/bin/pest tests/Feature/AccountDeletionTest.phpRun tests with coverage
./vendor/bin/pest --coverageRun tests with detailed output
./vendor/bin/pest --verboseWriting Tests
- Place feature tests in tests/Feature/
- Place unit tests in tests/Unit/
- Follow existing test patterns in the codebase
- Test both success and failure scenarios
- Use descriptive test names that explain what is being tested
Example test structure:
it('allows users to update their profile', function () {
$user = User::factory()->create();
$response = $this->actingAs($user)->put('/settings/profile', [
'name' => 'Updated Name',
'email' => '[email protected]',
]);
$response->assertRedirect();
expect($user->fresh()->name)->toBe('Updated Name');
});Test Database
Tests use SQLite in-memory database by default. You can configure this in phpunit.xml.
Additional Resources
- Wave Documentation
- Laravel Documentation
- Pest PHP Documentation
- Filament Documentation
- Livewire Documentation
Questions?
If you have questions about contributing, feel free to:
- Open a discussion
- Join the DevDojo community
- Check the documentation
License
By contributing to Wave, you agree that your contributions will be licensed under the MIT License.
---
Thank you for contributing to Wave! Your efforts help make this framework better for everyone. 🌊
---
README
<p align="center"><a href="https://devdojo.com/wave" target="_blank"><img src="https://cdn.devdojo.com/images/october2024/wave-logo.png" width="200"></a></p>
<p align="center">
<a href="https://github.com/thedevdojo/wave/actions"><img src="https://github.com/thedevdojo/wave/actions/workflows/tests.yml/badge.svg" alt="Build Status"></a>
<a href="https://github.com/thedevdojo/wave"><img src="https://img.shields.io/github/v/release/thedevdojo/wave" alt="Latest Stable Version"></a>
<a href="https://github.com/thedevdojo/wave"><img src="https://img.shields.io/badge/license-MIT-green" alt="License"></a>
<a href="https://herd.laravel.com/new?starter-kit=devdojo/wave"><img src="https://img.shields.io/badge/Install%20with%20Herd-f55247?logo=laravel&logoColor=white"></a>
</p>
Wave is a SaaS framework, built with <a href="https://laravel.com">Laravel</a>, that will make building your SaaS application fun and easier than ever before. <a href="https://devdojo.com/wave/docs" target="_blank">View the full docs here</a>.
Wave provides you with all the essential features found in many popular SaaS platforms, allowing you to quickly transform your idea into a profitable SaaS product. Here are a handful of features that Wave provides:
- <a href="https://devdojo.com/wave/docs/features/auth" target="_blank">Authentication</a>
- <a href="https://devdojo.com/wave/docs/features/user-profiles" target="_blank">User Profiles</a>
- <a href="https://devdojo.com/wave/docs/features/user-impersonations" target="_blank">User Impersonations</a>
- <a href="https://devdojo.com/wave/docs/features/billing" target="_blank">Billing</a>
- <a href="https://devdojo.com/wave/docs/features/subscription-plans" target="_blank">Subscription Plans</a>
- <a href="https://devdojo.com/wave/docs/features/roles-permissions" target="_blank">Roles & Permissions</a>
- <a href="https://devdojo.com/wave/docs/features/notifications" target="_blank">User Notifications</a>
- <a href="https://devdojo.com/wave/docs/features/changelog" target="_blank">Changelog</a>
- <a href="https://devdojo.com/wave/docs/features/blog" target="_blank">Blog</a>
- <a href="https://devdojo.com/wave/docs/features/pages" target="_blank">Pages</a>
- <a href="https://devdojo.com/wave/docs/features/api" target="_blank">API</a>
- <a href="https://devdojo.com/wave/docs/features/admin" target="_blank">Admin</a>
- <a href="https://devdojo.com/wave/docs/features/themes" target="_blank">Themes</a>
- <a href="https://devdojo.com/wave/docs/features/plugins" target="_blank">Plugins</a>
Be sure to view a list of <a href="https://devdojo.com/wave/docs/features/auth" target="_blank">all features here</a>.
Demo
You can view a <a href="https://devdojo.com/wave/demo" target="_blank">live demo here</a>, which will also allow you to preview all the <a href="https://devdojo.com/wave/themes" target="_blank">available themes</a>.
<a href="https://devdojo.com/wave/demo" target="_blank"><img src="https://cdn.devdojo.com/images/august2024/wave-anchor-theme.jpeg" alt="Wave Anchor Theme Preview"></a>
Installation
There are two ways to install Wave, you can install it via the automated installer or manually.
Click here to <a href="https://devdojo.com/wave/docs/install" target="_blank">view the full installation instructions</a>.
Support the Project
The best way to support this project is to support us by subscribing to a <a href="https://devdojo.com/pro">DevDojo Pro</a> account. This will give you access to <a href="https://devdojo.com/wave/pro">premium content</a> to help you build your SaaS even quicker. Also, make sure to tell your friends and <a href="https://github.com/thedevdojo/wave/compare" target="_blank">submit a PR</a> if you want to contribute.
We've also got a full video series on how you can setup, build, and configure Wave. 🍿 You can watch first few videos for free, and additional videos will require a DevDojo Pro subscription. By subscribing to a DevDojo Pro subscription you will also be supporting the ongoing development of this project. It's a win win! 🙌
Click here to watch the Wave Video Course.
Documentation
Checkout the official documentation here.
Sponsors
Wave is proudly supported by our amazing sponsors. A big thank you to:
[](https://www.digitalocean.com/?refcode=dc19b9819d06&utm_campaign=Referral_Invite&utm_medium=Referral_Program&utm_source=badge)
---
SECURITY
Security Policy
PLEASE DON'T DISCLOSE SECURITY-RELATED ISSUES PUBLICLY.
Reporting a Vulnerability
If you discover a security vulnerability within Wave, please send an email to the DevDojo team at [email protected]. All security vulnerabilities will be promptly addressed.
---