Changeset 029f047 in Klonkt


Ignore:
Timestamp:
06/16/2026 10:30:37 AM (3 months ago)
Author:
roboburr <roboburr@…>
Branches:
main
Children:
e9229f2
Parents:
d549549
Message:

Phase 2: Hub mode behind premium gate (premiumUnlocked)

Switching to Hub requires premium to be unlocked. UI: Hub radio locked +
"premium" label when premium is on without Patreon. Server: POST rejects
→hub if not unlocked (staying on hub is always allowed, no lock-in).
Premium off (default) = freely selectable, demos unchanged.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@…>

Location:
src
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • src/routes/admin-settings.js

    rd549549 r029f047  
    2222import { requireGod } from '../middleware/auth.js';
    2323import { getTenancy, setTenancy, getSetting, setSetting } from '../services/SettingsService.js';
    24 import { entitlementStatus } from '../services/PatreonService.js';
     24import { entitlementStatus, premiumUnlocked } from '../services/PatreonService.js';
    2525
    2626const router = express.Router();
     
    9090
    9191    if (typeof req.body.tenancy !== 'undefined') {
     92      // Hub-modus is een premium-feature: alleen naar hub schakelen als premium
     93      // ontgrendeld is (premium-laag uit = vrij; aan = Patreon vereist). Al-hub
     94      // blijven mag altijd, zodat een instance nooit vastloopt.
     95      if (req.body.tenancy === 'hub' && !premiumUnlocked() && getTenancy() !== 'hub') {
     96        return res.redirect('/admin/settings?error=' + encodeURIComponent('Hub-modus is een premium-functie — koppel Patreon in Beheer → Instellingen.'));
     97      }
    9298      setTenancy(req.body.tenancy); // valideert naar solo | hub | circle
    9399    }
  • src/views/pages/admin-settings.ejs

    rd549549 r029f047  
    2121        </span>
    2222      </label>
     23      <% var _hubLocked = (typeof premiumUnlocked !== 'undefined') && !premiumUnlocked && tenancy !== 'hub'; %>
    2324      <label class="set-opt">
    24         <input type="radio" name="tenancy" value="hub" <%= tenancy === 'hub' ? 'checked' : '' %>>
     25        <input type="radio" name="tenancy" value="hub" <%= tenancy === 'hub' ? 'checked' : '' %> <%= _hubLocked ? 'disabled' : '' %>>
    2526        <span>
    2627          <strong>Hub</strong> — bedrijfssite met <code>/user/</code>.
    27           <small>Jij (admin) wijst gebruikers een eigen Klonkt Hub toe. Gesloten cirkel: geen open registratie.</small>
     28          <% if (_hubLocked) { %><span style="display:inline-block;font-size:.7rem;font-weight:700;color:var(--accent);border:1px solid var(--accent);border-radius:999px;padding:.05rem .45rem;margin-left:.3rem;vertical-align:1px;">🔒 premium</span><% } %>
     29          <small>Jij (admin) wijst gebruikers een eigen Klonkt Hub toe. Gesloten cirkel: geen open registratie.<% if (_hubLocked) { %> <em>Vereist premium — koppel Patreon in deze pagina.</em><% } %></small>
    2830        </span>
    2931      </label>
Note: See TracChangeset for help on using the changeset viewer.