<?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>Cloud Functions &#8211; Smartup</title>
	<atom:link href="https://smartupweb.com/blog/portfolio-tag/cloud-functions/feed/" rel="self" type="application/rss+xml" />
	<link></link>
	<description>Mobile App Design &#38; Development in Thessaloniki</description>
	<lastBuildDate>Wed, 07 Oct 2026 09:34:25 +0000</lastBuildDate>
	<language>en-US</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.1.3</generator>

<image>
	<url>https://smartupweb.com/wp-content/uploads/2026/08/cropped-S-favicon-image-32x32.png</url>
	<title>Cloud Functions &#8211; Smartup</title>
	<link></link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>SKAI News</title>
		<link>https://smartupweb.com/project/skai-news/</link>
		
		<dc:creator><![CDATA[Smartup]]></dc:creator>
		<pubDate>Wed, 07 Oct 2026 08:34:13 +0000</pubDate>
				<guid isPermaLink="false">https://smartupweb.com/?post_type=ohio_portfolio&#038;p=249080</guid>

					<description><![CDATA[<p>SKAI The skai.gr newsroom, in your pocket. SKAI News is the official...</p>
<p>The post <a href="https://smartupweb.com/project/skai-news/">SKAI News</a> appeared first on <a href="https://smartupweb.com">Smartup</a>.</p>
]]></description>
										<content:encoded><![CDATA[		<div data-elementor-type="wp-post" data-elementor-id="249080" class="elementor elementor-249080">
				<div class="elementor-element elementor-element-1b52109 e-flex e-con-boxed e-con e-parent" data-id="1b52109" data-element_type="container" data-e-type="container">
					<div class="e-con-inner">
		<div class="elementor-element elementor-element-4fbed4f e-con-full e-flex e-con e-child" data-id="4fbed4f" data-element_type="container" data-e-type="container">
		<div class="elementor-element elementor-element-06baef6 e-con-full e-flex e-con e-child" data-id="06baef6" data-element_type="container" data-e-type="container">
				<div class="elementor-element elementor-element-2c3d48d elementor-invisible elementor-widget elementor-widget-ohio_heading" data-id="2c3d48d" data-element_type="widget" data-e-type="widget" data-settings="{&quot;_animation&quot;:&quot;fadeIn&quot;}" data-widget_type="ohio_heading.default">
				<div class="elementor-widget-container">
					<div class="ohio-widget heading -left">

    
            <div class="subtitle">
                    </div>

        
    
    <h2 class="title">
                SKAI                    </h2>

    
    
</div>				</div>
				</div>
				</div>
		<div class="elementor-element elementor-element-564d59e e-con-full e-flex e-con e-child" data-id="564d59e" data-element_type="container" data-e-type="container">
				<div class="elementor-element elementor-element-ba496d9 elementor-invisible elementor-widget elementor-widget-text-editor" data-id="ba496d9" data-element_type="widget" data-e-type="widget" data-settings="{&quot;_animation&quot;:&quot;fadeIn&quot;,&quot;_animation_delay&quot;:100}" data-widget_type="text-editor.default">
									<p class="code-line" dir="auto" data-line="16"><strong>The skai.gr newsroom, in your pocket.</strong></p><p class="code-line" dir="auto" data-line="18">SKAI News is the official news app of SKAI, one of Greece&#8217;s major TV and radio broadcasters. It puts the whole skai.gr newsroom on the phone: top stories, a live news feed, breaking-news alerts, minute-by-minute live blogs, opinion columns, news videos and each morning&#8217;s newspaper front pages. It is free, in Greek, on iPhone and Android, and nobody has to sign up. We have designed, built and looked after the app continuously since January 2020. The current release is 6.9.8.</p>								</div>
				</div>
				</div>
					</div>
				</div>
		<div class="elementor-element elementor-element-b357c3f e-con-full e-flex e-con e-parent" data-id="b357c3f" data-element_type="container" data-e-type="container" data-settings="{&quot;background_background&quot;:&quot;classic&quot;}">
				</div>
		<div class="elementor-element elementor-element-ca1c106 e-flex e-con-boxed e-con e-parent" data-id="ca1c106" data-element_type="container" data-e-type="container" data-settings="{&quot;background_background&quot;:&quot;classic&quot;}">
					<div class="e-con-inner">
		<div class="elementor-element elementor-element-a564c32 e-con-full e-flex e-con e-child" data-id="a564c32" data-element_type="container" data-e-type="container">
		<div class="elementor-element elementor-element-260eebe e-con-full e-flex e-con e-child" data-id="260eebe" data-element_type="container" data-e-type="container">
				<div class="elementor-element elementor-element-35789d2 elementor-invisible elementor-widget elementor-widget-ohio_heading" data-id="35789d2" data-element_type="widget" data-e-type="widget" data-settings="{&quot;_animation&quot;:&quot;fadeIn&quot;}" data-widget_type="ohio_heading.default">
				<div class="elementor-widget-container">
					<div class="ohio-widget heading -left">

    
            <div class="subtitle">
            The Problem        </div>

        
    
    <h2 class="title">
                A national newsroom that never stops publishing                    </h2>

    
    
</div>				</div>
				</div>
				</div>
		<div class="elementor-element elementor-element-04dd9ee e-con-full e-flex e-con e-child" data-id="04dd9ee" data-element_type="container" data-e-type="container">
				<div class="elementor-element elementor-element-39e6488 elementor-invisible elementor-widget elementor-widget-text-editor" data-id="39e6488" data-element_type="widget" data-e-type="widget" data-settings="{&quot;_animation&quot;:&quot;fadeIn&quot;,&quot;_animation_delay&quot;:100}" data-widget_type="text-editor.default">
									<p>skai.gr publishes all day across 16 categories, runs live blogs for big events, and produces video and opinion alongside the news. Showing all of it to everyone buries the stories each reader actually cares about. Alerting everyone about everything trains people to switch notifications off.</p><p>Readers needed a way to follow their own topics and get alerts only for those, without creating an account. Shared stories had to open properly on the other person&#8217;s phone. And the newsroom could not run a second publishing system just for the app.</p>								</div>
				</div>
				</div>
					</div>
				</div>
		<div class="elementor-element elementor-element-c99c0f1 e-flex e-con-boxed e-con e-parent" data-id="c99c0f1" data-element_type="container" data-e-type="container" data-settings="{&quot;background_background&quot;:&quot;classic&quot;}">
					<div class="e-con-inner">
		<div class="elementor-element elementor-element-b918797 e-con-full e-flex e-con e-child" data-id="b918797" data-element_type="container" data-e-type="container">
		<div class="elementor-element elementor-element-d52f880 e-con-full e-flex e-con e-child" data-id="d52f880" data-element_type="container" data-e-type="container">
				<div class="elementor-element elementor-element-d66a2b4 elementor-invisible elementor-widget elementor-widget-ohio_heading" data-id="d66a2b4" data-element_type="widget" data-e-type="widget" data-settings="{&quot;_animation&quot;:&quot;fadeIn&quot;}" data-widget_type="ohio_heading.default">
				<div class="elementor-widget-container">
					<div class="ohio-widget heading -left">

    
            <div class="subtitle">
            What we built        </div>

        
    
    <h2 class="title">
                Personal, without an account                    </h2>

    
    
</div>				</div>
				</div>
				</div>
		<div class="elementor-element elementor-element-e4f0712 e-con-full e-flex e-con e-child" data-id="e4f0712" data-element_type="container" data-e-type="container">
				<div class="elementor-element elementor-element-74ba6bc elementor-invisible elementor-widget elementor-widget-text-editor" data-id="74ba6bc" data-element_type="widget" data-e-type="widget" data-settings="{&quot;_animation&quot;:&quot;fadeIn&quot;,&quot;_animation_delay&quot;:100}" data-widget_type="text-editor.default">
									<p>The first time the app opens, it quietly creates an anonymous profile in the background. From then on, favourite topics become their own tabs and alert choices are remembered, with no email and no password. Favourites and alert settings are stored in the cloud, and any change reaches the open app immediately.</p><p>The app has no content database of its own. Everything comes straight from skai.gr: articles, categories, top and popular stories, breaking news, live blogs, opinions and videos. When the newsroom renames or reorders a category on the site, the app follows. The app team can also change parts of the layout remotely, with no store update: whether videos appear on Home, compact or full story cards, text sizes, summaries, and the links to SKAI&#8217;s other apps.</p>								</div>
				</div>
				</div>
		<div class="elementor-element elementor-element-e767b73 e-con-full elementor-hidden-tablet elementor-hidden-mobile e-flex e-con e-child" data-id="e767b73" data-element_type="container" data-e-type="container">
				<div class="elementor-element elementor-element-ae77543 elementor-widget elementor-widget-image" data-id="ae77543" data-element_type="widget" data-e-type="widget" data-widget_type="image.default">
															<img fetchpriority="high" decoding="async" width="1344" height="800" src="https://smartupweb.com/wp-content/uploads/2026/10/SKAI_Project_Hero_Banner.webp" class="attachment-full size-full wp-image-249085" alt="" srcset="https://smartupweb.com/wp-content/uploads/2026/10/SKAI_Project_Hero_Banner.webp 1344w, https://smartupweb.com/wp-content/uploads/2026/10/SKAI_Project_Hero_Banner-300x179.webp 300w, https://smartupweb.com/wp-content/uploads/2026/10/SKAI_Project_Hero_Banner-1024x610.webp 1024w, https://smartupweb.com/wp-content/uploads/2026/10/SKAI_Project_Hero_Banner-768x457.webp 768w" sizes="(max-width: 1344px) 100vw, 1344px" />															</div>
				</div>
		<div class="elementor-element elementor-element-11e3824 e-con-full elementor-hidden-desktop e-flex e-con e-child" data-id="11e3824" data-element_type="container" data-e-type="container">
				<div class="elementor-element elementor-element-59a0c1f elementor-pagination-position-outside elementor-widget elementor-widget-image-carousel" data-id="59a0c1f" data-element_type="widget" data-e-type="widget" data-settings="{&quot;slides_to_show_mobile&quot;:&quot;1&quot;,&quot;navigation&quot;:&quot;dots&quot;,&quot;lazyload&quot;:&quot;yes&quot;,&quot;autoplay&quot;:&quot;yes&quot;,&quot;autoplay_speed&quot;:5000,&quot;infinite&quot;:&quot;yes&quot;,&quot;speed&quot;:500}" data-widget_type="image-carousel.default">
							<div class="elementor-image-carousel-wrapper swiper" role="region" aria-roledescription="carousel" aria-label="Image Carousel" dir="ltr">
			<div class="elementor-image-carousel swiper-wrapper" aria-live="off">
								<div class="swiper-slide" role="group" aria-roledescription="slide" aria-label="1 of 3"><figure class="swiper-slide-inner"><img class="swiper-slide-image swiper-lazy" data-src="https://smartupweb.com/wp-content/uploads/2026/10/SKAI-1-scaled.webp" alt="SKAI" /><div class="swiper-lazy-preloader"></div></figure></div><div class="swiper-slide" role="group" aria-roledescription="slide" aria-label="2 of 3"><figure class="swiper-slide-inner"><img class="swiper-slide-image swiper-lazy" data-src="https://smartupweb.com/wp-content/uploads/2026/10/SKAI-2-scaled.webp" alt="SKAI" /><div class="swiper-lazy-preloader"></div></figure></div><div class="swiper-slide" role="group" aria-roledescription="slide" aria-label="3 of 3"><figure class="swiper-slide-inner"><img class="swiper-slide-image swiper-lazy" data-src="https://smartupweb.com/wp-content/uploads/2026/10/SKAI-3-scaled.webp" alt="SKAI" /><div class="swiper-lazy-preloader"></div></figure></div>			</div>
							
									<div class="swiper-pagination"></div>
									</div>
						</div>
				</div>
					</div>
				</div>
		<div class="elementor-element elementor-element-6d9410a e-flex e-con-boxed e-con e-parent" data-id="6d9410a" data-element_type="container" data-e-type="container" data-settings="{&quot;background_background&quot;:&quot;classic&quot;}">
					<div class="e-con-inner">
		<div class="elementor-element elementor-element-00bc014 e-con-full e-flex e-con e-child" data-id="00bc014" data-element_type="container" data-e-type="container">
		<div class="elementor-element elementor-element-1605f7b e-con-full e-flex e-con e-child" data-id="1605f7b" data-element_type="container" data-e-type="container">
				<div class="elementor-element elementor-element-ce2e6c8 elementor-invisible elementor-widget elementor-widget-ohio_heading" data-id="ce2e6c8" data-element_type="widget" data-e-type="widget" data-settings="{&quot;_animation&quot;:&quot;fadeIn&quot;}" data-widget_type="ohio_heading.default">
				<div class="elementor-widget-container">
					<div class="ohio-widget heading -left">

    
            <div class="subtitle">
                    </div>

        
    
    <h2 class="title">
                Your topics, as tabs                    </h2>

    
    
</div>				</div>
				</div>
				</div>
		<div class="elementor-element elementor-element-3821ba1 e-con-full e-flex e-con e-child" data-id="3821ba1" data-element_type="container" data-e-type="container">
				<div class="elementor-element elementor-element-e5ceead elementor-invisible elementor-widget elementor-widget-text-editor" data-id="e5ceead" data-element_type="widget" data-e-type="widget" data-settings="{&quot;_animation&quot;:&quot;fadeIn&quot;,&quot;_animation_delay&quot;:100}" data-widget_type="text-editor.default">
									The main navigation is a row of tabs you can swipe across: Home, Feed, your favourite categories, Popular, Front Pages and Videos. Favourites are chosen from a grid of photo tiles with a simple + / ✓ toggle, and every favourite becomes its own tab. Home mirrors the skai.gr front page: the lead story large, the editors&#8217; top stories, a rotating Opinions band, the latest videos and a short section for each category. A story never appears twice.								</div>
				</div>
				</div>
				<div class="elementor-element elementor-element-d77a1f0 elementor-widget-divider--view-line elementor-widget elementor-widget-divider" data-id="d77a1f0" data-element_type="widget" data-e-type="widget" data-widget_type="divider.default">
							<div class="elementor-divider">
			<span class="elementor-divider-separator">
						</span>
		</div>
						</div>
		<div class="elementor-element elementor-element-e654226 e-con-full e-flex e-con e-child" data-id="e654226" data-element_type="container" data-e-type="container">
		<div class="elementor-element elementor-element-39b2ff2 e-con-full e-flex e-con e-child" data-id="39b2ff2" data-element_type="container" data-e-type="container">
				<div class="elementor-element elementor-element-db0b797 elementor-invisible elementor-widget elementor-widget-ohio_heading" data-id="db0b797" data-element_type="widget" data-e-type="widget" data-settings="{&quot;_animation&quot;:&quot;fadeIn&quot;}" data-widget_type="ohio_heading.default">
				<div class="elementor-widget-container">
					<div class="ohio-widget heading -left">

    
            <div class="subtitle">
                    </div>

        
    
    <h2 class="title">
                Breaking and live, without refreshing                    </h2>

    
    
</div>				</div>
				</div>
				</div>
		<div class="elementor-element elementor-element-7a9e557 e-con-full e-flex e-con e-child" data-id="7a9e557" data-element_type="container" data-e-type="container">
				<div class="elementor-element elementor-element-cd836e9 elementor-invisible elementor-widget elementor-widget-text-editor" data-id="cd836e9" data-element_type="widget" data-e-type="widget" data-settings="{&quot;_animation&quot;:&quot;fadeIn&quot;,&quot;_animation_delay&quot;:100}" data-widget_type="text-editor.default">
									When the newsroom marks a story as breaking, a bold red banner appears at the top of Home. The app checks for new breaking news every three minutes. For big events a story becomes a live blog, with a pulsing red LIVE BLOGGING label and a timeline of updates that refreshes itself every minute, so readers never have to pull to refresh.								</div>
				</div>
				</div>
				<div class="elementor-element elementor-element-ef66eaf elementor-widget-divider--view-line elementor-widget elementor-widget-divider" data-id="ef66eaf" data-element_type="widget" data-e-type="widget" data-widget_type="divider.default">
							<div class="elementor-divider">
			<span class="elementor-divider-separator">
						</span>
		</div>
						</div>
		<div class="elementor-element elementor-element-49df43f e-con-full e-flex e-con e-child" data-id="49df43f" data-element_type="container" data-e-type="container">
		<div class="elementor-element elementor-element-061fbfc e-con-full e-flex e-con e-child" data-id="061fbfc" data-element_type="container" data-e-type="container">
				<div class="elementor-element elementor-element-9046e03 elementor-invisible elementor-widget elementor-widget-ohio_heading" data-id="9046e03" data-element_type="widget" data-e-type="widget" data-settings="{&quot;_animation&quot;:&quot;fadeIn&quot;}" data-widget_type="ohio_heading.default">
				<div class="elementor-widget-container">
					<div class="ohio-widget heading -left">

    
            <div class="subtitle">
                    </div>

        
    
    <h2 class="title">
                A video player that follows you                    </h2>

    
    
</div>				</div>
				</div>
				</div>
		<div class="elementor-element elementor-element-b041655 e-con-full e-flex e-con e-child" data-id="b041655" data-element_type="container" data-e-type="container">
				<div class="elementor-element elementor-element-8c2acb1 elementor-invisible elementor-widget elementor-widget-text-editor" data-id="8c2acb1" data-element_type="widget" data-e-type="widget" data-settings="{&quot;_animation&quot;:&quot;fadeIn&quot;,&quot;_animation_delay&quot;:100}" data-widget_type="text-editor.default">
									Tapping play slides the player up from the bottom while the page behind it blurs. Swipe it down and it shrinks into a mini-player bar, so the reader can keep browsing while the video plays. Turn the phone sideways and it goes full-screen. The screen stays awake during playback, and the video pauses when the reader leaves the app.								</div>
				</div>
				</div>
				<div class="elementor-element elementor-element-a2ab8cd elementor-widget-divider--view-line elementor-widget elementor-widget-divider" data-id="a2ab8cd" data-element_type="widget" data-e-type="widget" data-widget_type="divider.default">
							<div class="elementor-divider">
			<span class="elementor-divider-separator">
						</span>
		</div>
						</div>
		<div class="elementor-element elementor-element-1c3646c e-con-full e-flex e-con e-child" data-id="1c3646c" data-element_type="container" data-e-type="container">
		<div class="elementor-element elementor-element-c388d47 e-con-full e-flex e-con e-child" data-id="c388d47" data-element_type="container" data-e-type="container">
				<div class="elementor-element elementor-element-224b813 elementor-invisible elementor-widget elementor-widget-ohio_heading" data-id="224b813" data-element_type="widget" data-e-type="widget" data-settings="{&quot;_animation&quot;:&quot;fadeIn&quot;}" data-widget_type="ohio_heading.default">
				<div class="elementor-widget-container">
					<div class="ohio-widget heading -left">

    
            <div class="subtitle">
                    </div>

        
    
    <h2 class="title">
                Alerts only for what you follow                    </h2>

    
    
</div>				</div>
				</div>
				</div>
		<div class="elementor-element elementor-element-edde703 e-con-full e-flex e-con e-child" data-id="edde703" data-element_type="container" data-e-type="container">
				<div class="elementor-element elementor-element-4f7d161 elementor-invisible elementor-widget elementor-widget-text-editor" data-id="4f7d161" data-element_type="widget" data-e-type="widget" data-settings="{&quot;_animation&quot;:&quot;fadeIn&quot;,&quot;_animation_delay&quot;:100}" data-widget_type="text-editor.default">
									Readers choose which categories may send them alerts, with one main switch for all of them. The newsroom sends alerts per category, and each one reaches only the readers who follow that category, with the article&#8217;s photo attached on both iPhone and Android. Tapping an alert opens the story directly, even if the app was closed.								</div>
				</div>
				</div>
				<div class="elementor-element elementor-element-e01783f elementor-widget-divider--view-line elementor-widget elementor-widget-divider" data-id="e01783f" data-element_type="widget" data-e-type="widget" data-widget_type="divider.default">
							<div class="elementor-divider">
			<span class="elementor-divider-separator">
						</span>
		</div>
						</div>
		<div class="elementor-element elementor-element-778273f e-con-full e-flex e-con e-child" data-id="778273f" data-element_type="container" data-e-type="container">
		<div class="elementor-element elementor-element-bb15a33 e-con-full e-flex e-con e-child" data-id="bb15a33" data-element_type="container" data-e-type="container">
				<div class="elementor-element elementor-element-0e7a646 elementor-invisible elementor-widget elementor-widget-ohio_heading" data-id="0e7a646" data-element_type="widget" data-e-type="widget" data-settings="{&quot;_animation&quot;:&quot;fadeIn&quot;}" data-widget_type="ohio_heading.default">
				<div class="elementor-widget-container">
					<div class="ohio-widget heading -left">

    
            <div class="subtitle">
                    </div>

        
    
    <h2 class="title">
                Links that open in the right place                    </h2>

    
    
</div>				</div>
				</div>
				</div>
		<div class="elementor-element elementor-element-eee6d36 e-con-full e-flex e-con e-child" data-id="eee6d36" data-element_type="container" data-e-type="container">
				<div class="elementor-element elementor-element-add0b17 elementor-invisible elementor-widget elementor-widget-text-editor" data-id="add0b17" data-element_type="widget" data-e-type="widget" data-settings="{&quot;_animation&quot;:&quot;fadeIn&quot;,&quot;_animation_delay&quot;:100}" data-widget_type="text-editor.default">
									Sharing a story or a video creates a link that appears as a rich preview card (headline, summary, image) in WhatsApp, Viber, Messenger and similar apps. If the person receiving it has the app, the link opens that exact story or video in the app. If not, it takes them to the App Store or Google Play. When Google shut down its old link service, we moved the app to a new link system in 2026.								</div>
				</div>
				</div>
				<div class="elementor-element elementor-element-cc20a02 elementor-widget-divider--view-line elementor-widget elementor-widget-divider" data-id="cc20a02" data-element_type="widget" data-e-type="widget" data-widget_type="divider.default">
							<div class="elementor-divider">
			<span class="elementor-divider-separator">
						</span>
		</div>
						</div>
		<div class="elementor-element elementor-element-b61f82b e-con-full e-flex e-con e-child" data-id="b61f82b" data-element_type="container" data-e-type="container">
		<div class="elementor-element elementor-element-7ac3a0b e-con-full e-flex e-con e-child" data-id="7ac3a0b" data-element_type="container" data-e-type="container">
				<div class="elementor-element elementor-element-9dc5d22 elementor-invisible elementor-widget elementor-widget-ohio_heading" data-id="9dc5d22" data-element_type="widget" data-e-type="widget" data-settings="{&quot;_animation&quot;:&quot;fadeIn&quot;}" data-widget_type="ohio_heading.default">
				<div class="elementor-widget-container">
					<div class="ohio-widget heading -left">

    
            <div class="subtitle">
                    </div>

        
    
    <h2 class="title">
                The morning's front pages                    </h2>

    
    
</div>				</div>
				</div>
				</div>
		<div class="elementor-element elementor-element-c753082 e-con-full e-flex e-con e-child" data-id="c753082" data-element_type="container" data-e-type="container">
				<div class="elementor-element elementor-element-594d54d elementor-invisible elementor-widget elementor-widget-text-editor" data-id="594d54d" data-element_type="widget" data-e-type="widget" data-settings="{&quot;_animation&quot;:&quot;fadeIn&quot;,&quot;_animation_delay&quot;:100}" data-widget_type="text-editor.default">
									Each day&#8217;s Greek newspaper front pages, split into political and sports papers, open in a full-screen gallery you can swipe through and pinch to zoom. Header shortcuts lead to the rest of the SKAI family: the SKAI TV and SKAI 100.3 radio apps, Sport FM and the weather.								</div>
				</div>
				</div>
					</div>
				</div>
		<div class="elementor-element elementor-element-d808782 e-flex e-con-boxed e-con e-parent" data-id="d808782" data-element_type="container" data-e-type="container" data-settings="{&quot;background_background&quot;:&quot;gradient&quot;}">
					<div class="e-con-inner">
				<div class="elementor-element elementor-element-c46f099 elementor-widget-divider--view-line elementor-widget elementor-widget-divider" data-id="c46f099" data-element_type="widget" data-e-type="widget" data-widget_type="divider.default">
							<div class="elementor-divider">
			<span class="elementor-divider-separator">
						</span>
		</div>
						</div>
		<div class="elementor-element elementor-element-655d79d e-con-full e-flex e-con e-child" data-id="655d79d" data-element_type="container" data-e-type="container">
		<div class="elementor-element elementor-element-8f176b7 e-con-full e-flex e-con e-child" data-id="8f176b7" data-element_type="container" data-e-type="container">
				<div class="elementor-element elementor-element-14b33e1 elementor-invisible elementor-widget elementor-widget-ohio_heading" data-id="14b33e1" data-element_type="widget" data-e-type="widget" data-settings="{&quot;_animation&quot;:&quot;fadeIn&quot;}" data-widget_type="ohio_heading.default">
				<div class="elementor-widget-container">
					<div class="ohio-widget heading -left">

    
            <div class="subtitle">
            The architecture        </div>

        
    
    <h2 class="title">
                Connected to the newsroom                    </h2>

    
    
</div>				</div>
				</div>
				</div>
		<div class="elementor-element elementor-element-419ac9e e-con-full e-flex e-con e-child" data-id="419ac9e" data-element_type="container" data-e-type="container">
				<div class="elementor-element elementor-element-3ac588b elementor-invisible elementor-widget elementor-widget-text-editor" data-id="3ac588b" data-element_type="widget" data-e-type="widget" data-settings="{&quot;_animation&quot;:&quot;fadeIn&quot;,&quot;_animation_delay&quot;:100}" data-widget_type="text-editor.default">
									<p>The app reads straight from the skai.gr content feed and keeps no content of its own. A journalist publishes once, and the story appears on the website and in the app together. Every article opened in the app is counted in skai.gr&#8217;s reading statistics, which is what feeds the Popular list.</p><p>Everything personal and everything remote-controlled lives in Firebase. An anonymous identity recognises each reader. Cloud Firestore holds favourites, alert choices and the layout switches, and every open app updates the moment one of them changes. Alerts go through Firebase Cloud Messaging, one topic per category, with a small cloud function attaching the article photo. Share links are served from Firebase Hosting, with a preview page for messaging apps and a hand-off to the app or the store.</p><p>The video player sits above every screen rather than inside one, which is why a video keeps playing while the reader moves around the app.</p>								</div>
				</div>
				</div>
				<div class="elementor-element elementor-element-7befe79 elementor-widget-divider--view-line elementor-widget elementor-widget-divider" data-id="7befe79" data-element_type="widget" data-e-type="widget" data-widget_type="divider.default">
							<div class="elementor-divider">
			<span class="elementor-divider-separator">
						</span>
		</div>
						</div>
		<div class="elementor-element elementor-element-e76b81d e-con-full e-flex e-con e-child" data-id="e76b81d" data-element_type="container" data-e-type="container">
		<div class="elementor-element elementor-element-b45fb24 e-con-full e-flex e-con e-child" data-id="b45fb24" data-element_type="container" data-e-type="container">
				<div class="elementor-element elementor-element-b95083a elementor-invisible elementor-widget elementor-widget-ohio_heading" data-id="b95083a" data-element_type="widget" data-e-type="widget" data-settings="{&quot;_animation&quot;:&quot;fadeIn&quot;}" data-widget_type="ohio_heading.default">
				<div class="elementor-widget-container">
					<div class="ohio-widget heading -left">

    
            <div class="subtitle">
            Team and scope        </div>

        
    
    <h2 class="title">
                Six years and counting                    </h2>

    
    
</div>				</div>
				</div>
				</div>
		<div class="elementor-element elementor-element-2f3cbe1 e-con-full e-flex e-con e-child" data-id="2f3cbe1" data-element_type="container" data-e-type="container">
				<div class="elementor-element elementor-element-1e5cdc3 elementor-invisible elementor-widget elementor-widget-text-editor" data-id="1e5cdc3" data-element_type="widget" data-e-type="widget" data-settings="{&quot;_animation&quot;:&quot;fadeIn&quot;,&quot;_animation_delay&quot;:100}" data-widget_type="text-editor.default">
									<p>Design, development and maintenance have all been ours since January 2020. Along the way:</p>								</div>
				<div class="elementor-element elementor-element-afa1a50 elementor-icon-list--layout-traditional elementor-list-item-link-full_width elementor-widget elementor-widget-icon-list" data-id="afa1a50" data-element_type="widget" data-e-type="widget" data-widget_type="icon-list.default">
							<ul class="elementor-icon-list-items">
							<li class="elementor-icon-list-item">
											<span class="elementor-icon-list-icon">
							<svg aria-hidden="true" class="e-font-icon-svg e-fas-square" viewBox="0 0 448 512" xmlns="http://www.w3.org/2000/svg"><path d="M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48z"></path></svg>						</span>
										<span class="elementor-icon-list-text">2020: first build, notifications, link-up with the SKAI Radio app</span>
									</li>
								<li class="elementor-icon-list-item">
											<span class="elementor-icon-list-icon">
							<svg aria-hidden="true" class="e-font-icon-svg e-fas-square" viewBox="0 0 448 512" xmlns="http://www.w3.org/2000/svg"><path d="M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48z"></path></svg>						</span>
										<span class="elementor-icon-list-text">2021: front pages, with categories now coming from skai.gr</span>
									</li>
								<li class="elementor-icon-list-item">
											<span class="elementor-icon-list-icon">
							<svg aria-hidden="true" class="e-font-icon-svg e-fas-square" viewBox="0 0 448 512" xmlns="http://www.w3.org/2000/svg"><path d="M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48z"></path></svg>						</span>
										<span class="elementor-icon-list-text">2022: Breaking News banner, live blogging, X / Instagram / TikTok embeds</span>
									</li>
								<li class="elementor-icon-list-item">
											<span class="elementor-icon-list-icon">
							<svg aria-hidden="true" class="e-font-icon-svg e-fas-square" viewBox="0 0 448 512" xmlns="http://www.w3.org/2000/svg"><path d="M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48z"></path></svg>						</span>
										<span class="elementor-icon-list-text">2025: rebuilt on a fresh, up-to-date Flutter project</span>
									</li>
								<li class="elementor-icon-list-item">
											<span class="elementor-icon-list-icon">
							<svg aria-hidden="true" class="e-font-icon-svg e-fas-square" viewBox="0 0 448 512" xmlns="http://www.w3.org/2000/svg"><path d="M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48z"></path></svg>						</span>
										<span class="elementor-icon-list-text">2026: smart share links, Android 16 support, State Advertising disclosure page</span>
									</li>
						</ul>
						</div>
				<div class="elementor-element elementor-element-7d50f2b elementor-invisible elementor-widget elementor-widget-text-editor" data-id="7d50f2b" data-element_type="widget" data-e-type="widget" data-settings="{&quot;_animation&quot;:&quot;fadeIn&quot;,&quot;_animation_delay&quot;:100}" data-widget_type="text-editor.default">
									<p>Four text sizes that apply to every article, a gentle rate-the-app prompt after about ten launches, and all the legal pages a broadcaster needs, including protection of minors and the yearly state-advertising statement. The current release is 6.9.8 (build 4056).</p>								</div>
				</div>
				</div>
				<div class="elementor-element elementor-element-e04abb2 elementor-widget-divider--view-line elementor-widget elementor-widget-divider" data-id="e04abb2" data-element_type="widget" data-e-type="widget" data-widget_type="divider.default">
							<div class="elementor-divider">
			<span class="elementor-divider-separator">
						</span>
		</div>
						</div>
		<div class="elementor-element elementor-element-5e78469 e-con-full e-flex e-con e-child" data-id="5e78469" data-element_type="container" data-e-type="container">
		<div class="elementor-element elementor-element-ab8beec e-con-full e-flex e-con e-child" data-id="ab8beec" data-element_type="container" data-e-type="container">
				<div class="elementor-element elementor-element-87ca80e elementor-invisible elementor-widget elementor-widget-ohio_heading" data-id="87ca80e" data-element_type="widget" data-e-type="widget" data-settings="{&quot;_animation&quot;:&quot;fadeIn&quot;}" data-widget_type="ohio_heading.default">
				<div class="elementor-widget-container">
					<div class="ohio-widget heading -left">

    
            <div class="subtitle">
            Technologies        </div>

        
    
    <h2 class="title">
                Stack                    </h2>

    
    
</div>				</div>
				</div>
				</div>
		<div class="elementor-element elementor-element-8464858 e-con-full e-flex e-con e-child" data-id="8464858" data-element_type="container" data-e-type="container">
				<div class="elementor-element elementor-element-8382fda elementor-icon-list--layout-traditional elementor-list-item-link-full_width elementor-invisible elementor-widget elementor-widget-icon-list" data-id="8382fda" data-element_type="widget" data-e-type="widget" data-settings="{&quot;_animation&quot;:&quot;fadeInUp&quot;,&quot;_animation_delay&quot;:400}" data-widget_type="icon-list.default">
							<ul class="elementor-icon-list-items">
							<li class="elementor-icon-list-item">
											<span class="elementor-icon-list-icon">
							<svg aria-hidden="true" class="e-font-icon-svg e-fas-square" viewBox="0 0 448 512" xmlns="http://www.w3.org/2000/svg"><path d="M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48z"></path></svg>						</span>
										<span class="elementor-icon-list-text">Mobile: Flutter · Dart</span>
									</li>
								<li class="elementor-icon-list-item">
											<span class="elementor-icon-list-icon">
							<svg aria-hidden="true" class="e-font-icon-svg e-fas-square" viewBox="0 0 448 512" xmlns="http://www.w3.org/2000/svg"><path d="M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48z"></path></svg>						</span>
										<span class="elementor-icon-list-text">Content: skai.gr content feed · Sport FM front-pages feed</span>
									</li>
								<li class="elementor-icon-list-item">
											<span class="elementor-icon-list-icon">
							<svg aria-hidden="true" class="e-font-icon-svg e-fas-square" viewBox="0 0 448 512" xmlns="http://www.w3.org/2000/svg"><path d="M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48z"></path></svg>						</span>
										<span class="elementor-icon-list-text">Identity: Firebase Authentication (anonymous)</span>
									</li>
								<li class="elementor-icon-list-item">
											<span class="elementor-icon-list-icon">
							<svg aria-hidden="true" class="e-font-icon-svg e-fas-square" viewBox="0 0 448 512" xmlns="http://www.w3.org/2000/svg"><path d="M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48z"></path></svg>						</span>
										<span class="elementor-icon-list-text">Preferences &amp; remote settings: Cloud Firestore</span>
									</li>
								<li class="elementor-icon-list-item">
											<span class="elementor-icon-list-icon">
							<svg aria-hidden="true" class="e-font-icon-svg e-fas-square" viewBox="0 0 448 512" xmlns="http://www.w3.org/2000/svg"><path d="M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48z"></path></svg>						</span>
										<span class="elementor-icon-list-text">Push: Firebase Cloud Messaging · Cloud Functions</span>
									</li>
								<li class="elementor-icon-list-item">
											<span class="elementor-icon-list-icon">
							<svg aria-hidden="true" class="e-font-icon-svg e-fas-square" viewBox="0 0 448 512" xmlns="http://www.w3.org/2000/svg"><path d="M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48z"></path></svg>						</span>
										<span class="elementor-icon-list-text">Share links: Firebase Hosting</span>
									</li>
								<li class="elementor-icon-list-item">
											<span class="elementor-icon-list-icon">
							<svg aria-hidden="true" class="e-font-icon-svg e-fas-square" viewBox="0 0 448 512" xmlns="http://www.w3.org/2000/svg"><path d="M400 32H48C21.5 32 0 53.5 0 80v352c0 26.5 21.5 48 48 48h352c26.5 0 48-21.5 48-48V80c0-26.5-21.5-48-48-48z"></path></svg>						</span>
										<span class="elementor-icon-list-text">Analytics: Firebase Analytics</span>
									</li>
						</ul>
						</div>
				<div class="elementor-element elementor-element-350b4cb elementor-widget elementor-widget-html" data-id="350b4cb" data-element_type="widget" data-e-type="widget" data-widget_type="html.default">
					<div class="su-badge">
  <div class="su-badge__stage">
    <div class="su-badge__tilt">
      <div class="su-badge__ring"></div>
    </div>

    <svg class="su-badge__mark" viewBox="0 0 101 122" xmlns="http://www.w3.org/2000/svg" aria-hidden="true">
      <rect x="25.25" y="0"    width="75.75" height="24.4"/>
      <rect x="0"     y="24.4" width="25.25" height="24.4"/>
      <rect x="25.25" y="48.8" width="50.5"  height="24.4"/>
      <rect x="75.75" y="73.2" width="25.25" height="24.4"/>
      <rect x="0"     y="97.6" width="75.75" height="24.4"/>
    </svg>
  </div>
</div>

<style>
  .su-badge {
    display: flex;
    justify-content: center;
    color: #fff;
  }

  .su-badge__stage {
    position: relative;
    width: 280px;
    height: 180px;
    perspective: 9000px;
  }

  .su-badge__tilt {
    position: absolute;
    inset: 0;
    transform: rotateX(28deg);
    transform-style: preserve-3d;
  }

  .su-badge__ring {
    position: absolute;
    inset: 0;
    transform-style: preserve-3d;
    animation: suBadgeSpin 16s linear infinite;
  }

  .su-badge__ch {
    position: absolute;
    left: 50%;
    top: 50%;
    margin: -0.6em 0 0 -0.5em;
    width: 1em;
    font-family: "Open Sans", sans-serif;
    font-size: 18px;
    font-weight: 400;
    line-height: 1.2;
    text-align: center;
    white-space: pre;
    backface-visibility: hidden;
    -webkit-backface-visibility: hidden;
  }

  .su-badge__mark {
    position: absolute;
    left: 50%;
    top: 50%;
    width: 41px;
    height: 50px;
    transform: translate(-50%, -50%);
    fill: currentColor;
  }

  @keyframes suBadgeSpin {
    from {
      transform: rotateY(0deg);
    }
    to {
      transform: rotateY(360deg);
    }
  }

  @media (prefers-reduced-motion: reduce) {
    .su-badge__ring {
      animation: none;
    }
  }
</style>

<script>
(function () {
  var TEXT = 'THIS PROJECT WAS MADE BY HUMANS \u2022 ';
  var REPEAT = 2;
  var RADIUS = 122;
  var FONT = '700 15px "Open Sans", sans-serif';
  var TRACKING = 1.0;

  function build(root) {
    if (root.hasAttribute('data-su-ready')) return;
    root.setAttribute('data-su-ready', '');

    var ring = root.querySelector('.su-badge__ring');
    if (!ring) return;

    var str = '';
    for (var r = 0; r < REPEAT; r++) str += TEXT;
    var chars = str.split('');
    var n = chars.length;

    var ctx = document.createElement('canvas').getContext('2d');
    ctx.font = FONT;

    var widths = [];
    var total = 0;
    for (var i = 0; i < n; i++) {
      var w = ctx.measureText(chars[i]).width * TRACKING;
      widths.push(w);
      total += w;
    }

    var frag = document.createDocumentFragment();
    var cursor = 0;

    for (var k = 0; k < n; k++) {
      var deg = (cursor + widths[k] / 2) / total * 360;
      cursor += widths[k];

      var out = document.createElement('span');
      out.className = 'su-badge__ch';
      out.textContent = chars[k];
      out.style.transform = 'rotateY(' + deg.toFixed(3) + 'deg) translateZ(' + RADIUS + 'px)';
      frag.appendChild(out);

      var inn = document.createElement('span');
      inn.className = 'su-badge__ch';
      inn.textContent = chars[k];
      inn.style.transform = 'rotateY(' + (180 - deg).toFixed(3) + 'deg) translateZ(' + RADIUS + 'px) rotateY(180deg)';
      frag.appendChild(inn);
    }

    ring.appendChild(frag);
  }

  function init() {
    var all = document.querySelectorAll('.su-badge');
    for (var i = 0; i < all.length; i++) build(all[i]);
  }

  if (document.fonts && document.fonts.ready) {
    document.fonts.ready.then(init);
  } else if (document.readyState === 'loading') {
    document.addEventListener('DOMContentLoaded', init);
  } else {
    init();
  }
})();
</script>				</div>
				</div>
				</div>
				<div class="elementor-element elementor-element-6cfe968 elementor-widget-divider--view-line elementor-widget elementor-widget-divider" data-id="6cfe968" data-element_type="widget" data-e-type="widget" data-widget_type="divider.default">
							<div class="elementor-divider">
			<span class="elementor-divider-separator">
						</span>
		</div>
						</div>
		<div class="elementor-element elementor-element-d6a12ab e-con-full e-flex e-con e-child" data-id="d6a12ab" data-element_type="container" data-e-type="container">
		<div class="elementor-element elementor-element-add1ce1 e-con-full e-flex e-con e-child" data-id="add1ce1" data-element_type="container" data-e-type="container">
				<div class="elementor-element elementor-element-8184cf7 elementor-invisible elementor-widget elementor-widget-ohio_heading" data-id="8184cf7" data-element_type="widget" data-e-type="widget" data-settings="{&quot;_animation&quot;:&quot;fadeIn&quot;}" data-widget_type="ohio_heading.default">
				<div class="elementor-widget-container">
					<div class="ohio-widget heading -left">

    
            <div class="subtitle">
            Download mobile app        </div>

        
    
    <h2 class="title">
                SKAI.gr                    </h2>

    
    
</div>				</div>
				</div>
				</div>
		<div class="elementor-element elementor-element-c9a92c3 e-con-full e-flex e-con e-child" data-id="c9a92c3" data-element_type="container" data-e-type="container">
				<div class="elementor-element elementor-element-fbce23f elementor-widget elementor-widget-image" data-id="fbce23f" data-element_type="widget" data-e-type="widget" data-widget_type="image.default">
																<a href="https://apps.apple.com/us/app/skai-gr/id1076335165" target="_blank" rel="nofollow">
							<img decoding="async" width="497" height="146" src="https://smartupweb.com/wp-content/uploads/2026/09/apple.png" class="elementor-animation-grow attachment-full size-full wp-image-247580" alt="" srcset="https://smartupweb.com/wp-content/uploads/2026/09/apple.png 497w, https://smartupweb.com/wp-content/uploads/2026/09/apple-300x88.png 300w" sizes="(max-width: 497px) 100vw, 497px" />								</a>
															</div>
				<div class="elementor-element elementor-element-201cfa9 elementor-widget elementor-widget-image" data-id="201cfa9" data-element_type="widget" data-e-type="widget" data-widget_type="image.default">
																<a href="https://play.google.com/store/apps/details?id=gr.skai.skai_android&#038;hl=el" target="_blank" rel="nofollow">
							<img decoding="async" width="497" height="146" src="https://smartupweb.com/wp-content/uploads/2026/09/android.png" class="elementor-animation-grow attachment-full size-full wp-image-247581" alt="" srcset="https://smartupweb.com/wp-content/uploads/2026/09/android.png 497w, https://smartupweb.com/wp-content/uploads/2026/09/android-300x88.png 300w" sizes="(max-width: 497px) 100vw, 497px" />								</a>
															</div>
				</div>
				</div>
					</div>
				</div>
		<div class="elementor-element elementor-element-6572417 e-flex e-con-boxed e-con e-parent" data-id="6572417" data-element_type="container" data-e-type="container">
					<div class="e-con-inner">
		<div class="elementor-element elementor-element-a5bbf2f e-con-full e-flex e-con e-child" data-id="a5bbf2f" data-element_type="container" data-e-type="container">
				<div class="elementor-element elementor-element-7b69160 su-cta elementor-widget elementor-widget-ohio_call_to_action" data-id="7b69160" data-element_type="widget" data-e-type="widget" data-widget_type="ohio_call_to_action.default">
				<div class="elementor-widget-container">
					<div class="ohio-widget call-to-action subtitle-bottom" >
    <div class="heading title">

        
        <h2  class="title">
            Tell us what you're building.        </h2>

                    <div class="subtitle" >
                A 30-minute call — no deck, no pitch. You describe the problem, we tell you honestly whether we're the right team for it, and what we'd do first.            </div>
        
    </div>
    <div class="holder">
        <a class="button -default btn-elementor-colored"
            href="/contact/" >
            
                            <svg xmlns="http://www.w3.org/2000/svg" class="su-mark" width="101" height="122" viewBox="0 0 101 122" aria-hidden="true"><style>    .su-mark { color: #053634; }              .su-mark__blk {      fill: currentColor;      transform-box: fill-box;      transform-origin: center;      animation: suSWave 1.5s ease-in-out infinite;    }    .su-mark__b1 { animation-delay: 0s;    }    .su-mark__b2 { animation-delay: 0.11s; }    .su-mark__b3 { animation-delay: 0.22s; }    .su-mark__b4 { animation-delay: 0.33s; }    .su-mark__b5 { animation-delay: 0.44s; }    @keyframes suSWave {      0%, 65%, 100% { opacity: 0.22; transform: scale(0.86); }      22%           { opacity: 1;    transform: scale(1);    }    }    @media (prefers-reduced-motion: reduce) {      .su-mark__blk { animation: none; opacity: 1; transform: none; }    }  </style><rect class="su-mark__blk su-mark__b1" x="25.25" y="0" width="75.75" height="24.4"></rect><rect class="su-mark__blk su-mark__b2" x="0" y="24.4" width="25.25" height="24.4"></rect><rect class="su-mark__blk su-mark__b3" x="25.25" y="48.8" width="50.5" height="24.4"></rect><rect class="su-mark__blk su-mark__b4" x="75.75" y="73.2" width="25.25" height="24.4"></rect><rect class="su-mark__blk su-mark__b5" x="0" y="97.6" width="75.75" height="24.4"></rect></svg>                        
                            <span class="text">Contact us</span>
            
                    </a>
    </div>
</div>				</div>
				</div>
				</div>
					</div>
				</div>
				</div>
		<p>The post <a href="https://smartupweb.com/project/skai-news/">SKAI News</a> appeared first on <a href="https://smartupweb.com">Smartup</a>.</p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
