Fusion giver plads til testkøkken og samarbejder med startups

I naturskønne omgivelser i bygninger, der emmer af historie (og lidt af mozzarella og havredrik) ligger Øllingegaard mejeri, der i 2017 fusionerede med Naturmælk. En fusion, der har banet vejen for nye kunder, mere innovation og et testkøkken til samarbejde med startupvirksomheder med gode ideer.

Fra venstre: Food & Bio Cluster Denmarks Knud Hjortlund, Direktør i Naturmælk og Øllingegaard, Leif Friis Jørgensen og, Drifts- og udviklingsingeniør på Øllingegaard, Lasse Bagge

Næste år kan det økologiske mejeri Naturmælk fejre 30-års jubilæum. Men der er mange andre ting at fejre, hvis man spørger direktøren i Naturmælk og Øllingegaard. Den sidste tid har nemlig både budt på en fusion, en gourmetpris, udviklingen af en havredrik og store planer på tegnebrættet om et besøgscenter på Øllingegaard med testfaciliteter og -køkken til innovation.

320 kilometers fusion: Dyrene i syd og kunderne i øst

Når man taler om Naturmælk, går tankerne straks mod Sønderjylland, hvor Naturmælks mejeri har til huse i Tinglev. Men da vi var på besøg hos Naturmælk for at snakke innovation, grøn omstilling og nye tiltag for mejeriet, gik turen denne gang mod nordøst til Øllingegaard, hvor Naturmælk også har mejeri. Her mødtes vi med direktør Leif Friis Jørgensen og Lasse Bagge, der er drifts- og udviklingsingeniør på Øllingegaard. Tættere på kunderne i København, som Leif siger det. Selvom det lille mejeri mod øst nu ikke bærer præg af at ligge tæt på hovedstaden, og er mindst lige så idyllisk og fredfyldt som ”modermejeriet” i Sønderjylland.

Fusionen fandt sted i 2017, hvor de to mejerier samlede kræfterne under navnet De Økologiske Mejerier. Og selvom det nu er en del af noget større, lever det nordsjællandske mejeri selvstændigt videre med egen produktion og med store muligheder for at producere små partier af nytænkning, tilpasset kundernes behov.

Øllingegaard i nordsjælland emmer af idyl, og lidt af havremælk og mozzarella

Lytter til kundernes ønsker og behov

Naturmælk er et 100 % økologisk mejeri med et bredt sortiment af mejeriprodukter (og nu også planteprodukter, men mere om det lidt længere nede i artiklen). Og selvfølgelig har Naturmælk konkurrenter på markedet. Og også nogle ret store af slagsen, som ligesom Naturmælk tilbyder økologiske varer på tværs af hele deres sortiment. Men spørger man Naturmælk er der store fordele ved at være den lille og vågne. For når man er et mindre mejeri, er der nemlig gode muligheder for at lytte til sine kunder, lytte til og ønsker, og tilpasse produkterne, så de passer lige ned i kundernes behov.

Netop det, har Naturmælk flere gode eksempler på. Og også et med Øllingegaard som hovedperson. For en del år siden indgik Naturmælk nemlig et strategisk samarbejde med Roskilde Festival med udgangspunkt i at hjælpe festivalen med at blive økologisk. Dette partnerskab har i de seneste par år, affødet et behov for en dansk økologisk produceret mozzarella til de sultne festivalgæster, der hungrer efter fastfood med en snert af gourmet. Mozzarella som i dag produceres økologisk lige her på Øllingegaard.

Partnerskab som dette er blot et af mange partnerskaber. Men også mange mindre kunder finder værdien i mejeriet, fordi det netop har den fordel, at det, på grund af sin størrelse, har en fleksibilitet og kan lave mindre batches af produkter, der er specifikt tilpasset enkelte kunder i  detail og foodservices behov.

Havredrik giver god mening. Også for landmændene

Innovation, fleksibilitet og nytænkning synes at være vigtige pejlemærker for Naturmælk, der altid forsøger at være et skridt foran og tænkte nyt. På Øllingegaard producerer de nu også havredrik, der bliver hældt på flaske, lige bagved hovedhuset, hvor vi sidder og taler om innovation. Men hvordan hænger det sammen. At et mejeri byder et mælkefrit produkt indenfor i produktionen?

Hvis man spørger både Leif og Lasse, er svaret egentlig ret enkelt: ”vi tager jo ikke arbejdet fra vores producenter. Tværtimod. De landmænd der leverer mælken til Naturmælk, råder jo i forvejen over en masse hektar, der kan dyrkes til f.eks. havre.” forklarer Leif, og lægger samtidig vægt på, at Naturmælk ikke er på vej væk fra mejeriproduktionen, men at havredrik skal ses som et supplement til Naturmælks udbud, så der også findes noget til netop den målgruppe, der foretrækker et alternativ til mejeriproduktet.

Vil du være en del af et innovationskraftsamarbejde? Se alle Food & Bio Cluster Denmarks innovationskraftprojekter her

Lasse Bagge med baristaudgaven af havremælken
Lasse Bagge med baristaudgaven af havredrikken (Foto: Food & Bio Cluster Denmark)

Smagen er det vigtigste, hvis vi vil have folk med

Man kan producere nok så mange innovative fødevarer, der kan erstatte det ene og det andet, og er godt for noget tredje, men for Leif er der én ting der er essentielt, hvis man vil have succes med de alternative produkter. Nemlig smagen; ”Hvis vi bare skyder med spredehagl og producerer på livet løs af alternative produkter, uden at have fokus på smagen, så køber folk dit produkt én gang, og kommer ikke tilbage igen” forklarer Leif, for hvem struktur og altså særligt smag, er alfa og omega i produktudviklingen. Netop den gode smag har Naturmælk da også netop vundet en fornem pris for. Nemlig Gourmetprisen, som i sommer blev tildelt Naturmælks æbledrik, der består af 70% æblejuice og 30% valle fra mejeriets egen osteproduktion. Valle, som før var et overskudsprodukt hos Naturmælk, men som nu bidrager med både mundfylde og god smag til æbledrikken, på den helt rigtige måde, og samtidig bidrager til mindre spild og et mindre co2-aftryk.

Brænder du for at skabe fødevarer, som smager godt? Bliv en del af vores smagsnetværk (kun for medlemmer) 

Æbledrikken Ferm, der er lavet på 70 % æblemost og 30 % valle fra egen osteproduktion

Besøgscenter med testkøkken

Under besøget, blev der både tid til en god snak og en rundvisning i mejeriet. Og der blev også tid til et sneak-peak på noget, der bliver helt særligt for mejeriet i Øllingegaard. Nemlig det besøgscenter, som Leif og Lasse har tegnet store streger på tegnebrættet til, og som både skal huse testkøkken, café og butik. Ideen er, at der i testkøkkenet skal opstå innovation og nye gode ideer til fremtidens fødevarer. Ideer som blandt andet startups, der har noget på hjerte og hjerne til nye økologiske produkter, skal være med til at bringe frem i lyset. Hold øje med Naturmælk og Øllingegaard, hvis du som økologisk startup vil være med til at skabe endnu mere innovation til den økologiske udvikling på Øllingegaard.

Lasse Bagge fremviser lade, der snart skal blive til besøgscenter på Øllingegård
Lasse Bagge fremviser lade, der snart skal blive til besøgscenter på Øllingegaard

En del af et fællesskab og et vidensunivers

For både Leif og Lasse har et medlemskab af klyngen betydet et større netværk, og større mulighed for at finde samarbejdsrelationer. ”Et medlemskab af klyngen betyder, at vi ved hvad der sker, og vi kan holde os oplyst om de muligheder der findes. Både inden for tilskud, produktudvikling og markedstilgang. Vi er blevet en del af et fællesskab og et vidensunivers, der hjælper os til at holde os oplyste om, hvad der sker” Forklarer Leif, om den beslutning Naturmælk tog, da de tilbage i februar blev medlem af klyngen, og fortsætter,

”Food & Bio Cluster Denmark samler viden på området og gør det tilgængeligt for os. Det gælder bare om at sortere i det, og bruge det, som passer ind i netop vores virksomhed. Og så er det jo et udmærket sted til at finde nye legekammerater. Både i form af startups, og de lidt større spillere.”

Knud Hjortlund Hansen

Knud Hjortlund Hansen

Innovation Manager
Sine Riisager

Sine Riisager

Head of Members & Matchmaking

Vores +400 medlemmer styrker innovationen inden for fødevarer og bioressourcer

Food & Bio Cluster Denmark hjælper virksomheder med at accelerere innovation og bæredygtig udvikling.

Det gør vi gennem inspiration, netværk, samarbejder og forretningsudvikling i partnerskab med fx vidensinstitutioner, investorer og offentlige myndigheder.

Skal du også være med?

Flere nyheder fra Food & Bio Cluster Denmark

Error executing template "Designs/Swift/Paragraph/Custom_Swift_VideoPlayer.cshtml"
System.NullReferenceException: Object reference not set to an instance of an object.
   at CompiledRazorTemplates.Dynamic.RazorEngine_6ca3e109a4b54ed1bf18968146730e11.Execute() in E:\Dynamicweb.NET\Solutions\co3\enterprise-europe.swift.espresso4.dk\Files\Templates\Designs\Swift\Paragraph\Custom_Swift_VideoPlayer.cshtml:line 5
   at RazorEngine.Templating.TemplateBase.RazorEngine.Templating.ITemplate.Run(ExecuteContext context, TextWriter reader)
   at RazorEngine.Templating.RazorEngineService.RunCompile(ITemplateKey key, TextWriter writer, Type modelType, Object model, DynamicViewBag viewBag)
   at RazorEngine.Templating.RazorEngineServiceExtensions.<>c__DisplayClass16_0.<RunCompile>b__0(TextWriter writer)
   at RazorEngine.Templating.RazorEngineServiceExtensions.WithWriter(Action`1 withWriter)
   at Dynamicweb.Rendering.RazorTemplateRenderingProvider.Render(Template template)
   at Dynamicweb.Rendering.TemplateRenderingService.Render(Template template)
   at Dynamicweb.Rendering.Template.RenderRazorTemplate()

1 @inherits Dynamicweb.Rendering.ViewModelTemplate<Dynamicweb.Frontend.ParagraphViewModel> 2 @using Dynamicweb.Ecommerce.ProductCatalog 3 4 @{ 5 string ratioCssClass = Model.Item.GetRawValueString("AspectRatio") != "0" && Model.Item.GetRawValueString("AspectRatio") != "" ? "ratio" : ""; 6 string ratioVariable = Model.Item.GetRawValueString("AspectRatio") != "0" && Model.Item.GetRawValueString("AspectRatio") != "" ? "style=\"--bs-aspect-ratio: " + Model.Item.GetRawValueString("AspectRatio") + "\"" : ""; 7 8 string visual = Model.Item.GetRawValueString("Visual", "inline"); 9 10 string provider = Model.Item.GetRawValueString("VideoSourceProvider", "none"); 11 string videoId = Model.Item.GetString("VideoSourceID"); 12 13 Dynamicweb.Frontend.FileViewModel video = Model.Item.GetFile("VideoPath"); 14 string videoPath = video?.Path ?? ""; 15 16 string iconPath = "/Files/Templates/Designs/Swift/Assets/icons/play.svg"; 17 string theme = !string.IsNullOrWhiteSpace(Model.Item.GetRawValueString("Theme")) ? " theme " + Model.Item.GetRawValueString("Theme").Replace(" ", "").Trim().ToLower() : ""; 18 string alignment = Model.Item.GetRawValueString("Alignment", "align-items-center"); 19 } 20 21 @switch (visual) 22 { 23 case "inline": 24 <div class="h-100 position-relative grid grid-1 @(alignment) item_@Model.Item.SystemName.ToLower()"> 25 <div id="@Model.ID" class="user-select-none position-absolute top-0" style="scroll-margin-top:var(--header-height,150px)"></div> 26 27 @switch (provider) 28 { 29 case "youtube": 30 case "vimeo": 31 32 <div 33 id="player_@Pageview.CurrentParagraph.ID" 34 class="player plyr__video-embed @(theme) h-100 w-100" 35 data-plyr-provider="@provider" 36 data-plyr-embed-id="@videoId" 37 style="--plyr-color-main: var(--swift-foreground-color); " 38 > 39 </div> 40 41 break; 42 43 case "self-hosted": 44 45 <video 46 id="player_@Pageview.CurrentParagraph.ID" 47 class="player plyr__video-embed @(theme) h-100 w-100" 48 src="@videoPath" 49 style="--plyr-color-main: var(--swift-foreground-color);" 50 preload="metadata"> 51 </video> 52 53 break; 54 } 55 <script type="text/javascript" src="/Files/Templates/Designs/Swift/Assets/js/plyr.js"></script> 56 <script type="module"> 57 58 const player = new Plyr('#player_@Pageview.CurrentParagraph.ID', { 59 type: 'video', 60 youtube: { 61 noCookie: true, 62 showinfo: 0 63 }, 64 fullscreen: { 65 enabled: true, 66 iosNative: true, 67 } 68 }); 69 </script> 70 71 </div> 72 73 break; 74 75 case "poster-modal": 76 <div class="h-100 position-relative@(theme) grid grid-1 @(alignment) item_@Model.Item.SystemName.ToLower()"> 77 <div id="@Model.ID" class="user-select-none position-absolute top-0" style="scroll-margin-top:var(--header-height,150px)"></div> 78 <div class="player position-relative" data-player="player_@Pageview.CurrentParagraph.ID"> 79 80 @{ @RenderImage() } 81 82 <div class="position-absolute top-0 bottom-0 end-0 start-0 h-100 d-flex align-items-center justify-content-center"> 83 <button type="button" class="btn btn-primary rounded-circle lh-1 p-3" data-bs-toggle="modal" data-bs-target="#modal_@Pageview.CurrentParagraph.ID"> 84 <span class="icon-3"> 85 @ReadFile(iconPath) 86 </span> 87 <span class="visually-hidden">@Translate("Play video")</span> 88 </button> 89 </div> 90 </div> 91 </div> 92 93 <div class="modal fade" id="modal_@Pageview.CurrentParagraph.ID" tabindex="-1" aria-hidden="true"> 94 <div class="modal-dialog modal-xl modal-dialog-centered"> 95 <div class="modal-content"> 96 <div class="modal-body p-0"> 97 98 @switch (provider) 99 { 100 case "youtube" : 101 case "vimeo" : 102 103 <div 104 id="player_@Pageview.CurrentParagraph.ID" 105 class="player plyr__video-embed @(theme) h-100 w-100" 106 data-plyr-provider="@provider" 107 data-plyr-embed-id="@videoId" 108 style="--plyr-color-main: var(--swift-foreground-color); " 109 > 110 </div> 111 112 break; 113 114 case "self-hosted" : 115 116 <video 117 id="player_@Pageview.CurrentParagraph.ID" 118 class="player plyr__video-embed @(theme) h-100 w-100" 119 src="@videoPath" 120 style="--plyr-color-main: var(--swift-foreground-color);" 121 preload="metadata" 122 > 123 </video> 124 125 break; 126 } 127 <script type="text/javascript" src="/Files/Templates/Designs/Swift/Assets/js/plyr.js"></script> 128 <script type="module"> 129 130 var player = new Plyr('#player_@Pageview.CurrentParagraph.ID', { 131 youtube: { 132 noCookie: true, 133 showinfo: 0 134 }, 135 fullscreen: { 136 enabled: true, 137 iosNative: true, 138 } 139 }); 140 141 document.querySelector('#modal_@Pageview.CurrentParagraph.ID').addEventListener('show.bs.modal', function (event) { 142 player.togglePlay(); 143 144 player.on('ready', event => { 145 player.play(); 146 }); 147 }); 148 149 document.querySelector('#modal_@Pageview.CurrentParagraph.ID').addEventListener('hide.bs.modal', function (event) { 150 player.pause(); 151 }); 152 </script> 153 154 </div> 155 </div> 156 </div> 157 </div> 158 159 break; 160 } 161 162 @helper RenderImage() 163 { 164 string provider = Model.Item.GetRawValueString("VideoSourceProvider", "none"); 165 string videoId = Model.Item.GetString("VideoSourceID"); 166 string ratio = Model.Item.GetRawValueString("AspectRatio", ""); 167 ratio = ratio != "0" ? ratio : ""; 168 string ratioCssClass = ratio != "" && ratio != "fill" ? " ratio" : ""; 169 string ratioVariable = ratio != "" ? "style=\"--bs-aspect-ratio: " + ratio + "\"" : ""; 170 string fillClass = ratio == "fill" ? " h-100" : ""; 171 172 var parms = new Dictionary<string, object>(); 173 parms.Add("loading", "lazy"); 174 if (ratio == "fill") { 175 parms.Add("cssClass", "w-100 h-100"); 176 } 177 else 178 { 179 parms.Add("cssClass", "mw-100 mh-100"); 180 } 181 parms.Add("style",""); 182 parms.Add("alt", @Model.Item.GetString("ImageAltText")); 183 parms.Add("columns", Model.GridRowColumnCount); 184 185 <figure class="m-0@(ratioCssClass)@(fillClass)" @ratioVariable> 186 187 @if (string.IsNullOrEmpty(Model.Item.GetString("VideoPoster"))) 188 { 189 switch (provider) 190 { 191 case "youtube" : 192 @RenderYouTubePoster(videoId) 193 break; 194 195 case "vimeo" : 196 @RenderVimeoPoster(videoId) 197 break; 198 } 199 } 200 else 201 { 202 @RenderPartial("Components/Image.cshtml", Model.Item.GetFile("VideoPoster") ?? new Dynamicweb.Frontend.FileViewModel(), parms) 203 } 204 205 </figure> 206 } 207 208 @helper RenderYouTubePoster(string videoId) 209 { 210 <script type="module"> 211 function setVideoThumbnail(source) { 212 var figure = document.querySelector("[data-player='player_@Pageview.CurrentParagraph.ID'] figure"); 213 var thumbnail = document.createElement("img"); 214 thumbnail.style = "object-fit: cover;"; 215 thumbnail.classList.add('mw-100','mh-100'); 216 thumbnail.src = source; 217 figure.appendChild(thumbnail); 218 }; 219 setVideoThumbnail('https://i.ytimg.com/vi/@(videoId)/hqdefault.jpg'); 220 </script> 221 } 222 223 @helper RenderVimeoPoster(string videoId) 224 { 225 <script type="module"> 226 function setVideoThumbnail(source) { 227 let figure = document.querySelector("[data-player='player_@Pageview.CurrentParagraph.ID'] figure"); 228 let thumbnail = document.createElement("img"); 229 thumbnail.style = "object-fit: cover;"; 230 thumbnail.classList.add('mw-100','mh-100'); 231 thumbnail.src = source; 232 figure.appendChild(thumbnail); 233 }; 234 function getVimeoThumbnail() { 235 fetch('https://vimeo.com/api/v2/video/@(videoId).json') 236 .then(function(response) { 237 return response.text(); 238 }) 239 .then(function(data) { 240 let { thumbnail_large } = JSON.parse(data)[0]; 241 let thumbnail = `${thumbnail_large}`; 242 thumbnail = thumbnail.replace("_640", "_1920"); 243 setVideoThumbnail(thumbnail); 244 }) 245 .catch(error => { 246 console.log(error); 247 }); 248 } 249 250 getVimeoThumbnail(); 251 </script> 252 } 253

Projekter

Se hvilke danske og internationale projekter, klyngen deltager i.

Netværk

Vi samler deltagere i faglige netværk, hvor vi deler viden og erfaringer om fødevarer og bioressourcer.

Nyheder

Læs aktuelle nyheder om fødevarer og bioressourcer.

Kontakt

Vi står altid klar til at hjælpe dig med konkrete spørgsmål. Hvis ikke vi selv kan svare, ved vi helt sikkert, hvem der kan.