Start over, this time in Astro

This commit is contained in:
becarta
2025-05-23 10:34:43 +02:00
parent fe932180cb
commit f40db0f5c9
5933 changed files with 0 additions and 1720591 deletions

View File

@@ -1,49 +0,0 @@
<script lang="ts">
import Router from 'svelte-spa-router';
import Home from './routes/Home.svelte';
import About from './routes/about.svelte';
import Contact from './routes/contact.svelte';
import Careers from './routes/careers.svelte';
import Blog from './routes/blog.svelte';
import Privacy from './routes/legal/privacy.svelte';
import Terms from './routes/legal/terms.svelte';
import Cookies from './routes/legal/cookies.svelte';
import Migrations from './routes/services/migrations.svelte';
import Email from './routes/services/email.svelte';
import Security from './routes/services/security.svelte';
import Helpdesk from './routes/services/helpdesk.svelte';
import NotFound from './routes/NotFound.svelte';
import Footer from './components/Footer.svelte';
const routes = {
'/': Home,
'/about': About,
'/contact': Contact,
'/careers': Careers,
'/blog': Blog,
'/legal/privacy': Privacy,
'/legal/terms': Terms,
'/legal/cookies': Cookies,
'/services/migrations': Migrations,
'/services/email': Email,
'/services/security': Security,
'/services/helpdesk': Helpdesk,
'*': NotFound
};
</script>
<main class="min-h-screen bg-white">
<Router {routes} useHash={false} />
<Footer />
</main>
<style>
:global(html) {
font-family: 'Inter', sans-serif;
color: #333333;
}
:global(h1, h2, h3, h4, h5, h6) {
font-family: 'Poppins', sans-serif;
}
</style>

View File

@@ -1,30 +0,0 @@
@import url('https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&family=Poppins:wght@500;600;700&display=swap');
@tailwind base;
@tailwind components;
@tailwind utilities;
:root {
--primary-color: #0077cc;
--accent-color: #2ecc71;
--background-color: #ffffff;
--surface-color: #f9f9f9;
--text-color: #333333;
--link-hover-color: #005fa3;
}
html {
scroll-behavior: smooth;
}
body {
margin: 0;
padding: 0;
font-family: 'Inter', sans-serif;
color: var(--text-color);
background-color: var(--background-color);
}
h1, h2, h3, h4, h5, h6 {
font-family: 'Poppins', sans-serif;
}

View File

@@ -1,49 +0,0 @@
<script lang="ts">
const values = [
{
title: 'Expertise',
description: 'Deep knowledge of Microsoft 365 ecosystem and best practices.',
icon: '🎯'
},
{
title: 'Reliability',
description: 'Consistent, dependable support when you need it most.',
icon: '⭐'
},
{
title: 'Innovation',
description: 'Staying ahead of the curve with the latest cloud technologies.',
icon: '💡'
}
];
</script>
<section class="py-20 bg-white">
<div class="container mx-auto px-4">
<div class="max-w-4xl mx-auto">
<h2 class="text-3xl md:text-4xl font-heading font-bold text-center text-primary mb-8">
About Us
</h2>
<p class="text-lg text-text/80 text-center mb-12">
We're a team of dedicated IT professionals passionate about helping freelancers and small businesses
thrive in the digital age. With years of experience in Microsoft 365 migrations and support,
we understand the unique challenges faced by small teams and provide tailored solutions to meet
your specific needs.
</p>
<div class="grid md:grid-cols-3 gap-8 mt-16">
{#each values as value}
<div class="text-center">
<div class="text-4xl mb-4">{value.icon}</div>
<h3 class="text-xl font-heading font-semibold text-primary mb-3">
{value.title}
</h3>
<p class="text-text/80">
{value.description}
</p>
</div>
{/each}
</div>
</div>
</div>
</section>

View File

@@ -1,87 +0,0 @@
<script lang="ts">
let formData = {
name: '',
email: '',
company: '',
message: ''
};
function handleSubmit() {
// Form submission would be handled here
console.log('Form submitted:', formData);
}
</script>
<section class="py-20 bg-surface">
<div class="container mx-auto px-4">
<div class="max-w-2xl mx-auto">
<h2 class="text-3xl md:text-4xl font-heading font-bold text-center text-primary mb-8">
Get in Touch
</h2>
<p class="text-lg text-text/80 text-center mb-12">
Ready to transform your business with expert Microsoft 365 support?
Fill out the form below and we'll get back to you within 24 hours.
</p>
<form on:submit|preventDefault={handleSubmit} class="space-y-6">
<div>
<label for="name" class="block text-sm font-medium text-text mb-2">
Name
</label>
<input
type="text"
id="name"
bind:value={formData.name}
class="w-full px-4 py-3 rounded-lg border border-gray-300 focus:ring-2 focus:ring-primary focus:border-transparent"
required
/>
</div>
<div>
<label for="email" class="block text-sm font-medium text-text mb-2">
Email
</label>
<input
type="email"
id="email"
bind:value={formData.email}
class="w-full px-4 py-3 rounded-lg border border-gray-300 focus:ring-2 focus:ring-primary focus:border-transparent"
required
/>
</div>
<div>
<label for="company" class="block text-sm font-medium text-text mb-2">
Company
</label>
<input
type="text"
id="company"
bind:value={formData.company}
class="w-full px-4 py-3 rounded-lg border border-gray-300 focus:ring-2 focus:ring-primary focus:border-transparent"
/>
</div>
<div>
<label for="message" class="block text-sm font-medium text-text mb-2">
Message
</label>
<textarea
id="message"
bind:value={formData.message}
rows="4"
class="w-full px-4 py-3 rounded-lg border border-gray-300 focus:ring-2 focus:ring-primary focus:border-transparent"
required
></textarea>
</div>
<button
type="submit"
class="w-full bg-primary hover:bg-link-hover text-white px-8 py-4 rounded-lg text-lg font-semibold transition-colors duration-200"
>
Send Message
</button>
</form>
</div>
</div>
</section>

View File

@@ -1,49 +0,0 @@
<script lang="ts">
const currentYear = new Date().getFullYear();
</script>
<footer class="bg-primary text-white py-12">
<div class="container mx-auto px-4">
<div class="grid md:grid-cols-4 gap-8">
<div class="space-y-4">
<h3 class="text-xl font-heading font-semibold">Tiber365</h3>
<p class="text-white/80">
Expert Microsoft 365 support for freelancers and small businesses.
</p>
</div>
<div>
<h4 class="text-lg font-heading font-semibold mb-4">Services</h4>
<ul class="space-y-2">
<li><a href="/services/migrations" class="text-white/80 hover:text-white transition-colors">Microsoft 365 Migrations</a></li>
<li><a href="/services/email" class="text-white/80 hover:text-white transition-colors">Cloud Email Support</a></li>
<li><a href="/services/security" class="text-white/80 hover:text-white transition-colors">Security & Compliance</a></li>
<li><a href="/services/helpdesk" class="text-white/80 hover:text-white transition-colors">Remote IT Helpdesk</a></li>
</ul>
</div>
<div>
<h4 class="text-lg font-heading font-semibold mb-4">Company</h4>
<ul class="space-y-2">
<li><a href="/about" class="text-white/80 hover:text-white transition-colors">About Us</a></li>
<li><a href="/contact" class="text-white/80 hover:text-white transition-colors">Contact</a></li>
<li><a href="/careers" class="text-white/80 hover:text-white transition-colors">Careers</a></li>
<li><a href="/blog" class="text-white/80 hover:text-white transition-colors">Blog</a></li>
</ul>
</div>
<div>
<h4 class="text-lg font-heading font-semibold mb-4">Legal</h4>
<ul class="space-y-2">
<li><a href="/legal/privacy" class="text-white/80 hover:text-white transition-colors">Privacy Policy</a></li>
<li><a href="/legal/terms" class="text-white/80 hover:text-white transition-colors">Terms of Service</a></li>
<li><a href="/legal/cookies" class="text-white/80 hover:text-white transition-colors">Cookie Policy</a></li>
</ul>
</div>
</div>
<div class="border-t border-white/10 mt-12 pt-8 text-center text-white/60">
<p>&copy; {currentYear} Tiber365. All rights reserved.</p>
</div>
</div>
</footer>

View File

@@ -1,52 +0,0 @@
<script lang="ts">
import { onMount } from 'svelte';
// import '@lottiefiles/lottie-player'; // No longer needed
let isVisible = false;
onMount(() => {
isVisible = true;
});
</script>
<section class="relative min-h-[80vh] bg-surface flex items-center">
<div class="container mx-auto px-4 py-16 md:py-24">
<div class="grid md:grid-cols-2 gap-12 items-center">
<div class="space-y-6" class:fade-in={isVisible}>
<h1 class="text-4xl md:text-5xl lg:text-6xl font-heading font-bold text-primary leading-tight">
Empowering Freelancers & Small Teams with Expert Microsoft 365 Support
</h1>
<p class="text-xl text-text/80">
Seamless migrations, reliable support, and productivity-focused solutions.
</p>
<button class="bg-primary hover:bg-link-hover text-white px-8 py-4 rounded-lg text-lg font-semibold transition-colors duration-200">
Schedule a Free Consultation
</button>
</div>
<div class="relative h-[400px] md:h-[500px] flex items-center justify-center" class:fade-in={isVisible}>
<img
src="/Images/67008E55-91DC-49D3-B9B4-BE1383D713A5.png"
alt="Cloud support illustration"
class="max-h-full max-w-full object-contain"
/>
</div>
</div>
</div>
</section>
<style>
.fade-in {
animation: fadeIn 1s ease-out forwards;
}
@keyframes fadeIn {
from {
opacity: 0;
transform: translateY(20px);
}
to {
opacity: 1;
transform: translateY(0);
}
}
</style>

View File

@@ -1,50 +0,0 @@
<script lang="ts">
const services = [
{
title: 'Microsoft 365 Migrations',
description: 'Smooth transition to Microsoft 365 with minimal downtime and comprehensive data migration.',
icon: '🔄'
},
{
title: 'Cloud Email & File Support',
description: 'Expert management of Exchange Online and SharePoint, ensuring seamless collaboration.',
icon: '📧'
},
{
title: 'Security Configuration & Compliance',
description: 'Robust security setup and compliance management to protect your business data.',
icon: '🔒'
},
{
title: 'Remote IT Helpdesk',
description: '24/7 remote support for all your Microsoft 365 and general IT needs.',
icon: '💻'
},
{
title: 'Personalized Training & Onboarding',
description: 'Custom training programs to help your team maximize productivity with Microsoft 365.',
icon: '🎓'
}
];
</script>
<section class="py-20 bg-white">
<div class="container mx-auto px-4">
<h2 class="text-3xl md:text-4xl font-heading font-bold text-center text-primary mb-12">
Our Services
</h2>
<div class="grid md:grid-cols-2 lg:grid-cols-3 gap-8">
{#each services as service}
<div class="bg-surface p-8 rounded-xl shadow-sm hover:shadow-md transition-shadow duration-200">
<div class="text-4xl mb-4">{service.icon}</div>
<h3 class="text-xl font-heading font-semibold text-primary mb-3">
{service.title}
</h3>
<p class="text-text/80">
{service.description}
</p>
</div>
{/each}
</div>
</div>
</section>

View File

@@ -1,100 +0,0 @@
<script lang="ts">
import { onMount, onDestroy } from 'svelte';
import { slide } from 'svelte/transition';
const testimonials = [
{
name: 'Sarah Johnson',
role: 'Freelance Designer',
content: 'The migration to Microsoft 365 was seamless. The team was professional and made sure all my data was transferred safely.',
avatar: '👩'
},
{
name: 'Michael Chen',
role: 'Small Business Owner',
content: 'Their ongoing support has been invaluable. Quick response times and always available when we need them.',
avatar: '👨'
},
{
name: 'Emma Rodriguez',
role: 'Marketing Agency Director',
content: 'The personalized training sessions helped our team get up to speed quickly with Microsoft 365.',
avatar: '👩'
}
];
let currentIndex = 0;
let timer: ReturnType<typeof setTimeout> | null = null;
const ROTATE_INTERVAL = 20000; // 20 seconds
function nextHandler() {
next();
}
function prevHandler() {
prev();
}
function next(reset = true) {
currentIndex = (currentIndex + 1) % testimonials.length;
if (reset) resetTimer();
}
function prev() {
currentIndex = (currentIndex - 1 + testimonials.length) % testimonials.length;
resetTimer();
}
function resetTimer() {
if (timer) clearTimeout(timer);
timer = setTimeout(() => next(false), ROTATE_INTERVAL);
}
onMount(() => {
timer = setTimeout(() => next(false), ROTATE_INTERVAL);
});
onDestroy(() => {
if (timer) clearTimeout(timer);
});
</script>
<section class="py-20 bg-surface">
<div class="container mx-auto px-4">
<h2 class="text-3xl md:text-4xl font-heading font-bold text-center text-primary mb-12">
What Our Clients Say
</h2>
<div class="max-w-3xl mx-auto">
<div class="relative">
{#if testimonials[currentIndex]}
<div class="bg-white p-8 rounded-xl shadow-sm" transition:slide|local>
<div class="text-4xl mb-4">{testimonials[currentIndex].avatar}</div>
<p class="text-lg text-text/80 mb-6">
"{testimonials[currentIndex].content}"
</p>
<div>
<p class="font-heading font-semibold text-primary">
{testimonials[currentIndex].name}
</p>
<p class="text-text/60">
{testimonials[currentIndex].role}
</p>
</div>
</div>
{/if}
<div class="flex justify-center mt-8 space-x-4">
<button
on:click={prevHandler}
class="p-2 rounded-full bg-white shadow-sm hover:shadow-md transition-shadow duration-200"
>
</button>
<button
on:click={nextHandler}
class="p-2 rounded-full bg-white shadow-sm hover:shadow-md transition-shadow duration-200"
>
</button>
</div>
</div>
</div>
</div>
</section>

View File

@@ -1,8 +0,0 @@
import './app.css';
import App from './App.svelte';
const app = new App({
target: document.getElementById('app')!,
});
export default app;

View File

@@ -1,9 +0,0 @@
<script lang="ts">
import Hero from '../components/Hero.svelte';
import Services from '../components/Services.svelte';
import Testimonials from '../components/Testimonials.svelte';
</script>
<Hero />
<Services />
<Testimonials />

View File

@@ -1,6 +0,0 @@
<script>
export let title = 'Page Not Found';
</script>
<h1>{title}</h1>
<p>The page you are looking for does not exist. Please check the URL or return to the <a href="/">homepage</a>.</p>

View File

@@ -1,8 +0,0 @@
<script>
export let title = 'About Us';
</script>
<h1>{title}</h1>
<p>
Tiber365 is dedicated to empowering freelancers and small businesses with expert Microsoft 365 support. Our team brings years of experience in cloud solutions, migrations, and IT support, helping clients achieve productivity and security.
</p>

View File

@@ -1,8 +0,0 @@
<script>
export let title = 'Blog';
</script>
<h1>{title}</h1>
<p>
Welcome to the Tiber365 blog! Here we share tips, news, and insights about Microsoft 365, cloud technology, and productivity for small businesses. Stay tuned for our latest articles.
</p>

View File

@@ -1,8 +0,0 @@
<script>
export let title = 'Careers';
</script>
<h1>{title}</h1>
<p>
Join our growing team! Tiber365 is always looking for talented IT professionals passionate about cloud technology and customer service. Check back soon for open positions or send your CV to <a href="mailto:careers@tiber365.com">careers@tiber365.com</a>.
</p>

View File

@@ -1,8 +0,0 @@
<script>
export let title = 'Contact';
</script>
<h1>{title}</h1>
<p>
Have questions or need support? Reach out to our team via email at <a href="mailto:support@tiber365.com">support@tiber365.com</a> or use our contact form. We aim to respond within one business day.
</p>

View File

@@ -1,55 +0,0 @@
<script>
export let title = 'Cookie Policy';
</script>
<h1>{title}</h1>
<p>Last updated: 16-05-2025</p>
<h2>Table of Contents</h2>
<ol>
<li><a href="#what-are-cookies">What Are Cookies?</a></li>
<li><a href="#types-of-cookies">Types of Cookies We Use</a></li>
<li><a href="#consent-management">Consent Banner and Management</a></li>
<li><a href="#third-party-cookies">Third-Party Cookies</a></li>
<li><a href="#managing-cookies">Managing or Deleting Cookies</a></li>
<li><a href="#changes">Changes and Version History</a></li>
<li><a href="#contact">Contact</a></li>
</ol>
<h2 id="what-are-cookies">1. What Are Cookies?</h2>
<p>
Cookies are small text files placed on your device to ensure the website functions properly, to analyze usage, and to enable certain features.
</p>
<h2 id="types-of-cookies">2. Types of Cookies We Use</h2>
<ul>
<li><strong>Functional cookies</strong>: necessary for the operation of the site (e.g., language preferences, session management).</li>
<li><strong>Analytics cookies</strong>: to measure website usage via Google Analytics (with anonymized IP address).</li>
<li><strong>Preference cookies</strong>: to remember your settings and preferences.</li>
<li><strong>Third-party cookies</strong>: for embedded content such as YouTube or Calendly. These parties may place their own cookies.</li>
</ul>
<h2 id="consent-management">3. Consent Banner and Management</h2>
<p>
On your first visit, we display a cookie banner allowing you to accept or refuse non-essential cookies. Your choice is stored and can be changed at any time via the cookie settings on our website.
</p>
<h2 id="third-party-cookies">4. Third-Party Cookies</h2>
<p>
We use third-party services (such as Google Analytics, YouTube, Calendly) that may place cookies and process data according to their own privacy policies. See our <a href="/legal/privacy">Privacy Policy</a> for more details.
</p>
<h2 id="managing-cookies">5. Managing or Deleting Cookies</h2>
<p>
You can always manage or delete cookies via your browser settings. See your browser's help function for instructions. Note that disabling cookies may affect the functionality of our website.
</p>
<h2 id="changes">6. Changes and Version History</h2>
<p>
We reserve the right to change this cookie policy. The latest version is always available on this page. Previous versions can be requested via [your email].
</p>
<h2 id="contact">7. Contact</h2>
<p>
For questions about our cookie policy, contact us at <a href="mailto:privacy@tiber365.com">privacy@tiber365.com</a>.
</p>

View File

@@ -1,126 +0,0 @@
<script>
export let title = 'Privacy Policy';
</script>
<h1>{title}</h1>
<p>Last updated: 16-05-2025</p>
<h2>Table of Contents</h2>
<ol>
<li><a href="#who-we-are">Who We Are</a></li>
<li><a href="#scope">Scope</a></li>
<li><a href="#what-data-we-collect">What Data We Collect</a></li>
<li><a href="#purposes-and-legal-basis">Purposes and Legal Basis</a></li>
<li><a href="#retention-periods">Retention Periods</a></li>
<li><a href="#sharing-with-third-parties">Sharing with Third Parties</a></li>
<li><a href="#security">Security</a></li>
<li><a href="#your-rights">Your Rights</a></li>
<li><a href="#how-to-exercise-your-rights">How to Exercise Your Rights</a></li>
<li><a href="#third-party-services">Third-Party Services</a></li>
<li><a href="#international-data-transfers">International Data Transfers</a></li>
<li><a href="#children">Children's Privacy</a></li>
<li><a href="#changes">Changes and Version History</a></li>
<li><a href="#contact">Contact</a></li>
</ol>
<h2 id="who-we-are">1. Who We Are</h2>
<p>
Tiber365, located at [your address], is responsible for the processing of personal data as described in this privacy policy.<br>
Contact: [your email] | https://tiber365.365devnet.eu
</p>
<h2 id="scope">2. Scope</h2>
<p>
This policy applies to all visitors and users of the Tiber365 website and services, including contact forms, analytics, and embedded content.
</p>
<h2 id="what-data-we-collect">3. What Data We Collect</h2>
<ul>
<li>Contact details: name, email address, phone number (via contact form)</li>
<li>Usage data: IP address, browser info, device type, visited pages, time spent</li>
<li>Cookies and similar technologies (see <a href="/legal/cookies">Cookie Policy</a>)</li>
<li>Any other information you voluntarily provide</li>
</ul>
<h2 id="purposes-and-legal-basis">4. Purposes and Legal Basis</h2>
<ul>
<li>To respond to contact requests (legitimate interest, GDPR art. 6(1)(f))</li>
<li>To improve our services and website (legitimate interest, GDPR art. 6(1)(f))</li>
<li>To perform our services (contract, GDPR art. 6(1)(b))</li>
<li>To comply with legal obligations (GDPR art. 6(1)(c))</li>
<li>To protect our rights and property (legitimate interest)</li>
</ul>
<h2 id="retention-periods">5. Retention Periods</h2>
<ul>
<li>Contact details: up to 2 years after last contact or as required by law</li>
<li>Analytics and cookie data: according to the retention periods of Google Analytics and other third parties (see their privacy policies)</li>
<li>Other data: as long as necessary for the purposes described above</li>
</ul>
<h2 id="sharing-with-third-parties">6. Sharing with Third Parties</h2>
<ul>
<li>Our hosting provider (for website hosting and email)</li>
<li>Google (for anonymized analytics)</li>
<li>Embedded content providers (e.g., YouTube, Calendly)</li>
<li>Government authorities if legally required</li>
<li>Other processors as necessary for our services (see <a href="#third-party-services">Third-Party Services</a>)</li>
</ul>
<h2 id="security">7. Security</h2>
<ul>
<li>SSL/TLS encryption for all data in transit</li>
<li>Access restrictions to personal data (only authorized staff)</li>
<li>Data minimization and regular review of stored data</li>
<li>Regular software updates and security monitoring</li>
<li>Backups and disaster recovery procedures</li>
</ul>
<h2 id="your-rights">8. Your Rights</h2>
<ul>
<li>Access your personal data</li>
<li>Correct or update your data</li>
<li>Request erasure (“right to be forgotten”)</li>
<li>Restrict or object to processing</li>
<li>Data portability (receive your data in a machine-readable format)</li>
<li>Withdraw consent at any time (where processing is based on consent)</li>
<li>Lodge a complaint with the Dutch Data Protection Authority (Autoriteit Persoonsgegevens)</li>
</ul>
<h2 id="how-to-exercise-your-rights">9. How to Exercise Your Rights</h2>
<p>
You can exercise your rights by contacting us at [your email]. We will respond within one month as required by law.
</p>
<h2 id="third-party-services">10. Third-Party Services</h2>
<ul>
<li>
<strong>Google Analytics</strong> (anonymized IP): <a href="https://policies.google.com/privacy" target="_blank">Privacy Policy</a>
</li>
<li>
<strong>Hosting provider</strong>: [provider name, link to privacy policy]
</li>
<li>
<strong>Embedded content</strong> (YouTube, Calendly): see their respective privacy policies
</li>
</ul>
<h2 id="international-data-transfers">11. International Data Transfers</h2>
<p>
We do not intentionally transfer your data outside the European Economic Area (EEA). If third-party providers process data outside the EEA, we ensure appropriate safeguards are in place (e.g., Standard Contractual Clauses).
</p>
<h2 id="children">12. Children's Privacy</h2>
<p>
Our services are not directed at children under 16. We do not knowingly collect data from children.
</p>
<h2 id="changes">13. Changes and Version History</h2>
<p>
We reserve the right to change this privacy policy. The latest version is always available on this page. Previous versions can be requested via [your email].
</p>
<h2 id="contact">14. Contact</h2>
<p>
For questions or requests regarding your data, contact us at [your email] or by mail at [your address].
</p>

View File

@@ -1,99 +0,0 @@
<script>
export let title = 'Terms and Conditions';
</script>
<h1>{title}</h1>
<p>Last updated: 16-05-2025</p>
<h2>Table of Contents</h2>
<ol>
<li><a href="#definitions">Definitions</a></li>
<li><a href="#scope">Scope</a></li>
<li><a href="#services">Services</a></li>
<li><a href="#client-responsibilities">Client Responsibilities</a></li>
<li><a href="#intellectual-property">Intellectual Property</a></li>
<li><a href="#liability">Liability</a></li>
<li><a href="#warranties">Warranties and Exclusions</a></li>
<li><a href="#payment">Payment</a></li>
<li><a href="#cancellation">Cancellation and Termination</a></li>
<li><a href="#force-majeure">Force Majeure</a></li>
<li><a href="#subcontracting">Subcontracting</a></li>
<li><a href="#governing-law">Governing Law and Disputes</a></li>
<li><a href="#contact">Contact</a></li>
</ol>
<h2 id="definitions">1. Definitions</h2>
<ul>
<li><strong>Tiber365</strong>: the service provider, located at [address].</li>
<li><strong>Client</strong>: any natural or legal person using the services of Tiber365.</li>
</ul>
<h2 id="scope">2. Scope</h2>
<p>
These terms apply to all agreements and services provided by Tiber365, unless otherwise agreed in writing.
</p>
<h2 id="services">3. Services</h2>
<p>
Tiber365 provides IT support, Microsoft 365 migrations, and remote helpdesk services to freelancers and small businesses.
</p>
<h2 id="client-responsibilities">4. Client Responsibilities</h2>
<ul>
<li>The client must provide all necessary information in a timely manner.</li>
<li>The client is responsible for the accuracy and completeness of the information provided.</li>
<li>The client must ensure secure access to systems if required.</li>
<li>The client must comply with all applicable laws and regulations.</li>
</ul>
<h2 id="intellectual-property">5. Intellectual Property</h2>
<p>
All intellectual property rights relating to materials, advice, and software provided by Tiber365 remain with Tiber365 or its licensors, unless otherwise agreed.
</p>
<h2 id="liability">6. Liability</h2>
<ul>
<li>Tiber365 is not liable for indirect or consequential damages or loss of profit.</li>
<li>Liability is limited to the amount invoiced for the relevant assignment.</li>
<li>No liability for damages resulting from incorrect or incomplete information provided by the client.</li>
<li>Tiber365 is not liable for damages resulting from third-party services or software.</li>
</ul>
<h2 id="warranties">7. Warranties and Exclusions</h2>
<ul>
<li>Tiber365 strives to provide good service but does not guarantee uninterrupted or error-free operation.</li>
<li>Advice is non-binding and without guarantee of results.</li>
</ul>
<h2 id="payment">8. Payment</h2>
<ul>
<li>Payment is by invoice, due within 14 days of the invoice date, unless otherwise agreed.</li>
<li>In case of late payment, statutory interest and collection costs are due.</li>
</ul>
<h2 id="cancellation">9. Cancellation and Termination</h2>
<ul>
<li>The client may cancel the agreement in writing with 14 days' notice.</li>
<li>Tiber365 may terminate the agreement in case of default, force majeure, or if continuation is unreasonable.</li>
</ul>
<h2 id="force-majeure">10. Force Majeure</h2>
<p>
Tiber365 is not liable for failure to perform due to circumstances beyond its reasonable control (force majeure), including but not limited to natural disasters, war, cyberattacks, or government action.
</p>
<h2 id="subcontracting">11. Subcontracting</h2>
<p>
Tiber365 may engage subcontractors for the performance of its services. Tiber365 remains responsible for the proper execution of the agreement.
</p>
<h2 id="governing-law">12. Governing Law and Disputes</h2>
<ul>
<li>All agreements are governed by Dutch law.</li>
<li>Disputes will be submitted to the competent court in [city, e.g., Amsterdam].</li>
</ul>
<h2 id="contact">13. Contact</h2>
<p>
For questions about these terms, contact us at <a href="mailto:legal@tiber365.com">legal@tiber365.com</a>.
</p>

View File

@@ -1,8 +0,0 @@
<script>
export let title = 'Cloud Email Support';
</script>
<h1>{title}</h1>
<p>
Get reliable support for your cloud-based email systems. We help with setup, troubleshooting, security, and ongoing management to keep your communications running smoothly and securely.
</p>

View File

@@ -1,8 +0,0 @@
<script>
export let title = 'Remote IT Helpdesk';
</script>
<h1>{title}</h1>
<p>
Access fast and friendly IT support from anywhere. Our remote helpdesk team resolves issues, answers questions, and keeps your business running efficiently with Microsoft 365.
</p>

View File

@@ -1,8 +0,0 @@
<script>
export let title = 'Microsoft 365 Migrations';
</script>
<h1>{title}</h1>
<p>
Seamlessly migrate your business to Microsoft 365 with minimal disruption. Our experts handle data transfer, user setup, and post-migration support, ensuring a smooth transition to the cloud.
</p>

View File

@@ -1,8 +0,0 @@
<script>
export let title = 'Security & Compliance';
</script>
<h1>{title}</h1>
<p>
Protect your business with robust security and compliance solutions tailored for Microsoft 365. We help you meet GDPR and EU data protection requirements, manage access, and monitor threats.
</p>

4
src/svelte.d.ts vendored
View File

@@ -1,4 +0,0 @@
declare module '*.svelte' {
import type { SvelteComponent } from 'svelte';
export default class extends SvelteComponent<Record<string, any>> {}
}

17
src/vite-env.d.ts vendored
View File

@@ -1,17 +0,0 @@
/// <reference types="svelte" />
/// <reference types="vite/client" />
declare module '*.svelte' {
import type { ComponentType } from 'svelte';
const component: ComponentType;
export default component;
}
interface ImportMetaEnv {
readonly VITE_APP_TITLE: string
// more env variables...
}
interface ImportMeta {
readonly env: ImportMetaEnv
}