Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
33 commits
Select commit Hold shift + click to select a range
9b7d835
add and changes to quickstart prompts
atharvadeosthale Dec 12, 2025
c7540cf
more quickstart prompts
atharvadeosthale Dec 30, 2025
9dab15a
Merge branch 'main' into quickstart-prompts
atharvadeosthale Dec 30, 2025
f7fddfc
Merge branch 'main' into quickstart-prompts
atharvadeosthale Jan 14, 2026
897ce74
format
atharvadeosthale Jan 14, 2026
79573e4
quick scaffolding and basic content for ai docs
atharvadeosthale Jan 20, 2026
90e5168
optimize and format
atharvadeosthale Jan 20, 2026
0ac1bde
ai dev tools section
atharvadeosthale Jan 20, 2026
43a6bb7
add vibe coding pages and improve nav for more visibility into subpages
atharvadeosthale Jan 20, 2026
19f2094
Merge branch 'main' into ai-docs
atharvadeosthale Jan 26, 2026
2fa9566
update sidebar as per feedback to have collapsible categories
atharvadeosthale Jan 26, 2026
7480823
overview
atharvadeosthale Jan 26, 2026
af4ea32
Merge branch 'main' into ai-docs
atharvadeosthale Feb 2, 2026
0679ec6
progress
atharvadeosthale Feb 3, 2026
5b91285
Merge branch 'main' into ai-docs
atharvadeosthale Feb 16, 2026
266d466
Merge branch 'ai-docs' of https://github.com/appwrite/website into ai…
atharvadeosthale Feb 16, 2026
243433c
responsible ai page
atharvadeosthale Feb 16, 2026
052e4f0
update persistent agents to use new realtime formats
atharvadeosthale Feb 16, 2026
51a75df
ai in functions & imagine
atharvadeosthale Feb 16, 2026
f345d34
Merge branch 'main' into quickstart-prompts
atharvadeosthale Feb 17, 2026
041b4a0
update quickstarts and prompts for accuracy
atharvadeosthale Feb 17, 2026
c168663
format and remove temp
atharvadeosthale Feb 17, 2026
c063210
skills, redirects, and more changes
atharvadeosthale Feb 25, 2026
a83e375
prompt_content tag
atharvadeosthale Mar 9, 2026
2ce5efe
format quickstart prompts for better md
atharvadeosthale Mar 9, 2026
729fefa
address comments
atharvadeosthale Mar 9, 2026
e47628a
add prompt frontmatter
atharvadeosthale Mar 9, 2026
7eafc7b
Merge pull request #2790 from appwrite/prompt-content
atharvadeosthale Mar 9, 2026
24a9fc7
Merge branch 'main' into ai-docs
atharvadeosthale Mar 9, 2026
3a2f0b0
move skills over to ai docs
atharvadeosthale Mar 9, 2026
cd9d0cc
rabbit comments
atharvadeosthale Mar 10, 2026
d4dfdac
Merge pull request #2662 from appwrite/quickstart-prompts
atharvadeosthale Mar 10, 2026
9b25ff0
finalise quickstart prompts in ai docs
atharvadeosthale Mar 10, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions .optimize-cache.json
Original file line number Diff line number Diff line change
Expand Up @@ -1135,6 +1135,10 @@
"images/docs/ai/audio-processing-light.png": "29a92249b7f2706307321d5bb96d4d20a7ac41b6b55e61e374608e9941e9a6b9",
"images/docs/ai/computer-vision-dark.png": "9802337f7e7464e987c963a4dac750dbf3971765161049c7470e3ba976f15412",
"images/docs/ai/computer-vision-light.png": "bb27aef8648b2188bc52e50a27df6f12b7c3c50dbcc9d47a327fe93f23d4a06b",
"images/docs/ai/docs-as-markdown/copy-page-dark.png": "ec3257ec9d3fdef157af6ab58e231507bcb54cd098c24a66b4e7e5ccbcb76748",
"images/docs/ai/docs-as-markdown/copy-page-light.png": "9a445794f70859c4c491312a472c825ae44cb5baf24565cd7955b8f3db7d77a7",
"images/docs/ai/docs-as-markdown/quickstart-dark.png": "501b13e454dfe52d371b023f6a97a9007035d936262e45579451592913911cea",
"images/docs/ai/docs-as-markdown/quickstart-light.png": "b1e0306a50ba1c897a75a5c05fcfda3a3b8b94a10844f2c0716186e9389db5a0",
"images/docs/ai/integrations/anyscale/demo.png": "f32f7040d1a818291726c1e3cda33eeacc91ae5a37aa2da1f2dd45cb3f531532",
"images/docs/ai/integrations/elevenlabs/demo.png": "6a4eba73a75c80676d7674d939b06ebcef5b99a8227d0b8c4df455777baa1534",
"images/docs/ai/integrations/fal-ai/demo.png": "613c2b5dd7ac8290ee22c69578a609e33805aa1843998f752348676fabfa464f",
Expand Down
12 changes: 8 additions & 4 deletions src/lib/components/PromptBanner.svelte
Original file line number Diff line number Diff line change
Expand Up @@ -5,14 +5,18 @@
import { Button, Icon } from '$lib/components/ui';
import { Tooltip } from '$lib/components';
import { createDropdownMenu, melt } from '@melt-ui/svelte';
import { onMount } from 'svelte';
import { getContext, onMount } from 'svelte';
import { trackEvent } from '$lib/actions/analytics';
import AiPromptIcon from '$lib/components/ui/aiPromptIcon.svelte';
import { browser } from '$app/environment';

// Only support co-located prompt.md
const routeExists = hasRoutePrompt();
const prompt = routeExists ? (getRoutePrompt() ?? '') : '';
// Check co-located prompt.md first, then fall back to prompt frontmatter path
const promptFrontmatter = getContext<string | undefined>('prompt_path');
const routeExists =
hasRoutePrompt() || (promptFrontmatter ? hasRoutePrompt(promptFrontmatter) : false);
const prompt = routeExists
? (getRoutePrompt() ?? (promptFrontmatter ? getRoutePrompt(promptFrontmatter) : null) ?? '')
: '';
const exists = routeExists;
const { copied, copy } = createCopy(prompt);

Expand Down
2 changes: 2 additions & 0 deletions src/markdoc/layouts/Article.svelte
Original file line number Diff line number Diff line change
Expand Up @@ -30,8 +30,10 @@
export let difficulty: string | undefined = undefined;
export let readtime: string | undefined = undefined;
export let date: string | undefined = undefined;
export let prompt: string | undefined = undefined;

setContext<LayoutContext>('headings', writable({}));
setContext('prompt_path', prompt);

const headings = getContext<LayoutContext>('headings');

Expand Down
70 changes: 70 additions & 0 deletions src/markdoc/tags/PromptCodeBlock.svelte
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
<script lang="ts">
import { Tooltip } from '$lib/components';
import { getCodeHtml, type Language } from '$lib/utils/code';
import { copy } from '$lib/utils/copy';
import { platformMap } from '$lib/utils/references';
import '$scss/hljs.css';
import { melt } from '@melt-ui/svelte';

export let text: string;
export let lang: Language;

const CopyStatus = {
Copy: 'Copy',
Copied: 'Copied!'
} as const;
type CopyStatusType = keyof typeof CopyStatus;
type CopyStatusValue = (typeof CopyStatus)[CopyStatusType];

let copyText: CopyStatusValue = CopyStatus.Copy;

async function handleCopy() {
await copy(text);

copyText = CopyStatus.Copied;
setTimeout(() => {
copyText = CopyStatus.Copy;
}, 1000);
}

$: result = getCodeHtml({ content: text, language: lang ?? 'sh', withLineNumbers: true });

$: badgeValue = platformMap[lang];
</script>

<section class="dark web-code-snippet not-prose my-8!" aria-label="code-snippet panel">
<header class="web-code-snippet-header">
<div class="web-code-snippet-header-start">
{#if badgeValue}
<div class="flex gap-4">
<div class="web-tag"><span class="text">{badgeValue}</span></div>
</div>
{/if}
</div>
<div class="web-code-snippet-header-end">
<ul class="buttons-list flex gap-2">
<li class="buttons-list-item ps-5">
<Tooltip>
{#snippet asChild({ trigger })}
<button
use:melt={trigger}
onclick={handleCopy}
class="web-icon-button"
aria-label="copy code from code-snippet"
>
<span class="web-icon-copy" aria-hidden="true"></span>
</button>
{/snippet}
{#snippet tooltip()}
{copyText}
{/snippet}
</Tooltip>
</li>
</ul>
</div>
</header>
<div class="web-code-snippet-content">
<!-- eslint-disable-next-line svelte/no-at-html-tags -->
{@html result}
</div>
</section>
21 changes: 21 additions & 0 deletions src/markdoc/tags/Prompt_Content.svelte
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
<script lang="ts">
import { getContext } from 'svelte';
import { getRoutePrompt } from '$lib/utils/routePrompts';
import SvelteMarkdown from 'svelte-markdown';
import PromptCodeBlock from './PromptCodeBlock.svelte';

export let path: string | undefined = undefined;

const promptFrontmatter = getContext<string | undefined>('prompt_path');
$: resolvedPath = path ?? promptFrontmatter;
$: promptText = resolvedPath ? getRoutePrompt(resolvedPath) : null;
</script>

{#if promptText}
<SvelteMarkdown
source={promptText}
renderers={{
code: PromptCodeBlock
}}
/>
{/if}
1 change: 1 addition & 0 deletions src/markdoc/tags/_Module.svelte
Original file line number Diff line number Diff line change
Expand Up @@ -23,4 +23,5 @@
export { default as Storage_Image } from './Storage_Image.svelte';
export { default as Video_Card } from './Video_Card.svelte';
export { default as Appwrite_Network_Map } from '../../lib/components/appwrite-network/map.svelte';
export { default as Prompt_Content } from './Prompt_Content.svelte';
</script>
28 changes: 14 additions & 14 deletions src/partials/mcp-add-ides-tools.md
Original file line number Diff line number Diff line change
Expand Up @@ -3,25 +3,25 @@ You can add the MCP server to various AI tools and code editors:
{% only_light %}
{% cards %}

{% cards_item href="/docs/tooling/mcp/claude-desktop" title="Claude Desktop" image="/images/docs/mcp/logos/claude.svg" %}
{% cards_item href="/docs/tooling/ai/ai-dev-tools/claude-desktop" title="Claude Desktop" image="/images/docs/mcp/logos/claude.svg" %}
{% /cards_item %}

{% cards_item href="/docs/tooling/mcp/claude-code" title="Claude Code" image="/images/docs/mcp/logos/claude.svg" %}
{% cards_item href="/docs/tooling/ai/ai-dev-tools/claude-code" title="Claude Code" image="/images/docs/mcp/logos/claude.svg" %}
{% /cards_item %}

{% cards_item href="/docs/tooling/mcp/cursor" title="Cursor" image="/images/docs/mcp/logos/cursor-ai.svg" %}
{% cards_item href="/docs/tooling/ai/ai-dev-tools/cursor" title="Cursor" image="/images/docs/mcp/logos/cursor-ai.svg" %}
{% /cards_item %}

{% cards_item href="/docs/tooling/mcp/windsurf" title="Windsurf Editor" image="/images/docs/mcp/logos/windsurf.svg" %}
{% cards_item href="/docs/tooling/ai/ai-dev-tools/windsurf" title="Windsurf Editor" image="/images/docs/mcp/logos/windsurf.svg" %}
{% /cards_item %}

{% cards_item href="/docs/tooling/mcp/vscode" title="VS Code" image="/images/docs/mcp/logos/vscode.svg" %}
{% cards_item href="/docs/tooling/ai/ai-dev-tools/vscode" title="VS Code" image="/images/docs/mcp/logos/vscode.svg" %}
{% /cards_item %}

{% cards_item href="/docs/tooling/mcp/opencode" title="OpenCode" image="/images/docs/mcp/logos/opencode.svg" %}
{% cards_item href="/docs/tooling/ai/ai-dev-tools/opencode" title="OpenCode" image="/images/docs/mcp/logos/opencode.svg" %}
{% /cards_item %}

{% cards_item href="/docs/tooling/mcp/antigravity" title="Google Antigravity" image="/images/docs/mcp/logos/google-antigravity.svg" %}
{% cards_item href="/docs/tooling/ai/ai-dev-tools/antigravity" title="Google Antigravity" image="/images/docs/mcp/logos/google-antigravity.svg" %}
{% /cards_item %}

{% /cards %}
Expand All @@ -30,25 +30,25 @@ You can add the MCP server to various AI tools and code editors:
{% only_dark %}
{% cards %}

{% cards_item href="/docs/tooling/mcp/claude-desktop" title="Claude Desktop" image="/images/docs/mcp/logos/dark/claude.svg" %}
{% cards_item href="/docs/tooling/ai/ai-dev-tools/claude-desktop" title="Claude Desktop" image="/images/docs/mcp/logos/dark/claude.svg" %}
{% /cards_item %}

{% cards_item href="/docs/tooling/mcp/claude-code" title="Claude Code" image="/images/docs/mcp/logos/dark/claude.svg" %}
{% cards_item href="/docs/tooling/ai/ai-dev-tools/claude-code" title="Claude Code" image="/images/docs/mcp/logos/dark/claude.svg" %}
{% /cards_item %}

{% cards_item href="/docs/tooling/mcp/cursor" title="Cursor" image="/images/docs/mcp/logos/dark/cursor-ai.svg" %}
{% cards_item href="/docs/tooling/ai/ai-dev-tools/cursor" title="Cursor" image="/images/docs/mcp/logos/dark/cursor-ai.svg" %}
{% /cards_item %}

{% cards_item href="/docs/tooling/mcp/windsurf" title="Windsurf Editor" image="/images/docs/mcp/logos/dark/windsurf.svg" %}
{% cards_item href="/docs/tooling/ai/ai-dev-tools/windsurf" title="Windsurf Editor" image="/images/docs/mcp/logos/dark/windsurf.svg" %}
{% /cards_item %}

{% cards_item href="/docs/tooling/mcp/vscode" title="VS Code" image="/images/docs/mcp/logos/dark/vscode.svg" %}
{% cards_item href="/docs/tooling/ai/ai-dev-tools/vscode" title="VS Code" image="/images/docs/mcp/logos/dark/vscode.svg" %}
{% /cards_item %}

{% cards_item href="/docs/tooling/mcp/opencode" title="OpenCode" image="/images/docs/mcp/logos/dark/opencode.svg" %}
{% cards_item href="/docs/tooling/ai/ai-dev-tools/opencode" title="OpenCode" image="/images/docs/mcp/logos/dark/opencode.svg" %}
{% /cards_item %}

{% cards_item href="/docs/tooling/mcp/antigravity" title="Google Antigravity" image="/images/docs/mcp/logos/dark/google-antigravity.svg" %}
{% cards_item href="/docs/tooling/ai/ai-dev-tools/antigravity" title="Google Antigravity" image="/images/docs/mcp/logos/dark/google-antigravity.svg" %}
{% /cards_item %}

{% /cards %}
Expand Down
44 changes: 44 additions & 0 deletions src/redirects.json
Original file line number Diff line number Diff line change
Expand Up @@ -771,5 +771,49 @@
{
"link": "/docs/products/auth/preferences-storage",
"redirect": "/docs/products/auth/preferences"
},
{
"link": "/docs/tooling/mcp",
"redirect": "/docs/tooling/ai"
},
{
"link": "/docs/tooling/mcp/cursor",
"redirect": "/docs/tooling/ai/ai-dev-tools/cursor"
},
{
"link": "/docs/tooling/mcp/vscode",
"redirect": "/docs/tooling/ai/ai-dev-tools/vscode"
},
{
"link": "/docs/tooling/mcp/windsurf",
"redirect": "/docs/tooling/ai/ai-dev-tools/windsurf"
},
{
"link": "/docs/tooling/mcp/opencode",
"redirect": "/docs/tooling/ai/ai-dev-tools/opencode"
},
{
"link": "/docs/tooling/mcp/antigravity",
"redirect": "/docs/tooling/ai/ai-dev-tools/antigravity"
},
{
"link": "/docs/tooling/mcp/claude-code",
"redirect": "/docs/tooling/ai/ai-dev-tools/claude-code"
},
{
"link": "/docs/tooling/mcp/claude-desktop",
"redirect": "/docs/tooling/ai/ai-dev-tools/claude-desktop"
},
{
"link": "/docs/tooling/mcp/api",
"redirect": "/docs/tooling/ai/mcp-servers/api"
},
{
"link": "/docs/tooling/mcp/docs",
"redirect": "/docs/tooling/ai/mcp-servers/docs"
},
{
"link": "/docs/tooling/skills",
"redirect": "/docs/tooling/ai/skills"
}
]
16 changes: 6 additions & 10 deletions src/routes/docs/Sidebar.svelte
Original file line number Diff line number Diff line change
Expand Up @@ -124,6 +124,12 @@
{
label: 'Tooling',
items: [
{
label: 'AI',
href: '/docs/tooling/ai',
icon: 'icon-sparkles',
isParent: true
},
{
label: 'CLI',
href: '/docs/tooling/command-line/installation',
Expand All @@ -140,16 +146,6 @@
href: '/docs/tooling/assistant',
icon: 'icon-sparkles'
},
{
label: 'MCP Server',
href: '/docs/tooling/mcp',
icon: 'web-icon-mcp'
},
{
label: 'Skills',
href: '/docs/tooling/skills',
icon: 'web-icon-skills'
},
{
label: 'The Appwriter',
href: '/docs/tooling/appwriter',
Expand Down
44 changes: 24 additions & 20 deletions src/routes/docs/quick-starts/android-java/+page.markdoc
Original file line number Diff line number Diff line change
Expand Up @@ -134,38 +134,42 @@ public class AppwriteHelper {
account.createEmailPasswordSession(
email,
password,
new CoroutineCallback<>(result -> {
callback.onSuccess(result);
return null;
}, error -> {
callback.onError(error);
return null;
}));
new CoroutineCallback<>((result, error) -> {
if (error != null) {
callback.onError(error);
return;
}
callback.onSuccess(result);
})
);
}

public void register(String email, String password, final AuthCallback<User<Map<String, Object>>> callback) {
account.create(
ID.unique(),
email,
password,
new CoroutineCallback<>(result -> {
callback.onSuccess(result);
return null;
}, error -> {
new CoroutineCallback<>((result, error) -> {
if (error != null) {
callback.onError(error);
return null;
})
return;
}
callback.onSuccess(result);
})
);
}

public void logout(final AuthCallback<Object> callback) {
account.deleteSession("current", new CoroutineCallback<>(result -> {
callback.onSuccess(result);
return null;
}, error -> {
callback.onError(error);
return null;
}));
account.deleteSession(
"current",
new CoroutineCallback<>((result, error) -> {
if (error != null) {
callback.onError(error);
return;
}
callback.onSuccess(result);
})
);
}
}
```
Expand Down
Loading