COILED ALTAR — FREE HOSTING WITH DISCORD SIGN-IN Activated on 18 October 2026 at https://coiled-altar.pages.dev/. The Coiled Altar Free Supabase project is in EU Frankfurt. Real Discord sign-in and shared assignment persistence across reloads passed. See DEPLOYMENT.txt in the source folder for current verification details. The steps below also describe how to recreate the setup. 1. Sign in to Cloudflare and Supabase, or create their free accounts yourself. 2. In Supabase, create a NEW Free project. Choose an EU region if most raiders are in Europe. Keep its database password private. 3. Open its SQL Editor. For a NEW project run supabase/001_shared_plans.sql ONCE, then supabase/002_character_history.sql. For the existing live project both are already installed; never rerun 001. The additive 002 upgrade adds account character choices and assignment history. 4. In Discord Developer Portal, create a new application for this planner. In Supabase Authentication > Sign In / Providers > Discord, copy the callback URL. Add that URL to the application's OAuth2 redirects. Enter the Discord Client ID and Client Secret into the Supabase Discord provider settings and enable it. The Discord secret belongs only in Supabase, never in this website or chat. 5. Copy config.example.json to config.local.json. Fill ONLY the Supabase Project URL and publishable key (or legacy anon key). Never use a secret/service_role key. Run npm ci, then npm run build. Existing local board changes should be rebuilt before this build. 6. In Cloudflare, create a Pages Direct Upload project and upload the CONTENTS of dist/. Use the generated HTTPS *.pages.dev address; buying a domain is unnecessary. This is a static deployment with no paid Worker or Functions required. 7. In Supabase Authentication > URL Configuration, set Site URL to that exact Pages origin. Add that origin and http://127.0.0.1:8788/ as allowed redirect URLs. The Discord callback remains the Supabase callback, not the Pages URL. 8. Open the deployed site. Sign in with Discord. Create a shared plan using your local JSON backup, or begin with the clearly labeled sample roster and import real names. 9. As owner, click Share. Viewer links open the board read-only; Editor links permit assignment changes. Recipients sign in with Discord. Links expire in seven days; manage existing members and revoke invitation links from Share. SAVING AND PERMISSIONS Shared assignments save centrally. Each Discord account remembers its chosen character per plan, including on another device, and opens the personal view on return. My character changes that choice. Views and map phase remain local. History retains the latest 50 saved assignment versions per plan, beginning with the current board at activation. Editors see previous-assignee hints in assignment pickers; choosing one uses the normal assignment/swap and review flow. History records assigned duties, not attendance, completed pulls or performance. Other users receive changes on a five-second version check. Concurrent changes never silently overwrite: a conflict keeps your draft and offers Download my draft / Load current shared plan. Backups remain available. COSTS CHECKED AGAINST OFFICIAL SOURCES ON 18 OCTOBER 2026 Cloudflare Pages has a free plan. Supabase Free includes 50,000 monthly active users, 500 MB database, 5 GB egress and social OAuth. It pauses projects after one week of inactivity and does not include automatic database backups. Retain plan backups and restore a paused project before a raid. Ordinary small-guild usage is expected to fit; actual cost depends on usage and future provider limits. The site uses the free pages.dev hostname and Supabase Free project; no paid subscription or custom domain was added. https://developers.cloudflare.com/pages/platform/limits/ https://supabase.com/pricing https://supabase.com/docs/guides/auth/social-login/auth-discord VERIFICATION Passed on the live deployment: Discord OAuth callback, signed-in plan creation, assignment persistence after a full reload, restoration of the original assignment and connected player view. Hosted SQL confirmed RLS and denied direct table access. Collaboration with a second real account, invitation expiry/revocation and cross-device updates remain acceptance checks. Local PostgreSQL/browser tests cover those role and conflict paths with synthetic identities. LOCAL DEVELOPMENT From this folder: npm ci, npm run build, npm run preview. Open http://127.0.0.1:8788/. Before building after planner edits, rebuild the board with node ../../output/pug-coiled-mockups-2026-10-17/build-connected-overview.cjs. Run npm test for the store and PostgreSQL permission tests. The browser integration check is node tests/browser-check.mjs and requires the local preview plus the bundled Edge/Playwright paths recorded in that test. It uses isolated test identities and an in-memory database; it never changes your saved local plan or a hosted project. The current dist/ is configured for the live Supabase project with its public browser key. A build without config.local.json intentionally shows a setup screen and cannot sign in until configured.