<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Allgemein Archives - Mobile USTP MKL</title>
	<atom:link href="https://mobile.fhstp.ac.at/category/allgemein/feed/" rel="self" type="application/rss+xml" />
	<link>https://mobile.fhstp.ac.at/category/allgemein/</link>
	<description>Die &#34;Mobile Forschungsgruppe&#34; der USTP, sie  sammelt hier alles zu den Themen Design, UX und Entwicklung mobiler Applikationen</description>
	<lastBuildDate>Mon, 15 Jun 2026 09:44:24 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	

<image>
	<url>https://mobile.fhstp.ac.at/wp-content/uploads/2025/03/icon-120x120.webp</url>
	<title>Allgemein Archives - Mobile USTP MKL</title>
	<link>https://mobile.fhstp.ac.at/category/allgemein/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Microservices at the Edge: Why We Use Cloudflare Workers for swiva.app</title>
		<link>https://mobile.fhstp.ac.at/development/webdevelopment/microservices-at-the-edge-why-we-use-cloudflare-workers-for-swiva-app/</link>
					<comments>https://mobile.fhstp.ac.at/development/webdevelopment/microservices-at-the-edge-why-we-use-cloudflare-workers-for-swiva-app/#respond</comments>
		
		<dc:creator><![CDATA[Daniel Studera]]></dc:creator>
		<pubDate>Mon, 15 Jun 2026 09:40:14 +0000</pubDate>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[Projekte]]></category>
		<category><![CDATA[Studium]]></category>
		<category><![CDATA[Webdevelopment]]></category>
		<category><![CDATA[cloudflare]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[mobile]]></category>
		<category><![CDATA[QR-Code]]></category>
		<category><![CDATA[swiva]]></category>
		<guid isPermaLink="false">https://mobile.fhstp.ac.at/?p=15887</guid>

					<description><![CDATA[<p>When building an app, it is very easy to put everything into one big backend. At the beginning this feels simple. One server, one API, one place for all logic. But after a while, the backend starts doing things it was never really meant to do. Redirects, small integrations, tracking, webhook handling, feedback forms and <a class="read-more" href="https://mobile.fhstp.ac.at/development/webdevelopment/microservices-at-the-edge-why-we-use-cloudflare-workers-for-swiva-app/">[...]</a></p>
<p>The post <a href="https://mobile.fhstp.ac.at/development/webdevelopment/microservices-at-the-edge-why-we-use-cloudflare-workers-for-swiva-app/">Microservices at the Edge: Why We Use Cloudflare Workers for swiva.app</a> appeared first on <a href="https://mobile.fhstp.ac.at">Mobile USTP MKL</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>When building an app, it is very easy to put everything into one big backend. At the beginning this feels simple. One server, one API, one place for all logic. But after a while, the backend starts doing things it was never really meant to do. Redirects, small integrations, tracking, webhook handling, feedback forms and other tiny helper tasks all end up in the same system.</p>



<p>For Swiva, we decided to keep some of these tasks out of our main backend and move them closer to the user, to the edge. In our case, this means using Cloudflare Workers. A Worker is a small serverless function that runs on Cloudflare’s global network, close to the user. It can handle a request, run a bit of JavaScript or TypeScript and return a response without needing our main backend at all.</p>



<p>That makes Workers a good fit for small features that need to be fast, but do not need a full backend route, database connection or heavy infrastructure.</p>



<h2 class="wp-block-heading">The problem with app store redirects</h2>



<p>A simple example is our app download link. When someone scans a QR code on a poster, sticker or social media post, they should end up in the right place. iPhone users should go to the Apple App Store, Android users should go to Google Play and desktop users should go to our website.</p>



<p>The normal solution would be to send everyone to a page on our website. The page loads, JavaScript runs in the browser, checks the device and then redirects the user. That works, but it is not ideal. The user may see a blank page or a short loading screen before the store opens. For an app download link, every small delay matters.</p>



<h2 class="wp-block-heading">A smart redirect at the edge</h2>



<p>Instead of loading a full page, we use a Cloudflare Worker. The Worker runs before the request even reaches our main server. It checks the user agent from the HTTP request, decides if the user is on iOS, Android or desktop and immediately returns a 302 redirect.  So the QR code does not point to a heavy website. It points to a tiny edge function.</p>



<p>A simplified version can look like this:</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: jscript; title: ; notranslate">
export default {
  async fetch(request, env, ctx) {
    const userAgent = request.headers.get(&quot;user-agent&quot;) || &quot;&quot;;

    const isIOS = /iPhone|iPad|iPod/i.test(userAgent);
    const isAndroid = /Android/i.test(userAgent);

    const targets = {
      ios: &quot;https://apps.apple.com/at/app/swiva/id6769160022&quot;,
      android: &quot;https://play.google.com/store/apps/details?id=app.swiva&quot;,
      desktop: &quot;https://swiva.app&quot;,
      fallback: &quot;https://swiva.app&quot;,
    };

    let platform = &quot;fallback&quot;;

    if (isIOS) {
      platform = &quot;ios&quot;;
    } else if (isAndroid) {
      platform = &quot;android&quot;;
    } else {
      platform = &quot;desktop&quot;;
    }

    return Response.redirect(targets&#x5B;platform], 302);
  },
};
</pre></div>


<p>This is not a huge feature. But it solves a real problem in a very clean way.<br></p>



<h2 class="wp-block-heading">Tracking without a heavy analytics script</h2>



<p>We also want to know where our downloads come from. A QR code on a poster, a link in a story and a link on a website should not all look the same. Instead of loading a full analytics script, the Worker can read a source parameter from the URL, add UTM parameters to the final link and count the redirect in Cloudflare KV. The important part is that this should not slow down the redirect. For that, we use <code>ctx.waitUntil()</code>.</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: jscript; title: ; notranslate">
const source =
  url.searchParams.get(&quot;src&quot;) ||
  url.searchParams.get(&quot;source&quot;) ||
  &quot;direct&quot;;

targetUrl.searchParams.set(&quot;utm_source&quot;, source);
targetUrl.searchParams.set(&quot;utm_medium&quot;, &quot;smart_redirect&quot;);
targetUrl.searchParams.set(&quot;utm_campaign&quot;, &quot;app_download&quot;);

if (env.DOWNLOAD_LINK_REDIRECT_STATS) {
  const today = new Date().toISOString().split(&quot;T&quot;)&#x5B;0];
  const key = `${today}:${source}:${platform}`;

  ctx.waitUntil(
    (async () =&gt; {
      const currentCount =
        (await env.DOWNLOAD_LINK_REDIRECT_STATS.get(key)) || &quot;0&quot;;

      await env.DOWNLOAD_LINK_REDIRECT_STATS.put(
        key,
        (parseInt(currentCount) + 1).toString()
      );
    })()
  );
}
</pre></div>


<p>The redirect is sent back immediately. The statistic update happens in the background. That is exactly the kind of small task where edge functions feel perfect.</p>



<h2 class="wp-block-heading">Why this works well for Swiva</h2>



<p>This setup works well because each Cloudflare product has a clear job. Our marketing website runs on Cloudflare Pages, which is made for hosting static websites and frontend projects. This is enough for a lightweight app landing page like <a href="https://swiva.app">swiva.app</a> and keeps the website separate from the redirect logic.</p>



<p>The redirect itself runs as a Cloudflare Worker, because it needs to be fast and should happen before a full website loads. For simple tracking, we use Cloudflare KV. KV is a key value store, so we can save small pieces of data with a key, for example how often a specific QR code source was used on a specific day.</p>



<p>This gives us lightweight redirect tracking without setting up a full database or adding a big analytics tool. For this kind of use case, the free limits are more than enough. Cloudflare Workers currently include 100,000 requests per day on the Free plan, which is a lot for a smart redirect service.</p>



<h2 class="wp-block-heading">Try it yourself</h2>



<p>You can test the redirect yourself using this link or by scanning the QR code.</p>



<p>If you scan it with an iPhone, it should open the Apple App Store. If you scan it with an Android device, it should open Google Play. If you click the same link on a desktop device, it should redirect you to the Swiva landing page.</p>



<p>That is the nice part about this setup: one QR code can work for every platform, without loading a full website first.</p>



<p><a href="https://swiva.app/download?source=blogpost">Open the Swiva smart redirect</a></p>


<div class="wp-block-image is-style-default">
<figure class="aligncenter size-full is-resized"><img fetchpriority="high" decoding="async" width="3000" height="3000" src="https://mobile.fhstp.ac.at/wp-content/uploads/2026/06/swiva-qr-code-download.png" alt="Swiva QR Code Download Link" class="wp-image-15890" style="aspect-ratio:1;object-fit:cover;width:361px;height:auto" srcset="https://mobile.fhstp.ac.at/wp-content/uploads/2026/06/swiva-qr-code-download.png 3000w, https://mobile.fhstp.ac.at/wp-content/uploads/2026/06/swiva-qr-code-download-150x150.png 150w, https://mobile.fhstp.ac.at/wp-content/uploads/2026/06/swiva-qr-code-download-1536x1536.png 1536w, https://mobile.fhstp.ac.at/wp-content/uploads/2026/06/swiva-qr-code-download-2048x2048.png 2048w, https://mobile.fhstp.ac.at/wp-content/uploads/2026/06/swiva-qr-code-download-120x120.png 120w" sizes="(max-width: 3000px) 100vw, 3000px" /></figure></div><p>The post <a href="https://mobile.fhstp.ac.at/development/webdevelopment/microservices-at-the-edge-why-we-use-cloudflare-workers-for-swiva-app/">Microservices at the Edge: Why We Use Cloudflare Workers for swiva.app</a> appeared first on <a href="https://mobile.fhstp.ac.at">Mobile USTP MKL</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://mobile.fhstp.ac.at/development/webdevelopment/microservices-at-the-edge-why-we-use-cloudflare-workers-for-swiva-app/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Is Figma&#8217;s New Chrome Extension a Game Changer for Designers?</title>
		<link>https://mobile.fhstp.ac.at/allgemein/is-figmas-new-chrome-extension-a-game-changer-for-designers/</link>
					<comments>https://mobile.fhstp.ac.at/allgemein/is-figmas-new-chrome-extension-a-game-changer-for-designers/#respond</comments>
		
		<dc:creator><![CDATA[Kevin Kraushofer]]></dc:creator>
		<pubDate>Sat, 13 Jun 2026 09:18:08 +0000</pubDate>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[design]]></category>
		<category><![CDATA[Figma]]></category>
		<category><![CDATA[mobile]]></category>
		<guid isPermaLink="false">https://mobile.fhstp.ac.at/?p=15880</guid>

					<description><![CDATA[<p>As someone who spends a lot of time designing websites and apps, I&#8217;m always looking for inspiration. Not in the sense of copying other people&#8217;s work, but in understanding why certain designs work so well. Why does a landing page immediately feel intuitive? Why does a navigation menu make sense without thinking about it? Why <a class="read-more" href="https://mobile.fhstp.ac.at/allgemein/is-figmas-new-chrome-extension-a-game-changer-for-designers/">[...]</a></p>
<p>The post <a href="https://mobile.fhstp.ac.at/allgemein/is-figmas-new-chrome-extension-a-game-changer-for-designers/">Is Figma&#8217;s New Chrome Extension a Game Changer for Designers?</a> appeared first on <a href="https://mobile.fhstp.ac.at">Mobile USTP MKL</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>As someone who spends a lot of time designing websites and apps, I&#8217;m always looking for inspiration. Not in the sense of copying other people&#8217;s work, but in understanding why certain designs work so well. Why does a landing page immediately feel intuitive? Why does a navigation menu make sense without thinking about it? Why does one website feel modern while another already feels outdated? These are the kinds of questions I constantly ask myself when exploring websites. Until recently, my workflow for collecting inspiration was pretty straightforward. Whenever I found a website I liked, I would take screenshots, save links, and sometimes create mood boards in Figma. If I wanted to analyze a layout more deeply, I would even recreate parts of the design manually. It worked, but it was slow.</p>



<p>That&#8217;s why Figma&#8217;s new Chrome Extension immediately caught my attention.</p>



<h2 class="wp-block-heading">The Inspiration Workflow We All Know</h2>



<p>For years, screenshots have been my go-to method for collecting design inspiration. With a screenshot, you can identify colors, typography, layouts, and maybe even recreate some components like buttons or cards. But screenshots only show the surface. They are static. You can look at them, but you can&#8217;t really interact with them. If you want to understand how a design is built, you often have to rebuild it yourself. You need to recreate sections, estimate spacing, and manually analyze the structure. It can be a useful learning process, but it takes a lot of time. And let&#8217;s be honest: rebuilding a website just to inspect it isn&#8217;t always the most exciting task.</p>



<h2 class="wp-block-heading">What Figma Just Announced</h2>



<p>A few days ago, Figma revealed its new Chrome Extension on social media. The announcement immediately caught my eye. Figma wrote:</p>



<figure class="wp-block-embed is-type-rich is-provider-x wp-block-embed-x"><div class="wp-block-embed__wrapper">
<blockquote class="twitter-tweet" data-width="500" data-dnt="true"><p lang="en" dir="ltr">Imagine a world where you could copy/paste websites into editable Figma layers (jk you don’t have to imagine you can do this now with our Chrome extension) <a href="https://t.co/leLFmh33yg">pic.twitter.com/leLFmh33yg</a></p>&mdash; Figma (@figma) <a href="https://x.com/figma/status/2065101067709472781?ref_src=twsrc%5Etfw">June 11, 2026</a></blockquote><script async src="https://platform.x.com/widgets.js" charset="utf-8"></script>
</div></figure>



<p>At first glance, it sounds simple. But if it works as advertised, the impact could be huge. Instead of taking screenshots, designers can capture a website and bring it directly into Figma as editable layers. What was previously just a reference suddenly becomes something you can inspect, move around, edit, and experiment with. For me, that&#8217;s a completely different way of learning from existing designs.</p>



<h2 class="wp-block-heading">Why This Excites Me as a Designer</h2>



<p>One of my favorite parts of design is studying other people&#8217;s work. Whenever I discover a website that feels particularly well-designed, I don&#8217;t just focus on the visual style. I want to understand the decisions behind it. How is the content structured? How much spacing is used between sections? Why does the hero section feel balanced? How are users guided through the page? Finding answers to these questions usually required a lot of manual work. I often ended up rebuilding parts of the design myself just to understand how everything fit together. Now I can potentially import the design into Figma and inspect it directly. For someone who enjoys learning through observation and experimentation, that&#8217;s incredibly exciting.</p>



<h2 class="wp-block-heading">A Huge Time Saver for Redesign Projects</h2>



<p>What excites me even more is the potential for client work. Imagine a client comes to you with an outdated website and wants a redesign. Usually, one of the first steps is recreating parts of the current website inside Figma so you can explore improvements and test new ideas. This process is necessary, but it can also be very repetitive. You spend hours rebuilding something that already exists before you can start doing the work that actually creates value. If this extension can accurately recreate a website inside Figma, that entire preparation phase could be reduced from hours to minutes. Instead of rebuilding the current design, I could immediately focus on improving it. And that&#8217;s where the real design work begins.</p>



<h2 class="wp-block-heading">Will Tools Like This Replace Designers?</h2>



<p>Whenever a new design tool appears, the same question comes up:</p>



<p>Will this replace designers?</p>



<p>To be honest, I have mixed feelings. Like many people working in creative industries, I sometimes wonder how AI and automation will affect the future of design. Every few months, a new tool appears that promises to make parts of our job easier. And yes, that can be a little scary. But at the same time, tools like this don&#8217;t understand users, business goals, or brand strategy. They don&#8217;t know why one design decision is better than another. They don&#8217;t know how to prioritize user needs. And they definitely don&#8217;t know what a client actually wants. What they can do is remove repetitive work. And honestly, that&#8217;s exactly what good software should do. The best tools don&#8217;t replace creativity. They create more room for it.</p>



<h2 class="wp-block-heading">Final Thoughts</h2>



<p>The more I think about Figma&#8217;s new Chrome Extension, the more I believe it&#8217;s one of those features that seems small at first but could have a big impact on everyday workflows.</p>



<p>Will it completely revolutionize web design?<br>Probably not.</p>



<p>But for my own design process, I can already see how much time it could save. Less time spent rebuilding existing websites means more time spent analyzing, experimenting, and improving designs.And at the end of the day, that&#8217;s the part of design I enjoy the most.</p>



<p>Sources:</p>



<p><a href="https://www.figma.com/downloads/chrome-extension">https://www.figma.com/downloads/chrome-extension</a></p>
<p>The post <a href="https://mobile.fhstp.ac.at/allgemein/is-figmas-new-chrome-extension-a-game-changer-for-designers/">Is Figma&#8217;s New Chrome Extension a Game Changer for Designers?</a> appeared first on <a href="https://mobile.fhstp.ac.at">Mobile USTP MKL</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://mobile.fhstp.ac.at/allgemein/is-figmas-new-chrome-extension-a-game-changer-for-designers/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Why Your Website Doesn’t Show Up on Google (And How to Fix It)</title>
		<link>https://mobile.fhstp.ac.at/forschung/why-your-website-doesnt-show-up-on-google-and-how-to-fix-it/</link>
					<comments>https://mobile.fhstp.ac.at/forschung/why-your-website-doesnt-show-up-on-google-and-how-to-fix-it/#respond</comments>
		
		<dc:creator><![CDATA[Kevin Kraushofer]]></dc:creator>
		<pubDate>Wed, 10 Jun 2026 20:41:17 +0000</pubDate>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[Forschung]]></category>
		<category><![CDATA[Projekte]]></category>
		<category><![CDATA[mobile]]></category>
		<category><![CDATA[ranking]]></category>
		<category><![CDATA[rkz]]></category>
		<category><![CDATA[SEO]]></category>
		<category><![CDATA[swiva]]></category>
		<guid isPermaLink="false">https://mobile.fhstp.ac.at/?p=15876</guid>

					<description><![CDATA[<p>I chose this topic because before writing this blog, I honestly didn’t really understand how websites actually get found on Google. I also didn’t know what you can do to improve visibility or why some websites show up everywhere while others basically don’t exist in search results. A lot of people think that once you <a class="read-more" href="https://mobile.fhstp.ac.at/forschung/why-your-website-doesnt-show-up-on-google-and-how-to-fix-it/">[...]</a></p>
<p>The post <a href="https://mobile.fhstp.ac.at/forschung/why-your-website-doesnt-show-up-on-google-and-how-to-fix-it/">Why Your Website Doesn’t Show Up on Google (And How to Fix It)</a> appeared first on <a href="https://mobile.fhstp.ac.at">Mobile USTP MKL</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p></p>



<p>I chose this topic because before writing this blog, I honestly didn’t really understand how websites actually get found on Google. I also didn’t know what you can do to improve visibility or why some websites show up everywhere while others basically don’t exist in search results.</p>



<p>A lot of people think that once you build a website and put it online, it automatically appears on Google. But that’s not how it works. Search engines first need to find the website, analyze it, and add it to their system. Only after that it can show up in search results.</p>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading">What does indexing mean?</h2>



<p>When a website goes live, it does not immediately appear on Google. Instead, search engines use automated programs called crawlers. These crawlers constantly scan the internet, follow links from page to page, and collect information from websites.</p>



<p>When they visit a page, they read the content and store it in a huge database called the index. You can imagine this index like a giant digital library. If your website is not inside this library, Google simply does not know it exists.</p>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading">Why being online is not enough</h2>



<p>Just putting a website online is not enough to be visible. Many websites stay invisible because search engines cannot properly find or understand them. This often happens when the technical structure is weak or when the website is not clearly organized for crawlers.</p>



<p>Even a well-designed website can have almost no traffic if it is not technically optimized for search engines.</p>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading">SEO and why it matters</h2>



<p>SEO, which stands for Search Engine Optimization, plays a very important role here. It is one of the main factors that decides how visible a website is on Google.</p>



<p>SEO is influenced by things like page titles, high-quality content, fast loading speed, and especially mobile optimization. Today we live in a “mobile first” world, which means websites are mainly evaluated based on how they work on mobile devices.</p>



<p>Keywords are also a big part of SEO. These are the search terms people type into Google. To make a website visible, these keywords need to be used naturally in the content. But it is not about adding random words everywhere. It is much more important to understand the search intent behind them. People usually search either for information or for products and services, and the content should match that.</p>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading">Local visibility and Google Business Profile</h2>



<p>For local businesses, regional visibility is extremely important. A Google Business Profile helps companies appear in local search results and gives users key information like opening hours, address, contact details, and reviews.</p>



<p>For small and medium businesses especially, this can make a huge difference because many customers search for services “near me”.</p>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading">Security also affects ranking</h2>



<p>Website security is another important factor. Websites should always run on HTTPS because Google prefers secure connections. If a website does not have an SSL certificate, it can not only reduce user trust but also negatively affect rankings.</p>



<p>It is also important to keep platforms like WordPress updated. Outdated plugins or insecure configurations can cause performance issues and even create security risks.</p>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading">Google Search Console as a key tool</h2>



<p>One of the most important tools in technical SEO is Google Search Console. It helps you control and monitor how your website appears on Google.</p>



<p>With this tool, you can submit your website directly to Google, upload a sitemap, and request indexing for specific pages. It also shows whether there are crawling issues, which pages are already indexed, and which search terms bring users to your website.</p>



<p>For new websites, this tool is especially important because it speeds up the whole indexing process and gives clear insights into visibility.</p>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading">Traffic and what happens after indexing</h2>



<p>Once a website is indexed, the next step is improving traffic. Getting indexed is a big milestone, but real success starts when people actually visit the website.</p>



<p>There are many ways to increase traffic. A big part of it is networking and simply getting the website out into the world. Sharing it on social media helps a lot, as well as using business cards, flyers, or even adding the website to directories and online listings.</p>



<p>The more places a website appears, the more signals it sends to search engines that it is relevant and active.</p>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading">Conclusion</h2>



<p>Before my first real website project, I thought building a website was mainly about design and development. I assumed that once a site is online, it will automatically be found.</p>



<p>But in reality, it is completely different. Visibility depends on many factors working together, like indexing, SEO, technical quality, content, and external signals.</p>



<p>A website is not just something you build once. It is something you need to optimize and maintain if you want it to actually be seen.</p>



<p></p>



<p>And yes, traffic matters a lot. Google basically thinks: “If nobody visits it, is it even worth showing it?” So the more real users interact with a website, the better it performs in search.</p>



<p>So, in true “help a student&#8221;. I’d really appreciate if you could do me a small favor and click on the links below. No pressure… but Google definitely loves attention.</p>



<p>Swiva: <a href="https://swiva.app/download">https://swiva.app/</a><br>RKZ Metall Design GmbH: <a href="https://www.rkz-design.gmbh/">https://www.rkz-design.gmbh/</a></p>



<p>Sources:</p>



<p><a href="https://webgo.de/blog/bei-google-gefunden-werden">https://webgo.de/blog/bei-google-gefunden-werden</a></p>



<p><a href="https://www.media-company.eu/blog/website-bekannt-machen-bei-google">https://www.media-company.eu/blog/website-bekannt-machen-bei-google</a></p>



<p><a href="https://www.peaknetworks.ch/blog/wie-wird-meine-website-in-google-angezeigt">https://www.peaknetworks.ch/blog/wie-wird-meine-website-in-google-angezeigt</a></p>



<p><a href="https://developers.google.com/search/docs/fundamentals/get-on-google?hl=de">https://developers.google.com/search/docs/fundamentals/get-on-google?hl=de</a></p>



<p><a href="https://webdirwas.at/website-fuer-google-sichtbar-machen/">https://webdirwas.at/website-fuer-google-sichtbar-machen/</a></p>



<p><a href="https://www.domainion.at/suchmaschineneintrag">https://www.domainion.at/suchmaschineneintrag</a></p>



<p></p>
<p>The post <a href="https://mobile.fhstp.ac.at/forschung/why-your-website-doesnt-show-up-on-google-and-how-to-fix-it/">Why Your Website Doesn’t Show Up on Google (And How to Fix It)</a> appeared first on <a href="https://mobile.fhstp.ac.at">Mobile USTP MKL</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://mobile.fhstp.ac.at/forschung/why-your-website-doesnt-show-up-on-google-and-how-to-fix-it/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>PROJECT &#124; Building a New Website for RKZ Metall Design GmbH</title>
		<link>https://mobile.fhstp.ac.at/allgemein/building-a-new-website-for-rkz-metall-design-gmbh/</link>
					<comments>https://mobile.fhstp.ac.at/allgemein/building-a-new-website-for-rkz-metall-design-gmbh/#respond</comments>
		
		<dc:creator><![CDATA[Kevin Kraushofer]]></dc:creator>
		<pubDate>Wed, 10 Jun 2026 18:59:02 +0000</pubDate>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[Design]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Projekte]]></category>
		<category><![CDATA[Studium]]></category>
		<category><![CDATA[Webdevelopment]]></category>
		<category><![CDATA[hochwasserschutz]]></category>
		<category><![CDATA[mobile]]></category>
		<category><![CDATA[rkz metall design gmbh]]></category>
		<guid isPermaLink="false">https://mobile.fhstp.ac.at/?p=15871</guid>

					<description><![CDATA[<p>For this project, I had the opportunity to create a completely new website for RKZ Metall Design GmbH. RKZ is an Austrian company based in Lower Austria that specializes in professional flood protection solutions for windows and doors, as well as custom-made solutions for special situations. This project was especially interesting for me because my <a class="read-more" href="https://mobile.fhstp.ac.at/allgemein/building-a-new-website-for-rkz-metall-design-gmbh/">[...]</a></p>
<p>The post <a href="https://mobile.fhstp.ac.at/allgemein/building-a-new-website-for-rkz-metall-design-gmbh/">PROJECT | Building a New Website for RKZ Metall Design GmbH</a> appeared first on <a href="https://mobile.fhstp.ac.at">Mobile USTP MKL</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>For this project, I had the opportunity to create a completely new website for RKZ Metall Design GmbH. RKZ is an Austrian company based in Lower Austria that specializes in professional flood protection solutions for windows and doors, as well as custom-made solutions for special situations.</p>



<p>This project was especially interesting for me because my father works at the company, which gave me a closer connection to both the business and its challenges.</p>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading">Why This Project?</h2>



<p>You might be wondering why I suddenly included this project among my master&#8217;s projects.</p>



<p>The answer is quite simple. The company had received very few customer inquiries in recent months. During trade fairs and exhibitions, potential customers often mentioned that they could not find the company online. After taking a closer look, it became clear why.</p>



<p>The existing website had several issues. It suffered from poor performance, weak SEO, and limited accessibility. Important legal pages such as the imprint and privacy policy were also incomplete and contained errors. Overall, the website did not represent the quality of the company and its products.</p>



<p>Because of this, I offered my support and took on the challenge of creating a new website from scratch.</p>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading">Project Scope</h2>



<p>One of the biggest problems with the old website was that it had been developed entirely in React. While this worked from a technical perspective, it made content management almost impossible for non-technical employees.</p>



<p>The company wanted a website that they could update themselves. They wanted to be able to change texts, upload images, and maintain content without needing programming knowledge every time.</p>



<p>This became one of the main goals of the project.</p>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading">Core Features</h2>



<p>Before starting the design and development process, I spoke with the client to understand what they needed from their new website.</p>



<p>Of course, the products had to be presented clearly. Beyond that, they wanted customer reviews, information about partners, a contact form, and an overall more modern appearance.</p>



<p>My personal focus was on creating a website that performs well in areas that are essential today: responsive design, SEO, and accessibility. A website should not only look good, it should also be easy to find and easy to use on all devices.</p>



<p>Since the company had almost no digital presence beyond its website, I also created a Google Business Profile and set up Google Analytics to help them understand and improve their online visibility in the future.</p>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading">Design, Tools, and Technologies</h2>



<p>The design process started in Figma. The client requested a visual style inspired by water and waves to reflect the company&#8217;s connection to flood protection.</p>



<p>At the same time, I wanted to keep the design clean and professional. The target audience is mostly businesses and homeowners looking for reliable protection solutions, so the website needed to maintain a strong industrial and trustworthy feel.</p>



<p>To make content management easier for the company, I decided to build the website with WordPress instead of creating another fully custom solution. This allows employees to manage content themselves without needing technical knowledge.</p>



<p>To customize the website and provide all required functionality, I researched, installed, and configured several WordPress plugins that support performance, SEO, security, forms, and content management.</p>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading">What I Learned</h2>



<p>This was the first time I created an entire website completely from scratch.</p>



<p>I was involved in every step of the process, from researching hosting options and planning the structure to designing the interface, setting up WordPress, configuring plugins, creating the Google Business Profile, and integrating Google Analytics.</p>



<p>On top of that, I made sure the website worked well on different screen sizes and followed SEO and accessibility best practices.</p>



<p>The project was definitely time-consuming, but it taught me a lot. I gained a much better understanding of how many different areas come together when building a professional website. It was not only about design or development, but also about planning, communication, marketing, and long-term maintainability.</p>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading">Conclusion and Future Steps</h2>



<p>At the moment, the project is not completely finished yet. I am currently waiting for feedback from the company, and some final content such as photos and text material is still missing.</p>



<p>Once these assets are available, I will make the final adjustments, complete the remaining content, and submit the website for indexing so it can be found through search engines.</p>



<p>After that, the company will finally have a modern web presence that better reflects its expertise and helps potential customers find its services online.</p>



<div style="height:20px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading">Check It Out Soon</h2>



<p>The new website will soon be available at:</p>



<p><a href="https://www.rkz-design.gmbh">https://www.rkz-design.gmbh</a></p>



<p>Feel free to take a look once it goes live.</p>
<p>The post <a href="https://mobile.fhstp.ac.at/allgemein/building-a-new-website-for-rkz-metall-design-gmbh/">PROJECT | Building a New Website for RKZ Metall Design GmbH</a> appeared first on <a href="https://mobile.fhstp.ac.at">Mobile USTP MKL</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://mobile.fhstp.ac.at/allgemein/building-a-new-website-for-rkz-metall-design-gmbh/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Smart Import Feature for my app &#8220;Swiva&#8221;</title>
		<link>https://mobile.fhstp.ac.at/studium/studium-projekte/smart-import-feature-for-my-app-swiva/</link>
					<comments>https://mobile.fhstp.ac.at/studium/studium-projekte/smart-import-feature-for-my-app-swiva/#respond</comments>
		
		<dc:creator><![CDATA[Daniel Studera]]></dc:creator>
		<pubDate>Wed, 10 Jun 2026 11:48:56 +0000</pubDate>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Projekte]]></category>
		<category><![CDATA[Studium]]></category>
		<category><![CDATA[User Experience]]></category>
		<category><![CDATA[AI]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[iOS]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[mobile]]></category>
		<guid isPermaLink="false">https://mobile.fhstp.ac.at/?p=15857</guid>

					<description><![CDATA[<p>For this project, I worked on an AI feature for Swiva, my React Native app for saving activities, places and ideas. The basic idea of Swiva is simple: users collect things they want to try, organize them in lists and later swipe through them when they do not know what to do. One feature we <a class="read-more" href="https://mobile.fhstp.ac.at/studium/studium-projekte/smart-import-feature-for-my-app-swiva/">[...]</a></p>
<p>The post <a href="https://mobile.fhstp.ac.at/studium/studium-projekte/smart-import-feature-for-my-app-swiva/">Smart Import Feature for my app &#8220;Swiva&#8221;</a> appeared first on <a href="https://mobile.fhstp.ac.at">Mobile USTP MKL</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>For this project, I worked on an AI feature for Swiva, my React Native app for saving activities, places and ideas. The basic idea of Swiva is simple: users collect things they want to try, organize them in lists and later swipe through them when they do not know what to do.</p>



<p>One feature we had planned for a longer time was sharing links directly into the app. For example, a user sees a recipe on Instagram, a restaurant on Google Maps or an activity on TikTok and shares the link to Swiva. The app should then create a useful activity from that link, with a title and a short description.</p>



<p>At first, I thought the main challenge would be the AI part. But during the project I realized that a much bigger part was actually getting good information from the shared links.</p>



<h2 class="wp-block-heading">The real problem: getting the content</h2>



<p>Before the AI can generate a good activity, the app needs useful input. For that, I used two general strategies and one special case.</p>



<p>The first strategy is Open Graph metadata. This is the information many websites use for link previews, for example when a link is shared in WhatsApp. It often contains a title, description and image, which can already be enough to understand the basic content of a post or website.</p>



<p>The second strategy is oEmbed. This is used by platforms like TikTok to provide information for embedded content. In some cases, this gives better structured data than normal page metadata.</p>



<p>Google Maps was more difficult. The official APIs are based on place IDs and structured requests, not just random shared Maps links. Also, Google has strict rules around scraping. Because of that, I did not scrape the page directly. Instead, I tried to resolve the link and extract the place name from the final URL when possible.</p>



<p>I also decided to send these metadata requests from the app instead of my backend. If the app scales, I do not want my server to send too many requests to platforms like Instagram or TikTok and risk rate limits or IP bans. Sending them from the app distributes this better and keeps the backend simpler.</p>



<h2 class="wp-block-heading">On-device AI and fallback</h2>



<p>For iOS, I used the Callstack React Native AI package with Apple’s on-device AI capabilities. This worked well and was quite easy to use, because the API is based on the Vercel AI SDK.</p>



<p>My original plan was to also use Google ML Kit GenAI for Android. But the support I wanted in the React Native AI package was not available yet, and I did not want to build a custom Expo module just for this. Since I had already proven the on-device concept with Apple, I used a cloud fallback for Android and unsupported devices.</p>



<p>The fallback sends a request to my backend, which uses a Gemini Flash-Lite model to generate the activity. At first I used Gemini 2.5 Flash-Lite, where the results were comparable to Apple’s on-device model. Later I tested Gemini 3.1 Flash-Lite, and I was much happier with the generated titles and descriptions.</p>



<h2 class="wp-block-heading">What I learned</h2>



<p>My original goal was to compare on-device AI and cloud AI and see if the quality could be similar. I did not fully reach that goal, because the newer cloud model gave better results for my use case.</p>



<p>Still, the project was a useful experiment. I learned how to use Apple on-device AI in a React Native app, how to build a fallback strategy and how important link metadata is for this feature.</p>



<p>For Swiva, I currently think that one cloud strategy is probably the easiest solution to maintain. Gemini Flash-Lite is cheap enough for this use case, the results are more consistent across devices, and the architecture is simpler than maintaining separate strategies for iOS, Android and fallback.</p>



<p>On-device AI is still very interesting, especially for privacy, offline usage and reducing server costs. But in this case, the simplest and most stable solution might be the best one</p>



<p></p>



<p>Check out the feature by downloading Swiva here: <a href="https://swiva.app/download">https://swiva.app/download</a></p>



<h2 class="wp-block-heading">Sources</h2>



<ul class="wp-block-list">
<li>Callstack React Native AI: <a href="https://github.com/callstackincubator/ai">https://github.com/callstackincubator/ai</a></li>



<li>Google ML Kit GenAI APIs: <a href="https://developers.google.com/ml-kit/genai">https://developers.google.com/ml-kit/genai</a></li>



<li>Open Graph Protocol: <a href="https://ogp.me/">https://ogp.me/</a></li>



<li>TikTok oEmbed / Embed Documentation: <a href="https://developers.tiktok.com/doc/embed-videos/">https://developers.tiktok.com/doc/embed-videos/</a></li>



<li>Google Maps Place Details API: <a href="https://developers.google.com/maps/documentation/places/web-service/place-details">https://developers.google.com/maps/documentation/places/web-service/place-details</a></li>



<li>Gemini API Pricing: <a href="https://ai.google.dev/gemini-api/docs/pricing">https://ai.google.dev/gemini-api/docs/pricing</a></li>
</ul>



<p></p>
<p>The post <a href="https://mobile.fhstp.ac.at/studium/studium-projekte/smart-import-feature-for-my-app-swiva/">Smart Import Feature for my app &#8220;Swiva&#8221;</a> appeared first on <a href="https://mobile.fhstp.ac.at">Mobile USTP MKL</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://mobile.fhstp.ac.at/studium/studium-projekte/smart-import-feature-for-my-app-swiva/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Automated Performance Testing for React Native with agent-device</title>
		<link>https://mobile.fhstp.ac.at/tests/automated-performance-testing-for-react-native-with-agent-device/</link>
					<comments>https://mobile.fhstp.ac.at/tests/automated-performance-testing-for-react-native-with-agent-device/#respond</comments>
		
		<dc:creator><![CDATA[Daniel Studera]]></dc:creator>
		<pubDate>Wed, 10 Jun 2026 09:58:45 +0000</pubDate>
				<category><![CDATA[Allgemein]]></category>
		<category><![CDATA[Cross Plattform]]></category>
		<category><![CDATA[Development]]></category>
		<category><![CDATA[Native Development]]></category>
		<category><![CDATA[Projekte]]></category>
		<category><![CDATA[Software]]></category>
		<category><![CDATA[Studium]]></category>
		<category><![CDATA[Tests]]></category>
		<category><![CDATA[AI]]></category>
		<category><![CDATA[AI Agents]]></category>
		<category><![CDATA[android]]></category>
		<category><![CDATA[iOS]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[mobile]]></category>
		<category><![CDATA[Test]]></category>
		<category><![CDATA[Testing Framework]]></category>
		<guid isPermaLink="false">https://mobile.fhstp.ac.at/?p=15851</guid>

					<description><![CDATA[<p>Recently I started testing an idea I saw on X: using Agent Device from Callstack for automated performance testing. I had already seen Agent Device before, because I also use Callstack’s React Native on-device AI package and follow some of their work. But the performance testing use case really caught my attention. The idea was <a class="read-more" href="https://mobile.fhstp.ac.at/tests/automated-performance-testing-for-react-native-with-agent-device/">[...]</a></p>
<p>The post <a href="https://mobile.fhstp.ac.at/tests/automated-performance-testing-for-react-native-with-agent-device/">Automated Performance Testing for React Native with agent-device</a> appeared first on <a href="https://mobile.fhstp.ac.at">Mobile USTP MKL</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>Recently I started testing an idea I saw on X: using Agent Device from Callstack for automated performance testing.</p>



<p>I had already seen Agent Device before, because I also use Callstack’s React Native on-device AI package and follow some of their work. But the performance testing use case really caught my attention. The idea was simple but powerful: let an AI agent click through a mobile app, collect snapshots of performance numbers and check where frame drops or slow interactions happen. So I wanted to try it myself with one of my React Native builds.</p>



<h2 class="wp-block-heading">What is Agent Device?</h2>



<p>Agent Device is a CLI tool that lets AI agents control mobile apps. It can work with iOS and Android apps, including React Native apps, native apps and apps running on real devices, simulators or emulators.</p>



<p>Instead of only looking at code, the agent can actually interact with the app. It can inspect the UI, understand what is currently on the screen, tap elements, scroll, type into inputs, take screenshots, collect logs and repeat actions. That makes it useful for mobile testing, because the agent can behave more like a real user. It does not only follow a fixed script. It can look at the current app state and decide what to do next based on the UI.</p>



<h2 class="wp-block-heading">Why performance testing?</h2>



<p>Performance problems in mobile apps are not always obvious in the code. Sometimes a screen looks completely fine, but when you use it on a real phone, it feels slow. Maybe an animation drops frames. Maybe a list scrolls badly. Maybe opening a modal causes a short freeze. </p>



<p>That is why I thought Agent Device could be interesting for performance testing. My idea was not to replace proper profiling tools. You still need real profiling when you want detailed information about the JS thread, native rendering, memory usage or expensive renders. But Agent Device can help with the first layer of testing. It can go through the app automatically and collect signals about where the app feels slower or where frame drops happen.</p>



<h2 class="wp-block-heading">My setup</h2>



<p>For my test, I created a build and installed it on a real Android device. Of course, this could also work with emulators. But for performance testing, I think real devices make more sense. A real device gives you more realistic performance behavior. It has real hardware limits, real touch input and real rendering conditions.</p>



<p>After installing the app, I installed the Agent Device CLI. Then I used Antigravity with Gemini 3.5 Flash to control the agent. I used this model because the task was not really about deep reasoning. It mostly needed to follow instructions, use the allowed Agent Device commands and document what happened. Also, the free token limits were good enough for testing this kind of workflow.</p>



<p>Then I wrote a prompt that explained the use case. The agent should open the app, navigate through all screens, interact with different UI elements and take snapshots of the performance numbers. It should also watch out for frame drops, slow transitions and screens that feel less smooth. I also allowed the agent to use all the Agent Device commands it needed, so it could inspect the UI, tap elements, scroll and move through the app without asking every time.</p>



<figure class="wp-block-video"><video controls src="https://mobile.fhstp.ac.at/wp-content/uploads/2026/06/0610.mp4"></video></figure>



<h2 class="wp-block-heading">Why this is useful</h2>



<p>The biggest benefit for me is that the agent can do the boring part. Normally, performance testing often starts with manually opening the app, clicking around and trying to notice where something feels bad. This works, but it is easy to forget screens or to test in a different way every time.</p>



<p>With Agent Device, the agent can go through a defined flow again and again. It can collect snapshots, describe problems and give a first overview of possible performance issues.</p>



<p>This could be especially useful before releases. You could let the agent run through the main flows and check if there are obvious frame drops or slow interactions before shipping a new version.</p>



<h2 class="wp-block-heading">What I learned</h2>



<p>The most important thing is to see this as an extra testing layer, not as a replacement for proper profiling. Agent Device can help you detect where something might be wrong. But after that, you still need to investigate why it happens. Maybe the issue is caused by too many re-renders, heavy images, expensive calculations, navigation transitions or something happening on the native side.</p>



<p>Still, I think this workflow is really promising. It connects AI agents with real mobile app usage, not just code generation. The agent does not only write or review code. It actually uses the app and checks how it behaves.</p>



<p>I tested this workflow with my own app, Swiva. It is a React Native app for saving activities, places and ideas, and then swiping through them when you need inspiration. If you want to check it out, you can find it here: <a href="https://swiva.app">swiva.app</a></p>



<h2 class="wp-block-heading">Final thoughts</h2>



<p>I first saw the idea for performance testing with Agent Device on X/Twitter, and after trying it myself, I think it is a very practical use case. There are probably many more possibilities for this kind of mobile automation. QA flows, regression testing, onboarding checks, accessibility testing or release checks could all be interesting.</p>



<p>For me, performance testing was just the first thing that made the tool click. Letting an AI agent move through a real app, collect snapshots and point out possible slow parts feels like a small but useful step towards more automated mobile testing.</p>



<p></p>
<p>The post <a href="https://mobile.fhstp.ac.at/tests/automated-performance-testing-for-react-native-with-agent-device/">Automated Performance Testing for React Native with agent-device</a> appeared first on <a href="https://mobile.fhstp.ac.at">Mobile USTP MKL</a>.</p>
]]></content:encoded>
					
					<wfw:commentRss>https://mobile.fhstp.ac.at/tests/automated-performance-testing-for-react-native-with-agent-device/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>Wild Week &#8211; Wyld Interactive Media Player</title>
		<link>https://mobile.fhstp.ac.at/allgemein/wild-week-wyld-interactive-media-player/</link>
		
		<dc:creator><![CDATA[Sander Hahn]]></dc:creator>
		<pubDate>Thu, 07 May 2026 07:02:37 +0000</pubDate>
				<category><![CDATA[Allgemein]]></category>
		<guid isPermaLink="false">https://mobile.fhstp.ac.at/?p=15824</guid>

					<description><![CDATA[<p>For our Wild Week project, we created WIMP (Wyld Interactive Media Player). WIMP is an engine designed to handle branching, interactive video content similar to Netflix’s interactive specials. But WIMP can not only play videos, but also show other media like pictures, texts and audio in an interactive way. The goal Our goal was to <a class="read-more" href="https://mobile.fhstp.ac.at/allgemein/wild-week-wyld-interactive-media-player/">[...]</a></p>
<p>The post <a href="https://mobile.fhstp.ac.at/allgemein/wild-week-wyld-interactive-media-player/">Wild Week &#8211; Wyld Interactive Media Player</a> appeared first on <a href="https://mobile.fhstp.ac.at">Mobile USTP MKL</a>.</p>
]]></description>
										<content:encoded><![CDATA[
<p>For our Wild Week project, we created <strong>WIMP</strong> (Wyld Interactive Media Player). WIMP is an engine designed to handle branching, interactive video content similar to Netflix’s interactive specials. But WIMP can not only play videos, but also show other media like pictures, texts and audio in an interactive way. </p>



<h2 class="wp-block-heading">The goal</h2>



<p>Our goal was to create a prototype that plays media that isn&#8217;t just linear. We wanted a way to inject logic, like quizzes, info overlays, and decision points, directly into the media timeline. It doesn&#8217;t matter if it&#8217;s a certain position on a text or a specific time in a video.</p>



<p>To make this work across different platforms, we first had to define a standardized data structure. This led to the development of the <strong>WIMP format</strong>.</p>



<p>Another important part of this project is a media player that is highly mobile optimized and easy to understand, so that even a five year old can experience a WIMP interactive medium.</p>



<p>The project is split into two distinct layers: the data standard and the playback engine.</p>



<h2 class="wp-block-heading">Architecture</h2>



<h3 class="wp-block-heading">1. The Format</h3>



<p>Before building the player, we needed a predictable way to describe the media content. For this, we had to design a format that incooperates everything a WIMP user needs and will need in the future. This forward thinking and upgradeability of our format was one of the main challenges that we faced during this Wild Week. We ended up with an open-format JSON schema that defines a graph of &#8220;media nodes.&#8221; Each node can contain:</p>



<ul class="wp-block-list">
<li><strong>Timed Events:</strong> Quizzes, info texts, external links and more that can be triggered at specific timestamps.</li>



<li><strong>Choice Events:</strong> Branching points that tell the player which media node to load next.</li>
</ul>



<p>By publishing this as an NPM package, we integrated a validator directly into the workflow, ensuring that any content loaded by the player is structurally sound and free of dead ends.</p>



<p>Here&#8217;s an example format:</p>


<div class="wp-block-syntaxhighlighter-code "><pre class="brush: plain; title: ; notranslate">
{
    &quot;version_number&quot;: &quot;0.0.1&quot;,
    &quot;format_type&quot;: &quot;wimp&quot;,
    &quot;meta_data&quot;: {
        &quot;id&quot;: &quot;7f6b6d2d-8fb7-4bd4-9f2a-5a1e2d7c6b42&quot;,
        &quot;created_at&quot;: &quot;2026-04-23T00:00:00+02:00&quot;,
        &quot;updated_at&quot;: &quot;2026-04-23T00:00:00+02:00&quot;,
        &quot;author&quot;: &quot;Melanie Maier&quot;,
        &quot;title&quot;: &quot;What If Dinosaurs Still Lived Today?&quot;,
        &quot;start_media_id&quot;: &quot;dinosaur_intro_text&quot;,
        &quot;description&quot;: &quot;An interactive documentary exploring the hypothetical scenario of dinosaurs still existing in the modern world.&quot;,
        &quot;tags&quot;: &#x5B;
            &quot;dinosaurs&quot;,
            &quot;interactive documentary&quot;,
            &quot;hypothetical scenario&quot;,
            &quot;modern world&quot;
        ]
    },
    &quot;media&quot;: &#x5B;{
            &quot;id&quot;: &quot;dinosaur_intro_text&quot;,
            &quot;title&quot;: &quot;Introduction&quot;,
            &quot;type&quot;: &quot;text&quot;,
            &quot;resource_link&quot;: &quot;https://wimplayer.media.ustp.at/media.php?name=dinosaurs_intro.html&quot;,
            &quot;timeline_events&quot;: &#x5B;{
                &quot;type&quot;: &quot;choice&quot;,
                &quot;title&quot;: &quot;Do you want hear about dinosaurs?&quot;,
                &quot;position&quot;: {
                    &quot;type&quot;: &quot;seconds&quot;,
                    &quot;value&quot;: 0
                },
                &quot;event_context&quot;: {
                    &quot;choices&quot;: &#x5B;{
                        &quot;label&quot;: &quot;Start the journey&quot;,
                        &quot;next_media&quot;: &quot;dinosaur_audio1&quot;
                    }]
                }
            }]
        },
        {
            &quot;id&quot;: &quot;dinosaur_audio1&quot;,
            &quot;title&quot;: &quot;Audio 1&quot;,
            &quot;type&quot;: &quot;audio&quot;,
            &quot;resource_link&quot;: &quot;https://wimplayer.media.ustp.at/media.php?name=dinosaur_1.mp3&quot;,
            &quot;timeline_events&quot;: &#x5B;{
                    &quot;type&quot;: &quot;quiz&quot;,
                    &quot;title&quot;: &quot;What would be the most likely immediate response from modern states once the existence of large living dinosaurs was confirmed?&quot;,
                    &quot;position&quot;: {
                        &quot;type&quot;: &quot;seconds&quot;,
                        &quot;value&quot;: 5
                    },
                    &quot;event_context&quot;: {
                        &quot;answers&quot;: &#x5B;{
                                &quot;label&quot;: &quot;Opening all affected regions to tourism&quot;,
                                &quot;is_correct&quot;: false,
                                &quot;feedback&quot;: &quot;&quot;
                            },
                            {
                                &quot;label&quot;: &quot;Establishing exclusion zones and interdisciplinary crisis task forces&quot;,
                                &quot;is_correct&quot;: true,
                                &quot;feedback&quot;: &quot;&quot;
                            },
                            {
                                &quot;label&quot;: &quot;Immediately classifying all species as domesticated animals&quot;,
                                &quot;is_correct&quot;: false,
                                &quot;feedback&quot;: &quot;&quot;
                            },
                            {
                                &quot;label&quot;: &quot;Suspending all ongoing scientific research&quot;,
                                &quot;is_correct&quot;: false,
                                &quot;feedback&quot;: &quot;&quot;
                            }
                        ]
                    }
                },
                {
                    &quot;type&quot;: &quot;quiz&quot;,
                    &quot;title&quot;: &quot;Why would the discovery of living dinosaurs be more than just a zoological sensation?&quot;,
                    &quot;position&quot;: {
                        &quot;type&quot;: &quot;seconds&quot;,
                        &quot;value&quot;: 30
                    },
                    &quot;event_context&quot;: {
                        &quot;answers&quot;: &#x5B;{
                                &quot;label&quot;: &quot;Because it would automatically replace all existing animal species&quot;,
                                &quot;is_correct&quot;: false,
                                &quot;feedback&quot;: &quot;&quot;
                            },
                            {
                                &quot;label&quot;: &quot;Because modern cities are already designed for giant reptiles &quot;,
                                &quot;is_correct&quot;: false,
                                &quot;feedback&quot;: &quot;&quot;
                            }, {
                                &quot;label&quot;: &quot;Because it would challenge long-held assumptions about ecology, history, and risk planning&quot;,
                                &quot;is_correct&quot;: true,
                                &quot;feedback&quot;: &quot;Still too high. Fast fashion is often discarded quickly.&quot;
                            },
                            {
                                &quot;label&quot;: &quot;Because dinosaurs could only survive in artificial reserves &quot;,
                                &quot;is_correct&quot;: false,
                                &quot;feedback&quot;: &quot;&quot;
                            }
                        ]
                    }
                },
                {
                    &quot;type&quot;: &quot;choice&quot;,
                    &quot;title&quot;: &quot;Do you want to hear more about this scenario?&quot;,
                    &quot;position&quot;: {
                        &quot;type&quot;: &quot;seconds&quot;,
                        &quot;value&quot;: 60
                    },
                    &quot;event_context&quot;: {
                        &quot;choices&quot;: &#x5B;{
                            &quot;label&quot;: &quot;Yes please&quot;,
                            &quot;next_media&quot;: &quot;dinosaur_audio2&quot;
                        }]
                    }
                }
            ],
            &quot;description&quot;: &quot;Quick cuts of clothing store racks, online shopping scrolls, and factory workers sewing.&quot;,
            &quot;media_length&quot;: 76
        },
        {
            &quot;id&quot;: &quot;dinosaur_audio2&quot;,
            &quot;title&quot;: &quot;Dinosaur 2&quot;,
            &quot;type&quot;: &quot;audio&quot;,
            &quot;resource_link&quot;: &quot;https://wimplayer.media.ustp.at/media.php?name=dinosaur_2.wav&quot;,
            &quot;timeline_events&quot;: &#x5B;{
                    &quot;type&quot;: &quot;quiz&quot;,
                    &quot;title&quot;: &quot;Which dinosaur group would likely be the hardest to control in a modern civilization?&quot;,
                    &quot;position&quot;: {
                        &quot;type&quot;: &quot;seconds&quot;,
                        &quot;value&quot;: 5
                    },
                    &quot;event_context&quot;: {
                        &quot;answers&quot;: &#x5B;{
                                &quot;label&quot;: &quot;Small to medium-sized, intelligent, highly adaptable predators&quot;,
                                &quot;is_correct&quot;: true,
                                &quot;feedback&quot;: &quot;&quot;
                            },
                            {
                                &quot;label&quot;: &quot;Very large, slow-moving herbivores&quot;,
                                &quot;is_correct&quot;: false,
                                &quot;feedback&quot;: &quot;&quot;
                            },
                            {
                                &quot;label&quot;: &quot;Flightless species living only in remote areas&quot;,
                                &quot;is_correct&quot;: false,
                                &quot;feedback&quot;: &quot;&quot;
                            },
                            {
                                &quot;label&quot;: &quot;Species with strongly territorial but fixed-range behavior&quot;,
                                &quot;is_correct&quot;: false,
                                &quot;feedback&quot;: &quot;&quot;
                            }
                        ]
                    }
                },
                {
                    &quot;type&quot;: &quot;quiz&quot;,
                    &quot;title&quot;: &quot;Which societal conflict would be most likely if humans and dinosaurs had to coexist permanently?&quot;,
                    &quot;position&quot;: {
                        &quot;type&quot;: &quot;seconds&quot;,
                        &quot;value&quot;: 35
                    },
                    &quot;event_context&quot;: {
                        &quot;answers&quot;: &#x5B;{
                                &quot;label&quot;: &quot;Whether dinosaurs should be included in school curricula &quot;,
                                &quot;is_correct&quot;: false,
                                &quot;feedback&quot;: &quot;&quot;
                            },
                            {
                                &quot;label&quot;: &quot;The complete abolition of modern infrastructure&quot;,
                                &quot;is_correct&quot;: false,
                                &quot;feedback&quot;: &quot;&quot;
                            },
                            {
                                &quot;label&quot;: &quot;A global abandonment of agriculture&quot;,
                                &quot;is_correct&quot;: false,
                                &quot;feedback&quot;: &quot;&quot;
                            },
                            {
                                &quot;label&quot;: &quot;A conflict between species protection, public safety, and economic use of land&quot;,
                                &quot;is_correct&quot;: true,
                                &quot;feedback&quot;: &quot;&quot;
                            }
                        ]
                    }
                },
                {
                    &quot;type&quot;: &quot;choice&quot;,
                    &quot;title&quot;: &quot;Do you want to read more?&quot;,
                    &quot;position&quot;: {
                        &quot;type&quot;: &quot;seconds&quot;,
                        &quot;value&quot;: 55
                    },
                    &quot;event_context&quot;: {
                        &quot;choices&quot;: &#x5B;{
                            &quot;label&quot;: &quot;Yes please&quot;,
                            &quot;next_media&quot;: &quot;dinosaur_end_text&quot;
                        }]
                    }
                }
            ],
            &quot;description&quot;: &quot;Dinosaur audio&quot;,
            &quot;media_length&quot;: 59
        },
        {
            &quot;id&quot;: &quot;dinosaur_end_text&quot;,
            &quot;title&quot;: &quot;End&quot;,
            &quot;type&quot;: &quot;text&quot;,
            &quot;resource_link&quot;: &quot;https://wimplayer.media.ustp.at/media.php?name=dinosaurs_end.html&quot;,
            &quot;timeline_events&quot;: &#x5B;]
        }
    ]
}
</pre></div>


<h3 class="wp-block-heading">2. The Frontend: Nuxt &amp; Logic</h3>



<p>The player itself is built with <strong>Nuxt</strong>. We chose Nuxt because its reactive framework is ideal for syncing a video’s progress with dynamic UI overlays.</p>



<p>For this we split our team into 2 departments: </p>



<ul class="wp-block-list">
<li>The UI/UX of the main page and components</li>



<li>The player with the state machine</li>
</ul>



<h4 class="wp-block-heading">Main Page &amp; Components UI/UX</h4>



<p>For prototyping and designing our pages and components, we decided on using Figma with Nuxt&#8217;s components to help us out. Here are some examples of our pages and components:</p>



<figure class="wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-1 is-layout-flex wp-block-gallery-is-layout-flex">
<figure class="wp-block-image size-large"><img decoding="async" width="402" height="800" data-id="15826" src="https://mobile.fhstp.ac.at/wp-content/uploads/2026/04/Template_-Dahsboard-402x800.png" alt="" class="wp-image-15826"/></figure>



<figure class="wp-block-image size-large"><img decoding="async" width="402" height="800" data-id="15840" src="https://mobile.fhstp.ac.at/wp-content/uploads/2026/04/Template_-Video-1-402x800.png" alt="" class="wp-image-15840"/></figure>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="402" height="800" data-id="15836" src="https://mobile.fhstp.ac.at/wp-content/uploads/2026/04/Template_-Audio-1-402x800.png" alt="" class="wp-image-15836"/></figure>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="402" height="800" data-id="15835" src="https://mobile.fhstp.ac.at/wp-content/uploads/2026/04/Template_-Text-1-402x800.png" alt="" class="wp-image-15835"/></figure>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="402" height="800" data-id="15834" src="https://mobile.fhstp.ac.at/wp-content/uploads/2026/04/Template_-Media-Description3-1-402x800.png" alt="" class="wp-image-15834"/></figure>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="402" height="800" data-id="15838" src="https://mobile.fhstp.ac.at/wp-content/uploads/2026/04/Template_-Media-Description1-1-402x800.png" alt="" class="wp-image-15838"/></figure>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="402" height="800" data-id="15839" src="https://mobile.fhstp.ac.at/wp-content/uploads/2026/04/Template_-Media-Description-1-402x800.png" alt="" class="wp-image-15839"/></figure>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="402" height="800" data-id="15837" src="https://mobile.fhstp.ac.at/wp-content/uploads/2026/04/Template_-Media-Description2-1-402x800.png" alt="" class="wp-image-15837"/></figure>
</figure>



<h4 class="wp-block-heading">State Machine</h4>



<p>To manage the complexity of interactive playback, we implemented a <strong>state machine</strong>. The state machine coordinates:</p>



<ul class="wp-block-list">
<li><strong>Syncing Logic:</strong> Monitoring the video’s <code>currentTime</code> to trigger overlays from the WIMP format.</li>



<li><strong>Interaction States:</strong> When a <code>pause: true</code> event occurs, the machine pauses the background media, putting the quiz or choice interface in the foreground.</li>



<li><strong>Dynamic Media Handling:</strong> When a user makes a choice, the machine resolves the <code>next_media</code> ID and updates the Nuxt state to swap the media and move forward in the decission tree.</li>
</ul>



<p></p>
<p>The post <a href="https://mobile.fhstp.ac.at/allgemein/wild-week-wyld-interactive-media-player/">Wild Week &#8211; Wyld Interactive Media Player</a> appeared first on <a href="https://mobile.fhstp.ac.at">Mobile USTP MKL</a>.</p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
