🔒 Access Required

You must be a League Staff member or Admin to access this page.

← Back to Profile

⚙️ League Staff Admin

Manage schedules, banners, notifications, and roster imports

← Back to Profile 🏠 Home
📅 League Schedule Editor
⚠️

Manual Edit Protection: When you save changes here, the game will be marked as "manually edited". This prevents the weekly update script from overwriting your changes to date, time, or team assignments. Score updates will still be allowed.

Select a season to load games
📋

Select a game from the list to edit its schedule

📢 Banner Messages Manager

Manage the scrolling banner messages that appear on the home page. Messages are sorted by priority (lower numbers appear first).

Loading banners...
📢

Select a banner to edit or click "Add Banner" to create a new one

✏️ Compose Notification
0/65 characters
0/240 characters
Loading teams...
0 recipients
👑 Targeting All Captains
📋 Recent Announcements
Loading...
🗑️ Admin Cleanup Tools

These tools allow you to bulk delete notifications from all users. Use with caution!

📱 Preview
⚾
Mountainside Aces
Notification Title
Your message will appear here...
🧪 Test Your Setup

Send a test notification to yourself to verify push notifications are working.

📋 Roster Import & Assignment

Upload the rec dept signup list. Each player will be assigned to a team (continuing) or the draft pool (redraft/new). Players on disbanded teams default to the draft pool.

⚠️ Disbanded Teams This Season
Toggle any team that is being dissolved — their returning players will automatically default to the Draft Pool.
Loading teams...
📤
Drop Excel/CSV file here
or click to browse • Supports .xlsx, .xls, .csv
Auto-detected: we'll look for columns named "Name", "Player", "Full Name", etc.
Preview: 0 names found
📊 Roster Assignment
Compared against: Loading...
⚠️ Warnings
⚠️ Not Signed Up (Active in last 2 seasons)

These players were active but aren't in the signup list:

Uploaded Name Matched Player Last Team Stats Destination
📤 Push to Offseason Rosters
⚠️ 0 players still need a destination. Please assign them first.
📜 Audit Log
[Waiting] No actions yet
✉️ Compose Mass Email
Loading teams...
— recipients estimated
Recipients (0):
Replies from members go to this address.
0/150 characters
Tip: Keep it simple — plain paragraphs render best across all email clients.
📧 Preview

📋 Email Campaign History
Loading history...
⚙️ One-Time Setup
1
Create a Resend Account
Go to resend.com — free tier: 100 emails/day, 3,000/month. More than enough.
2
Verify Your Sending Domain
In Resend, add acessoftballreference.com and add the DNS records. This ensures deliverability.
3
Store API Key in Firebase
firebase functions:secrets:set RESEND_API_KEY
Paste your Resend API key when prompted. Never touches the frontend.
4
Deploy the Cloud Function
Deploy sendMassEmail — this page calls it automatically on send.
⏳ Function status unknown
💡 Best Practices
✅ Subject lines under 60 chars for mobile
✅ Always explain why you're emailing
✅ Include a reply-to so members can respond
✅ ~165 emails is well under Resend's free limit
⚠️ Avoid ALL CAPS — spam filters flag it
⚠️ Max once/week to avoid unsubscribes
🗑️ Notification Cleanup