When something breaks or I need a quiet window to ship, users should see a clear message — not a white screen, and not silence on social media while I dig through logs.
Dedicated status products solve that for companies with an ops team. For a solo developer or a small shop, paying for another vendor on top of feedback, errors, and flags is the same tool tax I built Featurely to cut.
What I actually needed
On the Fetsund Sykkelservice site I occasionally need to flip payment or booking flows with zero drama. I want three things:
- A real maintenance switch — site goes into maintenance, most visitors get redirected or see the maintenance page, and I can still get in.
- A banner or toast when the site is up but something is off — "card payments are delayed" beats angry emails.
- Both controlled from the same dashboard where I already manage flags and environments — not a second login.
That is what featurely-site-manager is for. Maintenance mode and status messages live next to feature flags, version checks, and analytics in one SDK.
Maintenance mode
With the site-manager SDK initialised, Featurely can put the site into maintenance and call me back when it turns on or off:
import SiteManager from 'featurely-site-manager';
const siteManager = new SiteManager({
apiKey: process.env.NEXT_PUBLIC_FEATURELY_API_KEY!,
projectId: process.env.NEXT_PUBLIC_FEATURELY_PROJECT_ID!,
onMaintenanceEnabled: () => {
window.location.href = '/maintenance';
},
onMaintenanceDisabled: () => {
window.location.reload();
},
});
await siteManager.init();I can also check siteManager.isInMaintenanceMode() when I need a branch in my own UI.
For testing and owner access, the SDK supports a user email / user id for whitelist-style checks, plus a custom bypassCheck if I need something more specific. That matters: maintenance that locks me out is not helpful.
Status banners (and toasts)
Not every incident needs a full maintenance page. Sometimes the site should stay up and just say what is going on.
Status messages in Featurely support:
- Types:
info,warning,error,success - Positions:
toporbottom - Styles:
bannerortoast - Optional start/end schedule
- Dismissible by users
By default (autoInjectBanners: true) the SDK injects active messages into the page. If I want full control of the UI, I turn that off and handle onMessageReceived / getActiveMessages() myself.
That is enough for "we are migrating the booking calendar tonight" without wiring a separate status domain.
Same SDK as flags and versions
If you read last week's post on feature flags, this is the same package: featurely-site-manager.
One init. One mental model. Flags decide who sees a feature. Maintenance decides whether the site is open. Banners tell people what is happening. Version checks can nudge or force an update when I ship something that should not stay half-cached in the browser.
Docs: https://docs.featurely.no/docs/sdks/site-manager
What this is not
Featurely is not Statuspage (or Atlassian Statuspage, or a full public incident-comms suite with subscriber lists and multi-service component trees).
I will not claim we replace every enterprise status workflow. We do not.
What we offer is maintenance mode and scheduled status banners/toasts from the same indie dashboard where you already keep roadmap, feedback, errors, and flags — with an SDK so your app reacts without another monthly tool.
If you run a multi-product platform with a dedicated status brand and SMS subscribers, use a dedicated status product. If you need "flip maintenance for one site, show a warning banner, keep it next to my flags," that is the job I built for.
Pricing — be honest
The free Hobby plan covers feedback, roadmap, and changelog. Maintenance mode, site banner messages, and the site-manager SDK pieces for this start on the Indie plan (€19/mo). Details: https://www.featurely.no/#pricing
I would rather say that clearly than pretend ops features are free when they are not.
Why this belongs next to your roadmap
A public roadmap tells users what you plan to build. Maintenance mode and banners tell them what is happening right now when reality disagrees with the plan.
For a small team that combination matters: ship in the open, then communicate downtime without opening three other tabs.
Try it where it already lives
I built this because a bike shop site cannot afford mystery downtime. That is still the bar: does it help me ship without lying to users about what is live?
If that is your bar too, try the live demo from the site menu — no sign-up required — or ask in the in-app chat.
AI Disclaimer: The experiences and concepts shared in this article are my own. To ensure the best reading experience, I collaborated with Gemini AI to proofread my original draft, refine the sentence structure, and correct grammatical errors. No content or history was artificially generated.
