Wave - The Software as a Service Starter Kit, designed to help you build the SAAS of your dreams 🚀 💰

RAW Doc

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:

bash
git clone https://github.com/YOUR-USERNAME/wave.git
cd wave

2. Install PHP dependencies:

bash
composer install

3. Install Node dependencies:

bash
npm install

4. Set up environment:

bash
cp .env.example .env
php artisan key:generate

5. Create database:

bash
touch database/database.sqlite  # For SQLite

6. Run migrations and seeders:

bash
php artisan migrate
php artisan db:seed

7. Build assets:

bash
npm run build

8. Start development server:

bash
composer run dev  # Starts server, queue, logs, and Vite

Or run components separately:

bash
php artisan serve
npm run dev
php artisan queue:listen

Coding 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:

text
fix: resolve subscription webhook timeout issue

feat: 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

bash

Run all tests


./vendor/bin/pest

Run specific test file


./vendor/bin/pest tests/Feature/AccountDeletionTest.php

Run tests with coverage


./vendor/bin/pest --coverage

Run tests with detailed output


./vendor/bin/pest --verbose

Writing 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:

php
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.

---