<?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: Arek</title>
    <description>The latest articles on DEV Community by Arek (@arkadiuszpabian).</description>
    <link>https://dev.to/arkadiuszpabian</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%2F3105882%2F49dd9bc6-8457-44d9-b031-72791a8ecf9d.png</url>
      <title>DEV Community: Arek</title>
      <link>https://dev.to/arkadiuszpabian</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/arkadiuszpabian"/>
    <language>en</language>
    <item>
      <title>Tips for passing CKAD exam at 1st attempt (2026 Edition)</title>
      <dc:creator>Arek</dc:creator>
      <pubDate>Tue, 28 Apr 2026 20:53:15 +0000</pubDate>
      <link>https://dev.to/arkadiuszpabian/tips-for-passing-ckad-exam-at-1st-attempt-2026-edition-4b99</link>
      <guid>https://dev.to/arkadiuszpabian/tips-for-passing-ckad-exam-at-1st-attempt-2026-edition-4b99</guid>
      <description>&lt;h2&gt;
  
  
  How it all started
&lt;/h2&gt;

&lt;p&gt;Last year we got news: our new client would be using Kubernetes extensively. I was both excited and scared, as I had only limited exposure to Docker in a professional setting, and K8s is the next level.&lt;/p&gt;

&lt;p&gt;After doing some research, I had a chat with my boss which resulted in funding for both the &lt;strong&gt;KodeKloud&lt;/strong&gt; platform and two attempts at the &lt;strong&gt;CKAD exam&lt;/strong&gt; (we lucked out by buying the exam at half price during Cyber Week). That started the long process of learning Kubernetes from scratch under the guidance of Mumshad Mannambeth and his excellent CKAD course.&lt;/p&gt;

&lt;h2&gt;
  
  
  CKAD Exam Structure
&lt;/h2&gt;

&lt;p&gt;The exam consists of &lt;strong&gt;~20 practical tasks&lt;/strong&gt; that you need to solve in &lt;strong&gt;120 minutes&lt;/strong&gt;. You are supervised by a proctor throughout the process.&lt;/p&gt;

&lt;p&gt;As of 2026, you are required to use the &lt;strong&gt;PSI Secure Browser&lt;/strong&gt;. This app monitors your system, kills unauthorized processes, and requires full access to your camera and microphone. &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;Important changes compared to previous years:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Copy-Paste:&lt;/strong&gt; Past exams used a browser extension that made copy-pasting clunky. Now, it's seamless using either &lt;code&gt;Ctrl+C&lt;/code&gt; / &lt;code&gt;Ctrl+V&lt;/code&gt; or &lt;code&gt;Ctrl+Shift+C&lt;/code&gt; / &lt;code&gt;Ctrl+Shift+V&lt;/code&gt;.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Context Switching:&lt;/strong&gt; While KodeKloud tests still use a simple context switch, both &lt;strong&gt;Killer.sh&lt;/strong&gt; and the actual exam often require you to &lt;code&gt;ssh&lt;/code&gt; into different nodes. &lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Aliases:&lt;/strong&gt; In the past, people recommended setting up complex aliases like &lt;code&gt;export do="--dry-run=client -o yaml"&lt;/code&gt;. Now, because you frequently switch sessions via SSH, these aliases don't persist unless you re-apply them. The only pre-configured alias is &lt;code&gt;k&lt;/code&gt; for &lt;code&gt;kubectl&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/blockquote&gt;

&lt;h3&gt;
  
  
  The Ingress vs. Gateway API Situation
&lt;/h3&gt;

&lt;p&gt;Around the turn of 2025/2026, the Gateway API became the new standard, and the traditional Nginx Ingress Controller was deprecated in many environments.&lt;/p&gt;

&lt;p&gt;However, don't let that fool you! In my actual exam (April 2026), I had two tasks regarding Ingress and zero tasks regarding Gateway API. This shows that the curriculum still leans heavily on Ingress.&lt;/p&gt;

&lt;p&gt;My advice: Be prepared for both. Mastering Gateway API is important for the future, but for the sake of the exam, make sure you can still write a classic Ingress YAML in your sleep.&lt;/p&gt;

&lt;h3&gt;
  
  
  Credly
&lt;/h3&gt;

&lt;p&gt;Passing the exam results in a PDF certificate that verifies your skills. You can also showcase your achievement with a digital badge on Credly:&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%2F6m9sphnhk6zkcrn72b51.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%2F6m9sphnhk6zkcrn72b51.png" alt="Credly site with CKAD certification badge" width="800" height="327"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Navigating the Documentation
&lt;/h2&gt;

&lt;p&gt;During the exam, you are allowed to use the official Kubernetes documentation, API docs, and discussion threads. This is crucial for copying YAML snippets that cannot be easily generated via imperative commands.&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Resource&lt;/th&gt;
&lt;th&gt;Strategy&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Network Policy&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Copy YAML (hard to memorize)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Persistent Volumes&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Copy YAML (use &lt;code&gt;Ctrl+F&lt;/code&gt; for "kind: PersistentVolume")&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Probes&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Memorize syntax or quick copy&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Env Vars (Secrets/CM)&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Memorize &lt;code&gt;env&lt;/code&gt;, &lt;code&gt;envFrom&lt;/code&gt;, &lt;code&gt;valueFrom&lt;/code&gt; to save time&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Ingress&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Copy YAML&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Resources/Limits&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Memorize (simple syntax)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Init &amp;amp; Sidecars&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Memorize (note: Native Sidecars use &lt;code&gt;restartPolicy: Always&lt;/code&gt;)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;SecurityContext&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Better to memorize (can be tricky to find quickly)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;CronJob&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Use docs if you forget the cron schedule format&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;TIP:&lt;/strong&gt; Before the exam, click through each resource in the docs to familiarize yourself with their location. Scrolling in the PSI browser can be painfully slow, so get used to using &lt;code&gt;Ctrl+F&lt;/code&gt;.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  The Learning Curve
&lt;/h2&gt;

&lt;p&gt;The start of the course was the hardest part—grasping the depth of the Kubernetes ecosystem. Understanding the theory behind cluster components and dependencies was time-consuming but essential for context.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The Middle Section (Core Concepts to Kustomize)&lt;/strong&gt; was the most useful. &lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Go Imperative:&lt;/strong&gt; From day one, study imperative commands. You need to create pods, deployments, and services as fast as possible. &lt;code&gt;k run&lt;/code&gt;, &lt;code&gt;k create&lt;/code&gt;, and &lt;code&gt;k expose&lt;/code&gt; are your best friends.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;YAML Mastery:&lt;/strong&gt; Learn to tweak resources quickly using &lt;code&gt;k apply -f &amp;lt;filename&amp;gt;&lt;/code&gt;. &lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;The Details:&lt;/strong&gt; Remember the subtle differences, like &lt;code&gt;port&lt;/code&gt; vs. &lt;code&gt;targetPort&lt;/code&gt; vs. &lt;code&gt;nodePort&lt;/code&gt;, or how Native Sidecars are now handled within the &lt;code&gt;initContainers&lt;/code&gt; field.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;The Final Stretch:&lt;/strong&gt;&lt;br&gt;
Don't skip the mock exams. I highly recommend the &lt;a href="https://learn.kodekloud.com/user/courses/ultimate-certified-kubernetes-application-developer-ckad-mock-exam-series" rel="noopener noreferrer"&gt;KodeKloud Mock Exam Series&lt;/a&gt;. They can be frustrating because a minor typo results in a zero score, but they keep you humble and precise. After these, I tackled &lt;strong&gt;Killer.sh&lt;/strong&gt;, scoring 66/113 on my first try without rushing. It gave me the confidence I needed.&lt;/p&gt;

&lt;h2&gt;
  
  
  How long does it take?
&lt;/h2&gt;

&lt;p&gt;I started with zero K8s knowledge in November 2025 and passed on April 24th, 2026. This included a 2-month break, followed by a final month of "crunching" the material.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Prepare yourself for around 4 months of learning at a steady pace, or faster if you are already familiar with some Kubernetes concepts.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;My take?&lt;/strong&gt; Don't over-test yourself. I was ready sooner than I thought. At some point, doing too many mock tests with rigid grading can actually degrade your confidence. If you find yourself stuck on minor caveats, step back, review the fundamentals, and then hit a &lt;strong&gt;Killer.sh&lt;/strong&gt; session. If you can handle that environment, you are ready for the real thing.&lt;/p&gt;

&lt;h2&gt;
  
  
  Useful Links
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;a href="https://github.com/cncf/curriculum" rel="noopener noreferrer"&gt;Official CKAD Curriculum (GitHub)&lt;/a&gt; - Check what is actually on the exam.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://kubernetes.io/docs/" rel="noopener noreferrer"&gt;Kubernetes Documentation&lt;/a&gt; - Your only allowed friend during the test.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://killer.sh" rel="noopener noreferrer"&gt;Killer.sh&lt;/a&gt; - The best exam simulator (usually harder than the real thing!).&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://kodekloud.com/courses/certified-kubernetes-application-developer-ckad/" rel="noopener noreferrer"&gt;KodeKloud CKAD Course&lt;/a&gt; - My primary learning resource.&lt;/li&gt;
&lt;li&gt;
&lt;a href="https://learn.kodekloud.com/user/courses/ultimate-certified-kubernetes-application-developer-ckad-mock-exam-series" rel="noopener noreferrer"&gt;KodeKloud CKAD Mock exams&lt;/a&gt; - Mock tests to learn how to work under pressure of time.&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>kubernetes</category>
      <category>certification</category>
      <category>ckad</category>
      <category>devops</category>
    </item>
    <item>
      <title>How to make splash screen with progress tracking in Angular?</title>
      <dc:creator>Arek</dc:creator>
      <pubDate>Sun, 08 Jun 2025 20:18:18 +0000</pubDate>
      <link>https://dev.to/arkadiuszpabian/how-to-make-splash-screen-with-progress-tracking-in-angular-49id</link>
      <guid>https://dev.to/arkadiuszpabian/how-to-make-splash-screen-with-progress-tracking-in-angular-49id</guid>
      <description>&lt;h2&gt;
  
  
  📝 Preface
&lt;/h2&gt;

&lt;p&gt;Loading all initialization data in an Angular application can sometimes take a while—especially over slow internet connections. Displaying a blank screen during this time can lead to a poor user experience.&lt;/p&gt;

&lt;p&gt;To mitigate this, we can introduce a splash (or loading) screen to provide users with immediate visual feedback, making the app feel more responsive and polished.&lt;/p&gt;

&lt;h2&gt;
  
  
  🧪 Demo Project
&lt;/h2&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%2Fgi5bjrnnd9fb9d40zu56.gif" 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%2Fgi5bjrnnd9fb9d40zu56.gif" title="Splash Screen Demo" alt="Splash Screen Demo" width="510" height="442"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;The demo below showcases a working implementation of a splash screen:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;⚡ Try this code on &lt;a href="https://stackblitz.com/~/github.com/ArkadiuszPabian/NgSplashScreen" rel="noopener noreferrer"&gt;StackBlitz&lt;/a&gt; or &lt;a href="https://github.com/ArkadiuszPabian/NgSplashScreen" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  Should the Splash Screen Be a Component?
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Short answer: ❌ no.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Here's why:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Angular components aren’t rendered until after the framework bootstraps. This means any splash screen defined as a component would appear too late to be useful.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Initialization tasks like HTTP requests should be handled in provideAppInitializer, before Angular even begins rendering the UI.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;File&lt;/strong&gt;: &lt;code&gt;app/app.config.ts&lt;/code&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;⚡ &lt;a href="https://stackblitz.com/~/github.com/ArkadiuszPabian/NgSplashScreen?file=src/app/app.config.ts:L26" rel="noopener noreferrer"&gt;View on StackBlitz&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;    &lt;span class="nf"&gt;provideAppInitializer&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="k"&gt;async &lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
      &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="na"&gt;initializers&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;AsyncInitializer&lt;/span&gt;&lt;span class="p"&gt;[]&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
        &lt;span class="nf"&gt;inject&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;ConfigLoaderService&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
        &lt;span class="nf"&gt;inject&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;ConnectionCheckerService&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
        &lt;span class="nf"&gt;inject&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;StorageInitializerService&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
        &lt;span class="nf"&gt;inject&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;TranslationLoaderService&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
      &lt;span class="p"&gt;];&lt;/span&gt;

      &lt;span class="k"&gt;for &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;initializer&lt;/span&gt; &lt;span class="k"&gt;of&lt;/span&gt; &lt;span class="nx"&gt;initializers&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;performAsyncInitialization&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;initializer&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
      &lt;span class="p"&gt;}&lt;/span&gt;

      &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;splashFadeOut&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
    &lt;span class="p"&gt;}),&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;blockquote&gt;
&lt;p&gt;For demonstration purposes, &lt;code&gt;performAsyncInitialization()&lt;/code&gt; simulates a delay by waiting one second.&lt;/p&gt;

&lt;p&gt;The &lt;code&gt;splashFadeOut()&lt;/code&gt; function starts the fade-out animation and waits for it to complete.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;h2&gt;
  
  
  🎨 Where Should Splash Screen Styles and Scripts Go?
&lt;/h2&gt;

&lt;p&gt;You can embed splash screen styles and scripts directly inside the &lt;code&gt;&amp;lt;app-root&amp;gt;&lt;/code&gt; tag in index.html. This ensures they appear instantly and can be easily removed once the app is initialized, leaving no residue behind.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;File&lt;/strong&gt;: &lt;code&gt;index.html&lt;/code&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;⚡ &lt;a href="https://stackblitz.com/~/github.com/ArkadiuszPabian/NgSplashScreen?file=src/index.html" rel="noopener noreferrer"&gt;View on StackBlitz&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;app-root&amp;gt;&lt;/span&gt;
  &lt;span class="c"&gt;&amp;lt;!-- START Splash screen --&amp;gt;&lt;/span&gt;

  &lt;span class="c"&gt;&amp;lt;!-- Styles --&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;style&amp;gt;&lt;/span&gt;
    &lt;span class="o"&gt;[...]&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/style&amp;gt;&lt;/span&gt;

  &lt;span class="c"&gt;&amp;lt;!-- Content --&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"splash-container"&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"splash"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"circle-outline"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;svg&amp;gt;&lt;/span&gt;
      [...]
    &lt;span class="nt"&gt;&amp;lt;/svg&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;div&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"loading-text"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;span&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"updater"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Loading Angular app&lt;span class="nt"&gt;&amp;lt;/span&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;span&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"jumping-dots"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;span&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"dot"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/span&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;span&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"dot"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/span&amp;gt;&lt;/span&gt;
        &lt;span class="nt"&gt;&amp;lt;span&lt;/span&gt; &lt;span class="na"&gt;class=&lt;/span&gt;&lt;span class="s"&gt;"dot"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&amp;lt;/span&amp;gt;&lt;/span&gt;
      &lt;span class="nt"&gt;&amp;lt;/span&amp;gt;&lt;/span&gt;
    &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;
  &lt;span class="nt"&gt;&amp;lt;/div&amp;gt;&lt;/span&gt;

  &lt;span class="c"&gt;&amp;lt;!-- Place for scripts --&amp;gt;&lt;/span&gt;

  &lt;span class="c"&gt;&amp;lt;!-- END Splash screen --&amp;gt;&lt;/span&gt;
&lt;span class="nt"&gt;&amp;lt;/app-root&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;If the splash screen code is large, consider moving styles and scripts into external files for better maintainability. However, this introduces a trade-off: additional HTTP requests will slightly delay the splash screen's appearance. Also, these files must reside in the public folder, increasing the final build size.&lt;/p&gt;

&lt;h2&gt;
  
  
  🔄 Can I Update the Splash Screen Dynamically?
&lt;/h2&gt;

&lt;p&gt;Yes, you can dynamically modify the splash screen—for example, to show real-time progress updates.&lt;/p&gt;

&lt;p&gt;To do this, reference a DOM element by its &lt;code&gt;id&lt;/code&gt; and update its content during app initialization. Be mindful: both the HTML and Angular logic must reference the same &lt;code&gt;id&lt;/code&gt;, so consistency is key.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;File&lt;/strong&gt;: &lt;code&gt;index.html&lt;/code&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;⚡ &lt;a href="https://stackblitz.com/~/github.com/ArkadiuszPabian/NgSplashScreen?file=src/index.html:L157" rel="noopener noreferrer"&gt;View on StackBlitz&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight html"&gt;&lt;code&gt;&lt;span class="nt"&gt;&amp;lt;span&lt;/span&gt; &lt;span class="na"&gt;id=&lt;/span&gt;&lt;span class="s"&gt;"updater"&lt;/span&gt;&lt;span class="nt"&gt;&amp;gt;&lt;/span&gt;Loading Angular app&lt;span class="nt"&gt;&amp;lt;/span&amp;gt;&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;File&lt;/strong&gt;: &lt;code&gt;app/core/utils/splash-screen.utils.ts&lt;/code&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;⚡ &lt;a href="https://stackblitz.com/~/github.com/ArkadiuszPabian/NgSplashScreen?file=src/app/core/utils/splash-screen.utils.ts:L9" rel="noopener noreferrer"&gt;View on StackBlitz&lt;/a&gt;&lt;br&gt;
&lt;/p&gt;
&lt;/blockquote&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight typescript"&gt;&lt;code&gt;&lt;span class="k"&gt;export&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;updateTitle&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;text&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kr"&gt;string&lt;/span&gt;&lt;span class="p"&gt;):&lt;/span&gt; &lt;span class="k"&gt;void&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
  &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;elem&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nb"&gt;document&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;getElementById&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;updater&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
  &lt;span class="k"&gt;if &lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;elem&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nx"&gt;elem&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;textContent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;text&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
  &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  📌 Bottom line
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Splash screens in Angular are not only possible—they're practical.&lt;/li&gt;
&lt;li&gt;Since Angular lacks a built-in solution, a custom inline approach is the most efficient and reliable.&lt;/li&gt;
&lt;li&gt;Keep splash logic minimal and inline, and ensure it is removed cleanly once the app is initialized.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  🕒 What's Next (Advanced Topics)
&lt;/h2&gt;

&lt;p&gt;To elevate this implementation and make it suitable for production-grade apps, here are some advanced areas worth exploring:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;⚡ Optimize Splash Screen Load Time After First Load&lt;br&gt;
Cache initialization data (e.g. app config, feature flags) using LocalStorage or IndexedDB, so it can be reused without delay.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;🛠️ Integrate with Service Worker for Offline &amp;amp; Fast Loads&lt;br&gt;
Ensure splash screen assets (HTML, images, inline styles) are cached by your Angular Service Worker.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

</description>
      <category>angular</category>
      <category>webdev</category>
      <category>ux</category>
      <category>frontend</category>
    </item>
  </channel>
</rss>
