Skip to content

Commit 068b35f

Browse files
authored
Merge branch 'main' into add-bulk-api-docs
2 parents 76a2289 + bb11ddc commit 068b35f

File tree

55 files changed

+1209
-154
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

55 files changed

+1209
-154
lines changed

src/lib/constants.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -122,7 +122,7 @@ export const partnerCategoryDescriptions: SearchableCategory[] = [
122122
{
123123
slug: 'agency',
124124
heading: 'Agency',
125-
description: 'Agencies that build software for their clients using Appwrite'
125+
description: 'Find an Appwrite Partner agency for your project'
126126
}
127127
];
128128

src/lib/layouts/SidebarNavButton.svelte

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,6 @@
1010
class:is-selected={page.url?.pathname === groupItem.href}
1111
href={groupItem.href}
1212
target={groupItem.openInNewTab ? '_blank' : undefined}
13-
data-sveltekit-reload
1413
>
1514
{#if groupItem.icon}
1615
<span class="icon {groupItem.icon}" aria-hidden="true"></span>

src/markdoc/layouts/Partner.svelte

Lines changed: 34 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -7,17 +7,28 @@
77
import { classNames } from '$lib/utils/classnames';
88
import type { Partner } from '$routes/partners/catalog/+page';
99
import ContactPartner from '$routes/partners/catalog/(components)/contact-partner.svelte';
10+
import Icon from '$lib/components/ui/icon';
11+
import type { Snippet } from 'svelte';
12+
import Button from '$lib/components/ui/button.svelte';
1013
11-
export let title: Partner['title'];
12-
export let partnerLevel: Partner['partnerLevel'];
13-
export let category: Partner['category'];
14-
export let description: Partner['description'];
15-
export let cover: Partner['cover'];
16-
export let capabilities: Partner['capabilities'];
17-
export let frameworks: Partner['frameworks'];
18-
export let regions: Partner['regions'];
19-
export let languages: Partner['languages'];
20-
export let website: Partner['website'];
14+
interface Props extends Partner {
15+
children?: Snippet;
16+
}
17+
18+
let {
19+
title,
20+
partnerLevel,
21+
category,
22+
description,
23+
cover,
24+
services,
25+
technologies,
26+
regions,
27+
languages,
28+
website,
29+
email,
30+
children
31+
}: Props = $props();
2132
2233
const ogImage = DEFAULT_HOST + cover;
2334
</script>
@@ -48,8 +59,8 @@
4859
>
4960
<div class="relative container w-full pb-0">
5061
<div class="flex flex-col gap-7">
51-
<a href="/partners" class="text-caption text-primary group flex gap-2">
52-
<span class="web-icon-arrow-left transition group-hover:-translate-x-1" />
62+
<a href="/partners/catalog" class="text-caption text-primary group flex gap-2">
63+
<Icon name="arrow-left" class="transition group-hover:-translate-x-1" />
5364
Back to Partners Catalog
5465
</a>
5566
<h1 class="text-headline font-aeonik-pro text-primary">{title}</h1>
@@ -64,39 +75,41 @@
6475
<div class="md:col-span-7">
6576
<div class="web-article">
6677
<div class="web-article-content">
67-
<slot />
78+
{@render children?.()}
6879
</div>
69-
<ContactPartner />
80+
{#if email}
81+
<Button href={email}>Contact {title}</Button>
82+
{/if}
7083
</div>
7184
</div>
7285
<div class="md:col-span-5">
7386
<h2 class="text-label text-primary font-aeonik-pro">About {title}</h2>
7487
<dl class="divide-smooth sticky top-32 mt-10 flex flex-col gap-7 divide-y">
7588
<div class="flex flex-col justify-between gap-7 pb-7">
7689
<dt class="text-micro font-aeonik-fono tracking-loose uppercase">
77-
Frameworks
90+
Technologies
7891
</dt>
7992
<dd class="flex flex-wrap gap-2">
80-
{#each frameworks as framework}
93+
{#each technologies as technology}
8194
<div
8295
class="text-primary text-caption bg-smooth rounded-full px-3 py-1"
8396
>
84-
{framework}
97+
{technology}
8598
</div>
8699
{/each}
87100
</dd>
88101
</div>
89102

90103
<div class="flex flex-col justify-between gap-7 pb-7">
91104
<dt class="text-micro font-aeonik-fono tracking-loose uppercase">
92-
Capabilities
105+
Services
93106
</dt>
94107
<dd class="flex flex-wrap gap-2">
95-
{#each capabilities as capability}
108+
{#each services as service}
96109
<div
97110
class="text-primary text-caption bg-smooth rounded-full px-3 py-1"
98111
>
99-
{capability}
112+
{service}
100113
</div>
101114
{/each}
102115
</dd>
@@ -116,7 +129,7 @@
116129
<dd
117130
class="text-primary text-caption font-medium underline underline-offset-4"
118131
>
119-
{website}
132+
<a href={website} target="_blank">{website}</a>
120133
</dd>
121134
</div>
122135

src/routes/(marketing)/(components)/platforms.svelte

Lines changed: 14 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -145,19 +145,20 @@
145145
</div>
146146
</a>
147147
</Tooltip.Trigger>
148-
<Tooltip.Content
149-
sideOffset={8}
150-
side="top"
151-
class={classNames(
152-
'text-primary bg-greyscale-900 relative rounded-md border-0! px-2.5 py-1 text-sm',
153-
'data-[state="closed"]:animate-menu-out data-[state="instant-open"]:animate-menu-in data-[state="delayed-open"]:animate-menu-in'
154-
)}
155-
>{platform.name}
156-
<div
157-
class="absolute inset-0 rounded-md bg-gradient-to-tl from-(--primary-color,_#fff)/4 to-(--secondary-color,_transparent)/10"
158-
></div>
159-
<Tooltip.Arrow class="text-(--primary-color)/4" />
160-
</Tooltip.Content>
148+
<Tooltip.Portal>
149+
<Tooltip.Content
150+
sideOffset={8}
151+
side="top"
152+
class={classNames(
153+
'text-primary bg-greyscale-900 relative rounded-md border-0! px-2.5 py-1 text-sm',
154+
'data-[state="closed"]:animate-menu-out data-[state="instant-open"]:animate-menu-in data-[state="delayed-open"]:animate-menu-in'
155+
)}
156+
>{platform.name}
157+
<div
158+
class="absolute inset-0 rounded-md bg-gradient-to-tl from-(--primary-color,_#fff)/4 to-(--secondary-color,_transparent)/10"
159+
></div>
160+
</Tooltip.Content>
161+
</Tooltip.Portal>
161162
</div>
162163
</Tooltip.Root>
163164
{/each}

src/routes/(marketing)/(components)/scale.svelte

Lines changed: 12 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -25,24 +25,24 @@
2525
children,
2626
stats = [
2727
{
28-
number: 12,
29-
suffix: '+',
30-
description: 'Regions served'
28+
number: 50,
29+
suffix: 'K+',
30+
description: 'GitHub stars'
3131
},
3232
{
33-
number: 1000,
34-
suffix: '+ TB',
35-
description: 'of data served'
33+
number: 300,
34+
suffix: '+',
35+
description: 'PoP locations'
3636
},
3737
{
38-
number: 50,
39-
suffix: 'B',
40-
description: 'requests'
38+
number: 300,
39+
suffix: 'K+',
40+
description: 'developers'
4141
},
4242
{
43-
number: 300,
44-
suffix: 'K',
45-
description: 'projects'
43+
number: 200,
44+
suffix: 'B+',
45+
description: 'monthly database operations'
4646
}
4747
]
4848
}: Props = $props();

src/routes/(marketing)/+page.svelte

Lines changed: 0 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -43,28 +43,6 @@
4343
company: 'K-Collect',
4444
image: '/images/testimonials/ryan-oconner-testimonial.png'
4545
}}
46-
stats={[
47-
{
48-
number: 50,
49-
suffix: 'K+',
50-
description: 'GitHub stars'
51-
},
52-
{
53-
number: 300,
54-
suffix: '+',
55-
description: 'PoP locations'
56-
},
57-
{
58-
number: 300,
59-
suffix: 'K+',
60-
description: 'developers'
61-
},
62-
{
63-
number: 200,
64-
suffix: 'B+',
65-
description: 'monthly database operations'
66-
}
67-
]}
6846
>
6947
The switch to using Appwrite brought
7048
<span class="text-primary">infinite value that I'm still discovering today.</span>
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
---
2+
layout: post
3+
title: "Introducing Type generation: Automate your type definitions with Appwrite"
4+
description: "Automatically generate types from your collections with support for multiple languages."
5+
date: 2025-06-24
6+
cover: /images/blog/type-generation-feature/cover.png
7+
timeToRead: 4
8+
author: chirag-aggarwal
9+
category: announcement
10+
---
11+
12+
We're excited to announce Appwrite’s newest CLI feature, **Type generation**. Designed specifically to enhance your developer experience. Type generation automates the creation of type definitions directly from your database collections, seamlessly integrating with your preferred programming language.
13+
14+
# Say goodbye to manual mapping
15+
16+
Manually creating and maintaining complex type definitions can be tedious, error-prone, and time-consuming. With Type generation, Appwrite does the heavy lifting for you. Automatically generate accurate and up-to-date type definitions, ensuring your code always syncs with your database schema.
17+
18+
# Effortless multi-language support
19+
20+
Whether you work with PHP, Swift, Dart, TypeScript, JavaScript, Java, or Kotlin, Type generation has you covered. The Appwrite CLI automatically detects your project's language and generates the appropriate type definitions, handling complex scenarios including [Enums](/docs/sdks#enums), class relationships, and language-specific semantics. We will continue to add support for more languages over time.
21+
22+
# Simplified workflow, immediate benefits
23+
24+
Using Type generation is straightforward.
25+
26+
First, ensure you have the [Appwrite CLI](/docs/tooling/command-line/installation#getting-started) installed and your project is [initialised](/docs/tooling/command-line/installation#initialization). Then, run the following command in your terminal to pull collections from your Appwrite project:
27+
28+
```bash
29+
appwrite pull collections
30+
```
31+
32+
To generate types, you can use the Appwrite CLI command:
33+
```bash
34+
appwrite types [options] <output-directory>
35+
36+
```
37+
38+
![Workflow](/images/blog/type-generation-feature/workflow.png)
39+
40+
# Better experience:
41+
42+
- **Time savings**: Eliminate hours of manual work and dedicate your time to building impactful features.
43+
- **Reduced errors**: Keep your types consistently aligned with your database schema, drastically reducing outdated and mismatched types.
44+
- **Faster iterations**: Automatically propagate schema changes, allowing for rapid development and seamless collaboration.
45+
46+
# Built with you in mind
47+
48+
Type generation was built explicitly for developers, addressing key pain points and enhancing your productivity. Whether using Appwrite in a cloud environment or self-hosted, Type generation fits seamlessly into your workflow.
49+
50+
Many other solutions offer type generation limited to TypeScript, Appwrite expands your capabilities with robust multi-language support, ensuring you have flexibility and comprehensive integration, regardless of your preferred technology stack.
51+
52+
By simplifying integration and reducing friction, type generation helps accelerate onboarding and ensures long-term satisfaction, significantly benefiting developer teams and their organizations.
53+
54+
# More resources
55+
56+
- [Visit the documentation to get started](/docs/products/databases/type-generation)
57+
- [Learn about using the Appwrite CLI](/blog/post/how-to-execute-database-migration-with-appwrite-cli)
58+
- [Improve your Appwrite developer experience with dev keys](/blog/post/improve-devex-dev-keys)

0 commit comments

Comments
 (0)