Two sites. One back office.
Mountain cabins in Stöten and rental apartments in Gnosjö. Different clients and different looks, built on the same platform with the same back office.
- Clients
- Polarstigen, GnosjöBo Fastigheter
- Since
- 2026
- Status
- Pilot
- We built
- Platform, CMS, booking, tenant portal


One back office under both
- Block CMS
- Weekly booking
- Leases
- Tenant portal
- Swedish + English
Overview
Polarstigen lets a mountain cabin one week at a time. GnosjöBo Fastigheter lets 21 apartments in central Gnosjö on ordinary leases. Two businesses with very little in common, and both are built on the same property platform, with the same back office.
The challenge
Polarstigen wanted to let its mountain cabin itself, a week at a time and with no agency in between. GnosjöBo Fastigheter needed a home for vacant apartments, applications, and tenants. Two entirely different needs.
What we built
A property platform with one back office for both: a block CMS, weekly booking, leases, and a tenant portal, with each site in a look of its own.
How it's used today
Both sites' pages, photos, and settings are already in the platform, ready to run from one back office.
Each site has its own domain, colours, and menus. A new site is set up in the back office, with no new installation and no new code, and switching between them is one menu in the corner.
Polarstigen
Polarstigen lets a newly built cabin in Granfjällsbyn, Stöten, 150 metres from the lift: twelve beds, five bedrooms, four bathrooms, and a relax room with a sauna. They handle the letting themselves, with no agency in between, so the site is both shop window and booking desk.
Visit polarstigen.se (opens in a new tab)
Guests pick an arrival Saturday right on the homepage and land in the cabin's calendar. Stays are whole weeks, Saturday to Saturday. If the week has a price, you see the total and book straight away. If it doesn't, it becomes an inquiry that Polarstigen answers with a price.
The site is dark, with evening shots of the cabin and large photos from inside, in Swedish and English.
GnosjöBo
GnosjöBo Fastigheter owns the ICA building at Köpmansgatan 21 in central Gnosjö, with 21 rental apartments and an ICA Supermarket in the same property. The apartments are renovated one at a time, usually when someone moves out.
Visit gnosjobo.se (opens in a new tab)
On the site you see the vacant apartments, filter by number of rooms, and register your interest. Every apartment has its own page with photos, rooms, and rent, and the rental policy and everything about the laundry room, the rubbish, and parking are in the same place.
Tenants get a personal invitation to My pages by email. There they see their lease and their payments, with the bankgiro number and reference to copy, download the lease as a PDF, and report faults they can follow until they're fixed. The look is light and plain, and nothing like Polarstigen's.
Look
Three sites, one shell.
Polarstigen and GnosjöBo each have their own stylesheet, Gislatorp just a database row. Pick one and the sample changes its look, or reskin this whole site and see how far a theme goes.
Lasts until you close the tab. Only you see it.
Polarstigen's cabins: snow, polar night and lamplight on the buttons.
Body text contrast: 16.1:1. Muted text: 6.8:1.
This week's deliveries
ActiveThree orders are waiting to be packed. The next truck leaves at two.
Everything that belongs to the project, in one place.
Saved
The change shows at once.What changed 138 values
Source: NIT.Estate src/NitBaseline.Client/src/tenants/polarstigen/polarstigen.css @ 900a2de0
| Name | Norin IT | Polarstigen |
|---|---|---|
--accent | #35312c | #e9ecf5 |
--accent-foreground | #ede6db | #1b2236 |
--background | #0f0d0b | #f5f7fb |
--border | #75564e | #d9dfeb |
--card | #282420 | #ffffff |
--card-foreground | #ede6db | #121a2e |
--chart-1 | #f97316 | #3b82f6 |
--chart-2 | #86b6dc | #14b8a6 |
--chart-3 | #e8b04a | #f59e0b |
--chart-4 | #7cc48f | #8b5cf6 |
--chart-5 | #c79ab8 | #ec4899 |
--chart-6 | #827b72 | #64748b |
--chart-axis | #c4bbae | #4a5672 |
--chart-cat-1 | #f97316 | #3b82f6 |
--chart-cat-10 | #7cc48f | #8b5cf6 |
--chart-cat-2 | #86b6dc | #14b8a6 |
--chart-cat-3 | #e8b04a | #f59e0b |
--chart-cat-4 | #7cc48f | #8b5cf6 |
--chart-cat-5 | #c79ab8 | #ec4899 |
--chart-cat-6 | #827b72 | #64748b |
--chart-cat-7 | #f97316 | #3b82f6 |
--chart-cat-8 | #86b6dc | #14b8a6 |
--chart-cat-9 | #e8b04a | #f59e0b |
--chart-current | #f97316 | #3571d5 |
--chart-exempt | #6b655e | #939bae |
--chart-grid | #75564e | #d9dfeb |
--chart-negative | #f2735f | #b8322a |
--chart-other | #d0d0d0 | #373737 |
--chart-positive | #7cc48f | #2e7a52 |
--chart-previous | #6d6d6d | #8a8a8a |
--chart-projected | #6e391a | #a2c5fc |
--chart-rank-1 | #422516 | #c6dbfd |
--chart-rank-2 | #5e3119 | #afcdfd |
--chart-rank-3 | #7a3e1c | #99bffc |
--chart-rank-4 | #994b1d | #81b0fb |
--chart-rank-5 | #b7581d | #6ba1fa |
--chart-rank-6 | #d9661b | #5391f8 |
--chart-rank-7 | #f97316 | #3b82f6 |
--chart-ref-line | #c4bbae | #4a5672 |
--chart-seq-1 | #422516 | #c6dbfd |
--chart-seq-2 | #6c381b | #a4c6fd |
--chart-seq-3 | #994b1d | #81b0fb |
--chart-seq-4 | #c75e1c | #609af9 |
--chart-seq-5 | #f97316 | #3b82f6 |
--chart-text | #c4bbae | #4a5672 |
--chart-volume | #86b6dc | #14b8a6 |
--destructive | #f2735f | #b8322a |
--destructive-foreground | #0f0d0b | #ffffff |
--destructive-soft-foreground | #f2735f | #8f2620 |
--foreground | #ede6db | #121a2e |
--info | #86b6dc | #3d558c |
--info-foreground | #0f0d0b | #ffffff |
--info-soft-foreground | #86b6dc | #2c3c60 |
--input | #827b72 | #7f8ba6 |
--muted | #191614 | #e9edf5 |
--muted-foreground | #c4bbae | #4a5672 |
--muted-foreground-subtle | #c4bbae | #5b6681 |
--popover | #282420 | #ffffff |
--popover-foreground | #ede6db | #121a2e |
--primary | #9a3412 | #f2ab3c |
--primary-foreground | #ede6db | #121a2e |
--primary-soft-foreground | #f97316 | #7a4a0e |
--ring | #f97316 | #3d558c |
--secondary | #35312c | #e6ebf5 |
--secondary-foreground | #ede6db | #1b2236 |
--state-tile-bad-bg | #450a0a | #fef2f2 |
--state-tile-bad-foreground | #fca5a5 | #991b1b |
--state-tile-brand-bg | #1e120e | #f5f1ee |
--state-tile-brand-foreground | #f97316 | #7a4a0e |
--state-tile-good-bg | #052e16 | #f0fdf4 |
--state-tile-good-foreground | #86efac | #166534 |
--state-tile-info-bg | #172554 | #eff6ff |
--state-tile-info-foreground | #93c5fd | #1e40af |
--state-tile-neutral-bg | #191614 | #e9edf5 |
--state-tile-neutral-foreground | #c4bbae | #4a5672 |
--state-tile-warning-bg | #451a03 | #fffbeb |
--state-tile-warning-foreground | #fcd34d | #92400e |
--state-tint-bad | #f2735f | #b8322a |
--state-tint-brand | #9a3412 | #f2ab3c |
--state-tint-good | #7cc48f | #2e7a52 |
--state-tint-info | #86b6dc | #3d558c |
--state-tint-neutral | #c4bbae | #4a5672 |
--state-tint-warning | #e8b04a | #b45309 |
--success | #7cc48f | #2e7a52 |
--success-foreground | #0f0d0b | #ffffff |
--success-soft-foreground | #7cc48f | #1f5a3b |
--warning | #e8b04a | #b45309 |
--warning-foreground | #0f0d0b | #ffffff |
--warning-soft-foreground | #e8b04a | #8a3f07 |
--font-family-display | 'Newsreader Display', 'Newsreader Fallback', 'Georgia', serif | 'NI Demo Familjen Grotesk', ui-sans-serif, system-ui, sans-serif |
--font-family-mono | ui-monospace, 'Cascadia Code', 'Source Code Pro', 'Menlo', 'Consolas', monospace | 'NI Demo DM Mono', ui-monospace, 'SFMono-Regular', 'Menlo', 'Consolas', monospace |
--font-family-sans | 'Inter', 'Inter Fallback', sans-serif | 'NI Demo Atkinson Hyperlegible Next', ui-sans-serif, system-ui, sans-serif |
--font-family-special | 'Inter', 'Inter Fallback', sans-serif | 'NI Demo Familjen Grotesk', ui-sans-serif, system-ui, sans-serif |
--radius-alert | 0 | 4px |
--radius-avatar | 0 | 9999px |
--radius-badge | 0 | 999px |
--radius-btn | 0 | 4px |
--radius-btn-pill | 0 | 9999px |
--radius-card | 0 | 4px |
--radius-checkbox | 0 | 2px |
--radius-chip | 0 | 999px |
--radius-chip-pill | 0 | 9999px |
--radius-input | 0 | 4px |
--radius-lg | 0 | 6px |
--radius-md | 0 | 4px |
--radius-modal | 0 | 10px |
--radius-popover | 0 | 6px |
--radius-progress | 0 | 9999px |
--radius-sm | 0 | 2px |
--radius-switch | 0 | 9999px |
--radius-tooltip | 0 | 4px |
--radius-xl | 0 | 10px |
--radius-2xl | 0 | 16px |
--btn-hover-shadow | none | rgba(242, 171, 60, 0.35) 0px 0px 0px 1px, rgba(242, 171, 60, 0.55) 0px 10px 32px -8px |
--duration-fast | 0.2s | 0.12s |
--duration-normal | 0.3s | 0.2s |
--duration-slow | 0.5s | 0.42s |
--gradient-brand | linear-gradient(rgb(154, 52, 18), rgb(154, 52, 18)) | linear-gradient(rgb(242, 171, 60), rgb(242, 171, 60)) |
--hover-lift | 0 | -2px |
--hover-scale | 1 | 1.02 |
--shadow-2xl | rgba(8, 6, 4, 0.65) 0px 32px 64px -20px | rgba(11, 16, 32, 0.4) 0px 40px 80px -20px |
--shadow-glow | rgba(0, 0, 0, 0) 0px 0px 0px 0px | rgba(242, 171, 60, 0.35) 0px 0px 0px 1px, rgba(242, 171, 60, 0.55) 0px 10px 32px -8px |
--shadow-lg | rgba(8, 6, 4, 0.55) 0px 12px 32px -12px | rgba(18, 26, 46, 0.18) 0px 16px 36px -10px |
--shadow-md | none | rgba(18, 26, 46, 0.1) 0px 6px 16px -4px |
--shadow-sm | none | rgba(18, 26, 46, 0.06) 0px 1px 2px 0px |
--shadow-xl | rgba(8, 6, 4, 0.6) 0px 24px 48px -16px | rgba(18, 26, 46, 0.26) 0px 28px 60px -16px |
--norinit-brand-ink | #f97316 | #7a4a0e |
--norinit-brand-hover | #b0400f | #f2ab3c |
--norinit-brand-faint | #9a341226 | #7a4a0e26 |
--norinit-brand-soft | #9a341266 | #7a4a0e66 |
--norinit-brand-strong | #9a3412a6 | #7a4a0ea6 |
--norinit-surface-low | #35312c | #e9edf5 |
--norinit-outline | #aa8984 | #7f8ba6 |
--norinit-outline-dim | #75564e | #d9dfeb |
--norinit-credit-color | #f973168c | #7a4a0e8c |
--norinit-logo-shape | #6e6e6e | #4a5672 |
--norinit-logo-shape-hover | #8a8a8a | #2e3850 |
--norinit-logo-dot | #4d4c4c | #a0a7b7 |
What sets the sites apart is theme, menus and content. The components and the back office are the same.
Back office
The platform has one back office for both sites. You switch site in one menu, and everything else stays the same: pages, media, letting, and inquiries.

Blocks on a real preview
Pages are built from blocks such as a video hero, galleries, text with images, and FAQs. You edit them right in the site's own look and publish when they're ready.
Weeks or leases
Weekly booking, with a price or on request, for the cabin. For the apartments: applications, leases, monthly rent, reminders, and deposits.
A portal for tenants
Lease, payments, deposits, and fault reports in one place. The login starts with a personal invitation, and the link is valid for seven days.
Swedish and English
Every page exists in both languages, with a language switch right in the editor.
How we built it
Every client should get a site that looks like their own, without us building a new platform for each one. What sets the sites apart is theme, menus, and content, not code.
One platform, several sites
Each site has its own domain, colours, and menus, on the same back office and the same code. A new site is set up in the back office, with no new installation.

Content as files too
Every page, menu, and setting can be exported to files and applied back, and every change can be checked before it goes out.
Our design system underneath
Each site is a theme on the same components we use in our other systems, with keyboard navigation and reduced motion built in.
- SvelteKit
- .NET
- TypeScript
- PostgreSQL
- Tailwind CSS
- Docker
- Kubernetes
Gallery


Key metrics
- Back office for both sites
- 1
- The same login and the same code. You switch site in one menu.
- Kinds of letting
- 2
- Whole weeks in the mountains, Saturday to Saturday, and leases with monthly rent in Gnosjö.
- New installations for a new site
- 0
- A new site is set up in the back office, with its own domain, colours, and menus.
Got a system everyone's waiting on?
Tell us what you want to build and we'll take it from there.
Next project
Design systems
