This commit is contained in:
Jesse Winton
2025-06-03 08:56:24 -04:00
parent 139c023bac
commit 906503886a
9 changed files with 69 additions and 40 deletions

View File

@@ -73,7 +73,9 @@
y: [12, -5] y: [12, -5]
}, },
{ {
type: 'spring' type: 'spring',
bounce: 0.3,
duration: 0.35
} }
); );
shouldAnimate = true; shouldAnimate = true;
@@ -86,7 +88,9 @@
y: [-5, 12] y: [-5, 12]
}, },
{ {
type: 'spring' type: 'spring',
bounce: 0.3,
duration: 0.35
} }
); );
@@ -106,7 +110,9 @@
y: [12, -5] y: [12, -5]
}, },
{ {
type: 'spring' type: 'spring',
bounce: 0.3,
duration: 0.35
} }
); );
shouldAnimate = true; shouldAnimate = true;
@@ -119,7 +125,9 @@
y: [-5, 12] y: [-5, 12]
}, },
{ {
type: 'spring' type: 'spring',
bounce: 0.3,
duration: 0.35
} }
); );

View File

@@ -98,7 +98,7 @@
</script> </script>
<a <a
href="/producst/sites" href="/products/sites"
class="border-smooth group col-span-12 flex flex-col rounded-2xl border bg-white/2 p-2 transition-shadow duration-300 hover:shadow-[0px_0px_0px_4px_var(--color-offset)] focus:shadow-[0px_0px_0px_4px_var(--color-offset)] lg:col-span-7" class="border-smooth group col-span-12 flex flex-col rounded-2xl border bg-white/2 p-2 transition-shadow duration-300 hover:shadow-[0px_0px_0px_4px_var(--color-offset)] focus:shadow-[0px_0px_0px_4px_var(--color-offset)] lg:col-span-7"
bind:this={container} bind:this={container}
> >

View File

@@ -9,37 +9,49 @@
let image: HTMLElement; let image: HTMLElement;
$effect(() => { $effect(() => {
const from: AnimationSequence = [ hover(container, () => {
[image, { borderRadius: '4px', filter: 'grayscale(100%)' }] if (isMobile()) return;
];
const to: AnimationSequence = [[image, { borderRadius: '8px', filter: 'grayscale(50%)' }]]; animate(image, { borderRadius: '12px', filter: 'grayscale(25%)' }, { duration: 0.2 });
return () => {
animate(
image,
{
borderRadius: '4px',
filter: 'grayscale(100%)'
},
{ duration: 0.2 }
);
};
});
inView( inView(
container, container,
() => { () => {
if (!isMobile()) return; if (!isMobile()) return;
animate(to, { duration: 0.2 }); animate(
image,
{
borderRadius: '12px',
filter: 'grayscale(25%)'
},
{ duration: 0.2 }
);
return () => { return () => {
animate(from, { duration: 0.2 }); animate(
image,
{ borderRadius: '4px', filter: 'grayscale(100%)' },
{ duration: 0.2 }
);
}; };
}, },
{ {
amount: 'all' amount: 'all'
} }
); );
hover(container, () => {
if (isMobile()) return;
animate(to, { duration: 0.25 });
return () => {
animate(from, { duration: 0.25 });
};
});
}); });
</script> </script>
@@ -79,7 +91,7 @@
<img <img
src={Image} src={Image}
alt="Storage" alt="Storage"
class="md:max-w-auto h-full w-full max-w-[350px] overflow-hidden object-contain transition-all" class="md:max-w-auto h-full w-full max-w-[350px] overflow-hidden object-cover transition-all"
bind:this={image} bind:this={image}
style:border-radius="4px" style:border-radius="4px"
style:filter="grayscale(100%)" style:filter="grayscale(100%)"

View File

@@ -52,8 +52,8 @@
<div class="container py-20"> <div class="container py-20">
<div class="mx-auto mb-16 flex max-w-5xl flex-col gap-8"> <div class="mx-auto mb-16 flex max-w-5xl flex-col gap-8">
<h2 class="text-primary font-aeonik-pro mx-auto max-w-sm text-center text-5xl"> <h2 class="text-primary font-aeonik-pro mx-auto max-w-lg text-center text-5xl">
Backend APIs, frontend hosting All the products you need, in one platform
</h2> </h2>
<div class="hidden justify-between gap-8 md:flex"> <div class="hidden justify-between gap-8 md:flex">

View File

@@ -51,7 +51,7 @@
<div <div
class={classNames( class={classNames(
'relative -mb-4 flex min-h-[60vh] items-center justify-center overflow-hidden py-8', 'relative -mb-4 flex min-h-[60vh] items-center justify-center overflow-hidden pt-30 pb-40',
'from-0% before:absolute before:inset-0 before:top-0 before:left-0 before:-z-10 before:block before:h-full before:bg-radial-[circle_at_120%_-50%] before:from-purple-500/30 before:to-transparent before:to-40% before:blur-2xl', 'from-0% before:absolute before:inset-0 before:top-0 before:left-0 before:-z-10 before:block before:h-full before:bg-radial-[circle_at_120%_-50%] before:from-purple-500/30 before:to-transparent before:to-40% before:blur-2xl',
'after:from-accent/20 after:absolute after:inset-0 after:top-0 after:right-0 after:-z-10 after:mt-auto after:mb-0 after:block after:h-full after:bg-radial-[circle_at_-15%_125%] after:from-0% after:to-transparent after:to-40% after:blur-2xl' 'after:from-accent/20 after:absolute after:inset-0 after:top-0 after:right-0 after:-z-10 after:mt-auto after:mb-0 after:block after:h-full after:bg-radial-[circle_at_-15%_125%] after:from-0% after:to-transparent after:to-40% after:blur-2xl'
)} )}

View File

@@ -3,42 +3,50 @@
{ {
label: 'Self-Hosted', label: 'Self-Hosted',
description: 'Own your data or host it on a cloud region of choice.', description: 'Own your data or host it on a cloud region of choice.',
icon: '/images/icons/gradients/self-hosted.svg' icon: '/images/icons/gradients/self-hosted.svg',
href: '/docs/advanced/self-hosting'
}, },
{ {
label: 'Encryption', label: 'Encryption',
description: 'Built-in data encryption both in rest and in transit.', description: 'Built-in data encryption both in rest and in transit.',
icon: '/images/icons/gradients/lock.svg' icon: '/images/icons/gradients/lock.svg',
href: '/docs/advanced/security/encryption'
}, },
{ {
label: 'Abuse protection', label: 'Abuse protection',
description: 'Protect your APIs from abuse with built-in protection.', description: 'Protect your APIs from abuse with built-in protection.',
icon: '/images/icons/gradients/shield.svg' icon: '/images/icons/gradients/shield.svg',
href: '/docs/advanced/security/abuse-protection#rate-limiting'
}, },
{ {
label: 'Data migrations', label: 'Data migrations',
description: 'Easily transfer data from 3rd parties or between Cloud and self-hosted.', description: 'Easily transfer data from 3rd parties or between Cloud and self-hosted.',
icon: '/images/icons/gradients/database.svg' icon: '/images/icons/gradients/database.svg',
href: '/docs/advanced/migrations'
}, },
{ {
label: 'GDPR', label: 'GDPR',
description: 'Safeguard user data and privacy with provided GDPR regulations.', description: 'Safeguard user data and privacy with provided GDPR regulations.',
icon: '/images/icons/gradients/star.svg' icon: '/images/icons/gradients/star.svg',
href: '/docs/advanced/security/gdpr'
}, },
{ {
label: 'SOC-2', label: 'SOC-2',
description: 'Ensure the highest level of security and privacy protection.', description: 'Ensure the highest level of security and privacy protection.',
icon: '/images/icons/gradients/soc-2.svg' icon: '/images/icons/gradients/soc-2.svg',
href: '/docs/advanced/security/soc2'
}, },
{ {
label: 'HIPAA', label: 'HIPAA',
description: 'Protect sensitive user health data.', description: 'Protect sensitive user health data.',
icon: '/images/icons/gradients/hipaa.svg' icon: '/images/icons/gradients/hipaa.svg',
href: '/docs/advanced/security/hipaa'
}, },
{ {
label: 'CCPA', label: 'CCPA',
description: 'Protect sensitive user health data.', description: 'Protect sensitive user health data.',
icon: '/images/icons/gradients/ccpa.svg' icon: '/images/icons/gradients/ccpa.svg',
href: '/docs/advanced/security/ccpa'
} }
]; ];
</script> </script>
@@ -58,8 +66,9 @@
<div class="mt-20 border-y border-dashed border-black/8"> <div class="mt-20 border-y border-dashed border-black/8">
<div class="container grid grid-cols-1 overflow-hidden md:grid-cols-2 lg:grid-cols-4"> <div class="container grid grid-cols-1 overflow-hidden md:grid-cols-2 lg:grid-cols-4">
{#each features as box} {#each features as box}
<div <a
class="text-sub-body relative border-b border-dashed border-black/8 py-8 font-medium last-of-type:border-0 nth-of-type-[4]:border-r-0 max-lg:even:border-r-0 md:border-r md:px-8 lg:nth-of-type-[5]:border-b-0 lg:nth-of-type-[6]:border-b-0 lg:nth-of-type-[7]:border-b-0 lg:nth-of-type-[8]:border-b-0" class="text-sub-body relative border-b border-dashed border-black/8 py-8 font-medium last-of-type:border-0 nth-of-type-[4]:border-r-0 max-lg:even:border-r-0 md:border-r md:px-8 lg:nth-of-type-[5]:border-b-0 lg:nth-of-type-[6]:border-b-0 lg:nth-of-type-[7]:border-b-0 lg:nth-of-type-[8]:border-b-0"
href={box.href}
> >
<img src={box.icon} width="40" height="40" alt="" /> <img src={box.icon} width="40" height="40" alt="" />
<h3 class="text-primary mt-4 flex flex-wrap items-baseline gap-3"> <h3 class="text-primary mt-4 flex flex-wrap items-baseline gap-3">
@@ -68,7 +77,7 @@
<p class="text-secondary mt-1"> <p class="text-secondary mt-1">
{box.description} {box.description}
</p> </p>
</div> </a>
{/each} {/each}
</div> </div>
</div> </div>

View File

@@ -35,8 +35,8 @@
</GradientText> </GradientText>
<p class="text-description text-secondary font-medium"> <p class="text-description text-secondary font-medium">
Appwrites open-source platform empowers you to build applications faster with ready Appwrite is an open-source, all-in-one development platform. Use built-in backend
to use backend APIs and host your frontend on one platform. APIs and web hosting, all from a single platform.
</p> </p>
<div class="mt-4 flex flex-col gap-2 lg:flex-row"> <div class="mt-4 flex flex-col gap-2 lg:flex-row">

View File

@@ -22,9 +22,9 @@
<LogoList class="border-smooth border-b" /> <LogoList class="border-smooth border-b" />
<Bento /> <Bento />
<Pullquote <Pullquote
name="Ryan OConner" name="Phil McCluskey"
title="Founder, K Collect" title="Development lead, Majik Kids"
avatar="/images/testimonials/ryan-oconner.png" avatar="/images/testimonials/phil.jpg"
> >
<span class="text-secondary">Just like a Swiss Army Knife</span> you can choose and use the tools <span class="text-secondary">Just like a Swiss Army Knife</span> you can choose and use the tools
that you need with Appwrite.</Pullquote that you need with Appwrite.</Pullquote

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB