App Shell
Every page you see after logging in — Dashboard, Ideas, Posts, Prompts, Examples, Schedule, Actions, Settings, and (for admins) Admin — renders inside the same app shell: a persistent left sidebar, a thin top bar, and a workspace switcher that quietly scopes everything else on the page to whichever workspace is currently active.
This page describes product-facing behavior. The app shell is a
frontend-only feature — it doesn't own any /api/* endpoints of its
own, so there's no matching API reference page. The calls it makes are
documented under Auth, Workspaces,
and the Posts/Ideas/Actions feature pages. The underlying spec this page is
based on is specs/features/app-shell.md in the repo.
The layout
┌──────────────┬─────────────────────────────────────────┐
│ LinkedIn │ <workspace name> 🔔 │ ← TopNav
│ Wizard ├─────────────────────────────────────────┤
├──────────────┤ │
│ [Workspace ▾]│ │
├──────────────┤ │
│ 📊 Dashboard │ page content │
│ 💡 Ideas │ │
│ 📄 Posts │ │
│ 📝 Prompts │ │
│ 📖 Examples │ │
│ 📅 Schedule │ │
│ ✅ Actions │ │
│ ⚙️ Settings │ │
│ (🛡️ Admin) │ │
├──────────────┤ │
│ 🙂 You │ │
│ ↳ Sign out │ │
└──────────────┴─────────────────────────────────────────┘The sidebar is fixed-width and always visible — there's currently no collapsed/compact mode and no mobile hamburger menu at any screen size.
Dashboard
/dashboard is where you land right after login. It's a read-only overview
built entirely from data that also lives on other pages — there's no
separate "dashboard summary" API, just three calls (posts, ideas, actions)
made in parallel and sliced up client-side into five panels:
-
Pipeline summary — five tiles, one per post status: Draft, In Review, Approved, Scheduled, Published.
⚠️Two post statuses that exist in the system — Revision Requested and Archived — have no tile here. Posts in those states are fetched along with everything else, they just don't get counted anywhere on this page.
-
Ideas to Work On — up to 7 ideas, open ones first, newest first within each group. Click through to the Ideas page.
-
Upcoming Posts (next 7 days) — up to 7 scheduled posts, soonest first, with their scheduled date/time.
The "next 7 days" framing is a label, not a hard filter — the page doesn't actually exclude posts scheduled further out. In practice this only shows up if you have more than 7 scheduled posts total, since the list is capped at 7 and sorted soonest-first anyway.
-
Recent Ideas — up to 5 ideas, newest first regardless of status — plus the same quick-add bar you'd find on the Ideas page, so you can jot something down without leaving the dashboard.
⚠️Creating an idea here works (it's saved immediately), but the "Recent Ideas" list on the dashboard specifically won't refresh to show it — you'll need to reload the page or navigate away and back. This auto-refresh works correctly everywhere else the quick-add bar appears; it's just wired as a no-op on this one page.
-
Pending Actions — up to 5 actions assigned to you that are still open or in progress, linking straight to that action on the Actions page.
Every panel that can be empty shows a small placeholder message ("No open ideas.", "No pending actions.", etc.) instead of just looking broken.
If you don't belong to any workspace yet, the dashboard shows a prompt to select or create one instead of any of the panels above.
Navigation
Getting around
The sidebar's eight links are always in the same order (Dashboard → Ideas → Posts → Prompts → Examples → Schedule → Actions → Settings), with the current page highlighted. That highlight is an exact match on the URL path — visiting a page one level deeper than a nav link (e.g. an individual post's detail view) won't keep that link highlighted.
If you're an admin, a ninth link — Admin — appears at the bottom of the list, right after Settings. Everyone else never sees it; it's not hidden-but-disabled, it simply isn't rendered.
The top bar shows your active workspace's name and a notifications bell.
The bell is currently decorative — clicking it does nothing, and no notification data is fetched anywhere in the shell. Also, while the top bar supports showing a page-specific title instead of the workspace name, no page currently uses that — you'll always see the workspace name (or nothing, if you have no active workspace) up there.
Switching workspaces
Click the workspace name under the logo to open a dropdown of every workspace you belong to. Pick one to switch — every page you're on immediately re-scopes to it. Your choice is remembered (in your browser's local storage) so you land back in the same workspace next time you open the app; if that remembered workspace no longer exists or you're visiting for the first time, you're dropped into your first workspace instead.
"New workspace" at the bottom of that dropdown opens a small dialog — just a name, no description field (the full workspace settings page lets you add one later) — and switches you into it as soon as it's created.
If creating a workspace fails (e.g. because the name is invalid), nothing visible happens in the dialog — no error message is shown. The dialog just stays open so you can try again.
Signing in without approval
New accounts need an admin's sign-off before they can use the app — see Authentication, Signup & Approval for the full lifecycle. As far as the app shell is concerned: the moment any page under the main app loads, it checks your session's approval status, and if you're not approved yet, you're bounced straight to an "Awaiting Approval" screen instead of seeing the sidebar/dashboard — that screen quietly checks every 30 seconds and, once an admin approves you, sends you through a fresh login so your new session actually reflects the approval.
Under the hood this redirect is a side effect of a shared hook, not an
explicit check the shell itself makes — see the "Approval-gating redirect"
section of specs/features/app-shell.md for the exact mechanics, including
a brief moment where the shell can flash with no user loaded before the
redirect actually takes hold.
Accessibility notes
- The sidebar and top bar use plain semantic HTML (
<aside>,<nav>,<header>), which gives screen readers basic landmarks for free, but there's no skip-to-content link, and the currently-active nav item isn't marked as such for assistive tech — only its background color changes. - There's no dedicated mobile layout. The sidebar keeps its full width regardless of screen size.
See also
- Authentication, Signup & Approval — the full signup/approval lifecycle behind the redirect described above.
- Workspaces & Membership — roles, invites, and workspace settings (this page only covers the sidebar's day-to-day switcher/creation shortcut).