A beautiful player support inbox system for game servers, built with vanilla HTML/CSS/JS and Supabase.
- 📬 Message Submission - Players can submit support requests
- 📥 Inbox Checking - Players can check their messages and replies
- 🔐 Admin Dashboard - Admin can view, reply to, and manage messages
- 🔔 Telegram Notifications - Get notified of new messages
- 📊 Statistics Dashboard - Track message stats
- Go to Supabase and create a new project
- Open SQL Editor and run the following:
CREATE TABLE IF NOT EXISTS messages (
id UUID DEFAULT gen_random_uuid() PRIMARY KEY,
player_name TEXT NOT NULL,
uid TEXT NOT NULL,
message TEXT NOT NULL,
contact_method TEXT DEFAULT '',
sender_type TEXT DEFAULT 'web',
status TEXT DEFAULT 'pending' CHECK (status IN ('pending', 'replied', 'resolved')),
reply TEXT DEFAULT '',
replied_by TEXT DEFAULT '',
replied_at TIMESTAMPTZ,
created_at TIMESTAMPTZ DEFAULT NOW()
);
CREATE INDEX IF NOT EXISTS idx_messages_uid ON messages(uid);
CREATE INDEX IF NOT EXISTS idx_messages_status ON messages(status);
CREATE INDEX IF NOT EXISTS idx_messages_created_at ON messages(created_at DESC);
ALTER TABLE messages DISABLE ROW LEVEL SECURITY;- Fork or push this repo to GitHub
- Go to Vercel and import the project
- Add these Environment Variables in Vercel Settings:
| Variable | Value |
|---|---|
SUPABASE_URL |
Your Supabase project URL (e.g., https://xxxxx.supabase.co) |
SUPABASE_SERVICE_KEY |
Your Supabase service role key |
ADMIN_TOKEN |
Your admin password (change this!) |
TELEGRAM_BOT_TOKEN |
(Optional) Telegram bot token |
TELEGRAM_ADMIN_ID |
(Optional) Your Telegram chat ID |
- Go to Supabase Dashboard → Project Settings → API
- Find the
service_rolesecret key (not theanonkey) - Copy the Project URL and service_role key
Click Deploy in Vercel!
- Check if
SUPABASE_URLandSUPABASE_SERVICE_KEYare set in Vercel - Verify the
messagestable exists in Supabase - Check Vercel Runtime Logs for errors
- Make sure you're using the correct
ADMIN_TOKEN - Check browser console for errors
- Try logging out and logging back in
Test the API health endpoint:
curl -X POST https://your-domain.vercel.app/api \
-H "Content-Type: application/json" \
-d '{"action":"ping"}'├── api/
│ └── index.js # API endpoints
├── public/
│ ├── index.html # Landing page
│ ├── index2.html # Animated mascot page
│ ├── form.html # Submit message form
│ ├── inbox.html # Check messages page
│ └── admin.html # Admin dashboard
├── vercel.json # Vercel config
└── SUPABASE_SETUP.sql # Database schema
| Action | Description | Auth |
|---|---|---|
submit |
Submit a new message | None |
get_messages_by_uid |
Get messages by UID | None |
get_messages |
Get all messages | Admin |
reply |
Reply to a message | Admin |
resolve |
Mark message resolved | Admin |
get_stats |
Get message statistics | Admin |
ping |
Health check | None |
The default password is: akasa-admin-2026-secure
Edit the HTML files to change:
- Title and descriptions
- Colors (CSS variables in
:root) - Mascot name "Aquilonia"
- Contact info
To add screenshot uploads, you would need:
- Enable Supabase Storage
- Upload files to storage
- Save URLs in the message
MIT - Free to use and modify!