Oxygen - Working and relaxing app
Version 1.0.0
Introduction
Support: SakuraLeaf
This documentation is to help you regarding install, set up & customization of the plugin. Please go through the documentation carefully to understand how this plugin works.
Requirements
In order to work properly the plugin needs the following:
- WordPress 6.8+. Oxygen it's built on top of WordPress as a plugin.
Installation
In order to use the plugin:
- Deactivate the free version (if it's installed and activated)
- Log in to your WordPress Admin Panel, go to Plugins > Add new > Upload. Upload the zip file
- Once you have uploaded the plugin, it automatically installs to your WordPress instance. Click the Activate button to activate it.
Main settings
Once you have installed the plugin, head to settings (Admin > OxygenApp settings). Here you can set up the General settings, set up Paddle subscriptions, edit the locales, and add/remove languages.
Google Auth
To set up Google Login, go to Admin > OxygenApp settings > General > Google Sign-In and activate "Activate Google Sign-In".
Steps to get the client id and the client secret
- 1. Go to Google Cloud Console
-
2. Create or select a project
- At the top-left, click the project dropdown.
- Choose an existing project or click New Project to create one.
- Give it a name (for example My Web App Auth) and click Create.
-
3. Enable the “Google Identity Services” (OAuth) API
- In the sidebar go to APIs & Services → Library.
- Search for Google Identity Services or OAuth 2.0 Client IDs.
- Click the API entry, then click Enable.
-
4. Configure the OAuth consent screen
- Go to APIs & Services → OAuth consent screen.
- Choose External (for users outside your organization) or Internal (G Suite orgs only).
- Fill in the required fields:
App name: your application's display nameUser support email: contact/support emailDeveloper contact email: email for Google to reach you
- Add the scopes the app needs (basic login typically requires profile and email).
- Click Save and continue.
-
5. Create OAuth 2.0 credentials
- Go to APIs & Services → Credentials.
- Click + Create Credentials → OAuth client ID.
- Choose:
Application type: Web applicationName: e.g., Web Client
- Under Authorized JavaScript origins, add your frontend origin(s). Examples:
- https://myapp.com
- http://localhost:3000 (for local development)
- Under Authorized redirect URIs, add the callback URL where Google will redirect after login. You can find this at OxygenApp settings > General > Google Sign-In > Authorized redirect URI
-
6. Copy your credentials
- When the OAuth client is created you'll see:
Client ID — copy this value into OxygenApp settings > General > Google Sign-In > Client IDClient Secret — copy this OxygenApp settings > General > Google Sign-In > Client secret
Paddle integration
Oxygen integrates with Paddle to handle subscription payments for Pro plans. Follow these steps to configure Paddle:
Paddle.com is a full-service billing platform aimed mainly at software companies, especially those selling digital products or subscriptions globally.
Some of the benefits are: Global scale with less complexity: Ability to sell in many countries, use local currencies/payment methods, handle VAT/sales tax and regulatory compliance in many jurisdictions without the company having to build all that from scratch.
Paddle supports sellers in over 200 countries and territories, allowing you to sell globally with no additional country-specific setup. Supported countries
Note! When testing with the sandbox, you can use Paddle's test card numbers (Example: 4242 4242 4242 4242). Use any CCV number and an expiration date in the future.
Prerequisites
- Create a Paddle account at paddle.com. For testing purposes create an account with their sandbox environment at sandbox-vendors.paddle.com
- Complete your Paddle seller setup and verification
- Create subscription products in your Paddle dashboard
Configuration Steps
- Navigate to Subscription Settings: Go to Admin > OxygenApp settings > Subscription gateways
- Enable Paddle: Check "Activate Paddle as gateway"
- API Credentials:
- API Key: Get from Paddle Dashboard > Developer Tools > Authentication
- Client-side token: Get from Paddle Dashboard > Developer Tools > Client-side tokens
- Product Configuration:
- Monthly price ID: The Paddle price ID for your monthly subscription
- Yearly price ID: The Paddle price ID for your yearly subscription
- Webhook Setup:
- Copy the webhook URL from OxygenApp settings
- In Paddle Dashboard, go to Developer Tools > Notifications
- Add a new webhook destination with your URL
- Copy the generated webhook secret key
- Paste it into "Webhook secret key" field in OxygenApp settings
- Testing: Enable "Activate sandbox mode" to test with Paddle sandbox environment
- Notifications: Enter email address(es) to receive notification emails about subscription events
Webhook Events
The plugin automatically handles these Paddle webhook events:
- subscription.created: Activates Pro plan when subscription starts
- subscription.updated: Updates subscription details
- subscription.canceled: Marks subscription as cancelled (remains active until period ends)
- subscription.past_due: Notifies about payment issues
- subscription.paused: Handles paused subscriptions
- subscription.trialing: Manages trial periods
Locales
Oxygen supports multiple languages and provides a flexible localization system for the frontend interface.
Managing Languages
- Go to Admin > OxygenApp settings > Languages
- Click "Add language" to add a new language
- Configure each language with:
- RTL support: Enable for right-to-left languages like Arabic or Hebrew
- Set one language as the default using the radio button
- Delete languages using the delete button
Customizing Labels
All frontend text can be customized for each language:
- In the Languages tab, expand any language section
- Edit the text for each label (e.g., "Sign up", "Login", "My playlists")
- Changes are saved automatically
- Labels cover all UI elements:
- Authentication forms (login, signup, password reset)
- Navigation menus
- Settings pages
- Playlist management
- Error and success messages
- Subscription information
User Language Selection
Users can switch languages from the settings menu in the app. The selected language is saved to their profile and persists across sessions.
Sounds
Background sounds are ambient audio files that users can play, mix, and combine to create their ideal focus or relaxation environment.
Creating a Sound
- Go to Admin > Background Sounds > Add New
- Enter a title for the sound (e.g., "Rain", "Ocean Waves", "Coffee Shop")
- Configure the sound settings in the meta boxes:
- Audio File: Upload an MP3 or OGG audio file (recommended: loopable tracks)
- Icon: Upload an icon image to represent this sound (SVG or PNG recommended)
- Default Volume: Set initial volume level (0-100, default 50)
- Premium Sound: Check if this sound requires a Pro subscription
- Requires Login: Check if users must be logged in to use this sound
- Multi-language Labels: Enter translated names for each active language
- Assign the sound to one or more Admin Playlists (sound collections)
- Click "Publish" to make the sound available
Admin Playlists (Sound Collections)
Admin Playlists are curated collections of sounds that appear together in the frontend interface:
- Go to Admin > Background Sounds > Admin Playlists
- Create a new taxonomy term (e.g., "Nature", "Urban", "Meditation")
- Assign sounds to these collections when creating/editing sounds
- Collections help organize sounds and make them easier for users to discover
Sound Mixing
Users can play multiple sounds simultaneously and adjust individual volumes to create custom soundscapes. Each sound plays in a loop automatically.
Tips for Sound Content
- Use seamless loops to avoid jarring transitions
- Keep file sizes reasonable (2-5MB per sound)
- Normalize audio levels for consistent volume
- Test sounds together to ensure they mix well
- Provide a variety of categories (nature, urban, white noise, etc.)
- A great resource from where free loop sounds can be acquired is: freesound.org
Tip! To obtain the best performance and speed, use AWS S3 storage for sounds. There are free solutions out there as plugins: Example: amazon-s3-and-cloudfront/
Backgrounds
Backgrounds are the visual environments that users see while using the app. They can be static images or looping videos.
Creating a Background
- Go to Admin > Backgrounds > Add New
- Enter a title for the background
- Configure the background settings:
- Background Type: Select "Image" or "Video"
- Background File:
- For images: Upload high-resolution JPG or PNG (1920x1080 or larger)
- For videos: Upload MP4 or WebM file (recommend compressed, loopable videos)
- Preview Icon: For videos, upload a thumbnail image shown before video loads
- Premium Background: Check if this requires a Pro subscription
- Requires Login: Check if users must be logged in to use this background
- Category: Assign to one or more categories
- Credits: Attribution for the background creator/source
- Credits label: Name or description (e.g., "Photo by John Doe")
- Credits URL: Link to creator's profile or source
- Click "Publish" to make the background available
Background Categories
Organize backgrounds into categories for easier browsing:
- Go to Admin > Backgrounds > Categories
- Create categories (e.g., "Nature", "Space", "Abstract", "Cityscapes")
- Assign backgrounds to categories when creating/editing them
- Users can filter backgrounds by category in the frontend
Background Credits
Credits are displayed at the bottom of the screen (if enabled in settings) to give proper attribution to content creators. This is especially important for stock photos/videos from services like Unsplash, Pexels, or Pixabay.
Best Practices
- Images: Use high-quality, calming imagery; recommended resolution 1920x1080 or higher
- Videos: Keep under 50MB if possible; use video compression; ensure seamless loops
- Performance: Test backgrounds on various devices to ensure smooth performance
- Variety: Provide diverse options (landscapes, abstract, minimal, detailed)
- Attribution: Always credit creators and ensure you have proper licensing
Tip! To obtain the best performance and speed, use AWS S3 storage for backgrounds. There are free solutions out there as plugins: Example: amazon-s3-and-cloudfront/
Extend the main functionality
Note! Oxygen-app-extended (GitHub), the plugin was created to help you extend the main plugin (oxygen-app) functionality without the need to edit any files within the main plugin. This way, updates to the main plugin will not affect custom functionality
Within the "oxygen-app-extended" plugin, you can find hooks examples on how you can override some of the oxygen-app plugin functionality. Example: Override logo, top menu, signup email message and such.
SMTP
Implementing SMTP (Simple Mail Transfer Protocol) in WordPress is one of the most effective ways to ensure your site’s emails (like contact forms, password resets, order confirmations, etc.) are delivered reliably.
Here are some solid WordPress plugins that implement SMTP (including via services like AWS SES) — all available on WordPress.org:
- WP Mail SMTP — Reconfigures WP's
wp_mail()to use SMTP or mailer providers such as AWS SES, SendGrid, Mailgun, etc. - FluentSMTP — Integrates natively with many ESPs including AWS SES, SendGrid, Postmark, etc.
- Post SMTP — A next-gen SMTP plugin supporting many SMTP/mailer providers (including AWS SES in pro version) for reliable mail delivery.
- YaySMTP — Supports many mailers including AWS SES, SendGrid, Zoho, Gmail, etc.
- WP Offload SES Lite — Specifically built for AWS SES to send all WordPress emails via SES, with logs & reporting.
- Easy WP SMTP — Simple SMTP plugin, supports several transactional mailers or SMTP.
Users dashboard
Oxygen includes a user management dashboard accessible to administrators. This dashboard allows admins to view and manage registered users, their subscription status, and other relevant information.
Cloudflare Turnstile
Oxygen supports Cloudflare Turnstile as an alternative to reCAPTCHA for bot protection during user registration.
Setting up Cloudflare Turnstile
- Create a Cloudflare account and navigate to the Application security > Turnstile section.
- Register your site to obtain the Site Key and Secret Key.
- In OxygenApp settings, go to the Security tab and select Cloudflare Turnstile as the CAPTCHA provider.
- Enter the Site Key and Secret Key obtained from Cloudflare.
- Save the settings to enable Turnstile on your registration form.
Backgrounds/Sounds/categories re-order
- In order to easily re-oreder, we recommend the following plugins: Post Types Order, Custom Taxonomy Order
- In order to re-order the backgrounds/sounds/categories, go to the respective admin listing (Backgrounds/Sounds/Categories)
- Use the drag-and-drop handle on the left side of each item to drag it to the desired position.
- The new order will be saved automatically and reflected in the frontend interface.
Upgrade to OxygenApp Pro
Note! Before installing the pro version, it's recommended to deactivate the free version.
Resources
Here are some resources from which you can get sounds and backgrounds:
- freesound.org (Sounds)
- zapsplat.com (Sounds)
- uppbeat.io (Sounds)
- elements.envato.com/audio (Sounds)
- unsplash.com (Image backgrounds)
- pexels.com (Video backgrounds)
- coverr.co (Video backgrounds)
- shutterstock.com (Video and image backgrounds)
Tip! Make sure the sounds and video backgrounds have a perfect loop.
Tip! To obtain the best performance and speed, use AWS S3 storage. There are free solutions out there as plugins: Example: amazon-s3-and-cloudfront/
Development
Should you choose to extend the current functionality, to transpile the JS and Scss we've used Prepos (Prepros compiles your files, transpiles your JavaScript, reloads your browsers and makes it really easy to develop):
- The front-end web app is located at "oxygen-app/app/Views/Frontend". Open Prepos > Add project > oxygen-app/app/Views/Frontend. That's it, now any change will be compiled automatically.
- The JS and CSS used within the WP admin are located at oxygen-app/assets/admin/settings. Open Prepos > Add project > oxygen-app/assets/admin/settings. That's it, now any change will be compiled.
Changelog
Version 1.0.0 - Friday November 7, 2025
- Core ambient sound system with mixing capabilities
- Background management (images and videos)
- User authentication system with email activation
- Google OAuth integration
- Paddle subscription integration
- Custom playlist creation and management
- Multi-language support with RTL languages
- User settings (time/date display, sleep time)
- Admin dashboard for user management
- Background categories and sound collections
- Cloudflare Turnstile integration for security
- Subscription management (upgrade, cancel)
- Background credits attribution system
- Responsive single-page application interface
- Free and Pro tier system with configurable limits
- WordPress Custom Post Types for content management
- REST API for all major operations
- Webhook integration for payment processing
- Daily cron jobs for subscription processing
- Session-based authentication