From 7d16122488054b9e3e817ca4eb7d82b5a1046db5 Mon Sep 17 00:00:00 2001 From: Evan Date: Thu, 21 Nov 2024 14:55:57 -0800 Subject: [PATCH 01/28] Abuse TOC Update Updating TOC to account for abuse --- src/routes/terms/+page.markdoc | 111 +++++++++++++++++++++------------ 1 file changed, 71 insertions(+), 40 deletions(-) diff --git a/src/routes/terms/+page.markdoc b/src/routes/terms/+page.markdoc index d45733590..d4ec6f1e2 100644 --- a/src/routes/terms/+page.markdoc +++ b/src/routes/terms/+page.markdoc @@ -1,11 +1,11 @@ --- -layout: policy -title: Terms and Conditions -description: Review our Terms of Service to understand the rules and guidelines for using our open-source backend-as-a-service platform. ---- +layout: policy +title: Terms and Conditions +description: Review our Terms of Service to understand the rules and guidelines for using our open-source backend-as-a-service platform. +--- -These Terms and Conditions ("Terms," "Terms and Conditions") govern your relationship with [Appwrite (https://appwrite.io)](https://appwrite.io) website (the "Service") operated by Appwrite ("Us," "We," or "Our"). +These Terms and Conditions ("Terms," "Terms and Conditions") govern your relationship with [Appwrite](https://appwrite.io) website (the "Service") operated by Appwrite ("Us," "We," or "Our"). Please read these Terms and Conditions carefully before using the Service. @@ -13,48 +13,42 @@ Your access to and use of the Service is conditioned on your acceptance of and c By accessing or using the Service, you agree to be bound by these Terms. If you disagree with any part of the terms, then you may not access the Service. - - # Subscriptions Some parts of the Service are billed on a subscription basis ("Subscriptions"). You will be billed in advance on a recurring and periodic basis ("Billing Cycle"). Billing cycles are set on a monthly basis. -At the end of each Billing Cycle, your Subscription will automatically renew under the exact same conditions unless you cancel it or Appwrite cancels it. You may cancel your Subscription renewal either through your online account management page or by contacting Appwrite customer support team. +At the end of each Billing Cycle, your Subscription will automatically renew under the exact same conditions unless you cancel it or Appwrite cancels it. You may cancel your Subscription renewal either through your online account management page or by contacting the Appwrite customer support team. A valid payment method, including credit card or PayPal, is required to process the payment for your Subscription. You shall provide Appwrite with accurate and complete billing information, including full name, address, state, zip code, telephone number, and valid payment method information. By submitting such payment information, you automatically authorize Appwrite to charge all Subscription fees incurred through your account to any such payment instruments. Should automatic billing fail to occur for any reason, Appwrite will issue an electronic invoice indicating that you must proceed manually, within a certain deadline date, with the full payment corresponding to the billing period as indicated on the invoice. - - # Fee Changes Appwrite, in its sole discretion and at any time, may modify the Subscription fees for the Subscriptions. Any Subscription fee change will become effective at the end of the then-current Billing Cycle. -Appwrite will provide you with a reasonable prior notice of any change in Subscription fees to give you an opportunity to terminate your Subscription before such change becomes effective. +Appwrite will provide you with reasonable prior notice of any change in Subscription fees to give you an opportunity to terminate your Subscription before such change becomes effective. Your continued use of the Service after the Subscription fee change comes into effect constitutes your agreement to pay the modified Subscription fee amount. - - # Refunds Certain refund requests for Subscriptions may be considered by Appwrite on a case-by-case basis and granted in the sole discretion of Appwrite. - - # Content Our Service allows you to post, link, store, share, and otherwise make available certain information, text, graphics, videos, or other material ("Content"). You are responsible for the Content that you post to the Service, including its legality, reliability, and appropriateness. By posting Content to the Service, you grant us the right and license to use, modify, perform, display, reproduce, and distribute such Content on and through the Service. You retain any and all of your rights to any Content you submit, post, or display on or through the Service, and you are responsible for protecting those rights. -You represent and warrant that: (i) the Content is yours (you own it) or you have the right to use it and grant us the rights and license as provided in these Terms, and (ii) the posting of your Content on or through the Service does not violate the privacy rights, publicity rights, copyrights, contract rights, or any other rights of any person. +You represent and warrant that: +- The Content is yours (you own it) or you have the right to use it and grant us the rights and license as provided in these Terms. +- The posting of your Content on or through the Service does not violate the privacy rights, publicity rights, copyrights, contract rights, or any other rights of any person. # Accounts -When you create an account with us, you must provide us information that is accurate, complete, and current at all times. Failure to do so constitutes a breach of the Terms, which may result in immediate termination of your account on our Service. +When you create an account with us, you must provide information that is accurate, complete, and current at all times. Failure to do so constitutes a breach of the Terms, which may result in immediate termination of your account on our Service. You are responsible for safeguarding the password that you use to access the Service and for any activities or actions under your password, whether your password is with our Service or a third-party service. @@ -64,29 +58,39 @@ You agree not to disclose your password to any third party. You must notify us i The Service and its original content (excluding Content provided by users), features, and functionality are and will remain the exclusive property of Appwrite and its licensors. The Service is protected by copyright, trademark, and other laws of both Israel and foreign countries. Our trademarks and trade dress may not be used in connection with any product or service without the prior written consent of Appwrite. -Notwithstanding any other provision of these Terms, to the maximum extent permitted by law, we may collect, generate, process, use and/or publish Anonymous Information (defined below) relating to your, your users’ use of the Service, and/or disclose it, in order to provide, improve and publicize the Service and our products and services, in order to track general industry trends, develop and publish white papers, reports and summaries, and for other legitimate business purposes, all the foregoing without restriction or limitation of any kind. “Anonymous Information” means information that does not enable the identification of an individual, such as aggregated and analytics information. For clarity, Anonymous Information will not include any personally identifiable information, and Appwrite shall own all Anonymous Information collected or obtained by Appwrite. +Notwithstanding any other provision of these Terms, to the maximum extent permitted by law, we may collect, generate, process, use, and/or publish Anonymous Information (defined below) relating to your and your users’ use of the Service, and/or disclose it, in order to provide, improve, and publicize the Service and our products and services, track general industry trends, develop and publish white papers, reports, and summaries, and for other legitimate business purposes, all without restriction or limitation of any kind. "Anonymous Information" means information that does not enable the identification of an individual, such as aggregated and analytics information. For clarity, Anonymous Information will not include any personally identifiable information, and Appwrite shall own all Anonymous Information collected or obtained by Appwrite. -# Prohibited Use of the SMS Messages Service +# Prohibited Use -You agree not to use the Service for the sending of unsolicited or spam SMS messages. This includes but is not limited to the prohibition of -- using the Service in connection with any content, product, or service the recipient has not explicitly requested. -- sending SMS messages through the Service unless you have obtained prior express consent from the recipients, as required by applicable law. +You agree not to use the Service for any unlawful or prohibited activities. This includes, but is not limited to: -Failure to adhere to these prohibitions and/or any applicable law relating to the use of such SMS Service can result in immediate termination of your account and further legal action. You shall comply with any and all applicable laws and regulations. +- **Illegal Content**: Hosting, transmitting, or distributing content that is illegal, infringing, harmful, threatening, defamatory, obscene, harassing, or otherwise objectionable. -Furthermore, you agree to indemnify and hold harmless Appwrite, its affiliates, directors, employees, and agents against any claims, proceedings, damages, liabilities, fines, or costs arising from your misuse of the SMS services, which includes, but is not limited to the sending of unsolicited SMS messages, your failure to secure the necessary consents from recipients or not adhering to applicable laws and regulations in relevant jurisdictions. +- **Malware and Harmful Code**: Uploading or distributing viruses, malware, or any other malicious code intended to harm or gain unauthorized access to any system, data, or personal information. -# Privacy +- **Unsolicited Communications**: Sending unauthorized or unsolicited advertising, spam, or any other form of improper solicitation. -Appwrite’s privacy policy is available at [https://appwrite.io/privacy](https://appwrite.io/privacy). +- **Fraudulent Activities**: Engaging in deceptive practices or activities intended to defraud, mislead, or deceive others. -# Links To Other Web Sites +- **Abuse of Resources**: Misusing the Service in a way that disrupts its integrity or performance. -Our Service may contain links to third-party web sites or services that are not owned or controlled by Appwrite. +- **Unauthorized Access**: Attempting to gain unauthorized access to the Service, other user accounts, computer systems, or networks connected to the Service. -Appwrite has no control over, and assumes no responsibility for, the content, privacy policies, or practices of any third-party web sites or services. You further acknowledge and agree that Appwrite shall not be responsible or liable, directly or indirectly, for any damage or loss caused or alleged to be caused by or in connection with the use of or reliance on any such content, goods, or services available on or through any such web sites or services. +- **Violation of Laws**: Engaging in activities that violate any applicable local, state, national, or international laws or regulations. -We strongly advise you to read the terms and conditions and privacy policies of any third-party web sites or services that you visit. +## Prohibited Use of the SMS Messages Service + +You agree not to use the Service for the sending of unsolicited or spam SMS messages. This includes but is not limited to the prohibition of: + +- Using the Service in connection with any content, product, or service the recipient has not explicitly requested. + +- Sending SMS messages through the Service unless you have obtained prior express consent from the recipients, as required by applicable law. + +Failure to adhere to these prohibitions and any applicable laws relating to the use of the SMS Service can result in immediate termination of your account and further legal action. You shall comply with all applicable laws and regulations. + +# Reporting Abuse + +If you become aware of any misuse of the Service, including any prohibited conduct or content, please report it immediately to us at **[abuse@appwrite.io](mailto:abuse@appwrite.io)**. # Termination @@ -94,20 +98,33 @@ We may terminate or suspend your account immediately, without prior notice or li Upon termination, your right to use the Service will immediately cease. If you wish to terminate your account, you may simply discontinue using the Service. -# Limitation Of Liability +# Limitation of Liability -In no event shall Appwrite, nor its directors, employees, partners, agents, suppliers, or affiliates, be liable for any indirect, incidental, special, consequential, or punitive damages, including without limitation, loss of profits, data, use, goodwill, or other intangible losses, resulting from (I) your access to or use of or inability to access or use the Service; (II) any conduct or content of any third party on the Service; (III) any content obtained from the Service; and (IV) unauthorized access, use, or alteration of your transmissions or content, whether based on warranty, contract, tort (including negligence) or any other legal theory, whether or not we have been informed of the possibility of such damage, and even if a remedy set forth herein is found to have failed of its essential purpose. +In no event shall Appwrite, nor its directors, employees, partners, agents, suppliers, or affiliates, be liable for any indirect, incidental, special, consequential, or punitive damages, including without limitation, loss of profits, data, use, goodwill, or other intangible losses, resulting from: +- Your access to or use of or inability to access or use the Service. + +- Any conduct or content of any third party on the Service. + +- Any content obtained from the Service. + +- Unauthorized access, use, or alteration of your transmissions or content. + +Whether based on warranty, contract, tort (including negligence), or any other legal theory, whether or not we have been informed of the possibility of such damage, and even if a remedy set forth herein is found to have failed of its essential purpose. # Disclaimer -Your use of the Service is at your sole risk. The Service is provided on an "AS IS" and "AS AVAILABLE" basis. The Service is provided without warranties of any kind, whether express or implied, including, but not limited to, implied warranties of merchantability, fitness for a particular purpose, non-infringement or course of performance. +Your use of the Service is at your sole risk. The Service is provided on an "AS IS" and "AS AVAILABLE" basis. The Service is provided without warranties of any kind, whether express or implied, including but not limited to, implied warranties of merchantability, fitness for a particular purpose, non-infringement, or course of performance. -Appwrite its subsidiaries, affiliates, and its licensors do not warrant that: -- the Service will function uninterrupted, secure or available at any particular time or location; -- any errors or defects will be corrected; -- the Service is free of viruses or other harmful components; or -- the results of using the Service will meet your requirements. +Appwrite, its subsidiaries, affiliates, and its licensors do not warrant that: + +- The Service will function uninterrupted, secure, or available at any particular time or location. + +- Any errors or defects will be corrected. + +- The Service is free of viruses or other harmful components. + +- The results of using the Service will meet your requirements. # Governing Law @@ -117,10 +134,24 @@ Our failure to enforce any right or provision of these Terms will not be conside # Changes -We reserve the right, at our sole discretion, to modify or replace these Terms at any time. If a revision is material, we will try to provide at least 30 days notice prior to any new terms taking effect. What constitutes a material change will be determined at our sole discretion. +We reserve the right, at our sole discretion, to modify or replace these Terms at any time. If a revision is material, we will try to provide at least 30 days' notice prior to any new terms taking effect. What constitutes a material change will be determined at our sole discretion. By continuing to access or use our Service after those revisions become effective, you agree to be bound by the revised terms. If you do not agree to the new terms, please stop using the Service. +# Privacy + +Appwrite’s privacy policy is available at [https://appwrite.io/privacy](https://appwrite.io/privacy). + +# Links to Other Websites + +Our Service may contain links to third-party websites or services that are not owned or controlled by Appwrite. + +Appwrite has no control over, and assumes no responsibility for, the content, privacy policies, or practices of any third-party websites or services. You further acknowledge and agree that Appwrite shall not be responsible or liable, directly or indirectly, for any damage or loss caused or alleged to be caused by or in connection with the use of or reliance on any such content, goods, or services available on or through any such websites or services. + +We strongly advise you to read the terms and conditions and privacy policies of any third-party websites or services that you visit. + # Contact Us -If you have any questions about these Terms, please [contact us](/contact-us). +If you have any questions about these Terms, please [contact us](/contact-us). To report abuse or violations, please contact us at **[abuse@appwrite.io](mailto:abuse@appwrite.io)**. + +--- From 1c62c907bdf30c442ccaf89b57a1e162062bd67d Mon Sep 17 00:00:00 2001 From: Evan Date: Thu, 21 Nov 2024 14:58:53 -0800 Subject: [PATCH 02/28] Whitespace --- src/routes/terms/+page.markdoc | 1 - 1 file changed, 1 deletion(-) diff --git a/src/routes/terms/+page.markdoc b/src/routes/terms/+page.markdoc index d4ec6f1e2..15f7e0e15 100644 --- a/src/routes/terms/+page.markdoc +++ b/src/routes/terms/+page.markdoc @@ -1,5 +1,4 @@ --- - layout: policy title: Terms and Conditions description: Review our Terms of Service to understand the rules and guidelines for using our open-source backend-as-a-service platform. From 46fe8c4bd2b5d98ec9475118dd46b7fe400c72ab Mon Sep 17 00:00:00 2001 From: Evan Date: Thu, 21 Nov 2024 14:59:24 -0800 Subject: [PATCH 03/28] Update +page.markdoc --- src/routes/terms/+page.markdoc | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/routes/terms/+page.markdoc b/src/routes/terms/+page.markdoc index 15f7e0e15..8268e15e3 100644 --- a/src/routes/terms/+page.markdoc +++ b/src/routes/terms/+page.markdoc @@ -1,7 +1,7 @@ --- -layout: policy -title: Terms and Conditions -description: Review our Terms of Service to understand the rules and guidelines for using our open-source backend-as-a-service platform. +layout: policy +title: Terms and Conditions +description: Review our Terms of Service to understand the rules and guidelines for using our open-source backend-as-a-service platform. --- These Terms and Conditions ("Terms," "Terms and Conditions") govern your relationship with [Appwrite](https://appwrite.io) website (the "Service") operated by Appwrite ("Us," "We," or "Our"). From 042cade493e1a657bb53f72ba2fb0052935374b3 Mon Sep 17 00:00:00 2001 From: Darshan Date: Fri, 17 Jan 2025 13:58:08 +0530 Subject: [PATCH 04/28] fix: background color on image zoom. --- src/markdoc/nodes/Image.svelte | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/markdoc/nodes/Image.svelte b/src/markdoc/nodes/Image.svelte index 29444ed34..a9af75ab5 100644 --- a/src/markdoc/nodes/Image.svelte +++ b/src/markdoc/nodes/Image.svelte @@ -95,6 +95,10 @@ inset: 0; z-index: 25; position: fixed; + background-color: rgba(228, 228, 228, 0.98); + } + + :global(.theme-dark .overlay) { background-color: rgba(27, 27, 27, 0.98); } From d8a83092208a3e517632aaec1e9b74f15e0167ed Mon Sep 17 00:00:00 2001 From: Darshan Date: Fri, 17 Jan 2025 14:12:44 +0530 Subject: [PATCH 05/28] fix: fix z-index & theme selector. --- src/markdoc/nodes/Image.svelte | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/markdoc/nodes/Image.svelte b/src/markdoc/nodes/Image.svelte index a9af75ab5..a0fef7b00 100644 --- a/src/markdoc/nodes/Image.svelte +++ b/src/markdoc/nodes/Image.svelte @@ -93,12 +93,13 @@ .overlay { inset: 0; - z-index: 25; + /* docs side nav have a z-index of 35 */ + z-index: 36; position: fixed; background-color: rgba(228, 228, 228, 0.98); } - :global(.theme-dark .overlay) { + :global(.dark) .overlay { background-color: rgba(27, 27, 27, 0.98); } From 9c9bf2356172c94d118743e12e7fd64704398104 Mon Sep 17 00:00:00 2001 From: Darshan Date: Fri, 17 Jan 2025 15:26:49 +0530 Subject: [PATCH 06/28] update: the community support chat example. --- .../components/CommunitySupportChat.svelte | 95 ++++++++++++ src/routes/education/(assets)/chat.png | Bin 38620 -> 0 bytes .../education/(components)/Community.svelte | 9 +- src/routes/startups/+page.svelte | 141 +----------------- src/scss/7-components/_chat.scss | 16 ++ 5 files changed, 119 insertions(+), 142 deletions(-) create mode 100644 src/lib/components/CommunitySupportChat.svelte delete mode 100644 src/routes/education/(assets)/chat.png diff --git a/src/lib/components/CommunitySupportChat.svelte b/src/lib/components/CommunitySupportChat.svelte new file mode 100644 index 000000000..6d268a366 --- /dev/null +++ b/src/lib/components/CommunitySupportChat.svelte @@ -0,0 +1,95 @@ +
    +
  • +
    +
    + Avatar of Walter +
    + Walter O'Brien + +
    +
    + Hello devs! I am getting a CORS error when sending a request to the backend. Can + you help me? +
    +
    +
    +
  • +
  • +
    +
    + Avatar of Steven +
    + Steven + +
    +
    + Hey Walter! Is this the message you get + "Access blocked by CORS policy"? +
    +
    +
    +
  • +
  • +
    +
    + Avatar of Walter +
    + Walter O'Brien + +
    +
    Yes!
    +
    +
    +
  • +
  • +
    +
    + Avatar of Steven +
    + Steven + +
    +
    + You should be able to debug this with a few steps. Just follow this blog: + https://appwrite.io/blog/post/cors-error. Let me know if this helps 🙂 +
    +
    +
    +
  • +
+ + diff --git a/src/routes/education/(assets)/chat.png b/src/routes/education/(assets)/chat.png deleted file mode 100644 index 65223f7d04e1b3f185800d32e0c6385bb2e4dce3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 38620 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 Jzg*8X`oAo?3iJQ~ diff --git a/src/routes/education/(components)/Community.svelte b/src/routes/education/(components)/Community.svelte index ecf9acd64..ad9b12378 100644 --- a/src/routes/education/(components)/Community.svelte +++ b/src/routes/education/(components)/Community.svelte @@ -1,5 +1,5 @@ -

@@ -20,5 +20,8 @@ Join our Discord
- Chat + +
+ +
diff --git a/src/routes/startups/+page.svelte b/src/routes/startups/+page.svelte index f80201987..093ceab53 100644 --- a/src/routes/startups/+page.svelte +++ b/src/routes/startups/+page.svelte @@ -20,6 +20,7 @@ import { PUBLIC_GROWTH_ENDPOINT } from '$env/static/public'; import Faq from './faq.svelte'; import { getReferrerAndUtmSource } from '$lib/utils/utm'; + import CommunitySupportChat from '$lib/components/CommunitySupportChat.svelte'; const title = 'Startups' + TITLE_SUFFIX; const description = DEFAULT_DESCRIPTION; @@ -481,145 +482,7 @@
-
    -
  • -
    -
    - Avatar of Walter -
    - Walter O'Brien - -
    -
    - Hello devs! I am getting a CORS - error when sending a request to the - backend. Can you help me? -
    -
    -
    -
  • -
  • -
    -
    - Avatar of Steven -
    - Steven - -
    -
    - Hey Louis! Is this the message you - get - "Access blocked by CORS policy"? -
    -
    -
    -
  • -
  • -
    -
    - Avatar of Walter -
    - Walter O'Brien - -
    -
    - Yes! -
    -
    -
    -
  • -
  • -
    -
    - Avatar of Steven -
    - Steven - -
    -
    - You should be able to debug this - with a few steps. Just follow this - blog: - https://appwrite.io/blog/post/cors-error. Let me know if this helps 🙂 -
    -
    -
    -
  • -
+
diff --git a/src/scss/7-components/_chat.scss b/src/scss/7-components/_chat.scss index 8825c8850..95b1c6576 100644 --- a/src/scss/7-components/_chat.scss +++ b/src/scss/7-components/_chat.scss @@ -21,6 +21,22 @@ @media #{$break1} { } + + /* reversed arrow on replies */ + &.reply { + &::before { + rotate: 180deg; + inset-block-end: auto; + inset-block-start: pxToRem(-16); + background-color: var(--border-color); + } + + &::after { + rotate: 180deg; + inset-block-start: pxToRem(-14.5); + inset-block-end: auto; + } + } } /* user 'b' messages */ From c05e98a5255cb394abc73d22e1ad6666a89ea3d4 Mon Sep 17 00:00:00 2001 From: Darshan Date: Mon, 20 Jan 2025 10:44:31 +0530 Subject: [PATCH 07/28] fix: language dropdown state selection. --- src/lib/layouts/DocsArticle.svelte | 4 ++++ src/markdoc/tags/MultiCode.svelte | 20 ++++++++++++++++++++ 2 files changed, 24 insertions(+) diff --git a/src/lib/layouts/DocsArticle.svelte b/src/lib/layouts/DocsArticle.svelte index acb3bff66..e3732ff70 100644 --- a/src/lib/layouts/DocsArticle.svelte +++ b/src/lib/layouts/DocsArticle.svelte @@ -17,12 +17,16 @@ import { writable } from 'svelte/store'; import { Feedback } from '$lib/components'; import { scrollToTop } from '$lib/actions/scrollToTop'; + import type { Language } from '$lib/utils/code'; export let title: string; export let toc: Array; export let back: string | undefined = undefined; export let date: string | undefined = undefined; + // Shared writable store for a selected language. + setContext('language-context', writable()); + const reducedArticleSize = setContext('articleHasNumericBadge', writable(false)); diff --git a/src/markdoc/tags/MultiCode.svelte b/src/markdoc/tags/MultiCode.svelte index 1b48ee66f..79eee526d 100644 --- a/src/markdoc/tags/MultiCode.svelte +++ b/src/markdoc/tags/MultiCode.svelte @@ -21,6 +21,8 @@ content: writable('') }); + const languageContext = getContext>('language-context'); + const { snippets, selected, content } = getContext('multi-code'); snippets.subscribe((n) => { @@ -29,6 +31,24 @@ } }); + selected.subscribe((language) => { + // apply if exists in snippets + if (language && $snippets.has(language as Language)) { + languageContext?.set(language); + } + }); + + languageContext?.subscribe((language) => { + if ( + language && + language !== $selected && + // apply if exists in snippets + $snippets.has(language as Language) + ) { + selected.set(language); + } + }); + enum CopyStatus { Copy = 'Copy', Copied = 'Copied!' From f00790f99751892354f083448ef5944460c4f7e8 Mon Sep 17 00:00:00 2001 From: Darshan Date: Mon, 20 Jan 2025 11:46:34 +0530 Subject: [PATCH 08/28] fix: select component width. --- src/scss/6-elements/_select.scss | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/scss/6-elements/_select.scss b/src/scss/6-elements/_select.scss index 670a3b503..c649c56c2 100644 --- a/src/scss/6-elements/_select.scss +++ b/src/scss/6-elements/_select.scss @@ -1,7 +1,7 @@ @use '../abstract' as *; .#{$p}-select { - --p-select-min-width: #{pxToRem(130)}; + --p-select-min-width: #{pxToRem(145)}; all:unset; display:flex; align-items:center; position:relative; line-height:1; user-select:none; cursor:pointer; color:hsl(var(--web-color-primary)); font-size:pxToRem(14); min-width: var(--p-select-min-width); height: pxToRem(30); From 07e8360d5fe32790e1197b481b766cb9f765a236 Mon Sep 17 00:00:00 2001 From: Evan Date: Wed, 29 Jan 2025 14:14:57 -0800 Subject: [PATCH 09/28] Update src/routes/terms/+page.markdoc Co-authored-by: Steven Nguyen <1477010+stnguyen90@users.noreply.github.com> --- src/routes/terms/+page.markdoc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/routes/terms/+page.markdoc b/src/routes/terms/+page.markdoc index 8268e15e3..2f4977c7f 100644 --- a/src/routes/terms/+page.markdoc +++ b/src/routes/terms/+page.markdoc @@ -89,7 +89,7 @@ Failure to adhere to these prohibitions and any applicable laws relating to the # Reporting Abuse -If you become aware of any misuse of the Service, including any prohibited conduct or content, please report it immediately to us at **[abuse@appwrite.io](mailto:abuse@appwrite.io)**. +If you become aware of any misuse of the Service, including any prohibited conduct or content, please report it immediately to us at [abuse@appwrite.io](mailto:abuse@appwrite.io). # Termination From c362b456c22e10e87bad2c65eaa43ce1b77e9380 Mon Sep 17 00:00:00 2001 From: Evan Date: Wed, 29 Jan 2025 14:15:05 -0800 Subject: [PATCH 10/28] Update src/routes/terms/+page.markdoc Co-authored-by: Steven Nguyen <1477010+stnguyen90@users.noreply.github.com> --- src/routes/terms/+page.markdoc | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/routes/terms/+page.markdoc b/src/routes/terms/+page.markdoc index 2f4977c7f..58fd098a7 100644 --- a/src/routes/terms/+page.markdoc +++ b/src/routes/terms/+page.markdoc @@ -151,6 +151,8 @@ We strongly advise you to read the terms and conditions and privacy policies of # Contact Us -If you have any questions about these Terms, please [contact us](/contact-us). To report abuse or violations, please contact us at **[abuse@appwrite.io](mailto:abuse@appwrite.io)**. +If you have any questions about these Terms, please [contact us](/contact-us). + +To report abuse or violations, please contact us at [abuse@appwrite.io](mailto:abuse@appwrite.io). --- From 526e5135f35a3a8f2b3c2cb61f78f94a86937ea6 Mon Sep 17 00:00:00 2001 From: Evan Date: Wed, 29 Jan 2025 14:20:29 -0800 Subject: [PATCH 11/28] Update +page.markdoc --- src/routes/terms/+page.markdoc | 17 ++++------------- 1 file changed, 4 insertions(+), 13 deletions(-) diff --git a/src/routes/terms/+page.markdoc b/src/routes/terms/+page.markdoc index 58fd098a7..121dbf65d 100644 --- a/src/routes/terms/+page.markdoc +++ b/src/routes/terms/+page.markdoc @@ -40,10 +40,7 @@ Our Service allows you to post, link, store, share, and otherwise make available By posting Content to the Service, you grant us the right and license to use, modify, perform, display, reproduce, and distribute such Content on and through the Service. You retain any and all of your rights to any Content you submit, post, or display on or through the Service, and you are responsible for protecting those rights. -You represent and warrant that: - -- The Content is yours (you own it) or you have the right to use it and grant us the rights and license as provided in these Terms. -- The posting of your Content on or through the Service does not violate the privacy rights, publicity rights, copyrights, contract rights, or any other rights of any person. +You represent and warrant that: (i) the Content is yours (you own it) or you have the right to use it and grant us the rights and license as provided in these Terms, and (ii) the posting of your Content on or through the Service does not violate the privacy rights, publicity rights, copyrights, contract rights, or any other rights of any person. # Accounts @@ -87,6 +84,8 @@ You agree not to use the Service for the sending of unsolicited or spam SMS mess Failure to adhere to these prohibitions and any applicable laws relating to the use of the SMS Service can result in immediate termination of your account and further legal action. You shall comply with all applicable laws and regulations. +Furthermore, you agree to indemnify and hold harmless Appwrite, its affiliates, directors, employees, and agents against any claims, proceedings, damages, liabilities, fines, or costs arising from your misuse of the SMS services, which includes, but is not limited to the sending of unsolicited SMS messages, your failure to secure the necessary consents from recipients or not adhering to applicable laws and regulations in relevant jurisdictions. + # Reporting Abuse If you become aware of any misuse of the Service, including any prohibited conduct or content, please report it immediately to us at [abuse@appwrite.io](mailto:abuse@appwrite.io). @@ -99,15 +98,7 @@ Upon termination, your right to use the Service will immediately cease. If you w # Limitation of Liability -In no event shall Appwrite, nor its directors, employees, partners, agents, suppliers, or affiliates, be liable for any indirect, incidental, special, consequential, or punitive damages, including without limitation, loss of profits, data, use, goodwill, or other intangible losses, resulting from: - -- Your access to or use of or inability to access or use the Service. - -- Any conduct or content of any third party on the Service. - -- Any content obtained from the Service. - -- Unauthorized access, use, or alteration of your transmissions or content. +In no event shall Appwrite, nor its directors, employees, partners, agents, suppliers, or affiliates, be liable for any indirect, incidental, special, consequential, or punitive damages, including without limitation, loss of profits, data, use, goodwill, or other intangible losses, resulting from (I) your access to or use of or inability to access or use the Service; (II) any conduct or content of any third party on the Service; (III) any content obtained from the Service; and (IV) unauthorized access, use, or alteration of your transmissions or content, whether based on warranty, contract, tort (including negligence) or any other legal theory, whether or not we have been informed of the possibility of such damage, and even if a remedy set forth herein is found to have failed of its essential purpose. Whether based on warranty, contract, tort (including negligence), or any other legal theory, whether or not we have been informed of the possibility of such damage, and even if a remedy set forth herein is found to have failed of its essential purpose. From 9db714ab518839db059f6ccc771b7875de66f4b4 Mon Sep 17 00:00:00 2001 From: Evan Date: Fri, 31 Jan 2025 15:16:04 -0800 Subject: [PATCH 12/28] Update +page.markdoc --- src/routes/terms/+page.markdoc | 14 +------------- 1 file changed, 1 insertion(+), 13 deletions(-) diff --git a/src/routes/terms/+page.markdoc b/src/routes/terms/+page.markdoc index 121dbf65d..138dc07dc 100644 --- a/src/routes/terms/+page.markdoc +++ b/src/routes/terms/+page.markdoc @@ -60,19 +60,7 @@ Notwithstanding any other provision of these Terms, to the maximum extent permit You agree not to use the Service for any unlawful or prohibited activities. This includes, but is not limited to: -- **Illegal Content**: Hosting, transmitting, or distributing content that is illegal, infringing, harmful, threatening, defamatory, obscene, harassing, or otherwise objectionable. - -- **Malware and Harmful Code**: Uploading or distributing viruses, malware, or any other malicious code intended to harm or gain unauthorized access to any system, data, or personal information. - -- **Unsolicited Communications**: Sending unauthorized or unsolicited advertising, spam, or any other form of improper solicitation. - -- **Fraudulent Activities**: Engaging in deceptive practices or activities intended to defraud, mislead, or deceive others. - -- **Abuse of Resources**: Misusing the Service in a way that disrupts its integrity or performance. - -- **Unauthorized Access**: Attempting to gain unauthorized access to the Service, other user accounts, computer systems, or networks connected to the Service. - -- **Violation of Laws**: Engaging in activities that violate any applicable local, state, national, or international laws or regulations. +{% partial file="prohibited-activities.md" /%} ## Prohibited Use of the SMS Messages Service From 44746222dd6c6d4f8376f5eddaecb969ea0ff707 Mon Sep 17 00:00:00 2001 From: Evan Date: Thu, 6 Feb 2025 10:57:19 -0800 Subject: [PATCH 13/28] Update src/routes/terms/+page.markdoc Co-authored-by: Steven Nguyen <1477010+stnguyen90@users.noreply.github.com> --- src/routes/terms/+page.markdoc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/routes/terms/+page.markdoc b/src/routes/terms/+page.markdoc index 138dc07dc..342ef582a 100644 --- a/src/routes/terms/+page.markdoc +++ b/src/routes/terms/+page.markdoc @@ -112,7 +112,7 @@ Our failure to enforce any right or provision of these Terms will not be conside # Changes -We reserve the right, at our sole discretion, to modify or replace these Terms at any time. If a revision is material, we will try to provide at least 30 days' notice prior to any new terms taking effect. What constitutes a material change will be determined at our sole discretion. +We reserve the right, at our sole discretion, to modify or replace these Terms at any time. If a revision is material, we will try to provide at least 30 days notice prior to any new terms taking effect. What constitutes a material change will be determined at our sole discretion. By continuing to access or use our Service after those revisions become effective, you agree to be bound by the revised terms. If you do not agree to the new terms, please stop using the Service. From b95055faf9fed32a0ce132e5909373eefab3acf6 Mon Sep 17 00:00:00 2001 From: Evan Date: Thu, 6 Feb 2025 15:02:33 -0800 Subject: [PATCH 14/28] Update +page.markdoc --- src/routes/terms/+page.markdoc | 4 ---- 1 file changed, 4 deletions(-) diff --git a/src/routes/terms/+page.markdoc b/src/routes/terms/+page.markdoc index 342ef582a..e1589774f 100644 --- a/src/routes/terms/+page.markdoc +++ b/src/routes/terms/+page.markdoc @@ -56,10 +56,6 @@ The Service and its original content (excluding Content provided by users), feat Notwithstanding any other provision of these Terms, to the maximum extent permitted by law, we may collect, generate, process, use, and/or publish Anonymous Information (defined below) relating to your and your users’ use of the Service, and/or disclose it, in order to provide, improve, and publicize the Service and our products and services, track general industry trends, develop and publish white papers, reports, and summaries, and for other legitimate business purposes, all without restriction or limitation of any kind. "Anonymous Information" means information that does not enable the identification of an individual, such as aggregated and analytics information. For clarity, Anonymous Information will not include any personally identifiable information, and Appwrite shall own all Anonymous Information collected or obtained by Appwrite. -# Prohibited Use - -You agree not to use the Service for any unlawful or prohibited activities. This includes, but is not limited to: - {% partial file="prohibited-activities.md" /%} ## Prohibited Use of the SMS Messages Service From a34be5157685363404363f013b79386739c71965 Mon Sep 17 00:00:00 2001 From: Darshan Date: Fri, 7 Feb 2025 11:46:26 +0530 Subject: [PATCH 15/28] add: missing plausible events. --- src/lib/components/MainNav.svelte | 10 +++++++++- src/lib/components/ProductsMobileSubmenu.svelte | 7 +++++++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/src/lib/components/MainNav.svelte b/src/lib/components/MainNav.svelte index ad8be8daf..a9d1b12c9 100644 --- a/src/lib/components/MainNav.svelte +++ b/src/lib/components/MainNav.svelte @@ -1,4 +1,6 @@ diff --git a/src/routes/contact-us/+page.svelte b/src/routes/contact-us/+page.svelte index c878cdf28..1df770dda 100644 --- a/src/routes/contact-us/+page.svelte +++ b/src/routes/contact-us/+page.svelte @@ -39,7 +39,8 @@ } const title = 'Contact us' + TITLE_SUFFIX; - const description = "Fill in this short form to get in touch with the Appwrite team. Questions, feature requests or bug reports - all input is welcome!"; + const description = + 'Fill in this short form to get in touch with the Appwrite team. Questions, feature requests or bug reports - all input is welcome!'; const ogImage = DEFAULT_HOST + '/images/open-graph/website.png'; diff --git a/src/routes/contact-us/enterprise/+page.svelte b/src/routes/contact-us/enterprise/+page.svelte index 46e2041b3..ed196c895 100644 --- a/src/routes/contact-us/enterprise/+page.svelte +++ b/src/routes/contact-us/enterprise/+page.svelte @@ -51,7 +51,8 @@ } const title = 'Enterprise' + TITLE_SUFFIX; - const description = "Want to learn more about Appwrite's Enterprise plan? Send us a message, and we'll propose a pricing solution that fits your unique use case."; + const description = + "Want to learn more about Appwrite's Enterprise plan? Send us a message, and we'll propose a pricing solution that fits your unique use case."; const ogImage = DEFAULT_HOST + '/images/open-graph/website.png'; diff --git a/src/routes/education/(components)/Community.svelte b/src/routes/education/(components)/Community.svelte index 8bc1fe1de..dff074a11 100644 --- a/src/routes/education/(components)/Community.svelte +++ b/src/routes/education/(components)/Community.svelte @@ -9,8 +9,8 @@

Join a growing community of developers and students who use Appwrite to build their - products. Gain access to a wealth of knowledge, support, and shared experiences - needed to grow and advance your tech career. + products. Gain access to a wealth of knowledge, support, and shared experiences needed + to grow and advance your tech career.

- This credit is available only for users who are verified through the GitHub program - as students. The plan is valid until you graduate from GitHub Education. + This credit is available only for users who are verified through the GitHub program as + students. The plan is valid until you graduate from GitHub Education.

Kickstart diff --git a/src/routes/education/+page.svelte b/src/routes/education/+page.svelte index eb7da3361..3ea2ee278 100644 --- a/src/routes/education/+page.svelte +++ b/src/routes/education/+page.svelte @@ -11,7 +11,8 @@ import Faq from './(components)/FAQ.svelte'; const title = 'Education' + TITLE_SUFFIX; - const description = "Students, here's your chance to expand your skillset without spending a penny. Sign up for Appwrite Education program to get access to our Pro plan."; + const description = + "Students, here's your chance to expand your skillset without spending a penny. Sign up for Appwrite Education program to get access to our Pro plan."; const ogImage = DEFAULT_HOST + '/images/open-graph/website.png'; diff --git a/src/routes/heroes/+page.svelte b/src/routes/heroes/+page.svelte index 696da492c..a73c6f7c7 100644 --- a/src/routes/heroes/+page.svelte +++ b/src/routes/heroes/+page.svelte @@ -8,7 +8,8 @@ import FloatingHead from '$lib/components/FloatingHead.svelte'; const title = 'Heroes' + TITLE_SUFFIX; - const description = "If you're passionate about helping developers build great products with Appwrite - join our Heroes program and get access to a number of exclusive perks."; + const description = + "If you're passionate about helping developers build great products with Appwrite - join our Heroes program and get access to a number of exclusive perks."; const ogImage = DEFAULT_HOST + '/images/open-graph/website.png'; const heroCards: HeroCardProps[] = [ diff --git a/src/routes/integrations/+page.svelte b/src/routes/integrations/+page.svelte index cf448c951..6c48160ff 100644 --- a/src/routes/integrations/+page.svelte +++ b/src/routes/integrations/+page.svelte @@ -18,7 +18,8 @@ export let data; const title = 'Integrations' + TITLE_SUFFIX; - const description = "Connect your favorite apps to Appwrite for one unified tech stack. Explore our catalog of integrations now."; + const description = + 'Connect your favorite apps to Appwrite for one unified tech stack. Explore our catalog of integrations now.'; const ogImage = DEFAULT_HOST + '/images/open-graph/website.png'; // search functionality diff --git a/src/routes/integrations/technology-partner/+page.svelte b/src/routes/integrations/technology-partner/+page.svelte index 2df07256a..2d02eeb21 100644 --- a/src/routes/integrations/technology-partner/+page.svelte +++ b/src/routes/integrations/technology-partner/+page.svelte @@ -54,7 +54,8 @@ } const title = 'Become a Technology Partner' + TITLE_SUFFIX; - const description = "Want to integrate your app with Appwrite's API? Apply to our Technology Partners program by filling a short form."; + const description = + "Want to integrate your app with Appwrite's API? Apply to our Technology Partners program by filling a short form."; const ogImage = DEFAULT_HOST + '/images/open-graph/website.png'; diff --git a/src/routes/partners/(components)/partners.svelte b/src/routes/partners/(components)/partners.svelte index 42cdfae18..13b8a6021 100644 --- a/src/routes/partners/(components)/partners.svelte +++ b/src/routes/partners/(components)/partners.svelte @@ -49,10 +49,10 @@

Partner Tiers

- As you continue to grow, so do your opportunities with Appwrite. - Our Partner Program is designed to scale with you as you grow. - With flexible tiers tailored to your success. A partnership built to - scale together for lasting success in a competitive market. + As you continue to grow, so do your opportunities with Appwrite. Our Partner + Program is designed to scale with you as you grow. With flexible tiers tailored + to your success. A partnership built to scale together for lasting success in a + competitive market.

diff --git a/src/routes/products/auth/+page.svelte b/src/routes/products/auth/+page.svelte index bc0a6c49c..14ee4bd47 100644 --- a/src/routes/products/auth/+page.svelte +++ b/src/routes/products/auth/+page.svelte @@ -14,7 +14,8 @@ import Features from './(components)/features/Features.svelte'; const title = 'Auth' + TITLE_SUFFIX; - const description = 'Enable secure and reliable user login with Appwrite Auth. We support multiple authentication methods with compliance features out of the box.'; + const description = + 'Enable secure and reliable user login with Appwrite Auth. We support multiple authentication methods with compliance features out of the box.'; const ogImage = DEFAULT_HOST + '/images/open-graph/website.png'; diff --git a/src/routes/products/functions/+page.svelte b/src/routes/products/functions/+page.svelte index 1219d7373..02c65d058 100644 --- a/src/routes/products/functions/+page.svelte +++ b/src/routes/products/functions/+page.svelte @@ -18,7 +18,8 @@ import { PUBLIC_APPWRITE_DASHBOARD } from '$env/static/public'; const title = 'Functions' + TITLE_SUFFIX; - const description = "Appwrite Functions offer everything you need to deploy and scale serverless functions easily, without any server management overhead."; + const description = + 'Appwrite Functions offer everything you need to deploy and scale serverless functions easily, without any server management overhead.'; const ogImage = DEFAULT_HOST + '/images/open-graph/website.png'; diff --git a/src/routes/products/messaging/+page.svelte b/src/routes/products/messaging/+page.svelte index a1f25698c..e4abb970c 100644 --- a/src/routes/products/messaging/+page.svelte +++ b/src/routes/products/messaging/+page.svelte @@ -12,7 +12,8 @@ import { PUBLIC_APPWRITE_DASHBOARD } from '$env/static/public'; const title = 'Messaging' + TITLE_SUFFIX; - const description = "Appwrite Messaging allows you to communicate with your audience across various mediums. Push notifications, SMS and emails - set up within minutes!"; + const description = + 'Appwrite Messaging allows you to communicate with your audience across various mediums. Push notifications, SMS and emails - set up within minutes!'; const ogImage = DEFAULT_HOST + '/images/open-graph/website.png'; const codeTopic = [ diff --git a/src/routes/products/storage/+page.svelte b/src/routes/products/storage/+page.svelte index 4c5339221..4a2f9948a 100644 --- a/src/routes/products/storage/+page.svelte +++ b/src/routes/products/storage/+page.svelte @@ -17,7 +17,8 @@ import Optimized from './(components)/Optimized.svelte'; const title = 'Storage' + TITLE_SUFFIX; - const description = "Get to know Appwrite Storage - our robust infrastructure allows you to store, optimize and encrypt all of your project files in one place."; + const description = + 'Get to know Appwrite Storage - our robust infrastructure allows you to store, optimize and encrypt all of your project files in one place.'; const ogImage = DEFAULT_HOST + '/images/open-graph/website.png'; diff --git a/src/routes/startups/+page.svelte b/src/routes/startups/+page.svelte index 9ef5c91de..ee70602bd 100644 --- a/src/routes/startups/+page.svelte +++ b/src/routes/startups/+page.svelte @@ -23,7 +23,8 @@ import CommunitySupportChat from '$lib/components/CommunitySupportChat.svelte'; const title = 'Startups' + TITLE_SUFFIX; - const description = "Get $20,000 in cloud credits to fulfill all your startup's backend needs. Apply for Appwrite's Startups Program today."; + const description = + "Get $20,000 in cloud credits to fulfill all your startup's backend needs. Apply for Appwrite's Startups Program today."; const ogImage = DEFAULT_HOST + '/images/open-graph/website.png'; let personName: string; diff --git a/src/routes/threads/+page.svelte b/src/routes/threads/+page.svelte index 42a3aee34..abbf17f07 100644 --- a/src/routes/threads/+page.svelte +++ b/src/routes/threads/+page.svelte @@ -14,7 +14,8 @@ import Input from '$lib/components/ui/Input.svelte'; const title = 'Threads' + TITLE_SUFFIX; - const description = "Appwrite's Threads page showcases our community interactions on Discord. Join the conversation, ask questions, or assist other members with their issues."; + const description = + "Appwrite's Threads page showcases our community interactions on Discord. Join the conversation, ask questions, or assist other members with their issues."; const ogImage = DEFAULT_HOST + '/images/open-graph/website.png'; export let data; From 9f12a849f8d26f41e33b9538b3af92e3cd15ccaa Mon Sep 17 00:00:00 2001 From: ChiragAgg5k Date: Thu, 13 Feb 2025 14:08:26 +0530 Subject: [PATCH 24/28] feat: added test formatting workflow --- .github/workflows/format.yml | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100644 .github/workflows/format.yml diff --git a/.github/workflows/format.yml b/.github/workflows/format.yml new file mode 100644 index 000000000..a67f4c794 --- /dev/null +++ b/.github/workflows/format.yml @@ -0,0 +1,24 @@ +name: Format + +on: + pull_request_target: + branches: ['**'] + +jobs: + format: + name: Format + runs-on: ubuntu-latest + steps: + - name: Checkout the repo + uses: actions/checkout@v4 + + - name: Set up Node.js + uses: actions/setup-node@v4 + with: + node-version: '20' + + - name: Install dependencies + run: npm install + + - name: Format + run: npm run format From 981ca7c8e33d6ea9e1bfbc8c7efa02a477666c34 Mon Sep 17 00:00:00 2001 From: ChiragAgg5k Date: Thu, 13 Feb 2025 14:16:32 +0530 Subject: [PATCH 25/28] feat: added test formatting workflow --- .github/workflows/format.yml | 24 ------------------------ .github/workflows/tests.yml | 29 +++++++++++++++++++++++++++++ package.json | 1 + 3 files changed, 30 insertions(+), 24 deletions(-) delete mode 100644 .github/workflows/format.yml diff --git a/.github/workflows/format.yml b/.github/workflows/format.yml deleted file mode 100644 index a67f4c794..000000000 --- a/.github/workflows/format.yml +++ /dev/null @@ -1,24 +0,0 @@ -name: Format - -on: - pull_request_target: - branches: ['**'] - -jobs: - format: - name: Format - runs-on: ubuntu-latest - steps: - - name: Checkout the repo - uses: actions/checkout@v4 - - - name: Set up Node.js - uses: actions/setup-node@v4 - with: - node-version: '20' - - - name: Install dependencies - run: npm install - - - name: Format - run: npm run format diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml index 649683f62..9db07f332 100644 --- a/.github/workflows/tests.yml +++ b/.github/workflows/tests.yml @@ -7,6 +7,35 @@ on: permissions: read-all jobs: + format: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + with: + ref: ${{ github.event.pull_request.head.sha }} + - uses: actions/setup-node@v4 + with: + node-version: 20 + - name: Install corepack + run: npm i -g corepack@latest + - name: Install pnpm + run: corepack enable + - name: Get pnpm store directory + shell: bash + run: | + echo "STORE_PATH=$(pnpm store path --silent)" >> $GITHUB_ENV + - uses: actions/cache@v4 + name: Setup pnpm cache + with: + path: ${{ env.STORE_PATH }} + key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }} + restore-keys: | + ${{ runner.os }}-pnpm-store- + - name: Install dependencies + run: pnpm install --frozen-lockfile + - name: Check formatting + run: pnpm format:check + build: runs-on: ubuntu-latest steps: diff --git a/package.json b/package.json index 93fd1ea27..b4539037c 100644 --- a/package.json +++ b/package.json @@ -11,6 +11,7 @@ "dev": "vite dev", "download-contributors": "node ./scripts/download-contributor-data.js", "format": "prettier --write .", + "format:check": "prettier --check .", "icons:build": "node ./src/icons/build.js", "icons:generate": "node ./src/icons/optimize.js && node ./src/icons/build.js", "icons:optimize": "node ./src/icons/optimize.js", From 1205ddbb4da1ad2f702d237bde88cd2ddc8ebc51 Mon Sep 17 00:00:00 2001 From: Steven Nguyen <1477010+stnguyen90@users.noreply.github.com> Date: Thu, 13 Feb 2025 15:55:17 -0800 Subject: [PATCH 26/28] Remove horizontal rule It wasn't there before so let's not add it. --- src/routes/terms/+page.markdoc | 1 - 1 file changed, 1 deletion(-) diff --git a/src/routes/terms/+page.markdoc b/src/routes/terms/+page.markdoc index e1589774f..a564f4dd5 100644 --- a/src/routes/terms/+page.markdoc +++ b/src/routes/terms/+page.markdoc @@ -130,4 +130,3 @@ If you have any questions about these Terms, please [contact us](/contact-us). To report abuse or violations, please contact us at [abuse@appwrite.io](mailto:abuse@appwrite.io). ---- From 44860b0fed33446d7d9f3b37205c539e81c9ec41 Mon Sep 17 00:00:00 2001 From: Nishant Jain <89480234+Nishantjain10@users.noreply.github.com> Date: Fri, 14 Feb 2025 15:09:44 +0530 Subject: [PATCH 27/28] fix: correct broken link in documentation --- .../blog/post/adding-url-shortener-function/+page.markdoc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/routes/blog/post/adding-url-shortener-function/+page.markdoc b/src/routes/blog/post/adding-url-shortener-function/+page.markdoc index 8a4f12bbd..994dece82 100644 --- a/src/routes/blog/post/adding-url-shortener-function/+page.markdoc +++ b/src/routes/blog/post/adding-url-shortener-function/+page.markdoc @@ -20,7 +20,7 @@ In this blog, we’ll learn to build a URL shortener using Appwrite Functions te You can find the source code on our [templates GitHub repository](https://github.com/appwrite/templates/tree/main/node/url-shortener). # Setting up the Template -To get started, you need to navigate to the functions page on the **[Appwrite](https://appwrite.io/cloud)** console. From there, we will select the **Templates** tab, search for and select the **URL Shortener** function template. +To get started, you need to navigate to the functions page on the **[Appwrite](https://cloud.appwrite.io/)** console. From there, we will select the **Templates** tab, search for and select the **URL Shortener** function template. ![Function template](/images/blog/adding-url-shortener/functions.png) From bd4deaf6632c133a5c6c45faa221f34fe06ac75d Mon Sep 17 00:00:00 2001 From: Nishant Jain <89480234+Nishantjain10@users.noreply.github.com> Date: Fri, 14 Feb 2025 15:10:48 +0530 Subject: [PATCH 28/28] fix: correct broken link in documentation --- .../+page.markdoc | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/routes/blog/post/deploy-a-pdf-generation-service-with-appwrite-functions/+page.markdoc b/src/routes/blog/post/deploy-a-pdf-generation-service-with-appwrite-functions/+page.markdoc index 15a01be36..e85f6b7ca 100644 --- a/src/routes/blog/post/deploy-a-pdf-generation-service-with-appwrite-functions/+page.markdoc +++ b/src/routes/blog/post/deploy-a-pdf-generation-service-with-appwrite-functions/+page.markdoc @@ -62,5 +62,5 @@ We’ve covered the basics, and now it’s your time to shine! With a few change For more information about Appwrite and Appwrite Functions: 1. **[Appwrite Function Docs](https://appwrite.io/docs/functions)**: These documents provide more information on how to use Appwrite Functions. -2. **[Appwrite Cloud](https://appwrite.io/cloud)**: Try our cloud service to get started quickly. +2. **[Appwrite Cloud](https://cloud.appwrite.io/)**: Try our cloud service to get started quickly. 3. **[Appwrite Discord](https://discord.com/invite/appwrite)**: Connect with other developers and the Appwrite team for discussion, questions, and collaboration.