diff --git a/src/app/v5/core/channel-rewards/page.mdx b/src/app/v5/core/channel-rewards/page.mdx
new file mode 100644
index 0000000..b25c822
--- /dev/null
+++ b/src/app/v5/core/channel-rewards/page.mdx
@@ -0,0 +1,182 @@
+# Channel Rewards
+
+Channel Rewards are Twitch channel point rewards that can trigger Firebot effects when they are redeemed.
+
+Firebot can create and manage custom Channel Rewards. This lets you keep the Twitch reward setup and the Firebot effects in the same place.
+
+Some Twitch-owned details still need to be changed on Twitch, such as reward icons.
+
+You can find your Channel Point Rewards on Twitch here: `https://dashboard.twitch.tv/u/YOUR-CHANNEL/viewer-rewards/channel-points/rewards`
+
+You can access Channel Rewards from **Power-ups & Rewards**, located in the main navigation sidebar under **Triggers**. Select the **Channel Rewards** tab to view them.
+
+
+ Firebot can create and edit custom Channel Rewards, but reward icons still need to be changed on Twitch.
+
+
+---
+
+## **Creating a Channel Reward**
+
+To create a new reward, click `New Channel Reward` in the **Channel Rewards** tab. This opens the reward editor.
+
+The reward editor lets you set the Twitch reward details, add restrictions, and attach the effects Firebot should run when the reward is redeemed.
+
+* **Reward Name**
+This is the name shown for the reward on Twitch. Use a clear name so viewers know what they are redeeming.
+* **Description**
+This is the short description shown with the reward. Use this to explain what the reward does or what the viewer should enter.
+* **Require Viewer to Enter Text**
+This requires the viewer to enter text when redeeming the reward. This is useful for rewards that need a message, target, choice, or other input.
+* **Cost**
+This is the channel point cost of the reward.
+* **Background Color**
+This controls the reward color shown on Twitch.
+* **Skip Twitch Reward Requests Queue**
+This automatically approves future redemptions for this reward. These redemptions are approved by Twitch immediately and cannot be refunded from Firebot.
+* **Redemption Cooldown**
+This sets how long viewers must wait before the reward can be redeemed again.
+* **Limit Redemptions Per Stream**
+This limits the total number of redemptions during a stream.
+* **Limit Redemptions Per User Per Stream**
+This limits how many times each viewer can redeem the reward during a stream.
+* **Reward Icon**
+This is the icon shown for the reward. Reward icons can only be changed on Twitch, but Firebot will show the icon you have set there for easy reference.
+
+
+ Twitch does not show `Seconds` for reward cooldowns in the dashboard, but Firebot lets you set it. Twitch only shows `Minutes`, `Hours`, and `Days`, but the cooldown still works with the `Seconds` set in Firebot.
+
+
+
+ You can learn more about restrictions here: [Restrictions](/v5/core/restrictions).
+
+
+Click `Save` when you are finished.
+
+---
+
+## **Editing a Channel Reward**
+
+Existing rewards are shown in the **Channel Rewards** tab. Each row shows the reward name, cost, pause status, tags, and active status.
+
+You can also drag the handle to the right of the active status to reorganize rewards.
+
+To manage a reward, click the three dot menu on the reward or right-click the reward row.
+
+* **Edit**
+Opens the reward editor so you can change the reward settings, restrictions, and effects.
+* **Enable Channel Reward / Disable Channel Reward**
+Enables or disables the reward on Twitch. Disabling hides the reward from viewers.
+* **Pause Channel Reward / Unpause Channel Reward**
+Pauses or unpauses the reward. Pausing makes the reward temporarily unavailable without completely disabling or hiding it.
+* **Duplicate**
+Creates a copy of the reward.
+* **Delete**
+Deletes the reward.
+* **Effect Queues**
+Assigns the reward to an effect queue.
+* **Move to**
+Moves the reward up or down for organizing.
+
+
+ You can learn more about effect queues here: [Effect Queues](/v5/core/effect-queues).
+
+
+---
+
+## **Testing a Channel Reward**
+
+You can click the play button on a reward to test the effects attached to it without waiting for a real redemption.
+
+You can also click `Test Effects` in the reward editor to test the effects before saving.
+
+Use `Simulate` when you need to test a more specific redemption. This is useful when you want to test restrictions, viewer input, or other redemption details that the play button does not cover.
+
+
+ You can learn more about simulating events here: [Simulate](/v5/core/events#simulating-events).
+
+
+
+ You can learn more about restrictions here: [Restrictions](/v5/core/restrictions).
+
+
+---
+
+## **Effects**
+
+Channel Rewards can run the same kind of effects as other Firebot triggers.
+
+
+ You can learn more about effects here: [Effects](/v5/core/effects).
+
+
+---
+
+## **Tags**
+
+Tags help organize rewards.
+
+The filter dropdown at the top of the **Channel Rewards** tab can show all rewards or only rewards with a selected tag.
+
+Use `Edit tags` from the filter dropdown to manage the available tags.
+
+---
+
+## **Reward Limit**
+
+The reward limit is shown under the **Channel Rewards** list.
+
+Twitch limits how many custom Channel Rewards can exist on a channel, so Firebot shows the current count there.
+
+---
+
+## **Request Queue**
+
+The **Request Queue** tab shows pending Channel Reward redemptions that need review.
+
+This works like Twitch's request queue.
+
+From the queue, you can approve or reject pending redemptions. This is useful for rewards that need manual review before they are completed.
+
+
+ If **Skip Twitch Reward Requests Queue** is enabled on a reward, future redemptions for that reward are approved immediately and will not wait in the queue.
+
+
+---
+
+## **Channel Reward Variables**
+
+Channel Rewards have variables that can be used in effects when a Channel Reward is redeemed.
+
+| Variable | Description |
+|-----------------------------------|---------------------------------------------------------------|
+| `$rewardCost` | Gets the channel point cost of the current Channel Reward. |
+| `$rewardDescription` | Gets the description of the current Channel Reward. |
+| `$rewardImageUrl` | Gets the image URL of the current Channel Reward. |
+| `$rewardCost[rewardName]` | Gets the channel point cost of a specific Channel Reward. |
+| `$rewardDescription[rewardName]` | Gets the description of a specific Channel Reward. |
+| | |
+
+
+ When using a Channel Reward name inside a variable, the name must match exactly.
+
+
+
+ You can learn more about variables here: [Variables](/v5/core/variables).
+
+
+---
+
+## Channel Reward Example: Sound Reward
+
+You want a Channel Reward that plays a sound on stream.
+
+1. Open **Power-ups & Rewards** in Firebot.
+2. Select the **Channel Rewards** tab.
+3. Click `New Channel Reward`.
+4. Set **Reward Name** to `Play Sound`.
+5. Set **Cost** to `500`.
+6. Add a **Play Sound** effect.
+7. Click `Save`.
+
+When someone redeems the Channel Reward with channel points, Firebot will run the effects attached to it.
\ No newline at end of file
diff --git a/src/app/v5/core/counters/page.mdx b/src/app/v5/core/counters/page.mdx
new file mode 100644
index 0000000..7efd9f8
--- /dev/null
+++ b/src/app/v5/core/counters/page.mdx
@@ -0,0 +1,150 @@
+# Counters
+
+Counters store a number that can be updated and reused in Firebot.
+
+You can access **Counters** in the main navigation sidebar under **Triggers**.
+
+Counters are useful when you want to track something over time. For example, you can track deaths in a game, how many times a command was used, how many wins a viewer has, or any other number you want Firebot to remember.
+
+---
+
+## **Creating a Counter**
+
+To create a new counter, click `New Counter` in the **Counters** tab. This opens the counter editor.
+
+The counter editor lets you name the counter, set its current value, set optional minimum and maximum values, and attach effects that run when the counter is updated.
+
+* **Name**
+This is the name shown for the counter in Firebot. Use a clear name so you know what the counter is tracking.
+* **Minimum**
+This is the lowest value the counter can use. Leave it unset if the counter does not need a minimum.
+* **Current Value**
+This is the current number stored in the counter.
+* **Maximum**
+This is the highest value the counter can use. Leave it unset if the counter does not need a maximum.
+* **Effects On Update**
+These effects run every time the counter is updated by the **Update Counter** effect.
+
+Click `Save` when you are finished.
+
+
+ Minimum and maximum values are optional. Use them when the counter should not go below or above a certain number.
+
+
+---
+
+## **Using a Counter**
+
+Counters are usually changed with the **Update Counter** effect.
+
+The **Update Counter** effect lets you choose a counter and either increment it or set it to a new value.
+
+* **Increment**
+Changes the counter by the amount you enter. Use a positive number to increase the counter, or a negative number to decrease it.
+* **Set**
+Sets the counter to a new value.
+
+For example, a command can use **Update Counter** to increase a counter by `1` every time the command is used.
+
+---
+
+## **Counter Variables**
+
+Counters have variables that can be used in chat messages, effects, overlays, and other fields that support variables.
+
+| Variable | Description |
+|-------------------------|------------------------------------------------------------------------------------|
+| `$counter[name]` | Displays the value of the given counter. |
+| `$counterChange` | Shows how much the counter increased or decreased. |
+| `$counterMaximum` | Shows the maximum value of the counter, or an empty string if there is no maximum. |
+| `$counterMinimum` | Shows the minimum value of the counter, or an empty string if there is no minimum. |
+| `$counterName` | Shows the name of the counter. |
+| `$counterNewValue` | Shows the new value of the counter after it updates. |
+| `$counterPreviousValue` | Shows the previous value of the counter before it updated. |
+| | |
+
+Use `$counter[name]` when you want to get the current value of a specific counter.
+
+For example: `$counter[BlameChat]`
+
+This returns the current value of the `BlameChat` counter.
+
+
+ Use `$counterNewValue` in **Effects On Update** when you want the value after the counter changes.
+
+
+---
+
+## **Counter Text File**
+
+Each counter has a text file that stores the current value.
+
+You can use this file in broadcasting software to show the counter value on stream.
+
+Open the counter editor and expand **How do I use this?** to view and copy the text file path for that counter.
+
+---
+
+## **Editing a Counter**
+
+Existing counters are shown in the **Counters** tab. Each row shows the counter name, current value, minimum value, maximum value, and tags.
+
+To manage a counter, click the three dot menu on the counter or right-click the counter row.
+
+* **Edit**
+Opens the counter editor so you can change the name, values, and effects.
+* **Duplicate**
+Creates a copy of the counter.
+* **Delete**
+Deletes the counter.
+* **Move to**
+Moves the counter up or down for organizing.
+
+You can also drag the handle on the right side of a counter row to reorganize counters.
+
+---
+
+## **Effects On Update**
+
+Counters can run effects when their value changes.
+
+These effects only run when the counter is updated by the **Update Counter** effect. This is useful when you want something to happen automatically after the counter changes.
+
+For example, you could send a chat message every time a counter updates, using `$counterNewValue` in the message.
+
+
+ Effects On Update do not run just because `$counter[name]` is used. They run when the counter is changed by the **Update Counter** effect.
+
+
+---
+
+## **Tags**
+
+Tags help organize counters.
+
+The filter dropdown at the top of the **Counters** tab can show all counters or only counters with a selected tag.
+
+Use `Edit tags` from the filter dropdown to manage the available tags.
+
+---
+
+## Counter Example: Blame Chat Command
+
+You want a command that increases a counter and posts the new counter value in chat.
+
+1. Open **Counters** in Firebot.
+2. Click `New Counter`.
+3. Set **Name** to `BlameChat`.
+4. Add a `Chat` effect.
+5. Use `$counterNewValue` in the chat message to get the new counter value after the update.
+ * **Example:** `Chat has been blamed $counterNewValue times!`
+6. Click `Save`.
+7. Open **Commands**.
+8. Create or edit the command you want to use, for example `!blamechat`.
+9. Add an **Update Counter** effect.
+10. Select the `BlameChat` counter.
+11. Set **Mode** to `Increment`.
+12. Set **Increment Amount** to `1`.
+13. Click `Save`.
+
+When someone uses the command, Firebot updates the counter and posts the message with the new counter value in chat.
\ No newline at end of file
diff --git a/src/app/v5/core/hotkeys/page.mdx b/src/app/v5/core/hotkeys/page.mdx
new file mode 100644
index 0000000..d73278f
--- /dev/null
+++ b/src/app/v5/core/hotkeys/page.mdx
@@ -0,0 +1,119 @@
+# Hotkeys
+
+Hotkeys let you trigger Firebot effects by pressing a key or key combination on your keyboard.
+
+You can access **Hotkeys** in the main navigation sidebar under **Triggers**.
+
+Hotkeys are useful when you want to manually trigger stream actions without typing a command in chat. For example, you can use a hotkey to play a sound, show an overlay alert, change a scene, run a preset effect list, or trigger any other effects you set up.
+
+---
+
+## **Creating a Hotkey**
+
+To create a new hotkey, click `New Hotkey` in the **Hotkeys** tab. This opens the hotkey editor.
+
+The hotkey editor lets you name the hotkey, record the keybind, and attach the effects Firebot should run when the hotkey is pressed.
+
+* **Name**
+This is the name shown for the hotkey in Firebot. Use a clear name so you know what the hotkey is for.
+* **Keybind**
+This is the key or key combination that will trigger the hotkey.
+* **Effects**
+These are the effects Firebot will run when the hotkey is pressed.
+
+Click `Record Keybind`, then press the key or key combination you want to use.
+
+Click `Stop` when you are finished recording the keybind.
+
+Click `Save` when you are finished.
+
+---
+
+## **Important Hotkey Guidelines**
+
+Firebot shows these guidelines when creating a hotkey:
+
+* Firebot cannot override hotkeys already reserved by other applications.
+* Firebot cannot detect conflicts with hotkeys from other applications.
+* Binding to a single letter will prevent typing that letter in other applications.
+* Hotkeys are temporarily disabled while the hotkey editor is open.
+
+
+ For most hotkeys, it is better to use a key combination like `Ctrl + Shift + K` instead of a single letter like `K`.
+
+
+---
+
+## **Virtual Buttons**
+
+Some keyboards do not have every possible key available.
+
+The **Advanced** section lets you add virtual buttons such as `F13`, `F14`, `F15`, and up to `F24`.
+
+These keys are useful because they are less likely to conflict with normal typing or common application shortcuts.
+
+To add one, expand **Advanced**, choose a virtual button from the dropdown, then add it to the hotkey.
+
+---
+
+## **Editing a Hotkey**
+
+Existing hotkeys are shown in the **Hotkeys** tab. Each row shows the hotkey name, keybind, tags, and active status.
+
+To manage a hotkey, click the three dot menu on the hotkey or right-click the hotkey row.
+
+* **Edit**
+Opens the hotkey editor so you can change the name, keybind, and effects.
+* **Enable Hotkey / Disable Hotkey**
+Enables or disables the hotkey.
+* **Delete**
+Deletes the hotkey.
+* **Effect Queues**
+Assigns the hotkey to an effect queue.
+* **Move to**
+Moves the hotkey up or down for organizing.
+
+You can also drag the handle on the right side of a hotkey row to reorganize hotkeys.
+
+
+ You can learn more about effect queues here: [Effect Queues](/v5/core/effect-queues).
+
+
+---
+
+## **Effects**
+
+Hotkeys can run the same kind of effects as other Firebot triggers.
+
+
+ You can learn more about effects here: [Effects](/v5/core/effects).
+
+
+---
+
+## **Tags**
+
+Tags help organize hotkeys.
+
+The filter dropdown at the top of the **Hotkeys** tab can show all hotkeys or only hotkeys with a selected tag.
+
+Use `Edit tags` from the filter dropdown to manage the available tags.
+
+---
+
+## Hotkey Example: Post Twitch Message
+
+You want a hotkey that posts a Twitch chat message.
+
+1. Open **Hotkeys** in Firebot.
+2. Click `New Hotkey`.
+3. Set **Name** to `Post Twitch Message`.
+4. Click `Record Keybind`.
+5. Press the key combination you want to use.
+6. Add `Chat` to send a chat message.
+7. Set `Chat as` to `Streamer` or `Bot` if you have a Twitch bot account connected.
+8. Set `Chat message` to the message you want to post in Twitch chat.
+9. Click `Add` to add the chat effect to the hotkey.
+10. Click `Save`.
+
+When you press the hotkey, Firebot will run the effects attached to it.
\ No newline at end of file
diff --git a/src/app/v5/core/overlay-widgets/page.mdx b/src/app/v5/core/overlay-widgets/page.mdx
new file mode 100644
index 0000000..1838f0f
--- /dev/null
+++ b/src/app/v5/core/overlay-widgets/page.mdx
@@ -0,0 +1,910 @@
+# Overlay Widgets
+
+Overlay Widgets are visual elements that can be shown on your Firebot overlay.
+
+You can access **Overlay Widgets** in the main navigation sidebar under **Triggers**.
+
+Overlay Widgets are useful when you want something visible on stream, such as chat, text, images, counters, countdowns, progress bars, or custom widgets.
+
+
+ Overlay Widgets only appear on stream if your Firebot overlay is added to your broadcasting software as a browser source.
+
+
+---
+
+## **Creating an Overlay Widget**
+
+To create a new widget, click `New Overlay Widget` in the **Overlay Widgets** tab. This opens the widget editor.
+
+The widget editor lets you choose the widget type, name the widget, choose an overlay instance, configure the widget settings, and set where it should appear on the overlay.
+
+Available widget types include:
+
+* **Chat**
+* **Chat (Advanced)**
+* **Countdown Timer (Dynamic)**
+* **Countdown to Date**
+* **Counter Display**
+* **Current Date / Time**
+* **Custom Widget**
+* **Custom Widget (Advanced)**
+* **Image**
+* **Progress Bar**
+* **Text**
+
+Click `Save` when you are finished.
+
+
+ Each widget type has different settings. Choose the widget type based on what you want to show on stream.
+
+
+---
+
+## **Widget Position**
+
+Most widgets share the same position controls.
+
+The position editor lets you place and resize the widget inside the overlay canvas. You can drag the widget, resize it, or enter exact values.
+
+| Option | What it does |
+|----------------------|-------------------------------------------------------|
+| **Overlay Instance** | Selects which overlay instance the widget belongs to. |
+| **X Position (px)** | Sets the widget's horizontal position in pixels. |
+| **Y Position (px)** | Sets the widget's vertical position in pixels. |
+| **Width (px)** | Sets the widget width in pixels. |
+| **Height (px)** | Sets the widget height in pixels. |
+| **Z-index** | Controls the widget's layer order. |
+| | |
+
+Use **Z-index** when widgets overlap. A higher value appears above a lower value.
+
+---
+
+## **Chat**
+
+The **Chat** widget shows Twitch chat on your overlay.
+
+Use this when you want a regular chat feed on stream without writing custom HTML or CSS.
+
+### Display Options
+
+| Option | What it does |
+|-------------------------------|------------------------------------------------------------------------------------------|
+| **Show Timestamps** | Shows timestamps next to chat messages. |
+| **Show Viewer Avatars** | Shows the chatter's profile image next to their message. |
+| **Show Chat Badges** | Shows Twitch badges such as sub badges, Bits badges, and other chat badges. |
+| **Show Pronouns** | Shows chatter pronouns when available from [Twitch Chat Pronouns](https://pr.alejo.io/). |
+| **Show Shared Chat Messages** | Shows messages sent from other channels during a shared chat session. |
+| **Show Announcements** | Shows chat announcements sent by the streamer or moderators. |
+| | |
+
+### Message Timing
+
+| Option | What it does |
+|-----------------------------------|----------------------------------------------------------------------------|
+| **Add Message Delay** | Delays messages before they are sent to the widget. Useful for moderation. |
+| **New Message Entry Animation** | Sets the animation used when new messages appear. |
+| **Automatically Remove Messages** | Removes messages from the widget after a set amount of time. |
+| | |
+
+### Message Layout
+
+| Option | What it does |
+|-----------------------|---------------------------------------------------|
+| **Message Style** | Controls how usernames and messages are shown. |
+| **Compact** | Shows the username and message on the same line. |
+| **Modern (Expanded)** | Shows the username and message on separate lines. |
+| **Chat Order** | Controls where new messages appear. |
+| **Normal** | New messages appear at the bottom of the feed. |
+| **Reversed** | New messages appear at the top of the feed. |
+| | |
+
+### Message Types
+
+| Option | What it does |
+|-------------------------------|--------------------------------------------------------------|
+| **Action Display Format** | Controls how `/me` messages are displayed. |
+| **Modern** | Shows action text like normal chat text, but italicized. |
+| **Classic** | Shows action text in the username color, but not italicized. |
+| **Highlighted Message Style** | Controls how highlighted Twitch messages are displayed. |
+| **Normal** | Highlighted messages look like regular chat messages. |
+| **Highlighted** | Highlighted messages use a different background color. |
+| | |
+
+### Filtering and Emotes
+
+| Option | What it does |
+|-----------------------------------------|------------------------------------------------|
+| **Enabled Third-Party Emote Providers** | Enables supported third-party emote providers. |
+| **BTTV** | Enables BetterTTV emotes. |
+| **7TV** | Enables 7TV emotes. |
+| **FFZ** | Enables FrankerFaceZ emotes. |
+| **Hidden Users** | Hides messages from selected usernames. |
+| | |
+
+
+ Third-party emote providers enabled in the Chat widget must also be enabled in Dashboard settings before emotes from those services will show.
+
+
+### Alignment and Spacing
+
+| Option | What it does |
+|----------------------------|-------------------------------------------------------------------|
+| **Horizontal Alignment** | Aligns chat messages left or right inside the widget area. |
+| **Vertical Alignment** | Aligns chat messages to the top or bottom inside the widget area. |
+| **Space Between Messages** | Sets the spacing between messages in pixels. |
+| | |
+
+### Font Options
+
+| Option | What it does |
+|-------------------------------|-----------------------------------------------------------------|
+| **Username Font Options** | Controls username font, size, weight, and italic styling. |
+| **Chat Message Font Options** | Controls message font, color, size, weight, and italic styling. |
+| | |
+
+---
+
+## **Chat (Advanced)**
+
+The **Chat (Advanced)** widget shows Twitch chat on your overlay using custom HTML and CSS.
+
+Use this when you want to build your own chat layout instead of using the standard **Chat** widget.
+
+
+ Chat (Advanced) expects valid HTML and CSS. Broken templates can stop messages from displaying correctly.
+
+
+### CSS Template
+
+The **CSS Template** field is where you add CSS styles and custom CSS classes for the widget.
+
+Firebot automatically puts this CSS inside a `