Skip to content

Commit 6f39022

Browse files
committed
Update docs
1 parent aadd5ee commit 6f39022

68 files changed

Lines changed: 939 additions & 197 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

app/(home)/page.tsx

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import { OtherProducts, PluginCards } from '@/components/partials/plugin-cards';
2+
import { Metadata } from 'next';
23

34
export default function HomePage() {
45
return (
@@ -16,4 +17,8 @@ export default function HomePage() {
1617
</section>
1718
</div>
1819
);
20+
}
21+
22+
export const metadata: Metadata = {
23+
title: 'Solution Forest Plugins',
1924
}

app/docs/components/helpers.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ export function generateMetadataForPlugin(plugin: string) {
55
const pluginConfig = config.plugins.find(p => p.id === plugin);
66
if (!pluginConfig) return null;
77
return {
8-
title: pluginConfig.name,
8+
title: `${pluginConfig.title} | Solution Forest Plugins` ,
99
description: pluginConfig.description,
1010
// openGraph: {
1111
// images: [
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
---
2+
title: Workspace | 4.x
3+
description: Modern self-hosted email marketing platform built specifically for Filament Admin Panel with subscriber management, email campaigns, and automation features.
4+
lastUpdated: 2026-03-03T05:10:19.253Z
5+
---
6+
7+
# Workspace
8+
Workspaces enable you to manage distinct subscriber lists and campaigns for various projects. For example, you might have one workspace for your personal website's mailing list and another for your podcast.
9+
10+
## Default Workspace
11+
12+
Upon installation, a default workspace is automatically created and set. The workspace ID resolver will attempt to retrieve the current workspace ID from the session, using the default workspace ID as a fallback. You can change the default workspace ID by updating the `workspace_id_fallback` value in the configuration.
13+
14+
## Register the workspace switcher to topbar
15+
16+
A Livewire component for switching workspaces is available for your convenience. By default, this component is registered to the topbar. You can enable or disable this feature or change its position by modifying the configuration.
17+
18+
Alternatively, you can manually register the workspace switcher through your application's service provider:
19+
20+
```php
21+
public function boot(): void
22+
{
23+
FilamentView::registerRenderHook(
24+
PanelsRenderHook::GLOBAL_SEARCH_AFTER,
25+
fn() => \Illuminate\Support\Facades\Blade::render("@livewire('switch-workspace')"),
26+
);
27+
}
28+
```
29+
30+
## API Tokens
31+
32+
You can create and delete API tokens for each workspace. These API tokens can be used in private API routes. See [API Authentication]([[app_url]]/documentation/3-api/2-authentication) to learn more.
33+
34+
35+
## Extending the Current Workspace ID Resolver
36+
37+
The workspace ID resolver determines which workspace is currently active for a user or API request. By default, the resolver checks for an API token in the request, then the session, and finally falls back to a default value from the configuration.
38+
39+
If you need to customize how the current workspace ID is resolved, you can override the resolver logic. For example, you might want to resolve the workspace ID based on a custom request parameter or user attribute.
40+
41+
To set a custom resolver, use the following approach in your service provider:
42+
43+
```php
44+
Sendportal::setCurrentWorkspaceIdResolver(function () {
45+
// Your custom logic to determine the workspace ID
46+
// Example: return request()->get('custom_workspace_id') ?? config('filament-newsletter.workspace_id_fallback');
47+
});
48+
```
49+
50+
The default resolver logic is as follows:
51+
52+
1. Checks for an API token in the request's bearer token or `api_token` parameter, and resolves the workspace ID using the token if present.
53+
2. Checks the session for a configured workspace ID session key and returns its value if found.
54+
3. Falls back to a default workspace ID from the configuration if neither of the above are present.
55+
56+
You can refer to the `setCurrentWorkspaceIdResolver` method in the `FilamentNewsletterServiceProvider` for the default implementation.
57+
58+
This flexibility allows you to adapt workspace resolution to your application's specific requirements.
Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
---
2+
title: Getting a License | 4.x
3+
description: Modern self-hosted email marketing platform built specifically for Filament Admin Panel with subscriber management, email campaigns, and automation features.
4+
lastUpdated: 2026-03-03T05:10:19.253Z
5+
---
6+
7+
# Getting a license
8+
To use this package, you must purchase a license.
9+
10+
# Requirements
11+
12+
In order to distribute your PHP package you must make sure a valid composer.json is located in the root of your repository. If you attempt to import or publish a release without a valid composer.json you will receive an notification.
13+
14+
# Installation via Composer
15+
16+
To get started with the Filaletter Plugin, follow these steps:
17+
18+
1. Add the package to your `composer.json` file in the repositories key:
19+
20+
```json
21+
{
22+
"repositories": [
23+
{
24+
"type": "composer",
25+
"url": "https://filasend.composer.sh"
26+
}
27+
],
28+
}
29+
```
30+
31+
2. Once the repository has been added to the `composer.json` file, install the Filaletter Plugin like any other composer package using the `composer require` command:
32+
33+
```sh
34+
composer require solution-forest/filament-newsletter
35+
```
36+
37+
3. Once the repository has been added to the composer.json file, they can install Filaletter like any other composer package using the composer require command:
38+
39+
```
40+
Loading composer repositories with package information
41+
Authentication required (filasend.composer.sh):
42+
Username: [licensee-email]
43+
Password: [license-key]
44+
```
45+
46+
You will be prompted to provide their username and password. The username will be their email address and the password will be equal to their license key. Our license policy requires a fingerprint that you will need to append his/her fingerprint to their license key.
47+
48+
For example, let's say we have the following licensee and license activation:
49+
50+
Contact email: philo@anystack.sh
51+
License key: 8c21df8f-6273-4932-b4ba-8bcc723ef500
52+
Activation fingerprint: anystack.sh
53+
54+
This will require your licensee to enter the following information when prompted for their credentials:
55+
56+
```
57+
Loading composer repositories with package information
58+
Authentication required (filasend.composer.sh):
59+
Username: philo@anystack.sh
60+
Password: 8c21df8f-6273-4932-b4ba-8bcc723ef500:anystack.sh
61+
```
62+
63+
To clarify, the license key and fingerprint should be separated by a colon (`:`).
64+
65+
Lines changed: 120 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,120 @@
1+
---
2+
title: Installation | 4.x
3+
description: Modern self-hosted email marketing platform built specifically for Filament Admin Panel with subscriber management, email campaigns, and automation features.
4+
lastUpdated: 2026-03-03T05:10:19.253Z
5+
---
6+
7+
# Installation
8+
9+
10+
### Version Compatibility
11+
12+
| Filament Version | Filament Newsletter Version |
13+
|------------------|---------------------------|
14+
| v3.x | v1.x – v3.x |
15+
| v4.x | v4.x |
16+
17+
18+
19+
You can install the package via composer:
20+
21+
```bash
22+
composer require solution-forest/filament-newsletter
23+
```
24+
25+
26+
You can register this plugin and its widgets through your panel provider:
27+
28+
```php
29+
public function panel(Panel $panel): Panel
30+
{
31+
return $panel
32+
->widgets([
33+
\SolutionForest\FilamentNewsletter\Filament\Widgets\Dashboard\TotalSubscribers::class,
34+
\SolutionForest\FilamentNewsletter\Filament\Widgets\Dashboard\CompletedCampaigns::class,
35+
\SolutionForest\FilamentNewsletter\Filament\Widgets\Dashboard\RecentSubscribers::class,
36+
])
37+
->plugins([
38+
\SolutionForest\FilamentNewsletter\FilamentNewsletterPlugin::make()
39+
]);
40+
}
41+
```
42+
43+
You can publish and run the migrations with:
44+
45+
```bash
46+
php artisan vendor:publish --tag="filament-newsletter-migrations"
47+
php artisan migrate
48+
```
49+
50+
You can publish the config file with:
51+
52+
```bash
53+
php artisan vendor:publish --tag="filament-newsletter-config"
54+
```
55+
56+
Optionally, you can publish the views using
57+
58+
```bash
59+
php artisan vendor:publish --tag="filament-newsletter-views"
60+
```
61+
62+
## Running the queue without Laravel Horizon
63+
If you don't want to use Horizon to manage you redis queue or you're using the database driver you will have to run a queue worker for each queue that Filaletter uses.
64+
65+
default: processes default queues
66+
sendportal-message-dispatch: dispatches messages to the email service
67+
sendportal-webhook-process: processes incoming webhooks
68+
```php
69+
php artisan queue:work
70+
php artisan queue:work --queue=sendportal-message-dispatch
71+
php artisan queue:work --queue=sendportal-webhook-process
72+
```
73+
74+
You may also run a single worker with processing priority:
75+
76+
```php
77+
php artisan queue:work --queue=default,sendportal-message-dispatch,sendportal-webhook-process
78+
```
79+
80+
## Running Redis Queues With Laravel Horizon
81+
SendPortal bundles Laravel Horizon as an easy way to run and manage redis queues.
82+
83+
Configuration for the queues necessary to run SendPortal is already included. In order to use Horizon as your queue manager, you should first publish the Horizon assets:
84+
85+
```php
86+
php artisan horizon:publish
87+
```
88+
To start processing your queue items with Horizon, you simply need to run the following command:
89+
90+
```php
91+
php artisan horizon
92+
```
93+
94+
## Running the Scheduler Locally
95+
96+
```php
97+
php artisan schedule:work
98+
```
99+
100+
## Support for SQLite
101+
102+
To use this package with SQLite, the following code could be added to AppServiceProvider:
103+
104+
```php
105+
if (DB::connection() instanceof SQLiteConnection) {
106+
DB::connection()->getPdo()->sqliteCreateFunction('date_format', function ($date, $format) {
107+
return date($format, strtotime($date));
108+
}, 2);
109+
110+
DB::connection()->getPdo()->sqliteCreateFunction('FROM_UNIXTIME', function ($unixtime) {
111+
return date('Y-m-d H:i:s', $unixtime);
112+
}, 1);
113+
114+
DB::connection()->getPdo()->sqliteCreateFunction('UNIX_TIMESTAMP', function ($date) {
115+
return strtotime($date);
116+
}, 1)
117+
}
118+
```
119+
120+
Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,40 @@
1+
---
2+
title: Introduction | 4.x
3+
description: Modern self-hosted email marketing platform built specifically for Filament Admin Panel with subscriber management, email campaigns, and automation features.
4+
lastUpdated: 2026-03-03T05:10:19.253Z
5+
---
6+
7+
# Filaletter - Streamline Email Marketing within FilamentPHP
8+
9+
The Filament Newsletter plugin empowers you to manage your email marketing campaigns directly within your FilamentPHP admin panel. Leveraging the flexibility and user-friendliness of Filament, this plugin simplifies the process of creating, sending, and tracking newsletters, all without leaving your familiar admin environment.
10+
11+
Built upon the open-source Sendportal core project ([Sendportal core](https://github.com/sendportal/sendportal)), Filament Newsletter offers:
12+
13+
* **Seamless Filament Integration:** Manage all aspects of your email marketing without ever leaving your Filament admin panel.
14+
* **Complete Control and Personalization:** Craft highly targeted emails with customizable templates.
15+
* **Broad Email Service Provider Support:** Integrate with popular providers like Amazon SES, Mailgun, SendGrid, Mailjet, Postmark, and SMTP. (Verify Mandrill support and update list accordingly).
16+
* **Scalable Solution:** Manage unlimited* campaigns, subscribers, and mailing lists within your server's capacity. (*See footnote for details).
17+
18+
## Documentation:
19+
20+
For detailed information on using the Sendportal core features within Filament Newsletter, refer to the Sendportal documentation: ([Sendportal Documentation](https://sendportal.io/docs)). This documentation covers core concepts such as template language and API usage. Filament-specific integration details are provided below. [Filamentphp Documentation](https://filamentphp.com/)
21+
22+
## Package Requirements:
23+
24+
* Laravel 11 or higher
25+
* Filament Admin Panel 3.2 or higher
26+
27+
### Version Compatibility
28+
29+
| Filament Version | Filament Newsletter Version |
30+
|------------------|---------------------------|
31+
| v3.x | v1.x – v3.x |
32+
| v4.x | v4.x |
33+
34+
35+
---
36+
37+
<span style=\{\{fontSize: "smaller"\}\}>**Footnote:** The term "unlimited" refers to the plugin's design. Practical limits may be imposed by your server resources, database capacity, and email sending provider limits.</span>
38+
39+
40+
Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
---
2+
title: Quick Start | 4.x
3+
description: Modern self-hosted email marketing platform built specifically for Filament Admin Panel with subscriber management, email campaigns, and automation features.
4+
lastUpdated: 2026-03-03T05:10:19.253Z
5+
---
6+
7+
# Quick Start: Sending Your First Campaign with Filament Newsletter
8+
9+
This guide walks you through the steps to send your first email campaign using Filament Newsletter within your FilamentPHP admin panel.
10+
11+
## 1. Create an Email Service:
12+
13+
Filament Newsletter integrates with various email providers: Mailgun, Mailjet, Amazon SES, SendGrid, Postmark, and SMTP.
14+
15+
* Navigate to the "Email Services" section in your Filament admin panel.
16+
* Click "Create Email Service."
17+
* Select your desired provider and fill in the required credentials. These vary by provider for detailed setup instructions for each provider.
18+
* Test your connection using the "Test Email" feature, providing a "To" and "From" address.
19+
20+
## 2. Add or Import Subscribers:
21+
22+
You need subscribers to send your campaigns. Here are three ways to add them:
23+
24+
* **Manually:** Go to "Subscribers" in the sidebar, click "New Subscriber," enter their email address, ensure "Subscribed" is checked, and click "Save."
25+
* **API:** Use the Filament Newsletter API to add subscribers programmatically.
26+
* **CSV Import:** Import subscribers in bulk from a CSV file.
27+
28+
For more details, see the [Subscriber Documentation](../../documentation/2-features/1-subscribers).
29+
30+
## 3. Create a Segment (Optional):
31+
32+
Segments allow you to group subscribers for targeted campaigns.
33+
34+
* Go to "Segments," click "Create Segment," and give your segment a name.
35+
* On the segment edit page, use the relation manager to add subscribers to the segment.
36+
37+
## 4. Create a Template:
38+
39+
Templates ensure consistent branding across your campaigns.
40+
41+
* Navigate to "Templates" and click "Add Template."
42+
* Your template should be valid HTML and *must* include the `\{\{content\}\}` tag, where your campaign content will be inserted.
43+
* See the [Template Documentation](add link to template documentation) for more details.
44+
45+
You can also create campaigns *without* a template if you prefer.
46+
47+
## 5. Create a Campaign:
48+
49+
* Go to "Campaigns" and click "New Campaign."
50+
* Select your template (if you created one). The campaign content you enter will be placed within the `\{\{content\}\}` tag of the template.
51+
* Refer to the [Campaign Documentation](add link to campaign documentation) for further information.
52+
53+
## 6. Send Your Campaign:
54+
55+
Review your campaign before sending:
56+
57+
* **Recipients:** Choose "All Subscribers" or select specific segments.
58+
* **Schedule:** Send immediately or schedule for a specific date and time.
59+
* **Sending Behavior:**
60+
* **Save as Draft:** Save individual emails as drafts for manual review and sending. Access these in the "Draft Messages" section.
61+
* **Send Immediately:** Send emails as soon as the system is ready.
62+

0 commit comments

Comments
 (0)