Merge pull request #2387 from appwrite/feat-PLA-3493-signup-testimonials

This commit is contained in:
Darshan
2025-09-19 11:19:23 +05:30
committed by GitHub
8 changed files with 88 additions and 4 deletions
+2 -1
View File
@@ -429,5 +429,6 @@ export enum Submit {
RecordUpdate = 'submit_dns_record_update',
RecordDelete = 'submit_dns_record_delete',
SearchClear = 'submit_clear_search',
FrameworkDetect = 'submit_framework_detect'
FrameworkDetect = 'submit_framework_detect',
TestimonialView = 'testimonial_view'
}
+58
View File
@@ -0,0 +1,58 @@
import DevKind from '$lib/images/testimonials/hassan.png';
import LangX from '$lib/images/testimonials/xue.webp';
import KCollect from '$lib/images/testimonials/ryan-oconner-testimonial.png';
import Phil from '$lib/images/testimonials/phil.jpg';
export interface Testimonial {
id: string;
logo: string;
headline: string;
blurb: string;
name: string;
title: string;
avatar: string;
}
export const testimonials: Testimonial[] = [
{
id: 'hassan-devkind',
logo: DevKind,
headline: 'DevKind reduced development time by 60% and lowered server costs by 40%',
blurb: 'A special thanks to Appwrite for providing robust features and seamless functionality.',
name: 'Hassan Ahmed',
title: 'Engineer at DevKind',
avatar: DevKind
},
{
id: 'xue-langx',
logo: LangX,
headline: 'LangX handled millions of requests using Appwrite',
blurb: 'With its comprehensive suite of services, Appwrite emerged as an ideal choice for my needs.',
name: 'Xue',
title: 'Founder at LangX',
avatar: LangX
},
{
id: 'ryan-kcollect',
logo: KCollect,
headline: 'K-Collect reduced infrastructure costs by 700%',
blurb: 'A major impact that Appwrite made was the amount of time and stress saved.',
name: "Ryan O'Connor",
title: 'Founder at K-Collect',
avatar: KCollect
},
{
id: 'phil-majikkids',
logo: Phil,
headline: 'Just like a Swiss Army Knife - choose and use the tools you need',
blurb: 'Just like a Swiss Army Knife you can choose and use the tools that you need with Appwrite.',
name: 'Phil McCluskey',
title: 'App Manager, Majik Kids',
avatar: Phil
}
];
export function getRandomTestimonial(): Testimonial {
const randomIndex = Math.floor(Math.random() * testimonials.length);
return testimonials[randomIndex];
}
Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 17 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 22 KiB

+1 -1
View File
@@ -109,7 +109,7 @@
<Layout.Stack gap="s" direction="row">
{#if currentReview?.image}
<Avatar
src={getCampaignImageUrl(currentReview?.image)}
src={currentReview.image}
alt={currentReview.name}
size="m" />
{:else}
@@ -20,12 +20,35 @@
import { redirectTo } from '$routes/store';
import { checkPricingRefAndRedirect } from '$lib/helpers/pricingRedirect';
import { Layout, Link, Typography } from '@appwrite.io/pink-svelte';
import { getRandomTestimonial } from '$lib/data/testimonials';
export let data;
let name: string, mail: string, pass: string, disabled: boolean;
let terms = false;
const randomTestimonial = getRandomTestimonial();
const testimonialCampaign = {
$id: 'testimonial-signup',
template: 'review',
title: randomTestimonial.headline,
description: 'Join thousands of developers building amazing apps with Appwrite',
reviews: [
{
name: randomTestimonial.name,
image: randomTestimonial.avatar,
description: randomTestimonial.title,
review: randomTestimonial.blurb
}
]
};
trackEvent(Submit.TestimonialView, {
testimonial_id: randomTestimonial.id,
testimonial_name: randomTestimonial.name,
testimonial_company: randomTestimonial.title
});
async function register() {
try {
disabled = true;
@@ -43,7 +66,9 @@
trackEvent(Submit.AccountCreate, {
campaign_name: data?.couponData?.code,
email: mail,
name: name
name: name,
testimonial_id: randomTestimonial.id,
testimonial_name: randomTestimonial.name
});
if (data?.couponData?.code) {
@@ -94,7 +119,7 @@
<title>Sign up - Appwrite</title>
</svelte:head>
<Unauthenticated coupon={data?.couponData} campaign={data?.campaign}>
<Unauthenticated coupon={data?.couponData} campaign={data?.campaign || testimonialCampaign}>
<svelte:fragment slot="title">Sign up</svelte:fragment>
<svelte:fragment>
<Form onSubmit={register}>