RealmCraft FREE: Minecraft Server Website
A complete, free starting point for your Minecraft server website with a live backend.
Five public pages, a working vote system, live server status, admin panel, and a single config file to customise things.
Overview
This is a free, open-source template for your Minecraft server website. It's not a finished product, it's a polished starting point you customise and build on. Provided as-is. The code is clean, well-documented and beginner-friendly.
An application, a Node.js backend serves the entire site, pings your Minecraft server for live status, tracks player vote streaks, manages rewards and exposes a REST API your plugins can call. The frontend pulls everything from that API on load, so editing one JSON file updates every page simultaneously.
Pages Included
▪ Home — Live Server Status Widget
The hero section has a real-time status widget that shows your server's live online/offline state, current player count, server capacity, version, and how many votes have been cast today. It pings your server through mcsrvstat.us every 30 seconds, with silent fallback if the server is temporarily unreachable. No API key required.
▪ Play — Game Mode Showcase
Four full-width alternating sections, each with a unique CSS atmospheric background, live player count pulled from config, stats grid, feature list, and a connect button. Edit config.json to swap in your actual game modes — no HTML changes needed.
▪ Store — Ranks, Crates, Coins
A complete storefront UI with a username input gate, four rank tiers (Wanderer free through Legend), crate key cards, and coin bundle packages. Validates the username before any purchase action. Wire the buy buttons to your Tebex checkout URLs — that's all it takes to make it live.
▪ Vote — Full Tracking System
The flagship page. Players type their username to load a live profile card showing streak, lifetime votes, reward progress bar, and pending rewards. Vote buttons call the real backend API — votes are recorded, streaks updated, rewards earned. A global vote party progress bar counts toward a community milestone. Leaderboard refreshes every 30 seconds.
▪ Forums — Community Hub
Category groups with post counts, a global notice banner, sidebar with recent threads, online member chips, and forum stats. Designed as a visual hub — wire the links to your forum platform (XenForo, phpBB, Discourse) or use it as a directory pointing to Discord.
▪ Admin Panel — /admin.html
Password-protected dashboard. Overview stats (votes today, weekly, active players, pending rewards, longest streak). Full player table with per-player reset buttons. Vote simulator for testing reward flows. Live announcement editor — type a message, pick a style (info / warning / success), save, and it appears on every page immediately with no server restart needed.
Technical Specs
| Layer | Technology |
| Backend | Node.js 18+ · Express |
| Frontend | Pure HTML · CSS · Vanilla JS |
| Database | JSON flat file — zero setup |
| MC Status | Node built-in https → mcsrvstat.us |
| Fonts | Syne Mono · Sora · JetBrains Mono |
| npm packages | express · cors (2 total) |
Open the ZIP, run npm install && npm start, and the site is live at localhost.
API Endpoints
Public
Code:
GET /api/health — Server health check
GET /api/config — Full public config (drives the entire frontend)
GET /api/status — Live Minecraft server ping (cached 30s)
GET /api/server — Vote stats: today, weekly, top voter
GET /api/player/:username — Player profile (auto-creates new players)
POST /api/vote — Cast a vote, earn rewards, update streak
POST /api/claim-reward — Claim a pending in-game reward
GET /api/leaderboard — Top voters ranked
GET /api/vote-sites — Sites with per-player cooldown status
POST /api/minecraft/vote — Plugin webhook (NuVotifier / Skript)
Admin (requires X-Admin-Password header)
Code:
GET /api/admin/stats — Aggregated dashboard stats
GET /api/admin/players — All player records
POST /api/admin/reset-player — Reset all stats for a player
POST /api/admin/reset-streak — Reset streak only
POST /api/admin/simulate-vote — Trigger a vote for testing
POST /api/admin/update-announcement — Edit the announcement bar live
POST /api/admin/update-messages — Edit the rotating flavor messages
Vote System Features
- Streak tracking — 48-hour window with calendar-day logic. Miss a day and the streak resets to 1.
- Weekly reset — weeklyVotes automatically zeros on ISO week boundary. No cron job needed.
- Per-site cooldown — each site tracked separately. Vote on Planet Minecraft and still hit TopG independently.
- Configurable rewards — vote interval rewards (every N votes) and streak milestone rewards, both fully defined in config.json.
- 10 achievements — Common through Legendary, computed live from player state. Unlock conditions: votes>=N, streak>=N, or allSites.
- Level system — 10 levels from New Adventurer to Living Legend, driven by lifetime vote count.
- Pending rewards — tracks how many rewards a player has earned vs claimed, with a one-click claim button.
Minecraft Plugin Integration
The webhook endpoint accepts POST requests from any vote plugin:
JSON:
POST /api/minecraft/vote
Content-Type: application/json
{ "player": "Steve", "site": "planetmc", "secret": "your-secret" }
Skript example:
Code:
on vote:
make a POST request to "http://your-api.com/api/minecraft/vote"
with header "Content-Type: application/json"
with body "{""player"":""%player%"",""site"":""planetmc"",""secret"":""YOUR_SECRET""}"
Supports NuVotifier listeners, VotingPlugin command triggers, and any HTTP-capable plugin or script. Optional webhook secret for security.
Configuration Preview
One file controls everything. No code edits needed for standard customisation.
JSON:
{
"server": {
"name": "YourServer",
"ip": "play.yourserver.net",
"discord": "https://discord.gg/yourserver"
},
"theme": {
"accentJade": "#00e5a0",
"accentAmber": "#ff8c00"
},
"voteSites": [
{ "id": "planetmc", "name": "Planet Minecraft", "reward": "Vote Key + 1,000 Coins", "cooldownHours": 24 }
],
"rewards": {
"voteInterval": 10,
"streakRewards": [
{ "streak": 7, "name": "Elite Crate", "rarity": "Uncommon" }
]
},
"announcement": {
"enabled": true,
"text": " Season 5 is live! Vote now for bonus rewards.",
"type": "info"
}
}
Deployment — ~15 Minutes
Backend — Render (free tier)
[OL]
[*]Push the project to GitHub
[*]Render → New Web Service → connect your repo
[*]Build command: npm install
[*]Start command: node backend/server.js
[*]Your API is live — copy the URL
[/OL]
Frontend — Cloudflare Pages (free)
[OL]
[*]Paste your Render URL into public/js/api.js (one line, clearly marked)
[*]Cloudflare Pages → New project → output directory: public
[*]Deploy → live globally with HTTPS and CDN
[/OL]
Self-Hosted (VPS / Pterodactyl)
Bash:
npm install
PORT=80 node backend/server.js
# For production: pm2 start backend/server.js --name realmcraft
Full step-by-step guide is inside the README.
What's Not Included
- No real payment processing — the Store page is a UI shell. Wire the buy buttons to your Tebex checkout URLs.
- No forum backend — the Forums page is a visual hub. Point the links to your actual platform (Discord, XenForo, etc.).
- No player accounts — vote tracking uses Minecraft username input, not a login system.
- No WebSocket real-time — the leaderboard polls every 30 seconds via setInterval.
These are straightforward to add if you need them. The codebase is structured to make extension easy.
Requirements
- Node.js 18 or newer
- Any Node.js hosting — Render, Railway, VPS, Pterodactyl
- A Minecraft server with a public IP or domain (for the live status widget)
License
Free to use. Deploy it on your own server and customize it to your content.
If you build something cool with it, a review or a tag would be appreciated, it helps me to build more resources like this.
