Lab-project
In gebruikFile Portaal
Desktopportal die documenten uit een centrale bestandsmap ontsluit via één interface.
- Producttype
- Desktopportal
- Platform
- Desktop — Tauri + Next.js
- Rol
- Product, ontwerp en development
- Status
- In gebruik

CONTEXT
Een lab-project van Aedi: een desktopportal die documenten uit een centrale bestandsmap ontsluit via één overzichtelijke interface.
DE UITDAGING
Documenten stonden verspreid in een centrale map en waren omslachtig te doorzoeken, te openen en te printen. Er was behoefte aan één schil eromheen — snel bladeren en openen, zonder telkens door mappen te klikken.
AANPAK
- Een desktop-app gebouwd met Tauri en een Next.js front-end, zodat het als één programma draait.
- De interface direct gekoppeld aan bestanden elders op het systeem — bladeren, openen en printen vanuit één plek.
- Bewust licht gehouden: een schil om de bestandsmap, geen zwaar documentmanagementsysteem.
WAT HET LAAT ZIEN
- Desktop-app-engineering met Tauri, niet alleen web
- Een web-UI gekoppeld aan het lokale bestandssysteem
- Praktische documentworkflows: bladeren, openen, printen
ONTWERPPRINCIPES
De keuzes vóór de code.
De bron blijft leidend
Het portaal is een schil om de bestaande bestandsmap. Documenten blijven waar ze staan; het portaal voegt geen eigen opslag of tweede administratie toe.
Lezen, niet beheren
Gebouwd rond drie handelingen: bladeren, openen en printen. Bewust geen zwaar documentmanagementsysteem met werkstromen en rechtenmatrices.
Desktop, geen browser-tab
Eén programma dat bij de bestandsmap op het systeem kan — iets wat een gewone browser-tab niet zomaar mag. De interface zelf is webtechniek.
Versies zichtbaar, niet verwarrend
De huidige versie is duidelijk gemarkeerd; oudere versies blijven opvraagbaar maar staan niet in de weg.
SYSTEEMOVERZICHT
Hoe de onderdelen samenhangen.
Gebruiker
Bladert door de structuur en kiest een document.
WERKPLEK
File Portaal
Eén interface over de documentenmap: bladeren, openen, printen.
TAURI-SCHIL + NEXT.JS-UI, LOKAAL GESERVEERD
Centrale documentenmap
De bron. Documenten blijven hier staan; het portaal leest.
BESTANDSSYSTEEM
Systeem
Openen en afdrukken verlopen via de standaardvoorzieningen van het systeem.
STANDAARDAPPLICATIES · PRINTER
TECHNISCHE VERDIEPING
Drie keuzes, met hun prijs.
Desktop versus browser
Een desktop-app met Tauri in plaats van een website. Het portaal moet direct bij een bestandsmap op het systeem kunnen. Een browser-tab is daarvoor niet gemaakt; een desktop-schil wel.
- Trade-off
- Een desktop-app moet op de werkplek geïnstalleerd en bijgewerkt worden — dat is beheer dat een website niet heeft.
- Effect
- De gebruiker opent één programma en staat meteen in de documentenstructuur.
Web-interface in een native schil
De interface is Next.js en wordt binnen de app lokaal geserveerd. Vertrouwde webtechniek voor het bouwen van de interface, met de native schil alleen voor wat web niet kan: systeemtoegang.
- Trade-off
- Twee lagen in één app betekent een expliciete brug tussen interface en systeem — elke systeemactie is een gedefinieerde opdracht, niets gaat impliciet.
- Effect
- Een snelle, vertrouwde interface met desktopmogelijkheden.
Versiebeeld zonder beheerlast
De huidige versie prominent, oudere versies ingeklapt eronder. Wie een document pakt, moet zeker weten dat het de actuele versie is — zonder een versiebeheersysteem te hoeven leren.
- Trade-off
- Het portaal toont versies, het beheert ze niet. De map blijft de waarheid; discipline in de bron blijft nodig.
- Effect
- Minder kans dat een verouderde versie wordt geopend of geprint.
IN CODE
De brug tussen interface en bestandsmap
Dit is de kern van de architectuur: de interface vraagt, de schil leest — en alleen binnen de documentenmap.
// De documentenmap is de enige plek waar het portaal leest.fn binnen_bron(bron: &Path, gevraagd: &Path) -> Option<PathBuf> { let pad = bron.join(gevraagd).canonicalize().ok()?; pad.starts_with(bron).then_some(pad)} // Elke systeemactie is een expliciete, benoemde opdracht// die de interface via de Tauri-brug aanroept.#[tauri::command]fn lijst_map(bron: State<Bronmap>, map: String) -> Result<Vec<Item>, Fout> { let pad = binnen_bron(&bron.0, Path::new(&map)) .ok_or(Fout::BuitenBron)?; // Alleen lezen: het portaal beheert de bestanden niet. lees_items(&pad)} #[tauri::command]fn open_document(bron: State<Bronmap>, pad: String) -> Result<(), Fout> { let doel = binnen_bron(&bron.0, Path::new(&pad)) .ok_or(Fout::BuitenBron)?; // Openen gebeurt met de standaardapplicatie van het systeem. open_met_systeem(doel)}- De interface kan niets rechtstreeks op het systeem doen: elke actie loopt via een benoemde opdracht in de schil.
- Paden worden eerst herleid naar de documentenmap; wat daarbuiten valt, wordt niet gelezen.
- De opdrachten zijn leesacties — openen en printen worden doorgegeven aan het systeem.
GEGEVENSGRENZEN
Waar de gegevens wél en niet komen.
Documenten blijven in de bronmap
Het portaal voegt geen eigen opslag toe. Wat in de documentenmap staat, blijft daar staan — er ontstaat geen tweede kopie die kan gaan afwijken.
De interface draait lokaal
De Next.js-interface wordt binnen de desktop-app lokaal geserveerd. Bladeren en openen gebeuren op de eigen werkplek.
Gebouwd rond leesacties
Het portaal is ontworpen voor bladeren, openen en printen. Documenten bewerken of verplaatsen hoort bewust niet bij de scope van de interface.
RESULTAAT
Wat er nu anders is.
- Eén vaste route naar het juiste document: bladeren, openen en printen vanuit één interface, in plaats van door mappen klikken.
- De actuele versie is direct herkenbaar; oudere versies blijven bereikbaar zonder in de weg te staan.
- De bestandsmap zelf blijft de enige bron — het portaal introduceert geen tweede administratie.
ZOIETS NODIG?
Draait jouw documentproces nog op losse mappen en handwerk?
Een portaal als dit is één mogelijke vorm. We kijken eerst naar je proces — en bouwen daarna wat past.

