buzekpdev / laravel-docsites
Beautiful documentation package for Laravel with dark/light mode, nested navigation, and GitHub Flavored Markdown support
Installs: 3
Dependents: 0
Suggesters: 0
Security: 0
Stars: 0
Watchers: 0
Forks: 0
Open Issues: 0
pkg:composer/buzekpdev/laravel-docsites
Requires
- php: ^8.1|^8.2|^8.3
- illuminate/support: ^11.0|^12.0
Requires (Dev)
- orchestra/testbench: ^8.0|^9.0
- phpunit/phpunit: ^10.0|^11.0
README
A beautiful, feature-rich documentation package for Laravel applications with dark/light mode support, nested navigation, and live markdown rendering.
Features
- π¨ Beautiful UI - Clean, modern interface with Tailwind CSS
- π Dark/Light Mode - Automatic theme switching with localStorage persistence
- π Nested Navigation - Support for deeply nested documentation structure
- π Smart Routing - Case-insensitive, slugified URLs
- π GitHub Flavored Markdown - Full GFM support with syntax highlighting
- β‘ React/Inertia - Smooth SPA experience with Inertia.js
- π― Index File Support - Customizable naming and sorting for README/index files
- π Environment Control - Enable/disable based on environment
- π¨ Syntax Highlighting - Beautiful code blocks with highlight.js
Requirements
- PHP 8.1 or higher
- Laravel 11.x or 12.x
- Node.js & NPM (for frontend assets)
- Inertia.js with React
Installation
1. Install via Composer
composer require buzekpdev/laravel-docsites
2. Publish Configuration
php artisan vendor:publish --tag=docsites-config
3. Publish Assets
# Publish React components php artisan vendor:publish --tag=docsites-views # Publish CSS files php artisan vendor:publish --tag=docsites-css
4. Install NPM Dependencies
npm install react-markdown remark-gfm rehype-highlight rehype-raw highlight.js
5. Build Assets
npm run build
# or for development
npm run dev
6. Create Documentation Directory
Create a docs/ folder in your project root and add your markdown files:
docs/
βββ API/
β βββ authentication.md
β βββ README.md
βββ Laravel/
βββ installation.md
βββ index.md
βββ Http/
βββ routing.md
βββ controllers.md
βββ middleware.md
Configuration
PHP Configuration
Edit config/docsites.php to customize your documentation:
return [ // Enable/disable the documentation routes 'enabled' => env('DOCSITES_ENABLED', true), // Environments where docs are available 'allowed_environments' => ['local', 'staging'], // Route prefix (e.g., /docs) 'route_prefix' => 'docs', // Middleware to apply 'middleware' => ['web'], // Documentation directory path 'docs_path' => base_path('docs'), // Index file configuration 'index_file' => [ 'name' => 'Overview', // Display name for README.md/index.md 'sort' => 'prepend', // 'prepend' or 'append' ], ];
JSON Configuration (Optional)
Create a docs/docsites.json file to customize display names and formatting:
{
"$schema": "./docsites.schema.json",
"alias": {
"api": "API Reference",
"Http": "HTTP",
"user_management": "User Management",
"README": "Getting Started"
}
}
Publish example config:
php artisan vendor:publish --tag=docsites-examples
Alias Feature:
- Define custom display names for files and folders
- Key must match the exact file/folder name (case-sensitive)
- Value is the display name shown in the navigation
- Index files (README.md, index.md): Alias takes priority over config name
Name Precedence for Index Files:
- JSON alias (if defined in
docsites.json) - Config name (from
config/docsites.php) - Default "Overview"
Automatic Name Formatting (when not aliased):
- snake_case files:
user_management.mdβ "User Management" - camelCase files:
myDocument.mdβ "My Document" - ALL_CAPS preserved:
user_API_guide.mdβ "User API Guide" - Default: Capitalizes first letter
Usage
Basic Documentation Structure
- Create documentation groups by creating folders in
docs/ - Add markdown files with your content
- Use nested folders for organized structure
- Add index files (README.md or index.md) for folder overviews
Accessing Documentation
Visit http://your-app.test/docs to see your documentation.
File Naming
- Files are automatically slugified for URLs
Http Controllers.mdβ/docs/group/http-controllers- Case-insensitive matching works seamlessly
- Index files (README.md, index.md) can be customized
Markdown Features
Full GitHub Flavored Markdown support:
- Headers (H1-H6)
- Lists (ordered and unordered)
- Code blocks with syntax highlighting
- Tables
- Blockquotes
- Links and images
- Inline code
- Bold and italic text
- Horizontal rules
Code Syntax Highlighting
Supported languages include PHP, JavaScript, TypeScript, Bash, JSON, YAML, and many more:
```php Route::get('/docs', function () { return view('welcome'); }); ```
Dark/Light Mode
Users can toggle between themes using the button in the top-right corner. Preference is saved in localStorage.
Customization
Theme Colors
Edit resources/css/docsites/markdown.css to customize colors:
.markdown-content { color: #1f2937; /* Light mode text */ } .dark .markdown-content { color: #e5e7eb; /* Dark mode text */ }
Custom Middleware
Add authentication or custom middleware in config/docsites.php:
'middleware' => ['web', 'auth', 'verified'],
Custom Route Prefix
Change the route prefix:
'route_prefix' => 'documentation',
Now accessible at /documentation instead of /docs.
Index File Customization
Customize how README.md/index.md files appear:
'index_file' => [ 'name' => 'Getting Started', // Custom display name 'sort' => 'append', // Show at bottom instead of top ],
Production Deployment
Security Recommendations
-
Restrict environments:
'allowed_environments' => ['local'],
-
Add authentication:
'middleware' => ['web', 'auth', 'admin'],
-
Use environment variables:
'enabled' => env('DOCSITES_ENABLED', false),
-
Disable in production (if sensitive):
DOCSITES_ENABLED=false
File Structure
lib/docsites/
βββ composer.json
βββ config/
β βββ docsites.php
βββ resources/
β βββ css/
β β βββ markdown.css
β βββ js/
β β βββ Pages/
β β βββ DocSites/
β β βββ Index.tsx
β β βββ Show.tsx
β βββ views/
β βββ app.blade.php
βββ routes/
β βββ web.php
βββ src/
βββ DocSitesServiceProvider.php
βββ Http/
β βββ Controllers/
β βββ DocsController.php
β βββ DocGroupController.php
βββ Services/
βββ DocScanner.php
Troubleshooting
Routes not working
-
Check if your environment is allowed:
'allowed_environments' => ['local', 'production'],
-
Clear route cache:
php artisan route:clear php artisan route:cache
Styling issues
-
Make sure CSS is published:
php artisan vendor:publish --tag=docsites-css --force
-
Rebuild assets:
npm run build
Markdown not rendering
-
Check NPM dependencies are installed:
npm install react-markdown remark-gfm rehype-highlight rehype-raw highlight.js
-
Clear browser cache and rebuild:
npm run build
Nested routes not working
Make sure your web server supports the wildcard routing. For Nginx:
try_files $uri $uri/ /index.php?$query_string;
Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
License
This package is open-sourced software licensed under the MIT license.
Credits
- Built with Laravel
- UI powered by Tailwind CSS
- Markdown rendering with react-markdown
- Syntax highlighting by highlight.js
- Icons from Lucide
Support
For issues, questions, or suggestions, please open an issue on GitHub.