PHPackages                             laravelplus/feature-requests - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Utility &amp; Helpers](/categories/utility)
4. /
5. laravelplus/feature-requests

ActiveLibrary[Utility &amp; Helpers](/categories/utility)

laravelplus/feature-requests
============================

A comprehensive Laravel feature requests package with voting system, categories, and status management

v1.0.0(8mo ago)272[1 issues](https://github.com/LaravelPlus/feature-requests/issues)MITPHPPHP ^8.4

Since Sep 10Pushed 8mo agoCompare

[ Source](https://github.com/LaravelPlus/feature-requests)[ Packagist](https://packagist.org/packages/laravelplus/feature-requests)[ RSS](/packages/laravelplus-feature-requests/feed)WikiDiscussions master Synced 1mo ago

READMEChangelog (1)Dependencies (12)Versions (2)Used By (0)

LaravelPlus Feature Requests
============================

[](#laravelplus-feature-requests)

A comprehensive Laravel package for managing feature requests with voting, commenting, and categorization capabilities. Built with modern design principles and a beautiful shadcn/ui inspired interface.

✨ Features
----------

[](#-features)

- **Feature Request Management**: Create, edit, and manage feature requests
- **Voting System**: Users can vote on feature requests
- **Comments &amp; Discussions**: Threaded comments for each feature request
- **Categorization**: Organize requests with categories
- **Status Tracking**: Track request status (pending, in progress, completed, rejected)
- **Priority Levels**: Set priority levels (low, medium, high)
- **User Management**: User authentication and authorization
- **Modern UI**: Beautiful shadcn/ui inspired admin interface
- **API Support**: Full REST API for all operations
- **Search &amp; Filtering**: Advanced search and filtering capabilities
- **Responsive Design**: Mobile-friendly interface
- **Soft Deletes**: Safe deletion with recovery options

🚀 Installation
--------------

[](#-installation)

### Step 1: Install via Composer

[](#step-1-install-via-composer)

```
composer require laravelplus/feature-requests
```

### Step 2: Publish Configuration

[](#step-2-publish-configuration)

```
php artisan vendor:publish --provider="LaravelPlus\FeatureRequests\Providers\FeatureRequestsServiceProvider"
```

### Step 3: Run Migrations

[](#step-3-run-migrations)

```
php artisan migrate
```

### Step 4: Create Default Categories (Optional)

[](#step-4-create-default-categories-optional)

```
php artisan feature-requests:create-default-categories
```

📋 Configuration
---------------

[](#-configuration)

The package configuration is located in `config/feature-requests.php`:

```
return [
    'middleware' => ['web', 'auth'],
    'prefix' => 'feature-requests',
    'user' => [
        'model' => App\Models\User::class,
    ],
    'default_categories' => [
        'User Interface',
        'Performance',
        'Security',
        'API',
        'Mobile',
        'Integration',
    ],
];
```

🎯 Usage
-------

[](#-usage)

### Basic Usage

[](#basic-usage)

#### Creating a Feature Request

[](#creating-a-feature-request)

```
use LaravelPlus\FeatureRequests\Models\FeatureRequest;

$featureRequest = FeatureRequest::create([
    'title' => 'Dark Mode Support',
    'description' => 'Add dark mode theme to the application',
    'category_id' => 1,
    'priority' => 'medium',
    'user_id' => auth()->id(),
    'is_public' => true,
]);
```

#### Voting on Feature Requests

[](#voting-on-feature-requests)

```
use LaravelPlus\FeatureRequests\Models\Vote;

$vote = Vote::create([
    'user_id' => auth()->id(),
    'feature_request_id' => $featureRequest->id,
    'vote_type' => 'up',
]);
```

#### Adding Comments

[](#adding-comments)

```
use LaravelPlus\FeatureRequests\Models\Comment;

$comment = Comment::create([
    'user_id' => auth()->id(),
    'feature_request_id' => $featureRequest->id,
    'content' => 'This would be a great addition!',
]);
```

### Web Routes

[](#web-routes)

The package provides the following web routes:

```
// Feature Requests
GET    /feature-requests              // Index
GET    /feature-requests/create       // Create form
POST   /feature-requests              // Store
GET    /feature-requests/{slug}       // Show
GET    /feature-requests/{slug}/edit  // Edit form
PUT    /feature-requests/{slug}       // Update
DELETE /feature-requests/{slug}       // Destroy

// Voting
POST   /feature-requests/{slug}/vote  // Vote
DELETE /feature-requests/{slug}/vote  // Unvote

// Comments
POST   /feature-requests/{slug}/comments  // Store comment
PUT    /feature-requests/comments/{comment}  // Update comment
DELETE /feature-requests/comments/{comment}  // Delete comment

// Categories
GET    /feature-requests/categories              // Index
GET    /feature-requests/categories/create       // Create form
POST   /feature-requests/categories              // Store
GET    /feature-requests/categories/{slug}       // Show
GET    /feature-requests/categories/{slug}/edit  // Edit form
PUT    /feature-requests/categories/{slug}       // Update
DELETE /feature-requests/categories/{slug}       // Destroy
```

### API Routes

[](#api-routes)

The package also provides comprehensive API routes:

```
// Feature Requests API
GET    /api/feature-requests                    // List all
POST   /api/feature-requests                    // Create
GET    /api/feature-requests/{slug}             // Show
PUT    /api/feature-requests/{slug}             // Update
DELETE /api/feature-requests/{slug}             // Delete
PATCH  /api/feature-requests/{slug}/status      // Update status
PATCH  /api/feature-requests/{slug}/assign      // Assign to user
PATCH  /api/feature-requests/{slug}/toggle-featured // Toggle featured

// Voting API
POST   /api/feature-requests/{slug}/vote        // Vote
DELETE /api/feature-requests/{slug}/vote        // Unvote
GET    /api/feature-requests/votes/statistics   // Vote statistics

// Comments API
GET    /api/feature-requests/comments           // List comments
POST   /api/feature-requests/comments           // Create comment
PUT    /api/feature-requests/comments/{id}      // Update comment
DELETE /api/feature-requests/comments/{id}      // Delete comment

// Categories API
GET    /api/feature-requests/categories         // List categories
POST   /api/feature-requests/categories         // Create category
PUT    /api/feature-requests/categories/{slug}  // Update category
DELETE /api/feature-requests/categories/{slug}  // Delete category
```

🎨 Frontend Integration
----------------------

[](#-frontend-integration)

### Vue.js Components

[](#vuejs-components)

The package includes Vue.js components for easy frontend integration:

```

import FeatureRequestsIndex from '@laravelplus/feature-requests/components/FeatureRequestsIndex.vue'

export default {
  components: {
    FeatureRequestsIndex
  }
}

```

### Blade Views

[](#blade-views)

Use the included Blade views with your existing Laravel application:

```
@extends('feature-requests::layouts.app')

@section('content')

        Feature Requests

@endsection
```

🔧 Models
--------

[](#-models)

### FeatureRequest Model

[](#featurerequest-model)

```
use LaravelPlus\FeatureRequests\Models\FeatureRequest;

// Scopes
$featureRequests = FeatureRequest::published()->get();
$featureRequests = FeatureRequest::featured()->get();
$featureRequests = FeatureRequest::byStatus('pending')->get();
$featureRequests = FeatureRequest::byPriority('high')->get();
$featureRequests = FeatureRequest::byCategory($categoryId)->get();
$featureRequests = FeatureRequest::mostVoted()->get();
$featureRequests = FeatureRequest::recent()->get();

// Relationships
$featureRequest->user;           // BelongsTo User
$featureRequest->category;       // BelongsTo Category
$featureRequest->votes;          // HasMany Vote
$featureRequest->comments;       // HasMany Comment
```

### Category Model

[](#category-model)

```
use LaravelPlus\FeatureRequests\Models\Category;

// Scopes
$categories = Category::active()->get();
$categories = Category::bySlug('user-interface')->get();
$categories = Category::withFeatureRequests()->get();

// Relationships
$category->featureRequests;      // HasMany FeatureRequest
```

### Vote Model

[](#vote-model)

```
use LaravelPlus\FeatureRequests\Models\Vote;

// Scopes
$votes = Vote::byType('up')->get();
$votes = Vote::byUser($userId)->get();
$votes = Vote::byFeatureRequest($featureRequestId)->get();
$votes = Vote::upVotes()->get();
$votes = Vote::downVotes()->get();

// Relationships
$vote->user;                     // BelongsTo User
$vote->featureRequest;           // BelongsTo FeatureRequest
```

### Comment Model

[](#comment-model)

```
use LaravelPlus\FeatureRequests\Models\Comment;

// Scopes
$comments = Comment::approved()->get();
$comments = Comment::pinned()->get();
$comments = Comment::byUser($userId)->get();
$comments = Comment::byFeatureRequest($featureRequestId)->get();
$comments = Comment::parentComments()->get();
$comments = Comment::replies()->get();
$comments = Comment::recent()->get();

// Relationships
$comment->user;                  // BelongsTo User
$comment->featureRequest;        // BelongsTo FeatureRequest
$comment->parent;                // BelongsTo Comment (parent)
$comment->replies;               // HasMany Comment (replies)
```

🧪 Testing
---------

[](#-testing)

Run the test suite:

```
# Run all tests
./vendor/bin/phpunit

# Run specific test
./vendor/bin/phpunit tests/Unit/Models/FeatureRequestTest.php

# Run with coverage
./vendor/bin/phpunit --coverage-html coverage
```

### Test Structure

[](#test-structure)

```
tests/
├── Unit/
│   ├── Models/
│   │   ├── FeatureRequestTest.php
│   │   ├── CategoryTest.php
│   │   ├── VoteTest.php
│   │   └── CommentTest.php
│   ├── Services/
│   └── Repositories/
├── Feature/
│   ├── FeatureRequestControllerTest.php
│   ├── VoteControllerTest.php
│   ├── CommentControllerTest.php
│   └── CategoryControllerTest.php
└── TestCase.php

```

🎨 Customization
---------------

[](#-customization)

### Custom Views

[](#custom-views)

Publish and customize the views:

```
php artisan vendor:publish --tag=feature-requests-views
```

### Custom Styling

[](#custom-styling)

The package uses Tailwind CSS with shadcn/ui design tokens. You can customize the styling by:

1. Publishing the views
2. Modifying the CSS classes
3. Adding your own custom styles

### Custom Middleware

[](#custom-middleware)

Add custom middleware in the configuration:

```
'middleware' => ['web', 'auth', 'custom-middleware'],
```

🔒 Security
----------

[](#-security)

- **Authentication**: All routes require authentication by default
- **Authorization**: Users can only edit their own feature requests
- **Validation**: Comprehensive input validation
- **CSRF Protection**: All forms include CSRF tokens
- **XSS Protection**: Output is properly escaped

📊 Statistics
------------

[](#-statistics)

The package provides built-in statistics:

```
use LaravelPlus\FeatureRequests\FeatureRequests;

// Get overall statistics
$stats = FeatureRequests::getStatistics();

// Get vote statistics
$voteStats = FeatureRequests::getVoteStatistics();

// Get category statistics
$categoryStats = FeatureRequests::getCategoryStatistics();
```

🚀 Performance
-------------

[](#-performance)

- **Eager Loading**: Relationships are properly eager loaded
- **Database Indexing**: Optimized database indexes
- **Caching**: Built-in caching for frequently accessed data
- **Pagination**: Efficient pagination for large datasets

🤝 Contributing
--------------

[](#-contributing)

1. Fork the repository
2. Create your feature branch (`git checkout -b feature/amazing-feature`)
3. Commit your changes (`git commit -m 'Add some amazing feature'`)
4. Push to the branch (`git push origin feature/amazing-feature`)
5. Open a Pull Request

📝 License
---------

[](#-license)

This package is open-sourced software licensed under the [MIT license](https://opensource.org/licenses/MIT).

🆘 Support
---------

[](#-support)

- **Documentation**: [GitHub Wiki](https://github.com/LaravelPlus/feature-requests/wiki)
- **Issues**: [GitHub Issues](https://github.com/LaravelPlus/feature-requests/issues)
- **Discussions**: [GitHub Discussions](https://github.com/LaravelPlus/feature-requests/discussions)

🙏 Acknowledgments
-----------------

[](#-acknowledgments)

- Built with [Laravel](https://laravel.com)
- UI inspired by [shadcn/ui](https://ui.shadcn.com)
- Icons by [Lucide](https://lucide.dev)
- Styling with [Tailwind CSS](https://tailwindcss.com)

---

Made with ❤️ by the LaravelPlus team

###  Health Score

32

—

LowBetter than 72% of packages

Maintenance51

Moderate activity, may be stable

Popularity11

Limited adoption so far

Community2

Small or concentrated contributor base

Maturity53

Maturing project, gaining track record

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Unknown

Total

1

Last Release

250d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/4e4629de002c40aef796e5b320091892f0b7b35b62497260c52cef3eb721eed1?d=identicon)[Nejcc](/maintainers/Nejcc)

---

Tags

laravelfeedbackvotingProduct Managementfeature-requestsuser-requests

###  Code Quality

TestsPHPUnit

Code StyleLaravel Pint

### Embed Badge

![Health badge](/badges/laravelplus-feature-requests/health.svg)

```
[![Health](https://phpackages.com/badges/laravelplus-feature-requests/health.svg)](https://phpackages.com/packages/laravelplus-feature-requests)
```

###  Alternatives

[barryvdh/laravel-ide-helper

Laravel IDE Helper, generates correct PHPDocs for all Facade classes, to improve auto-completion.

14.9k123.0M687](/packages/barryvdh-laravel-ide-helper)[laravel/pulse

Laravel Pulse is a real-time application performance monitoring tool and dashboard for your Laravel application.

1.7k12.1M99](/packages/laravel-pulse)[spatie/laravel-enum

Laravel Enum support

3655.4M31](/packages/spatie-laravel-enum)[psalm/plugin-laravel

Psalm plugin for Laravel

3274.9M308](/packages/psalm-plugin-laravel)[roots/acorn

Framework for Roots WordPress projects built with Laravel components.

9682.1M97](/packages/roots-acorn)[aedart/athenaeum

Athenaeum is a mono repository; a collection of various PHP packages

245.2k](/packages/aedart-athenaeum)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
