source: Klonkt/src/views/pages/my-site.ejs@ 640b39c

main
Last change on this file since 640b39c was 8cb1dc7, checked in by roboburr <roboburr@…>, 3 months ago

hub: artist self-management — owner manages their own subsite (posts/appearance/comments)

A site owner (member) now gets a "My PrutFolio" dashboard and can manage their
OWN site; cross-site access is restricted.

  • auth.js: requireSiteManager (owner of res.locals.site or god) + requireSiteManagerBySlug (owner of :slug or god).
  • admin.js: /admin role-aware -> god=hub management, owner=my-site dashboard, member without site=403.
  • admin-sites.js: /:slug/edit + /save owner-or-god (was god-only); upload-photo requireAuth. list/new/create/delete remain god-only.
  • admin-comments.js: requireSiteManager + redirects/form actions via siteUrlBase so the artist context (/user/<slug>/admin/comments) is correct.
  • render.js: userOwnsSite flag; topnav + overview show "Admin" for owners; topnav "New post" uses siteUrlBase.
  • pages/my-site.ejs: artist dashboard.

Co-Authored-By: Claude <noreply@…>

  • Property mode set to 100644
File size: 2.0 KB
RevLine 
[8cb1dc7]1<div class="container admin-page">
2 <p><a href="/" class="btn">&larr; Overzicht</a></p>
3 <h1>Mijn PrutFolio</h1>
4 <p class="admin-tagline"><%= mySite.title %></p>
5
6 <nav class="admin-quick-links" aria-label="Beheer-snelkoppelingen">
7 <a href="/user/<%= mySite.slug %>/posts/new" class="btn">✍️ Nieuwe post</a>
8 <a href="/admin/sites/<%= mySite.slug %>/edit" class="btn">🎨 Uiterlijk</a>
9 <a href="/user/<%= mySite.slug %>/admin/comments" class="btn">💬 Reacties</a>
10 <a href="/user/<%= mySite.slug %>" class="btn">👁️ Bekijk mijn site</a>
11 <a href="/account" class="btn">👤 Account</a>
12 </nav>
13
14 <div class="admin-stats">
15 <div class="stat-card"><div class="stat-num"><%= mine.posts %></div><div class="stat-label">Posts</div></div>
16 <div class="stat-card"><div class="stat-num"><%= mine.published %></div><div class="stat-label">Gepubliceerd</div></div>
17 </div>
18</div>
19
20<style>
21.admin-page { max-width: 1000px; margin: 3rem auto; padding: 0 1rem; }
22.admin-page h1 { font-family: var(--font-display, serif); font-size: 2rem; margin: 0 0 0.25rem; }
23.admin-tagline { color: var(--ink-muted); margin: 0 0 2rem; }
24.admin-quick-links {
25 display: grid; grid-template-columns: repeat(auto-fit, minmax(150px, 1fr));
26 gap: 0.5rem; margin: 0 0 1.5rem; padding: 0;
27}
28.admin-quick-links .btn { justify-content: center; padding: 0.7rem 0.9rem; font-weight: 600; text-align: center; }
29.admin-quick-links .btn:hover { background: color-mix(in srgb, var(--accent) 8%, var(--paper-2)); border-color: var(--accent); }
30.admin-stats { display: grid; grid-template-columns: repeat(auto-fit, minmax(140px, 1fr)); gap: 0.75rem; }
31.stat-card { background: var(--paper-2); border: 1px solid var(--rule); border-radius: 8px; padding: 1rem 1.25rem; text-align: center; }
32.stat-num { font-size: 2rem; font-weight: 700; color: var(--accent); line-height: 1; font-family: var(--font-display, serif); }
33.stat-label { color: var(--ink-muted); font-size: 0.85rem; text-transform: uppercase; letter-spacing: 0.05em; margin-top: 0.25rem; }
34</style>
Note: See TracBrowser for help on using the repository browser.