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