<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Jeroen van Kempen</title>
    <description>The latest articles on DEV Community by Jeroen van Kempen (@jvk_io).</description>
    <link>https://dev.to/jvk_io</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F2242039%2F40071b55-cb1e-4d61-b3b7-5816e7066602.png</url>
      <title>DEV Community: Jeroen van Kempen</title>
      <link>https://dev.to/jvk_io</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/jvk_io"/>
    <language>en</language>
    <item>
      <title>Umbraco package of the month: xStatic</title>
      <dc:creator>Jeroen van Kempen</dc:creator>
      <pubDate>Fri, 27 Dec 2024 03:49:54 +0000</pubDate>
      <link>https://dev.to/jvk_io/umbraco-package-of-the-month-xstatic-28fo</link>
      <guid>https://dev.to/jvk_io/umbraco-package-of-the-month-xstatic-28fo</guid>
      <description>&lt;p&gt;This is the last Blog of the year already and what a wonderful time has it been, so for the last time this year we are going to look at the package xStatic.&lt;/p&gt;

&lt;p&gt;xStatic is a package that statically generates your Umbraco website and gives you the ability to deploy it in a myriad of ways, like AWS, Netlify, FTP or via Git. In my case, we are looking at deploying it via Netlify because it is easy and free.&lt;/p&gt;

&lt;h2&gt;
  
  
  Setup
&lt;/h2&gt;

&lt;p&gt;Firstly, you will need to install the xStatic NuGet package. With this, you can build and deploy your site to a local folder. To add the other deployment options, you will need to add one of the other packages of xStatic. In my case, xStatic.Netlify.&lt;/p&gt;

&lt;p&gt;After installing it, you will need to add "services.AddXStatic().Automatic().Build();" to your startup file. If you have added one of the other packages, there is a chance that it will not detect it correctly, and then you will also need to add an extra line of code. In Netlify's case, "builder.Services.AddNetlifyActions();".&lt;/p&gt;

&lt;p&gt;Now just add the xStatic file in the App_Plugins to your project, and you are ready to start. After logging in, you will first need to set up the xStatic tab by adding it to the correct user role.&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi735p4w3e99szd0qa1ra.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fi735p4w3e99szd0qa1ra.png" alt="overview of the userrole admin with the added new tab for xSatic" width="800" height="632"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Now in the new tab, you will get the option to create a new site where you will need to fill in the root node from which it will generate. Additionally, you can configure the media files or folders you want to add, how to export the files in HTML or JSON, and the asset paths for all stylesheets or JavaScript files.&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzzjflj3uumb3lzun9gb6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fzzjflj3uumb3lzun9gb6.png" alt="the field that you can fill to setup your site" width="800" height="699"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;For deployment, you can set it up if it should auto-publish when a node is published and how it should be published. In my case, that also includes the access token and the site ID from Netlify.&lt;br&gt;
After which you will see the site and get the option to build, deploy, or the option to download the code if you want to.&lt;br&gt;
&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fil9uip3y77zwwxz3kqiz.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fil9uip3y77zwwxz3kqiz.png" alt="website congiruration information" width="455" height="357"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Uses and limitations
&lt;/h2&gt;

&lt;p&gt;Now, what are the use cases and limits for this package?&lt;br&gt;
By generating a static site, it will be a lot quicker to use than normal and you can save a on hosting costs. Additionally, by using this setup instead of just creating a static site yourself, you can always make the change to no longer use a static setup and use more of the functionality of Umbraco. You can more easily fill in the correct data and use it more globally, additionally it will be a lot easier to add more pages.&lt;br&gt;
There are also some limitations by using this setup like limited use of some of the great Umbraco functionality like search or dynamically getting you data. Additionally, because you are only hosting the site and not the CMS this setup is more for developers even getting the data to be shared with other people will need extra work like hosting a SQL Server somewhere or using uSync.&lt;/p&gt;

&lt;h2&gt;
  
  
  Opinion
&lt;/h2&gt;

&lt;p&gt;In my opinion, it is a nice way to set up a simple hobby site because you always stop when you have to think about hosting and how much it will cost. Otherwise, I don't see a use case for clients besides small one-off campaign sites.&lt;/p&gt;

</description>
      <category>umbraco</category>
      <category>csharp</category>
      <category>webdev</category>
      <category>programming</category>
    </item>
    <item>
      <title>Umbraco package of the month: Uskinned</title>
      <dc:creator>Jeroen van Kempen</dc:creator>
      <pubDate>Wed, 13 Nov 2024 12:20:24 +0000</pubDate>
      <link>https://dev.to/jvk_io/umbraco-package-of-the-month-uskinned-598</link>
      <guid>https://dev.to/jvk_io/umbraco-package-of-the-month-uskinned-598</guid>
      <description>&lt;p&gt;This month, I'm diving into the Uskinned "package," if you can call it that. It's quite well-known, but it was new to me until Codegarden. I've always wanted to explore it but never had the time to tackle such a substantial package—until now.&lt;/p&gt;

&lt;h2&gt;
  
  
  What is it?
&lt;/h2&gt;

&lt;p&gt;In their own words “uSkinned Site Builder is the only all-in-one, future-proof website solution available in the Umbraco ecosystem.” but wat does that entail? I will look at the features it adds, the problem it is trying to solve and the costs of using it.&lt;/p&gt;

&lt;h3&gt;
  
  
  Problem
&lt;/h3&gt;

&lt;p&gt;The issue it aims to resolve is the initial setup of a project with essential core functionalities that every website might need. This allows you to easily set up your website without repeating the same tasks for every site, saving you and your client both time and money. As a result, you can dedicate more time to developing complex and custom features.&lt;/p&gt;

&lt;h3&gt;
  
  
  Setup
&lt;/h3&gt;

&lt;p&gt;You can either install the package in your own solution or you can get a site from uSKinned them self’s and let them handle everything. &lt;br&gt;
To Setup the package it is as simple as adding the package and building, but to see it in action locally you will need to have a licence.&lt;br&gt;
For this blog I have used the week free online version to see the package in action and added it to my local test project to see more of the details.&lt;/p&gt;

&lt;h3&gt;
  
  
  Features
&lt;/h3&gt;

&lt;p&gt;You can setup the full website experience from setting up a shop with SNIPCART or ECWID or using external form handlers like mailchimp with recaptcha. In addition to those extra features, there are core elements of the website that I will explore in more detail.&lt;/p&gt;

&lt;h4&gt;
  
  
  Website setup
&lt;/h4&gt;

&lt;p&gt;When you add the package to your project there suddenly will be allot of more pages and datatypes. From the technical pages like the sitemap &amp;amp; robots.txt and functional pages like login and the search page. &lt;br&gt;
Next to that are the more content focused pages, like overviews or lose content pages&lt;br&gt;
By default you can only add content pages to the home node no new overview pages or any other pages. If you have added the package to your local setup you can change this. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F713dtu7qveznp2n3w1jp.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F713dtu7qveznp2n3w1jp.png" alt="All page options you get by default" width="359" height="779"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Templates
&lt;/h4&gt;

&lt;p&gt;Another feature is the ability to setup templates for all kind of pages for easy use of the content team so nothing important gets forgotten.&lt;/p&gt;

&lt;h4&gt;
  
  
  Design
&lt;/h4&gt;

&lt;p&gt;USkinned adds a new node called ‘Design’ where you can add a design for your website. In these designs you can change nearly everything like the layout, logos, fonts, colors used, custom scripts and much more. For the colors you can even setup a custom color pallet, sadly is does not automatically update it if you change it.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuxdcjsdl9seaul4fjsr2.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fuxdcjsdl9seaul4fjsr2.png" alt="The website designer" width="800" height="594"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffxva3aqbxhd9x2jim974.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ffxva3aqbxhd9x2jim974.png" alt="An example how to set color for a button" width="800" height="596"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Globals
&lt;/h4&gt;

&lt;p&gt;Another node they add is the ‘Global’ node where the general settings are stored, like the chosen design, reading direction, how to handle forms, components you want on every page, and many more options. There is also a specific place for the navigation, footer, and reusable items. There, you can create groups of reusable items to use all over your website with the reusable component or pod's per page.&lt;/p&gt;

&lt;p&gt;(Components are big blocks that take up the full width of the page, and pods are smaller and can be added into some blocks)&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftcpypofctbbe3hmviku7.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Ftcpypofctbbe3hmviku7.png" alt="Overview of all global categories" width="800" height="593"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Costs
&lt;/h3&gt;

&lt;p&gt;If you just want a simple website you can host it at uSkinned for 36€ or if you want to use uSkinned in your own setup it is a onetime payment of 319€ for one site.&lt;/p&gt;

&lt;h4&gt;
  
  
  Hosting cost
&lt;/h4&gt;

&lt;p&gt;An easy comparison is to check the hosting options verses Umbraco self&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;/th&gt;
&lt;th&gt;uSKinned&lt;/th&gt;
&lt;th&gt;Umbraco cloud&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Cost&lt;/td&gt;
&lt;td&gt;35€&lt;/td&gt;
&lt;td&gt;40€&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Features&lt;/td&gt;
&lt;td&gt;uSninned designer&lt;/td&gt;
&lt;td&gt;Forms, deploy&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Hosting&lt;/td&gt;
&lt;td&gt;SSL https, azure&lt;/td&gt;
&lt;td&gt;TLS https, cloud&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Support&lt;/td&gt;
&lt;td&gt;Backups, upgrades, 24/7 suport&lt;/td&gt;
&lt;td&gt;Upgrades, buisiness hours&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Domains&lt;/td&gt;
&lt;td&gt;1&lt;/td&gt;
&lt;td&gt;10&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;To conclude, it is a great package that allows you to quickly set up an entire core website, which you can expand upon as needed. It ensures that you don't forget any important elements. While some features may be excessive for certain sites, they provide valuable future-proofing.&lt;/p&gt;

&lt;p&gt;As a backend developer, I find it particularly useful for handling the look and feel of the website.&lt;/p&gt;

&lt;p&gt;However, I am disappointed that there is no free version available for local testing. Additionally, I don't understand why the default settings limit the types of pages you can create.&lt;/p&gt;

&lt;h3&gt;
  
  
  OPINION
&lt;/h3&gt;

&lt;p&gt;I would easily choose this package when I want to create my own site, but I would go for a custom hosting to have some freedom in how the website is set up maybe even combining it with Umbraco cloud.&lt;/p&gt;

&lt;p&gt;Nevertheless the entire team deserves a #H5YR&lt;/p&gt;

</description>
      <category>umbraco</category>
      <category>webdev</category>
      <category>programming</category>
      <category>csharp</category>
    </item>
    <item>
      <title>Umbraco package of the month: Auto dictionaries</title>
      <dc:creator>Jeroen van Kempen</dc:creator>
      <pubDate>Mon, 21 Oct 2024 11:57:14 +0000</pubDate>
      <link>https://dev.to/jvk_io/umbraco-package-of-the-month-auto-dictionaries-3pah</link>
      <guid>https://dev.to/jvk_io/umbraco-package-of-the-month-auto-dictionaries-3pah</guid>
      <description>&lt;p&gt;I am doing a monthly blog about different package within the Umbraco landscape. Previous blogs can be found over at &lt;a href="https://techhub.iodigital.com" rel="noopener noreferrer"&gt;https://techhub.iodigital.com&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This month, I am looking at the package "Auto dictionaries" a package that detects static content and allows you to set the text to an existing dictionary item or create a new translation. You can expand it by using a translator like DeepL or Microsoft Translation to automatically add those translations.&lt;/p&gt;

&lt;h2&gt;
  
  
  Setup
&lt;/h2&gt;

&lt;p&gt;Unless you want to use the auto-translation feature, no other setup is needed beyond just installing the package. If you want to make use of the auto-translators, you need to set up the translator you want to use and the API key, endpoint, or region based on the translator you are going to use. In my case, I used the free version of DeepL, and all I had to do was set up the API key.&lt;/p&gt;

&lt;h2&gt;
  
  
  How does it work
&lt;/h2&gt;

&lt;p&gt;The package detects static content found by a complex bit of regex. These finds will be collected in a new overview under the "Translations" tab. In this overview, you will see a list of the configured .cshtml files in Umbraco—think about the _layout file, blocks, or pages.&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F70etrilea1nftfp0bl60.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F70etrilea1nftfp0bl60.png" alt="Pages overview, which shows how many static texts there are" width="800" height="609"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;When going into detail on one of these pages, there is an overview of all the static texts the package has found. You can then choose to match an already existing dictionary item or to add a new dictionary item. If you have a translator configured, it will also give you an option to generate a translation based on the original text.&lt;br&gt;
&lt;a href="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flshm52awy0py8fi323n8.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Flshm52awy0py8fi323n8.png" alt="detailed view of all the static pieces of text on one page" width="800" height="585"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;When adding the translation, it replaces the static text with the dictionary item (@Umbraco.GetDictionaryValue("ClickHere")) in the .cshtml file. This means that this package is more for developers than clients because the changes will just be removed after a deployment.&lt;/p&gt;

&lt;h2&gt;
  
  
  Issues
&lt;/h2&gt;

&lt;p&gt;There was one issue I had when trying out this package with languages other than English, and one call to action to help improve the existing regex.&lt;/p&gt;

&lt;h3&gt;
  
  
  Other languages
&lt;/h3&gt;

&lt;p&gt;My attempts to use the translator from Dutch to English came with a problem. Whether it is an issue with the package or the free version of DeepL, I am not 100% sure. But it is a notable problem if you have project that use two different languages than English. I have made an issue on GitHub to get more detail about it.&lt;br&gt;
Additionally, it is worth noting that even when using English as the default language, it does not detect the language of the text you are translating it just assumes the text was in English.&lt;/p&gt;

&lt;h3&gt;
  
  
  Regex
&lt;/h3&gt;

&lt;p&gt;The package creator, "Johannes Lantz," has an open issue in which he asks for anybody's help to improve the way static texts get detected, because everybody's setup is different and there are way too many variables to think about. So, if you are a regex expert, make sure to see if you can help.&lt;br&gt;
&lt;a href="https://github.com/Lantzify/auto-dictionaries/issues/7" rel="noopener noreferrer"&gt;https://github.com/Lantzify/auto-dictionaries/issues/7&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Personally, I am not a regex expert, but after pushing the limits of the regex, I found the biggest issue are external scripts, JavaScript code in the .cshtml files or text with &lt;code&gt;&amp;lt;a&amp;gt;&lt;/code&gt; attributes in the middle for example. But for the normal pieces of text in buttons, titles, or texts, it works great.&lt;/p&gt;

&lt;h2&gt;
  
  
  More functionality
&lt;/h2&gt;

&lt;p&gt;It is a nice feature to be able to auto-translate the static pieces of text, but it is currently only available when adding new items from one of the new overviews. I would also like this to be an option on the already existing dictionary items.&lt;br&gt;
When hearing about this package, I thought this would already be a feature, but sadly it was not. So, I have asked for it to be added on GitHub.&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;I find this a great package, especially if you have old stuff or just a lot of pages or blocks. However, it still has a few kinks to work out, particularly the issues with languages other than English. I like the overview it gives you of all the work you have to do, but it is currently more for developers than for clients.&lt;/p&gt;

&lt;p&gt;I would like to thank Johannes Lantz for this package and wish him good luck for the future #H5YR&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/Lantzify/auto-dictionaries" rel="noopener noreferrer"&gt;https://github.com/Lantzify/auto-dictionaries&lt;/a&gt;&lt;br&gt;
&lt;a href="https://marketplace.umbraco.com/package/autodictionaries" rel="noopener noreferrer"&gt;https://marketplace.umbraco.com/package/autodictionaries&lt;/a&gt;&lt;/p&gt;

</description>
      <category>umbraco</category>
      <category>csharp</category>
      <category>webdev</category>
      <category>programming</category>
    </item>
  </channel>
</rss>
