GD FEDL is a Geometry Dash list site built as a multi-page static frontend with a lightweight Node.js backend. It supports live list data, run submissions, admin moderation, account login, synced user state, community posts, bug reports, and direct messages.
index.htmllanding pagelists.htmlranked list browser with search, filters, and video playbackrun.htmlrun submission pageadmelist.htmladmin page for list editing and run moderationplayers.htmlplayer progress trackerguess.htmlrank guessing gameroulette.htmldemon roulette pickerrules.htmlrules pagesignup.htmlandlogin.htmlaccount pagespost.htmlandmessages.htmlcommunity featurescontact.htmlbug report / contact pageerrors.htmlplus standalone HTTP-style error pages
- Plain HTML, CSS, and JavaScript
- No build step for the main site
- Node.js
httpserver - Server-Sent Events for live updates
- Browser
localStorage/sessionStorage - JSON and text files for simple local persistence
app.jsshared frontend logicstyles.cssshared site stylingdata.txtstatic fallback list datalevel-ids.txtoptional local level ID lookup data for rouletteserver/server.jsbackend for list data, auth, posts, messages, bug reports, and run submissionsserver/README.mdbackend API detailsserver/LINUX_SERVICE_SETUP.txtexamplesystemdsetupstart-server.commandmacOS launcher for the Node server
The main list format is one entry per line:
category|position|title|urlExample:
new|1|Flamewall|https://youtu.be/x4Io4zkWVRwThe server also stores runtime data in server/:
data.txtlive list sourceruns.jsonsubmitted runsusers.jsonregistered accountssessions.jsonlogin sessionsuserdata.jsonsynced user stateposts.jsoncommunity postsbugreports.jsonbug reportsmessages.jsonprivate messages
Most JSON files are created automatically when first needed. server/data.txt is the one file you should create yourself before first run.
GET /api/listandPUT /api/listfor live list dataGET /api/runs,POST /api/runs,PUT /api/runs/:id,DELETE /api/runs/:idPOST /api/runs/bulk-approvefor admin moderationPOST /api/auth/signup,POST /api/auth/login,POST /api/auth/logout,GET /api/auth/meGET /api/user/state,PUT /api/user/statefor synced client stateGET /api/posts,POST /api/posts, like/comment routes, and post deletionGET /api/bugreports,POST /api/bugreports, admin update/delete routesGET /api/messages,POST /api/messages, conversation lookup, and user searchGET /eventsfor SSE updates- Pointercrate and AREDL import routes for admins
See server/README.md for the fuller API reference.
- Make sure Node.js is installed.
- Create the live list data file if it does not exist yet:
printf "new|1|Example Level|https://youtu.be/example\n" > server/data.txt- Start the server:
node server/server.js- Open the site at:
http://127.0.0.1:8090/fedl/To expose it on your local network:
HOST=0.0.0.0 PORT=8090 node server/server.jsOn macOS you can also run:
./start-server.commandHOSTserver bind host, default127.0.0.1PORTserver port, default8090ADMIN_PASSWORDadmin password for protected write routesAREDL_ACCESS_TOKENbearer token for AREDL importsAREDL_API_KEYAPI key for AREDL imports
Example:
ADMIN_PASSWORD=changeme HOST=0.0.0.0 PORT=8090 node server/server.jsapp.js and onepage.js both use a hardcoded live server base:
https://server.fedl.site/fedlThat means:
- the frontend will try the remote live server first
- if the live server probe fails, the app redirects to
offlineindex.html - if you want local development against your own server, update
TESTING_MODEorliveServerBaseinapp.jsandonepage.js
players.htmlstores local player progress in the browser, with optional server sync when signed in- admin-protected routes use HTTP Basic auth
- account auth uses bearer tokens from the backend
roulette.htmlcan uselevel-ids.txtbefore falling back to external lookups- the backend serves the repo root as static files under the
/fedlbase path
For systemd setup notes, see server/LINUX_SERVICE_SETUP.txt.
See LICENSE.