Two portals, two audiences
WallSpace has two separate web apps. Know which one you're in.
Super Admin The platform console — admin.…
Used by your team (Level Up TechLabs) to run the whole platform: create customers, assign plans, issue device activation keys, publish app updates, and watch revenue & fleet health across every customer.
Customer The customer workspace — app.…
Used by each customer (e.g. a cafe or retail chain) to manage their own screens and content: upload media, build playlists, schedule campaigns, and control their player devices. Customers never see other customers' data.
The golden rule of navigation
The left sidebar only shows what your role is allowed to do — so two people can see different menus in the same portal. If a page is “missing,” it's usually a permission, not a bug.
How content actually reaches a screen
This is the single most important concept — and where almost every “nothing is playing” problem comes from. Content flows through six links. If any one breaks, the screen stays dark.
Media
Upload an image / video / PDF to the Media Library.
Playlist
Arrange media into an ordered loop.
Campaign
Schedule playlists onto displays for a date window — then Publish.
Display
The physical screen. Must be bound to a player. Campaigns target displays.
Player
The Android device driving the screen. Activated with a key; must be online.
Screen lights up
Player syncs the manifest and plays — as long as the subscription is active.
Player ≠ Display ≠ Group — the three things people mix up
Android Player = the media box/stick (has a heartbeat, online/offline). Display = the physical screen; a campaign targets displays, and each display must be bound to one player. Player Group = just a bundle of players for sending bulk commands (sync/restart) — it carries no content.
Super Admin Portal
The platform operations console. Sidebar order: Dashboard · Accounts · Organizations · CRM · Quotations · Plans · OTA · Audit · Notifications.
/ Dashboard read-only
A live overview of the whole platform — refreshes every 30s. No buttons; it's a glanceable console.
- Monthly recurring revenue (MRR + ARR + active subscriptions)
- Organizations — total, active, trial
- Players online — online / total, plus offline count
- Published campaigns and open leads
- Breakdown cards: subscriptions by status, today's fleet activity, campaign pipeline
/accounts Accounts
The customer + subscription hub: every customer with their plan, fleet and content stats in one list, with a management drawer per customer.
- Search / filter by name, code, or subscription status
- Manage (per customer) opens a drawer to: assign / change plan, renew, disable / enable the subscription, and view billing history subscription.*
- Customer name → opens the full Organization detail page
“Disable subscription” ≠ “Suspend organization”
Here you disable the subscription (stops content on their screens). On the Organizations page, “Suspend” disables the whole tenant (login + everything). Different actions, similar words.
/organizations Organizations
Create and manage customer tenants and run tenant-level lifecycle actions.
- New organization — fields: Org code (2–16 chars, permanent), Name, Contact email, Industry org.create
- Manage button / name link → Organization detail
- Suspend / Restore — disables or re-enables the entire customer tenant org.suspend
/organizations/:id Organization detail
Everything about one customer: their subscription & per-feature entitlements, and the device activation keys.
- Assign / Change plan, Renew until…, Suspend / Reactivate the subscription subscription.assign / renew / modify
- Entitlements table — override any feature for this one customer (a numeric limit, or enable/disable a capability) on top of the plan default
- Generate 1 / 5 / 10 / 25 keys — shown once, then only a hash is stored. This is where you make the WS-XXXX-XXXX-XXXX keys installers type into the player app activation.generate
- Revoke an unused key
/plans Plans & features
Author the catalogue of subscription templates (₹ pricing) and the underlying feature list. Assigning a plan copies its entitlements to the customer.
- New plan — Code, Name, Category, Billing cycle, Base price ₹, Description plan.create
- Edit plan — tune each feature: a toggle (on/off) or a number with an ∞ (unlimited) option; saves per feature plan.edit
- Manage features — the master feature catalogue; add new capabilities (module.name codes) feature.create
/quotations Quotations
Turn a sales lead into a priced quote, then convert an accepted quote into a real customer.
- New quote — pick a Lead + Plan, set quantity, discount, valid-until; shows a live estimated total quotation.create
- Move it along: Send → Accept / Reject → Convert to customer quotation.edit
/crm CRM · Leads
The sales pipeline — enquiries from the marketing site plus manual entries, tracked through statuses.
- Add lead — company, contact, industry, email, phone, expected devices, notes lead.create
- Manage a lead — update status & notes lead.edit
/ota OTA releases
Publish new Android Player app builds and roll them out across the fleet in stages.
- Publish release — version name/code, channel, APK key, SHA-256, notes, mandatory flag ota.upload
- Roll out to 10 / 25 / 50 / 100% of the fleet, Pause, or Roll back ota.deploy
/audit Audit ledger
A tamper-evident, hash-chained log of every privileged action on the platform.
- Verify integrity — recomputes the chain; green if intact, red if broken
- Filter by action, and expand any row to see the before/after values
/notifications Notifications
Your account's full notification history (also reachable from the bell in the top bar).
- All / Unread filter, Mark all read, click a row to read it
Customer Portal
The customer's own workspace. Sidebar: Dashboard · Branches · Media · Playlists · Displays · Campaigns · Emergency · Players · Groups · Analytics · Subscription · Notifications · Team.
/ Dashboard read-only
At-a-glance account health: plays today, players online, failed plays, a 14-day trend and top content. Includes a 4-step “Getting started” checklist that mirrors the content pipeline.
Watch for the red “Content is paused” banner
If it appears, the subscription isn't serviceable — every screen goes dark regardless of content. That's a subscription problem, not a device problem.
/branches Branches
The customer's physical sites and the specific locations within them where screens are installed.
- New branch — code, region, name, manager, address branch.create
- Expand a branch → Add location (e.g. “Lobby Wall”, floor) location.create
- Activate / Deactivate a branch branch.edit
/media Media Library — step 1
All content files, with upload and a live “where is this playing” badge on every item.
- Upload media — images, video, PDF, zip; name it, optionally favourite it media.upload
- Each tile shows a badge: “Not scheduled” (on 0 screens) or ▶ running/total screens
- Open an item → live usage, which playlists & campaigns use it, rename, delete
/playlists & /playlists/:id Playlists — step 2
Ordered, reusable loops of media. The list creates them; the builder arranges them.
- New playlist — name + orientation playlist.create
- In the builder: Add media from the library, set per-item durations, reorder ↑↓, remove ✕ playlist.edit
- Save sequence — required to persist changes and bump the version
Unsaved playlists don't reach screens
Changes are a draft until you press Save sequence.
/displays Displays — the content↔hardware bridge
Register each physical screen and bind it to a player. Campaigns target displays, so this link is what makes content reach hardware.
- New display — name, unique code, orientation, and Bind to Android Player (or “assign later”) display.create
- The Bound player column shows the device — or “— none —” if unbound
“— none —” = a screen that can never play
A display with no bound player will stay dark even if a campaign targets it. Bind a player.
/players Android Players
The physical player devices — their online state, app version, and remote control.
- Activate a device: install the WallSpace Player app → enter an activation key (from your admin)
- Sync a player, or open Commands: Sync now, Refresh config, Clear cache, Screenshot, Restart app, Reboot device player.command
- Rename / Retire a device player.deactivate
- Online = heartbeat within ~3 min; commands run on the device's next poll
/groups Player Groups
Bundle players by site/zone to send bulk commands to many at once. (Control only — groups carry no content.)
- New group, Add / Remove players player.reassign
- Bulk Sync / Refresh / Clear cache / Restart / Reboot to all members player.command
/campaigns Campaigns — step 3, the “go live” step
Schedule playlists onto displays for a date window and priority. This is what pushes content to hardware — and the first place to check when nothing plays.
- New campaign — name, start/end dates, priority, pick ≥1 playlist and ≥1 display (creates a draft) campaign.create
- Publish / Pause — a draft or paused campaign does nothing until published campaign.publish
“Create draft” is not live
You must press Publish. Published campaigns reach displays on the next sync.
/emergency Emergency broadcast
Instantly override every screen with one full-screen message (evacuations, closures). It takes over all campaigns until cleared.
- Compose headline + message + background colour, preview, then Broadcast to all screens (with confirmation) campaign.emergency
- Clear broadcast to resume normal playback
/analytics Analytics
Proof-of-play reporting: how often content actually played, by branch / screen / media / campaign, over a chosen period.
- Break down by Branch / Screen / Media / Campaign; period 7 / 30 / 90 days or custom
- Export CSV; charts for plays-per-day, top items, and share of plays analytics.view
/subscription Subscription & plan read-only
The customer's view of their plan, status, usage-against-limits, included features and invoices. No self-service changes — those go through the account manager (you).
- Usage bars — campaigns, media, storage, players, playlists, users vs their limits (amber ≥80%, red at 100%)
- What your plan includes and Billing history
/users Team
The customer's own users and their roles.
- Add user — name, email, temporary password (they change it on first sign-in), role user.create
- Edit — change role or disable a user user.edit
Troubleshooting: “device not showing” & “content not playing”
Work down this list in order — it follows the pipeline from subscription to screen.
Roles at a glance
What each person can do is set by their role. Sidebar items hide when the role lacks the permission.
| Role | Portal | Typically can… |
|---|---|---|
| Super Admin | Super Admin | Everything on the platform — customers, plans, keys, OTA, billing, audit |
| Finance Admin | Super Admin | Subscriptions, invoices, payments, renewals — no device or content access |
| Organization Admin | Customer | Full control of their own workspace — content, campaigns, devices, users |
| Manager | Customer | Most day-to-day content & device operations |
| Content Editor | Customer | Media, playlists, campaigns — no device retiring or user management |
| Device Operator | Customer | Player commands (sync, restart) and monitoring |
| Installer | Customer | Activate devices on-site |
| Viewer | Customer | Read-only — dashboards and analytics |
WallSpace Operations Guide. Tip: on desktop use the left index to jump around; on mobile scroll top-to-bottom. Hard-refresh (Cmd/Ctrl + Shift + R) if a portal looks stale after an update.