<?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>Angular &#8211; Smartup</title>
	<atom:link href="https://smartupweb.com/blog/portfolio-tag/angular/feed/" rel="self" type="application/rss+xml" />
	<link></link>
	<description>Mobile App Design &#38; Development in Thessaloniki</description>
	<lastBuildDate>Thu, 08 Oct 2026 12:26:21 +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>Angular &#8211; Smartup</title>
	<link></link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>Stadion Sports Center</title>
		<link>https://smartupweb.com/project/stadion-sports-center/</link>
		
		<dc:creator><![CDATA[Smartup]]></dc:creator>
		<pubDate>Wed, 07 Oct 2026 12:18:42 +0000</pubDate>
				<guid isPermaLink="false">https://smartupweb.com/?post_type=ohio_portfolio&#038;p=249113</guid>

					<description><![CDATA[<p>Stadion Sports Center A historic sports club, run from one platform. Stadion...</p>
<p>The post <a href="https://smartupweb.com/project/stadion-sports-center/">Stadion Sports Center</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="249113" class="elementor elementor-249113">
				<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">
                Stadion Sports Center                    </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="17"><strong>A historic sports club, run from one platform.</strong></p><p class="code-line" dir="auto" data-line="19">Stadion is the digital platform of Stadion Sports Center, a historic multi-sport venue with tennis, padel, pickleball, golf simulators, a gym, group classes, a restaurant and a private members&#8217; Clubhouse. It replaces phone calls, spreadsheets and front-desk paperwork with one connected system. Members book a court, invite friends, pay and manage their membership from the web or their phone. Staff run the whole venue from one live back-office: courts, classes, coaches, pricing, memberships, reports and the Clubhouse. We designed and built every part of it: the customer web app, the iOS and Android member app, the staff back-office and the cloud API behind them, connected to Stripe, Salesforce, SoftOne ERP and the venue&#8217;s door-access system.</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 historic club, run by phone and paper                    </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>Booking a court meant a phone call or a trip to the front desk. Availability lived in spreadsheets, payments and invoices were handled by hand, and member details had to be kept in step across the venue&#8217;s ERP and CRM. Every sport came with its own rules: floodlights after sunset, coaches with their own fees, guests with a yearly visit cap, children booked by their parents, and a cancellation policy that has to be applied fairly every time.</p><p>On top of that sits the Clubhouse, a private members&#8217; club where discretion matters: invitation-only access, event requests, referrals and sensitive health information that has to be protected by law. The venue needed one system that members find effortless, and that staff can trust to apply the rules without exceptions.</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">
                One venue, one live system                    </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>Four parts share one backend. The customer web app and the iOS and Android member app are where members book, pay and manage their membership. The staff back-office is where the front desk, managers and coaches run the venue day to day. A cloud API connects them all, so whatever staff change shows up for members straight away, and the reverse.</p><p>The platform plugs into the systems the venue already runs. Stripe handles card payments, SoftOne ERP keeps customer data and invoicing in step, Salesforce receives Clubhouse accounts, event requests, referrals and approved cases, and Genetec opens the Clubhouse door from a member&#8217;s phone.</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/Stadion_Project_Hero_Banner.webp" class="attachment-full size-full wp-image-249119" alt="" srcset="https://smartupweb.com/wp-content/uploads/2026/10/Stadion_Project_Hero_Banner.webp 1344w, https://smartupweb.com/wp-content/uploads/2026/10/Stadion_Project_Hero_Banner-300x179.webp 300w, https://smartupweb.com/wp-content/uploads/2026/10/Stadion_Project_Hero_Banner-1024x610.webp 1024w, https://smartupweb.com/wp-content/uploads/2026/10/Stadion_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/Stadion_1-1-scaled.webp" alt="Stadion Sports Center" /><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/Stadion_2-2-scaled.webp" alt="Stadion Sports Center" /><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/Stadion_3-3-scaled.webp" alt="Stadion Sports Center" /><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">
                Book a court in a few taps                    </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 home screen opens on a card for each sport, controlled by the venue from the back-office. Members pick a date and a time window and see every free court, grouped by sport and filterable by features such as Central, Covered, Hard or Clay. The time-slot grid prices the booking as they choose and blocks anything that clashes with their other bookings. Evening slots offer floodlights, because the app knows when the sun sets. Members can add a coach (with the lesson fee shown up front), book for a child on their account, or join a waiting list for a full slot and get it automatically if it frees up. Full Members get an all-day gym pass in one tap, and the restaurant uses the same flow with party size, dietary requirements and special requests.								</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">
                Play together                    </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">
									Members can invite other players to share a court, searching members by name or inviting guests by email. The app checks for duplicates and guest-visit limits, and warns when someone is close to their yearly cap. When the players change, a plain message explains what that means for the price: an extra amount, a refund to the wallet, or a lower balance due. Venue rules say a session has a coach or invited players, never both, and the interface makes that clear without losing anything the member already typed. Invitations from other members arrive with Accept and Decline.								</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 checkout that explains every euro                    </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">
									Bookings wait in a cart with a live countdown while the slots are held. The cost is broken down line by line: court price, peak-hour charges, lights, guests, coach fee, coupons, wallet use and total. Coupons are matched to each booking automatically. Members with saved business details (VAT number, tax office) can choose a formal invoice instead of a receipt. Payment happens on a secure Stripe page, and bookings fully covered by credits confirm instantly. On the web, a personal QR code then works as the member&#8217;s access key to the venue. Before cancelling, members see exactly how much they&#8217;ll get back under the venue&#8217;s policy.								</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">
                A wallet that shows what's really yours                    </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">
									The Stadion Wallet shows three numbers: the available balance, the total balance, and funds held for upcoming bookings, which are charged only once the service has happened and released straight away on cancellation. Members top up by card, filter every transaction by date and type, and keep an eye on their Stadion Points: a weekly court allowance that comes with subscriptions, with a built-in explanation of how points are earned and spent.								</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">
                Classes and coaches                    </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">
									A weekly timetable shows every group class with its coach, studio, price and places left. Members enrol in one tap, join a waitlist when a class is full, and cancel with an automatic refund. The Our Coaches page gives every coach a profile with photo, sports, certifications, years of experience and a bio in Greek and English.								</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 Clubhouse                    </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">
									A private area that appears only for members the venue has invited. From the app, members unlock the Clubhouse door with one tap through the venue&#8217;s access-control system. A three-step wizard books a venue tour or requests a private or corporate event; each request gets a reference code, goes straight to Salesforce, and can be followed from &#8220;under review&#8221; to &#8220;confirmed&#8221;. Members can refer a friend, with an optional supporting document, and follow each referral&#8217;s status. A health profile keeps allergies, conditions and emergency instructions so staff can keep members safe. It is stored only with explicit consent, encrypted, and erased the moment consent is withdrawn. Prospects who aren&#8217;t members yet can use a public version of the event wizard, which creates leads in Salesforce and is protected against spam.								</div>
				</div>
				</div>
				<div class="elementor-element elementor-element-2beb52e elementor-widget-divider--view-line elementor-widget elementor-widget-divider" data-id="2beb52e" 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-c9256dc e-con-full e-flex e-con e-child" data-id="c9256dc" data-element_type="container" data-e-type="container">
		<div class="elementor-element elementor-element-4f021cb e-con-full e-flex e-con e-child" data-id="4f021cb" data-element_type="container" data-e-type="container">
				<div class="elementor-element elementor-element-9fabccf elementor-invisible elementor-widget elementor-widget-ohio_heading" data-id="9fabccf" 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">
                Running the venue                    </h2>

    
    
</div>				</div>
				</div>
				</div>
		<div class="elementor-element elementor-element-af94a47 e-con-full e-flex e-con e-child" data-id="af94a47" data-element_type="container" data-e-type="container">
				<div class="elementor-element elementor-element-988c4fb elementor-invisible elementor-widget elementor-widget-text-editor" data-id="988c4fb" 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 back-office is the venue&#8217;s operating system. A live booking grid shows every court and every slot, colour-coded by status. The front desk books on a member&#8217;s behalf, choosing who pays and who plays, and checks out by wallet, cash or card. Bookings are moved by drag and drop, with every move checked first, and a right-click closes a court for maintenance. A wizard creates recurring series (every Tuesday at 18:00) with coach availability checks. Group programmes have their own calendar, recurrence rules and attendance. Staff set prices per court, guest pricing by plan and sport, booking windows, guest limits and under-18 rules; they configure membership plans and manage subscriptions with proration; they issue campaign coupons and vouchers; and they broadcast messages by push, email and in-app, scheduled in advance. Reports cover court occupancy, revenue, member activity heatmaps and cancellation trends, and every report exports to Excel. Coaches log in to their own portal to see their lessons and classes.								</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">
                One source of truth, many doors                    </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>A REST API on Google Cloud Run in the EU, backed by PostgreSQL, is the single source of truth for bookings, wallets and memberships. The web apps are built in Angular 20 and 19, with standalone components, Signals, lazy loading on every page, and server-side rendering for fast first loads. The member app is built in Flutter for iOS and Android, with a layered structure (screens → view models → services) and reactive streams, so a change to a member&#8217;s balance or Clubhouse access updates every screen on its own. Firebase handles sign-in, with a token checked on every API call, plus push notifications on web and mobile, hosting and media storage. The reasoning behind the mobile app&#8217;s key decisions is written down in fifteen Architecture Decision Records.</p><p>The venue&#8217;s rules are enforced by the platform, not by goodwill. Each membership plan has its own limit on active bookings, with a counter members can see. Members who cancel too often are suspended automatically for a set period, with the end date shown clearly. Under-18 rules are set per sport, academy accounts follow their own simpler rules, and members whose plan doesn&#8217;t include app booking are told to contact the front desk instead of hitting a broken screen. On the staff side, nine roles (Admin, Front Desk, General Manager, Staff, Coach, Academy, Grid Maintainer, Clubhouse Manager and Customer) each get their own permissions and their own start page, enforced in the interface and on the server.</p><p>Privacy and security are designed in. Health data is treated as a special category under GDPR Article 9: explicit consent, encryption, one-click erasure, and every staff view of it audit-logged. Error reports, sent to Sentry, carry only what engineers need: never what a member typed, never health data, and email addresses masked. The web apps ship with a strict Content Security Policy, and payment result pages can&#8217;t be opened by typing their address. The web apps release through GitHub Actions, with a preview link for every pull request and separate staging and production environments.</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">
                Since 2023, from feedback panel to operating system                    </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>Product design, web, mobile, backend and integrations are all ours. A team of 16. That adds up to more than 1,800 commits on the two web apps alone. 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">2023: the staff back-office, starting as a feedback panel and growing into the venue's operating system</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">2024: wallet and points, coupons, notifications and membership packages</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: launch of the customer web app, with booking for every sport, Stripe payments, QR access and push notifications; in the back-office, the live booking grid, drag and drop, recurring bookings, group programmes, coaches, and the Salesforce and SoftOne integrations</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">Late 2025: family accounts, guest invitations, coach booking, golf simulators, under-18 rules, automatic suspensions and a full visual redesign</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: invoices and detailed cost breakdowns, academy accounts and a new pricing model; then the Clubhouse, with event planning, referrals, GDPR health profiles and its own back-office; and the native member app with door access from the phone</span>
									</li>
						</ul>
						</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">Web: Angular 20 / 19 · TypeScript · Signals · Tailwind CSS · Angular Material</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">Mobile: Flutter · Dart · Flutter Hooks · RxDart · go_router · built_value</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">Backend: REST API on Google Cloud Run (EU) · PostgreSQL</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 &amp; messaging: Firebase Authentication · Firebase Cloud Messaging</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">Hosting &amp; storage: Firebase Hosting · Firebase Storage</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">Payments: Stripe</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">Business systems: Salesforce · SoftOne ERP</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">Physical access: Genetec</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">Monitoring &amp; delivery: Sentry · GitHub Actions</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 elementor-hidden-desktop elementor-hidden-tablet elementor-hidden-mobile 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">
															<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" />															</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">
															<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" />															</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/stadion-sports-center/">Stadion Sports Center</a> appeared first on <a href="https://smartupweb.com">Smartup</a>.</p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
