BEYWARE.
DE
← Back to blog

Digitalisation

Replacing SharePoint: What a Self-Hosted Intranet Really Costs

10 September 2026 · 6 min read

Replacing SharePoint: What a Self-Hosted Intranet Really Costs

Starting point

SharePoint is the default information portal in many companies simply because it comes with Microsoft 365. For a manufacturer with two sites we had previously built a whole set of automations around it: generating news pages via the Graph API, an SPFx web part for events, synchronising OneDrive folders. It worked, but every extension felt like a fight against the platform. Then there is the licensing logic: every person who should merely read the portal needs a seat – including production staff who otherwise never touch Office.

So we decided to build the information portal as our own application: dashboard, news feed, file storage, event calendar with public holidays for both sites, team page, administration and a login with roles. This article is our honest account.

The stack – and why Windows Server

The application runs on Next.js 15. That was not a fashion choice: we wanted server rendering, solid routing and a codebase someone will still understand in two years. It is hosted on an existing Windows Server because it is already there, already backed up and already known to IT. An additional Linux host would have meant another operational process nobody wanted.

In concrete terms:

  • Node.js as a Windows service with a reverse proxy in front
  • File-based storage for news, events and documents instead of a separate database – deliberately, because backup and restore become trivial
  • Configuration via environment variables, no secrets in the repository

File-based storage was the decision we debated longest. It does not scale infinitely, but an information portal for a company of this size does not need that. In return, any administrator can inspect the data in Explorer.

AD synchronisation via PowerShell

An intranet without current people and device data is worthless. Instead of letting the application talk to Active Directory directly, we built a PowerShell job that exports the organisational structure, users and devices and hands them to the application as a file. Advantages:

  • The web application needs no AD permissions
  • The sync can be tested in isolation and triggered manually
  • IT can read and adapt the script without understanding the application

The device module – computers, laptops and mobile phones at both sites with full-text search, filters, statistics and Excel export – first lived as its own application and was integrated into the intranet later. In hindsight that was the right order: stabilise the module in isolation first, then embed it.

Graph integration as an enhancement, not a foundation

We did not switch off Microsoft 365. Calendar, mail and documents stay there. The Graph integration in the intranet is an enhancement: it fetches what is useful, and the application keeps working when Graph does not respond. This separation saved us several times, for instance when tokens expired or permissions in the tenant were changed.

Deployment via a self-hosted GitHub runner

The part we underestimated most was not the code but the delivery. Manual deployment to a Windows Server is error-prone and depends on one person. So we set up a self-hosted GitHub runner on the server: push to the main branch, build, tests, restart the service. It cost us a few days at the start but has saved time and nerves every week since.

What it really costs

The honest calculation has three items:

  1. Initial build. Several weeks of development, spread over a few months alongside daily business.
  2. Operations. A Windows Server that exists anyway, plus updates of Node and dependencies – realistically a few hours per month.
  3. Knowledge. Someone has to understand the application. That is the real price, and it is often left unsaid.

Against that: no seat licence for read-only users, no limits imposed by the platform, and a portal that models the processes the company actually has – not the ones SharePoint anticipates.

Takeaway

A self-hosted intranet is not a cost-cutting exercise; it is a decision in favour of control. It pays off when many people read but few need licences, and when the company is willing to build knowledge about its own application. If all you need is a news page, stay with SharePoint.

Our product Atrium grew out of this project – the intranet as a reusable base instead of starting from zero every time.