WHAT WAS DONE: - Added troubleshooting entry to holly-wanderer-permissions-setup.md - Documents the gray circle symptom in Carl-bot Autoroles dashboard - Explains root cause: bot role must be above any role it assigns - Includes fix steps and verification method WHY: Encountered live on 2026-03-28. New members were joining and receiving no role. Root cause was Carl-bot's role positioned below Wanderer in the Discord role hierarchy. One-drag fix. Documented immediately so this is never a mystery again. FILES MODIFIED: - docs/guides/holly-wanderer-permissions-setup.md Signed-off-by: Chronicler #45 <claude@firefrostgaming.com>
621 lines
17 KiB
Markdown
621 lines
17 KiB
Markdown
# Discord Wanderer Role - Channel Permissions Setup Guide
|
|
|
|
**For:** Holly (unicorn20089 / The Catalyst)
|
|
**Created:** March 28, 2026
|
|
**Purpose:** Configure Wanderer role so free users see Fire/Frost paths but can't access them (FOMO driver)
|
|
|
|
---
|
|
|
|
## 📖 BACKGROUND: What is Wanderer?
|
|
|
|
**Wanderer** is the **FREE tier** for Firefrost Gaming.
|
|
|
|
**How it works:**
|
|
1. Someone joins the Discord server (no payment required)
|
|
2. **Carl-bot** automatically assigns them the "Wanderer" role
|
|
3. They can browse and chat in Community Hub channels
|
|
4. They see Fire/Frost paths exist but can't access them (🔒 locked)
|
|
5. They try to join a Minecraft server → denied (no subscription)
|
|
6. **FOMO kicks in** → They subscribe to get full access
|
|
|
|
**The strategy:** Give them enough to get hooked, show them what they're missing, make subscribing irresistible.
|
|
|
|
---
|
|
|
|
## 🧠 WHY THE FOMO STRATEGY WORKS
|
|
|
|
### **What We're Doing:**
|
|
Making Fire Path and Frost Path **visible but locked** to Wanderers.
|
|
|
|
### **Why This Works Better Than Hiding:**
|
|
|
|
**❌ BAD (Hiding Everything):**
|
|
- Free user joins Discord
|
|
- Sees: Welcome, Community Hub, Support
|
|
- Thinks: "This is all there is"
|
|
- Never knows about Fire/Frost paths
|
|
- No reason to upgrade
|
|
- **Conversion rate: Low**
|
|
|
|
**✅ GOOD (Visible But Locked - FOMO):**
|
|
- Free user joins Discord
|
|
- Sees: Welcome, Community Hub, Support, AND 🔒 Fire Path, 🔒 Frost Path
|
|
- Thinks: "Whoa, there's fire-general, fire-strategy... but I can't access it!"
|
|
- Clicks on locked channel → Discord shows lock icon
|
|
- Realizes they're missing exclusive content
|
|
- **Conversion rate: Much Higher (10-20% target)**
|
|
|
|
### **The Psychology:**
|
|
- **Scarcity** - "This content is locked, I want what I can't have"
|
|
- **Social proof** - "Other people are chatting in there, I'm missing out"
|
|
- **Curiosity** - "What are they talking about in fire-strategy?"
|
|
- **Exclusivity** - "I want to be part of the Fire Path community"
|
|
|
|
**This is the same strategy used by:**
|
|
- Spotify (free tier shows premium features grayed out)
|
|
- Discord Nitro (shows locked emojis/stickers)
|
|
- Gaming demos (shows locked levels)
|
|
- Freemium SaaS products
|
|
|
|
---
|
|
|
|
## 🤖 CARL-BOT: Auto-Assign Wanderer on Join
|
|
|
|
Before we configure permissions, you should know about **Carl-bot**.
|
|
|
|
### **What is Carl-bot?**
|
|
Carl-bot is a Discord bot that automatically assigns the Wanderer role when someone joins the server.
|
|
|
|
**How it works:**
|
|
1. New person joins Firefrost Gaming Discord
|
|
2. Carl-bot detects the join event
|
|
3. Immediately assigns "Wanderer" role
|
|
4. Person can now access Wanderer channels
|
|
|
|
**This is already configured by Michael**, but here's how to check/modify it:
|
|
|
|
### **Verify Carl-bot Configuration:**
|
|
|
|
1. Go to: **https://carl.gg/dashboard**
|
|
2. Log in with Discord
|
|
3. Select **Firefrost Gaming** server
|
|
4. Click **"Autoroles"** in the left sidebar
|
|
5. You should see **"Wanderer"** in the "Autoroles" dropdown
|
|
6. This means Carl-bot will auto-assign Wanderer on join
|
|
|
|
**If you ever need to change it:**
|
|
- Select a different role from the dropdown
|
|
- Click "Save"
|
|
|
|
**That's it!** Carl-bot handles the auto-assignment, you just need to configure what Wanderer can see.
|
|
|
|
---
|
|
|
|
## 🎯 GOAL
|
|
|
|
**What Wanderer should see:**
|
|
|
|
✅ **CAN ACCESS (Read + Send):**
|
|
- Welcome & Info channels
|
|
- Community Hub (all channels)
|
|
- Support channels
|
|
- Voice channels (Lobby, Game Rooms, AFK)
|
|
|
|
🔒 **CAN SEE BUT LOCKED (FOMO Driver):**
|
|
- 🔥 Fire Path category + all fire channels (visible but can't access)
|
|
- ❄️ Frost Path category + all frost channels (visible but can't access)
|
|
|
|
❌ **CANNOT SEE AT ALL:**
|
|
- Subscriber Lounge
|
|
- Game Servers
|
|
- Staff Area
|
|
- modlog
|
|
|
|
---
|
|
|
|
## 🚨 CURRENT ISSUES TO FIX
|
|
|
|
Based on "View Server As Role" test:
|
|
|
|
1. **Fire Path & Frost Path are completely hidden** → Should be visible but locked
|
|
2. **modlog is visible to Wanderer** → Should be hidden (staff only)
|
|
3. **Support category might be incomplete** → Verify network-status and breezehost-service-alerts are visible
|
|
|
|
---
|
|
|
|
## 🔧 FIX #1: Make Fire Path Visible But Locked
|
|
|
|
### **Step 1: Configure Fire Path Category**
|
|
|
|
1. **Right-click** the **"🔥 Fire Path"** category name
|
|
2. Click **"Edit Category"**
|
|
3. Go to **"Permissions"** tab
|
|
4. Click **"Advanced permissions"** (if you see it)
|
|
5. Click **"+ Add members or roles"**
|
|
6. Select **"Wanderer"** from the dropdown
|
|
7. Set these permissions for Wanderer:
|
|
|
|
**ALLOW (Green ✅):**
|
|
- ✅ View Channel
|
|
|
|
**DENY (Red ❌):**
|
|
- ❌ Send Messages
|
|
- ❌ Send Messages in Threads
|
|
- ❌ Create Public Threads
|
|
- ❌ Create Private Threads
|
|
- ❌ Embed Links
|
|
- ❌ Attach Files
|
|
- ❌ Add Reactions
|
|
- ❌ Connect (if there are voice channels)
|
|
- ❌ Speak (if there are voice channels)
|
|
|
|
8. Click **"Save Changes"**
|
|
|
|
---
|
|
|
|
### **Step 2: Sync All Fire Channels**
|
|
|
|
For each channel in Fire Path (fire-general, fire-strategy, fire-events, fire-leaderboards):
|
|
|
|
1. **Right-click** the channel
|
|
2. Click **"Edit Channel"**
|
|
3. Go to **"Permissions"** tab
|
|
4. **Make sure** the toggle at the top says **"Sync permissions with category"** (should be ON/enabled)
|
|
5. If it says "permissions are synced" → perfect, move to next channel
|
|
6. If it says "permissions are not synced" → click the sync button
|
|
7. Click **"Save Changes"**
|
|
|
|
**Repeat for all 4 Fire Path channels.**
|
|
|
|
---
|
|
|
|
## 🔧 FIX #2: Make Frost Path Visible But Locked
|
|
|
|
### **Step 1: Configure Frost Path Category**
|
|
|
|
Same process as Fire Path:
|
|
|
|
1. **Right-click** the **"❄️ Frost Path"** category
|
|
2. Click **"Edit Category"**
|
|
3. **Permissions** tab
|
|
4. **"+ Add members or roles"** → Select **"Wanderer"**
|
|
5. Set permissions:
|
|
- ✅ **View Channel** = GREEN (allow)
|
|
- ❌ **Send Messages** = RED (deny)
|
|
- ❌ All other message/voice permissions = RED (deny)
|
|
6. **Save Changes**
|
|
|
|
---
|
|
|
|
### **Step 2: Sync All Frost Channels**
|
|
|
|
For each channel (frost-general, frost-builds, frost-events, frost-gallery):
|
|
|
|
1. Right-click → **Edit Channel**
|
|
2. **Permissions** tab
|
|
3. Verify **"Sync permissions with category"** is ON
|
|
4. Save
|
|
|
|
**Repeat for all 4 Frost Path channels.**
|
|
|
|
---
|
|
|
|
## 🔧 FIX #3: Hide modlog from Wanderer
|
|
|
|
The #modlog channel should be staff-only, not visible to free users.
|
|
|
|
1. **Right-click** the **#modlog** channel
|
|
2. Click **"Edit Channel"**
|
|
3. Go to **"Permissions"** tab
|
|
4. Click **"+ Add members or roles"**
|
|
5. Select **"Wanderer"**
|
|
6. Set permission:
|
|
- ❌ **View Channel** = RED (deny)
|
|
7. Click **"Save Changes"**
|
|
|
|
Now Wanderer won't see modlog at all.
|
|
|
|
---
|
|
|
|
## 🔧 FIX #4: Verify Support Category
|
|
|
|
**Check if these channels exist in the Support category:**
|
|
- network-status
|
|
- breezehost-service-alerts
|
|
- support-tickets
|
|
|
|
**If they exist, make sure Wanderer can see them:**
|
|
|
|
1. Right-click **"Support"** category
|
|
2. **Edit Category** → **Permissions**
|
|
3. Find **"Wanderer"** role
|
|
4. Make sure:
|
|
- ✅ **View Channel** = GREEN (allow)
|
|
- ✅ **Read Message History** = GREEN (allow)
|
|
- ✅ **Send Messages** = GREEN (allow) - *for support-tickets only*
|
|
|
|
**OR just verify the category permissions allow Wanderer to view.**
|
|
|
|
---
|
|
|
|
## ✅ VERIFICATION: Test Your Changes
|
|
|
|
After making all the changes above:
|
|
|
|
### **Option A: Use "View Server As Role"**
|
|
|
|
1. Go to **Server Settings** → **Roles**
|
|
2. **Right-click** "Wanderer" role
|
|
3. Click **"View Server As Role"**
|
|
4. You should now see:
|
|
|
|
**What you SHOULD see:**
|
|
```
|
|
Welcome & Info
|
|
✅ welcome, rules, announcements, get-roles
|
|
|
|
🔥 Fire Path
|
|
🔒 fire-general (you can see it but it's locked)
|
|
🔒 fire-strategy (locked)
|
|
🔒 fire-events (locked)
|
|
🔒 fire-leaderboards (locked)
|
|
|
|
❄️ Frost Path
|
|
🔒 frost-general (locked)
|
|
🔒 frost-builds (locked)
|
|
🔒 frost-events (locked)
|
|
🔒 frost-gallery (locked)
|
|
|
|
Community Hub
|
|
✅ general-chat, memes, introductions, showcase,
|
|
off-topic-chat, suggestions, support, feedback
|
|
|
|
Voice Channels
|
|
✅ Lobby, Game Room 1, Game Room 2, AFK
|
|
|
|
Support
|
|
✅ support-tickets (and others if they exist)
|
|
```
|
|
|
|
**What you should NOT see:**
|
|
- ❌ modlog (hidden)
|
|
- ❌ Subscriber Lounge (hidden)
|
|
- ❌ Game Servers (hidden)
|
|
- ❌ Staff Area (hidden)
|
|
|
|
---
|
|
|
|
### **Option B: Test with Alt Account**
|
|
|
|
1. Create a test Discord account (or use an alt)
|
|
2. Join Firefrost Gaming
|
|
3. Carl-bot should auto-assign Wanderer role
|
|
4. Check what channels you can see
|
|
5. Try to click on fire-general → should see 🔒 lock icon
|
|
6. Leave the test account in the server or kick it when done
|
|
|
|
---
|
|
|
|
## 🎨 WHAT THIS ACHIEVES (The FOMO Strategy)
|
|
|
|
**Free users (Wanderer) will see:**
|
|
|
|
> "Oh wow, there's a Fire Path with fire-general, fire-strategy... but I can't access it!"
|
|
>
|
|
> "I can see Frost Path exists but all the channels are locked!"
|
|
>
|
|
> "I need to subscribe to unlock these!"
|
|
|
|
**This is WAY more effective than hiding the paths completely.**
|
|
|
|
They can participate in Community Hub for free, but they KNOW there's more content waiting if they subscribe.
|
|
|
|
---
|
|
|
|
## 🆘 TROUBLESHOOTING
|
|
|
|
### **Problem: Channel still shows as accessible instead of locked**
|
|
|
|
**Solution:**
|
|
- Go back to the category permissions
|
|
- Make sure Wanderer has View Channel = GREEN
|
|
- Make sure Wanderer has Send Messages = RED
|
|
- Re-sync the individual channels
|
|
|
|
---
|
|
|
|
### **Problem: Wanderer can't see the Fire/Frost categories at all**
|
|
|
|
**Solution:**
|
|
- Check category permissions
|
|
- Wanderer needs View Channel = GREEN (allowed) at the category level
|
|
- Individual channel denies come from Send Messages = RED
|
|
|
|
---
|
|
|
|
### **Problem: Channel shows "Sync permissions" but changes don't take effect**
|
|
|
|
**Solution:**
|
|
- Click "Save Changes" on the category first
|
|
- Then go to the individual channel
|
|
- Toggle "Sync permissions" OFF then back ON
|
|
- Save again
|
|
|
|
---
|
|
|
|
### **Problem: Carl-bot not assigning Wanderer role to new members (role shows gray in dashboard)**
|
|
|
|
**Symptoms:**
|
|
- New members join and receive no role at all
|
|
- In Carl-bot dashboard → Autoroles, the Wanderer role tag shows a **gray circle** on the left instead of a colored one
|
|
|
|
**Root Cause:**
|
|
Discord requires a bot's role to be **higher in the role hierarchy** than any role it tries to assign. If Carl-bot's role sits below Wanderer in the list, Discord silently blocks the assignment.
|
|
|
|
**Fix:**
|
|
1. Go to **Server Settings → Roles**
|
|
2. Find Carl-bot's role in the list
|
|
3. **Drag it above Wanderer**
|
|
4. Save
|
|
|
|
**Verification:**
|
|
The Wanderer role tag in Carl-bot's Autoroles dashboard will show a **colored circle** (not gray) once the hierarchy is correct. Test with a fresh join or by removing Wanderer from a test account and rejoining.
|
|
|
|
**Date Encountered:** March 28, 2026
|
|
**Fixed By:** Michael (Frostystyle)
|
|
**Diagnosed By:** Chronicler #45
|
|
|
|
---
|
|
|
|
## 📊 PERMISSION SUMMARY CHEAT SHEET
|
|
|
|
| Role | View Channel | Send Messages | Access |
|
|
|------|--------------|---------------|--------|
|
|
| **Wanderer in Community Hub** | ✅ Green | ✅ Green | Full access |
|
|
| **Wanderer in Fire/Frost Paths** | ✅ Green | ❌ Red | Can see, can't send (LOCKED) |
|
|
| **Wanderer for modlog** | ❌ Red | ❌ Red | Completely hidden |
|
|
| **Wanderer for Staff Area** | ❌ Red | ❌ Red | Completely hidden |
|
|
|
|
---
|
|
|
|
## ✨ WHEN YOU'RE DONE
|
|
|
|
**Ping Michael in Discord:**
|
|
|
|
"@Frostystyle Wanderer permissions are configured! Fire/Frost paths are now visible but locked. Ready for testing."
|
|
|
|
**Or just let him know in #staff-lounge that it's done!**
|
|
|
|
---
|
|
|
|
## 📝 NOTES
|
|
|
|
- These are CATEGORY-level permissions that apply to all channels in that category
|
|
- Individual channels inherit from their parent category (that's the "sync" feature)
|
|
- If you need a channel to behave differently, you can override at the channel level
|
|
- @everyone role permissions apply to EVERYONE including Wanderer (so be careful with those)
|
|
|
|
---
|
|
|
|
**Questions?** Ask Michael or Meg in #staff-lounge!
|
|
|
|
**Estimated time:** 10-15 minutes
|
|
|
|
---
|
|
|
|
## 🔄 THE COMPLETE SUBSCRIPTION FLOW
|
|
|
|
Once you configure Wanderer permissions, here's how the entire system works together:
|
|
|
|
### **Step 1: Person Joins Discord (Free)**
|
|
```
|
|
New person joins Firefrost Gaming
|
|
↓
|
|
Carl-bot detects join event
|
|
↓
|
|
Carl-bot assigns "Wanderer" role
|
|
↓
|
|
Person can now access:
|
|
✅ Welcome & Info
|
|
✅ Community Hub (can chat!)
|
|
✅ Support
|
|
🔒 Can SEE Fire/Frost paths but locked
|
|
```
|
|
|
|
### **Step 2: Wanderer Browses Discord**
|
|
```
|
|
Free user explores Discord
|
|
↓
|
|
Chats in #general-chat, posts memes
|
|
↓
|
|
Sees 🔒 fire-general, 🔒 frost-strategy
|
|
↓
|
|
Clicks on locked channel → "You need a subscription"
|
|
↓
|
|
Curiosity builds... what are they talking about?
|
|
```
|
|
|
|
### **Step 3: Wanderer Tries to Join Minecraft**
|
|
```
|
|
Tries to join a Firefrost Minecraft server
|
|
↓
|
|
Server checks LuckPerms group
|
|
↓
|
|
LuckPerms: "You are in group 'wanderer' - no server access"
|
|
↓
|
|
Kicked from server with message:
|
|
"Subscribe at firefrostgaming.com to play!"
|
|
```
|
|
|
|
### **Step 4: Conversion - They Subscribe!**
|
|
```
|
|
User goes to firefrostgaming.com
|
|
↓
|
|
Clicks "Subscribe" / "Join Now"
|
|
↓
|
|
Chooses tier: Awakened ($1), Elemental ($5), etc.
|
|
↓
|
|
Chooses path: Fire or Frost
|
|
↓
|
|
Pays via Paymenter
|
|
↓
|
|
Paymenter sends webhook to The Arbiter bot
|
|
```
|
|
|
|
### **Step 5: Automatic Role Assignment**
|
|
```
|
|
The Arbiter receives webhook from Paymenter
|
|
↓
|
|
Webhook says: "User X subscribed to Fire Elemental"
|
|
↓
|
|
The Arbiter assigns "Fire Elemental" Discord role
|
|
↓
|
|
User KEEPS Wanderer role + GAINS Fire Elemental role
|
|
↓
|
|
Discord permissions update instantly
|
|
```
|
|
|
|
### **Step 6: User Gets Full Access**
|
|
```
|
|
User refreshes Discord
|
|
↓
|
|
🔒 Fire Path channels are now UNLOCKED!
|
|
↓
|
|
Can access: fire-general, fire-strategy, fire-events, fire-leaderboards
|
|
↓
|
|
LuckPerms syncs Discord role → Minecraft group
|
|
↓
|
|
Can now join Minecraft servers and PLAY!
|
|
```
|
|
|
|
---
|
|
|
|
## 💡 WHY WE USE MULTIPLE SYSTEMS
|
|
|
|
You might wonder: "Why Carl-bot AND The Arbiter? Why not just one bot?"
|
|
|
|
**Here's why:**
|
|
|
|
### **Carl-bot (Free Tier Management)**
|
|
- **Job:** Assign Wanderer when someone joins Discord
|
|
- **Trigger:** Discord join event
|
|
- **Good at:** Auto-role on join (this is what Carl-bot is built for)
|
|
- **Simple, reliable, battle-tested by millions of servers**
|
|
|
|
### **The Arbiter (Paid Tier Management)**
|
|
- **Job:** Assign subscription tiers based on Paymenter payments
|
|
- **Trigger:** Paymenter webhook (subscription created/cancelled/expired)
|
|
- **Good at:** Integration between payment system and Discord
|
|
- **Custom-built for Firefrost's specific needs**
|
|
|
|
**Separation of Concerns:**
|
|
- Carl-bot handles Discord joins → Wanderer
|
|
- The Arbiter handles Paymenter payments → Paid tiers
|
|
- Each bot does ONE thing really well
|
|
- Easier to maintain, troubleshoot, and update
|
|
|
|
**Could we make The Arbiter handle both?** Yes, but:
|
|
- Would require rewriting The Arbiter (2-3 hours)
|
|
- Mixing two different triggers (join events + webhooks)
|
|
- More complex code = more bugs
|
|
- Carl-bot is already proven and works perfectly
|
|
|
|
**Engineering principle:** Use the right tool for the job. Carl-bot IS the right tool for auto-roles on join.
|
|
|
|
---
|
|
|
|
## 🎨 THE BUSINESS STRATEGY
|
|
|
|
**Wanderer tier is a marketing funnel:**
|
|
|
|
### **Conversion Funnel:**
|
|
```
|
|
1000 people join Discord (Wanderer - Free)
|
|
↓
|
|
800 chat in Community Hub (engaged users)
|
|
↓
|
|
400 try to join Minecraft servers (want to play)
|
|
↓
|
|
100-200 subscribe (10-20% conversion rate)
|
|
↓
|
|
Revenue: $100-2000/month from this cohort
|
|
```
|
|
|
|
**What makes them convert?**
|
|
1. ✅ **Community first** - They get to know people before paying
|
|
2. 🔒 **Visible FOMO** - They see what they're missing
|
|
3. 🎮 **Server access** - They want to actually PLAY
|
|
4. 💰 **Low barrier** - $1/month Awakened tier = impulse buy
|
|
|
|
**Why this works better than paid-only:**
|
|
- No free tier = No one joins (too big commitment)
|
|
- Free tier with nothing = No conversion (nothing to upgrade to)
|
|
- Free tier with VISIBLE locked content = Perfect FOMO driver
|
|
|
|
---
|
|
|
|
## 📊 SUCCESS METRICS
|
|
|
|
After you configure Wanderer permissions, we can track:
|
|
|
|
**Discord Analytics:**
|
|
- How many Wanderers join per week
|
|
- How many Wanderers engage in Community Hub
|
|
- How many click on locked Fire/Frost channels (shows interest)
|
|
|
|
**Conversion Metrics:**
|
|
- Wanderer → Awakened conversion rate (target: 10-20%)
|
|
- Average time from join to first subscription
|
|
- Which path converts better (Fire vs Frost)
|
|
|
|
**This data helps us optimize:**
|
|
- Channel naming (make locked content more enticing)
|
|
- Welcome messages (guide Wanderers toward subscription)
|
|
- Pricing strategy (are tiers priced right?)
|
|
|
|
---
|
|
|
|
## 🔮 FUTURE ENHANCEMENTS
|
|
|
|
**Once Wanderer permissions are working, we can add:**
|
|
|
|
1. **Welcome DM from Carl-bot**
|
|
- "Welcome to Firefrost Gaming! You're a Wanderer (free tier)..."
|
|
- "Want to unlock Fire/Frost paths? Subscribe at..."
|
|
|
|
2. **Custom lock messages**
|
|
- Instead of generic Discord lock icon
|
|
- Custom message: "🔥 Fire Elemental+ required. Subscribe to unlock!"
|
|
|
|
3. **Timed trials**
|
|
- Give new Wanderers 24-hour trial access to Fire/Frost
|
|
- After 24 hours, lock it again → stronger FOMO
|
|
|
|
4. **Engagement triggers**
|
|
- If Wanderer chats 10+ times in Community Hub
|
|
- Send DM: "You're active! Want to unlock more channels? $1/month"
|
|
|
|
**But first:** Get the foundation working. These are optimizations for later.
|
|
|
|
---
|
|
|
|
**Fire + Frost + Foundation = Where Love Builds Legacy** 💙🔥❄️
|
|
|
|
**Created by:** Chronicler #44
|
|
**Date:** March 28, 2026
|
|
|
|
---
|
|
|
|
## 📞 NEED HELP?
|
|
|
|
**If you get stuck:**
|
|
- Ask in #staff-lounge
|
|
- Ping @Frostystyle (Michael) or @Gingerfury (Meg)
|
|
- Or just do your best - you can always test with "View Server As Role"
|
|
|
|
**You got this, Holly!** 💪
|
|
|
|
The whole setup is designed to be user-friendly. Worst case, if something doesn't work, we can fix it together. The most important thing is getting Fire/Frost paths VISIBLE to Wanderers.
|
|
|
|
**That's the FOMO magic.** ✨
|