|
| 1 | +# offi.ceo Roadmap |
| 2 | + |
| 3 | +**Goal**: Evolve from a waffle-menu replacement into the best possible Microsoft 365 home page — one that shows users what *they* care about, not what Microsoft wants to promote. |
| 4 | + |
| 5 | +**Current version**: 1.2.0 — configurable app launcher, no auth, localStorage only |
| 6 | + |
| 7 | +--- |
| 8 | + |
| 9 | +## The vision |
| 10 | + |
| 11 | +A personal M365 dashboard that loads in seconds, shows your actual work context (recent files, next meeting, unread messages), and gets out of the way. No Copilot push. No upsells. No dark patterns. Built around the principle that the user decides what a homepage is for. |
| 12 | + |
| 13 | +Technically: still a static app hosted on GitHub Pages. Microsoft Graph API runs entirely in the browser via MSAL.js — no server, no backend, no stored credentials. Tokens live in sessionStorage only. |
| 14 | + |
| 15 | +--- |
| 16 | + |
| 17 | +## Phase 1 — Better launcher (no auth required) |
| 18 | +*Incremental improvements on top of v1.2.0. Ship quickly to justify domain renewal.* |
| 19 | + |
| 20 | +### 1.1 Quick-create deep links |
| 21 | +Replace pure launch URLs with action-oriented shortcuts where possible: |
| 22 | +- New Word document → `https://word.new` |
| 23 | +- New Excel sheet → `https://excel.new` |
| 24 | +- New PowerPoint → `https://powerpoint.new` |
| 25 | +- New Teams meeting → deep link to calendar compose |
| 26 | +- Each tile gets an optional secondary "New" badge/button alongside the launch link |
| 27 | + |
| 28 | +### 1.2 Keyboard navigation |
| 29 | +- Single-key shortcuts when no input is focused: `O` = Outlook, `T` = Teams, `W` = Word, `E` = Excel, `P` = PowerPoint, `D` = OneDrive, etc. |
| 30 | +- `?` opens shortcut cheat-sheet overlay |
| 31 | +- Makes the page genuinely faster than clicking the waffle |
| 32 | + |
| 33 | +### 1.3 IT Admin portals section |
| 34 | +An optional second tile section for IT pros, hidden by default, toggled on from settings: |
| 35 | +- Microsoft 365 Admin Center, Entra ID, Purview, Security & Compliance, Power Platform Admin Center (PPAC), Azure Portal, Intune, Exchange Admin, Teams Admin |
| 36 | + |
| 37 | +### 1.4 Power Platform section |
| 38 | +A dedicated tile section for Power Platform makers and admins — one of the most underserved groups when it comes to navigation: |
| 39 | +- Quick links to the main makers: Power Apps (`make.powerapps.com`), Power Automate (`make.powerautomate.com`), Power Pages (`make.powerpages.microsoft.com`), Copilot Studio (`copilotstudio.microsoft.com`) |
| 40 | +- **Environment switcher**: users can save their named environments (display name + environment URL) in localStorage; selecting one updates all environment-scoped links to that environment's base URL |
| 41 | +- Direct editor launch links per environment: canvas app editor, model-driven app list, Dataverse table editor, solution list |
| 42 | +- This section is hidden by default, enabled via a toggle for users who identify as makers/admins |
| 43 | + |
| 44 | +--- |
| 45 | + |
| 46 | +## Phase 2 — Graph API integration (the real homepage) |
| 47 | +*This is the strategic moat. Everything from here requires Microsoft sign-in.* |
| 48 | + |
| 49 | +**Technical approach**: MSAL.js (`@azure/msal-browser`) registered as a public client app in Azure AD. Scopes requested on demand (not upfront). All Graph calls run from the browser. No backend, no server, GitHub Pages hosting unchanged. |
| 50 | + |
| 51 | +**Privacy stance**: Nothing leaves the browser. Tokens in sessionStorage, cleared on tab close. No analytics on personal data. This must be stated clearly on the page. |
| 52 | + |
| 53 | +### 2.1 Sign-in and identity |
| 54 | +- "Sign in with Microsoft" button — optional, launcher works without it |
| 55 | +- On sign-in: show user's name, avatar, tenant name in header |
| 56 | +- Graceful fallback: unsigned state = today's v1 launcher experience |
| 57 | +- Token refresh handled silently; logout clears all local state |
| 58 | + |
| 59 | +### 2.2 Recent files widget |
| 60 | +- Graph: `GET /me/drive/recent` — show last 8–10 files with icon, name, modified time, direct open link |
| 61 | +- Filter: Office file types only (Word, Excel, PowerPoint, OneNote) — ignore `.zip`, images, etc. |
| 62 | +- One-click open in browser (online editors), optional "open in desktop app" link |
| 63 | +- This is the single feature that makes people return daily |
| 64 | + |
| 65 | +### 2.3 Next meeting widget |
| 66 | +- Graph: `GET /me/calendarView` — show next 1–3 upcoming events |
| 67 | +- Display: title, time, organizer, join link if Teams meeting |
| 68 | +- "Join" button for active/imminent meetings — the most useful thing to have on a homepage |
| 69 | +- Within 15 min of start: highlight the meeting card |
| 70 | + |
| 71 | +### 2.4 Unread email count |
| 72 | +- Graph: `GET /me/mailFolders/inbox` — show unread count only, no email content |
| 73 | +- Clicking navigates to Outlook Web |
| 74 | +- Intentionally minimal — this is a count, not an inbox preview. Keep the homepage fast and focused. |
| 75 | + |
| 76 | +### 2.5 Pinned SharePoint / Teams sites |
| 77 | +- Graph: `GET /me/followedSites` and `GET /me/joinedTeams` |
| 78 | +- Show followed sites and Teams as a separate tile section |
| 79 | +- User can pin/unpin from the list (stored in localStorage alongside custom tiles) |
| 80 | + |
| 81 | +### 2.6 Power Platform: environment and app discovery (research required) |
| 82 | +The goal is to reconstruct a useful "my apps" view for Power Platform — the one that disappeared from the M365 portal and never worked well anyway. |
| 83 | + |
| 84 | +**What to investigate:** |
| 85 | +- **Power Apps API** (`api.powerapps.com`) is separate from Microsoft Graph. It exposes environments, canvas apps, and model-driven apps but is undocumented/unofficial in places and has historically been the backend for `make.powerapps.com` itself |
| 86 | +- **Graph `GET /me/appCatalogs`** and related endpoints — unlikely to surface Power Apps but worth confirming |
| 87 | +- **`/providers/Microsoft.PowerApps/apps`** via Azure Resource Manager — may require `Azure Service Management` scope, which is heavy |
| 88 | +- **What's realistically retrievable**: environments list (`GET /providers/Microsoft.PowerApps/environments`), canvas apps per environment, model-driven apps less clear |
| 89 | +- **Scope implications**: Power Apps API uses `https://service.powerapps.com/.default` — a different resource from Graph, requiring a second token request; feasible with MSAL but needs to be declared upfront in the app registration |
| 90 | + |
| 91 | +**Target outcome if feasible**: show the user's environments as cards, each expandable to list their apps with direct play/edit links — replacing the fragmented "my apps" experience across make.powerapps.com, the M365 waffle, and the old office.com apps list. |
| 92 | + |
| 93 | +--- |
| 94 | + |
| 95 | +## Phase 3 — Personalization and sharing |
| 96 | +*Making offi.ceo something people share with colleagues and set as their homepage.* |
| 97 | + |
| 98 | +### 3.1 Dashboard layout control |
| 99 | +- Drag-and-drop section ordering: widgets (recent files, calendar, email) vs. tile grid |
| 100 | +- Collapsible widget sections |
| 101 | +- Compact vs. comfortable tile density toggle |
| 102 | +- All layout prefs in localStorage |
| 103 | + |
| 104 | +### 3.2 Org-wide shareable configs (no server needed) |
| 105 | +- Generate a URL-encoded config string: `offi.ceo/?config=<base64>` |
| 106 | +- IT admins can distribute a pre-configured launcher to their team via a single link |
| 107 | +- On arrival, user is prompted to import the org config or keep their own |
| 108 | +- No server required — config lives entirely in the URL |
| 109 | + |
| 110 | +### 3.3 PWA refinement |
| 111 | +- Current PWA install already works; add proper offline fallback screen |
| 112 | +- Home screen icon, splash screen, standalone display mode |
| 113 | +- Encourage "Add to home screen" / "Install app" for desktop and mobile |
| 114 | +- Push notification opt-in for meeting reminders (Web Push API) |
| 115 | + |
| 116 | +--- |
| 117 | + |
| 118 | +## Technical decisions |
| 119 | + |
| 120 | +| Decision | Choice | Reason | |
| 121 | +|----------|--------|--------| |
| 122 | +| Auth library | `@azure/msal-browser` | Official, maintained, no server needed | |
| 123 | +| Graph calls | Fetch via `@microsoft/microsoft-graph-client` | Clean typed interface | |
| 124 | +| Token storage | SessionStorage (MSAL default) | Privacy — cleared on tab close | |
| 125 | +| Hosting | GitHub Pages (unchanged) | Free, zero infra | |
| 126 | +| Azure AD app reg | Single-tenant → multi-tenant | Start single, flip when stable | |
| 127 | +| Scopes | Incremental — request per feature | Minimizes permission surface shown to user | |
| 128 | + |
| 129 | +### Azure AD app registration (Phase 2 prerequisite) |
| 130 | +- Register at portal.azure.com as a Single-page Application (SPA) |
| 131 | +- Redirect URI: `https://offi.ceo` (and `http://localhost:5173` for dev) |
| 132 | +- Scopes needed: `User.Read`, `Files.Read`, `Calendars.Read`, `Mail.Read` (read-only throughout) |
| 133 | +- No client secret — public client only |
| 134 | + |
| 135 | +--- |
| 136 | + |
| 137 | +## What this is not |
| 138 | +- Not a Microsoft product or affiliated with Microsoft |
| 139 | +- Not storing user data anywhere |
| 140 | +- Not a Copilot competitor — Copilot can stay in Teams/M365 where users choose it |
| 141 | +- Not trying to replace SharePoint intranets or Viva Connections — this is the personal layer |
| 142 | + |
| 143 | +--- |
| 144 | + |
| 145 | +## Success metrics |
| 146 | +- People install it as their browser homepage / new tab |
| 147 | +- IT admins share org configs with their teams |
| 148 | +- Newsletter subscribers discover it and connect the author to the tool |
| 149 | +- Gets covered in Power Platform / M365 community media as the "anti-Copilot-homepage" |
| 150 | + |
| 151 | +--- |
| 152 | + |
| 153 | +*Last updated: 2026-06-09* |
| 154 | +*Maintained by: Jukka Niiranen — [perspectives.plus](https://perspectives.plus)* |
0 commit comments