Project
Minside Admin
A small native Windows shell for clients with SaaS products. It embeds Chromium, loads the live client portal, and feels like a desktop app - without copying the website into the installer. The product catalogue is still a showcase, but the Analytics SaaS is fully working.
What it is
Minside Admin is an Electron app: a locked window that opens the real login and product portal on simonringwelski.dk. There is no address bar and no general browsing - just a desktop icon, persistent session, and recovery when the network or renderer misbehaves.
Only the shell is packaged (main process, preload bridge, icon). The website always comes from the server, so clients get the same PHP backend, auth, and SaaS products they would in a browser - with a desktop-first frame around them.
Think of it as Chrome with no chrome: same site, same accounts, forced onto the domain, with a desktop shortcut and crash/network recovery.
- Native Windows shell around the live client portal
- SaaS product launcher with account and licence checks
- Analytics SaaS is production-ready; the broader catalogue is still a showcase
- Installer and portable builds via electron-builder
Secure login
Launch opens a focused admin login inside the Electron window. Users sign in with their account credentials before any products appear - the same auth stack as the web portal, surfaced in a distraction-free desktop frame.
The entry URL includes client=desktop-app so the site can detect the wrapper and tweak the UI for the locked window (theme toggle, layout, and desktop-specific cues).
- Loads auth/login.php inside a locked Electron window
- Clean, distraction-free authentication UI
- Desktop client query lets PHP/JS adapt the experience
Two-factor authentication
When an account has 2FA enabled, the desktop client continues the same authenticator flow as the web: a six-digit app code, or one of the ten-digit backup recovery codes if the phone is unavailable.
Nothing about MFA is reimplemented in Electron - the shell simply hosts the hardened login pages, so security policy stays centralised on the server.
- Authenticator app codes (6 digits)
- Backup recovery codes (10 digits)
- Cancel and return to password login when needed
Products dashboard
After login, clients land on a product home that lists subscriptions and purchased SaaS apps available on their account. Active products show status and an open action that launches the app inside the same shell.
Access and licensing are verified by the server when a product opens - the desktop client is the launcher, not a separate licence store.
- Central list of active subscriptions and products
- One-click open into the selected SaaS UI
- Account access and licensing checked on the server
Analytics SaaS (live)
Analytics is not a mock screen. Clients open a working analytics product from the desktop: traffic, visitor behaviour, content performance, audience, events, usage, and Core Web Vitals for their property.
Date ranges, property management, and consent-aware collection stay on the same backend as the web experience - the native client is simply the preferred way to run it day to day.
- Traffic, content, audience, performance, events, and usage
- Core Web Vitals and related website insights
- Fully working product - not a showcase placeholder
Architecture
Minside Admin.exe starts an Electron main process. That process owns the BrowserWindow, navigation guards, persistent cookie partition, and auto-reload on errors. Chromium then loads the live site on simonringwelski.dk.
main.js holds window creation, domain lock, recovery backoff, and session persistence. preload.js is the bridge between Electron and the page and is kept empty or minimal on purpose. package.json drives scripts and electron-builder output.
Dev uses npm start against local main.js. Release runs npm run dist: convert the logo to .ico, then produce Minside Admin Setup (installer + shortcut) and a portable .exe. The website itself is never packed into the binary.
- Electron main process + Chromium renderer
- Navigation guards limited to simonringwelski.dk (and subdomains)
- persist:minside partition for cookies and site storage
- Auto-reload with backoff when load/crash/hang occurs
- electron-builder installer and portable Windows builds
Shell behaviour & security
On launch the window title is “Minside Admin” and the first URL is the live login with client=desktop-app. External links and off-domain redirects are blocked inside the app and opened in the user’s normal browser instead.
Sessions survive restarts because cookies and storage live under Electron’s user data folder and flush to disk on quit. If the main page fails, the renderer crashes, or the page hangs, reload is scheduled with backoff from 1s toward a 30s cap; a successful load resets the counter.
Security defaults stay strict: nodeIntegration off, contextIsolation on, sandbox on - so the website cannot reach Node or file APIs through the shell.
- No address bar; domain-locked navigation
- Persistent login across app restarts
- Backoff reload on load failure, crash, or hang
- nodeIntegration: false, contextIsolation: true, sandbox: true