Files
fizzy/saas
Rosa Gutierrez 05819f84a2 Refactor notification push system with registry pattern
Replace NotificationPusher with a cleaner architecture:

- Add Notification::Pushable concern with push target registry
- Add Notification::Push base class with template methods
- Add Notification::Push::Web for web push (OSS)
- Add Notification::Push::Native for native push (SaaS)
- Add Notification::WebPushJob and Notification::NativePushJob

Key design:
- Registry pattern: Notification.register_push_target(:web)
- Template method: push calls should_push? then perform_push
- Subclasses override should_push? (with super) and perform_push
- Each target handles its own job enqueueing

Also:
- Add Notification#pushable? for checking push eligibility
- Add Notification#identity delegation to user
- Reorganize tests to match new class structure

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>

Tidy up saas engine a bit more
2026-02-25 19:31:13 +01:00
..
2026-02-25 19:31:13 +01:00
2026-02-25 19:31:13 +01:00
2025-12-02 13:33:27 -08:00

This is a Rails engine that 37signals bundles with Fizzy to offer the hosted version at https://fizzy.do.

Development

To make Fizzy run in SaaS mode, run this in the terminal:

bin/rails saas:enable

To go back to open source mode:

bin/rails saas:disable

Then you can work do Fizzy development as usual.

How to update Fizzy

After making changes to this gem, you need to update Fizzy to pick up the changes:

BUNDLE_GEMFILE=Gemfile.saas bundle update --conservative fizzy-saas

Working with Stripe

The first time, you need to:

  1. Install Stripe CLI: https://stripe.com/docs/stripe-cli
  2. Run stripe login and authorize the environment 37signals Development

Then, for working on the Stripe integration locally, you need to run this script to start the tunneling and set the environment variables:

eval "$(BUNDLE_GEMFILE=Gemfile.saas bundle exec stripe-dev)"
bin/dev # You need to start the dev server in the same terminal session

This will ask for your 1password authorization to read and set the environment variables that Stripe needs.

Stripe environments

Environments

Fizzy is deployed with Kamal. You'll need to have the 1Password CLI set up in order to access the secrets that are used when deploying. Provided you have that, it should be as simple as bin/kamal deploy to the correct environment.

Handbook

See the Fizzy handbook for runbooks and more.

Production

This environment uses a FlashBlade bucket for blob storage.

Beta

Beta is primarily intended for testing product features. It uses the same production database and Active Storage configuration.

There are 4 beta environments:

Deploy with: bin/kamal deploy -d beta1 (or -d beta2, -d beta3, -d beta4)

Staging

Staging is primarily intended for testing infrastructure changes. It uses production-like but separate database and Active Storage configurations.

License

fizzy-saas is released under the O'Saasy License.