Pages Admin & Management

The settings / management hub that runs a page — opened by its owner or admin. Granular roles Owner · Admin · Editor, staff-only posting, basic insights free (deeper analytics a later paid tier), and a Channel slot reserved for R10. Extends the PP7/PP8 manage frames in pages-platform.html. Mockup for design sign-off.

‹ Journey index ‹ Pages platform M1 Manage hub M2 Roles & staff M3 Add / change role M4 Insights · basic M5 Transfer & delete M6 Edit identity · Decisions & contract
M1 · manage · hub

The management hub — everything lives here

The spine an admin/owner opens. A single settings list: Edit page (identity → M6), Roles & staff (→ M2), Who can post (shows "Staff only"), Insights (→ M4), a Channel slot reserved for R10 ("soon"), and the owner-only Transfer / Delete (→ M5), visually fenced. Reuses .mg-mode / .mg-set / .mg-srow / .mg-danger verbatim.

3:41
••••

Manage page

Owner
BJP
BJP · Amnour
You're the Owner · 3,240 followers · Vidhan Sabha unit
BJP
Post as the page…
Page
Edit page
Logo, brand colour, name, about, handle
Roles & staff
1 owner · 1 admin · 2 editors
Who can post
Staff only — owner, admins & editors
Insights
Followers, reach & engagement
Connect
Channel next · R10
Link a group-chat channel to this page
Notifications
Activity on this page
Owner only owner
Transfer ownership
Hand the page to an admin
Delete page
Permanent · followers & posts removed
Admins see everything above except the Owner-only zone (no transfer / delete). Editors don't see this hub at all — they only get the post-as-page shortcut.
M2 · roles & staff

Roles & staff — who runs this page

The people list with role chipsOwner · Admin · Editor. Per-person opens change-role / remove. A short legend explains each role's powers, and the "Add staff" CTA leads to M3. Owner row can't be removed here; ownership only moves via Transfer (M5).

3:41
••••

Roles & staff

Owner
Add staff
Give someone Admin or Editor access
Staff · 4
RS
Ravi Sharma Owner
You · created the page · @ravi.sharma
AK
Anil Kumar Admin
Can edit settings & manage editors · @anil.k
PM
Priya Mishra Editor
Can post as the page · @priya.m
SV
Suman Verma Editor
Can post as the page · @suman.v
What each role can do
Owner
Everything
Settings, manage all roles, transfer ownership, delete the page, post. One owner at a time.
Admin
Edit & manage editors
Change page settings, add/remove Editors, and post. Can't transfer or delete, can't promote to Admin.
Editor
Post only
Post as the page. No settings, no role changes, no access to this hub.
Only the Owner can add/remove Admins or promote to Admin. Admins can add/remove Editors. The Owner row has no ⋯ — ownership moves only via Transfer.
M3 · add staff · assign role

Add staff — pick a person, assign a role

Search a Nyburs user → confirm the pick → choose a role. As Owner you can set Admin or Editor; an Admin reaches this same screen but the Admin option is locked (only Owner promotes to Admin). One confirm grants access. Reuses the platform search-field + segmented choice patterns.

3:41
••••

Add staff

Owner
1 · Find the person
PM
Priya Mishra
@priya.m · Amnour · 8 mutual
2 · Choose their role
Admin admin
Edit settings, manage editors & post. Can't transfer or delete the page.
Editor
Post as the page only. No settings, no role changes.
As Owner you can grant either role. When an Admin opens this screen the Admin card is locked — they can add Editors only.
She'll get a notification and can post / manage straight away. You can change or remove her role any time from Roles & staff.
M4 · insights · basic

Insights — basic counts, free

The free tier shown in Manage: followers, post reach, engagement, plus a small 7-day trend. Below sits the paid hook — a gold "Deeper analytics" teaser (per-area breakdown, audience, the parent rollup leaderboard) marked as a future premium tier, not built. Reuses .mg-ins verbatim; the teaser borrows the platform's gold lock vocabulary.

3:41
••••

Insights

Owner
This week · free
Last 7 daysvs prev. week
3,240
Followers
21k
Post reach
1.9k
Engagement
MonTueWedThuFriSatSun
Counts only. New followers +112 this week · best post reached 6.4k.
More basics
New followers
This week
+112
Profile views
This week
4.1k
Posts published
This week
14
Premium · later
Deeper analytics premium
Coming as a paid tier — not enabled yet.
Reach & engagement per area unit (block · AC · PC)
Audience breakdown & follower growth curve
The parent rollup leaderboard (child pages ranked)
M5 · transfer · delete

Transfer ownership & delete — owner-only

The two destructive owner powers, each behind a confirm sheet. Transfer: pick an Admin to become the new Owner (you drop to Admin) — a warning explains it's a one-way handover. Delete: a type-to-confirm destructive sheet removes the page, followers & posts for good. Reuses .mg-danger + a scrim sheet on the same tokens.

3:41
••••

Transfer ownership

Owner
Hand the page to an admin
Only existing Admins can receive ownership. After transfer you become an Admin.
AK
Anil Kumar admin
@anil.k · selected to receive ownership
A one-way handover — confirm on the next step.
Or delete the page
Delete page
Permanent · 3,240 followers & 214 posts removed
Delete BJP · Amnour?
This can't be undone. The page, its 3,240 followers and 214 posts are removed for everyone. Tagged mentions of the page go dead.
Type DELETE to confirm
M6 · edit · identity

Edit page identity — inside the hub

The existing PP3/PP7 edit surface, opened from the hub: cover, logo, the brand-colour swatch, and pencils-in-place for name, handle (with a confirm on a transfer-style change of an existing page), and about. Place & level are fixed after creation (shown, locked). Reuses .mg-idcard / .mg-row / .mg-pen verbatim — the same component PP7/PP8 already use.

3:41
••••

Edit page

Owner
Name
BJP · Amnour
Handle
@bjp.amnour
About
Bharatiya Janata Party — Amnour Vidhan Sabha unit. Updates, programmes & karyakarta news.
Changing an established handle warns once (old @ stops resolving). Name/about save instantly.
Fixed after creation
Place & level
Amnour · Vidhan Sabha unit
Category
Political party
Edits go live the moment you save — no review step for owner/admin changes.

Decisions & how this works

The locked decisions this surface implements, plus a GraphQL contract sketch for the build. All dev-first; flag-gated until the place-affiliated-pages initiative lands.

Roles — Owner / Admin / Editor
Owner = everything (settings, manage all roles, transfer, delete, post). Admin = edit settings + manage Editors + post (no transfer/delete, can't promote to Admin). Editor = post-as-page only. One owner at a time; ownership moves only via Transfer.
Who can post — staff only
Staff-only posting (owner · admins · editors). No public contributor approval queue — followers read & react, they don't post to the page.
Insights — basic free, deep paid
Basic counts (followers, reach, engagement) are free in Manage. Deeper / per-area rollup analytics + the parent leaderboard are a later paid tier — teaser only, not built.
Channel slot — R10 next
A Channel row appears in the hub to link a group-chat channel to the page — marked "soon · R10". Shown now to reserve the slot; wired when R10 ships.
GraphQL contract sketch (build)
# ---- enums ----
enum PageRole { OWNER  ADMIN  EDITOR }
enum PagePostPolicy { STAFF_ONLY }   # no PUBLIC / no approval queue (locked)

# ---- types ----
type PageStaff { user: User!  role: PageRole!  addedBy: User  addedAt: DateTime! }
type PageInsightsBasic {   # free tier — counts only
  followers: Int!  newFollowers: Int!  postReach: Int!
  engagement: Int!  profileViews: Int!  postsPublished: Int!
  trend7d: [Int!]!   range: DateRange!
}   # deep/per-area rollup = separate PAID resolver, gated

# ---- queries (viewer-role-scoped) ----
pageManage(pageId: ID!): PageManageView!   # null/forbidden for EDITOR
pageStaff(pageId: ID!): [PageStaff!]!
pageInsightsBasic(pageId: ID!, range: DateRange): PageInsightsBasic!

# ---- mutations (server enforces role matrix) ----
addPageStaff(pageId: ID!, userId: ID!, role: PageRole!): PageStaff!
  # OWNER → ADMIN|EDITOR ; ADMIN → EDITOR only ; never OWNER
changePageStaffRole(pageId: ID!, userId: ID!, role: PageRole!): PageStaff!
removePageStaff(pageId: ID!, userId: ID!): Boolean!
setPagePostPolicy(pageId: ID!, policy: PagePostPolicy!): Page!  # STAFF_ONLY
updatePageIdentity(pageId: ID!, input: PageIdentityInput!): Page!
  # name·about·handle·logo·brandColor·cover ; place/level/category immutable
transferPageOwnership(pageId: ID!, toUserId: ID!): Page!
  # OWNER only ; target must be an existing ADMIN ; caller → ADMIN
deletePage(pageId: ID!, confirm: String!): Boolean!  # OWNER only ; confirm == "DELETE"

# ---- R10 (next, not built) ----
linkPageChannel(pageId: ID!, channelId: ID!): Page!   # soon

# ---- enforcement (resolver guards, NOT UI-only) ----
# · post-as-page: writer.role IN (OWNER,ADMIN,EDITOR) AND policy==STAFF_ONLY
# · settings/role mutations: role IN (OWNER,ADMIN) ; addAdmin/promote: OWNER
# · transfer/delete: OWNER ; every mutation re-checks server-side