diff --git a/src/routes/(console)/project-[project]/sites/site-[site]/deployments/+page.ts b/src/routes/(console)/project-[project]/sites/site-[site]/deployments/+page.ts
index aad33a0ee..3bacaf09c 100644
--- a/src/routes/(console)/project-[project]/sites/site-[site]/deployments/+page.ts
+++ b/src/routes/(console)/project-[project]/sites/site-[site]/deployments/+page.ts
@@ -2,10 +2,9 @@ import { Query } from '@appwrite.io/console';
import { sdk } from '$lib/stores/sdk';
import { getLimit, getPage, getQuery, pageToOffset } from '$lib/helpers/load';
import { Dependencies, PAGE_LIMIT } from '$lib/constants';
-import type { PageLoad } from './$types';
import { queries, queryParamToMap } from '$lib/components/filters';
-export const load: PageLoad = async ({ params, depends, url, route, parent }) => {
+export const load = async ({ params, depends, url, route, parent }) => {
const data = await parent();
depends(Dependencies.DEPLOYMENTS);
const page = getPage(url);
diff --git a/src/routes/(console)/project-[project]/sites/site-[site]/settings/+page.svelte b/src/routes/(console)/project-[project]/sites/site-[site]/settings/+page.svelte
new file mode 100644
index 000000000..3764822f4
--- /dev/null
+++ b/src/routes/(console)/project-[project]/sites/site-[site]/settings/+page.svelte
@@ -0,0 +1,41 @@
+
+
+
+ Settings
+
+
+
+
diff --git a/src/routes/(console)/project-[project]/sites/site-[site]/settings/+page.ts b/src/routes/(console)/project-[project]/sites/site-[site]/settings/+page.ts
new file mode 100644
index 000000000..25a7f7c42
--- /dev/null
+++ b/src/routes/(console)/project-[project]/sites/site-[site]/settings/+page.ts
@@ -0,0 +1,37 @@
+import { sdk } from '$lib/stores/sdk';
+import { Dependencies } from '$lib/constants';
+
+export const load = async ({ params, depends, parent }) => {
+ depends(Dependencies.VARIABLES);
+ depends(Dependencies.SITE);
+ const { site } = await parent();
+
+ const [globalVariables, variables] = await Promise.all([
+ sdk.forProject.projectApi.listVariables(),
+ sdk.forProject.sites.listVariables(params.site)
+ ]);
+
+ // Conflicting variables first
+ variables.variables = variables.variables.sort((var1, var2) => {
+ const isVar1Global =
+ globalVariables.variables.find((variable) => variable.key === var1.key) !== undefined;
+ const isVar2Global =
+ globalVariables.variables.find((variable) => variable.key === var2.key) !== undefined;
+
+ if (isVar1Global && isVar2Global) {
+ return -var1.$createdAt.localeCompare(var2.$createdAt);
+ } else if (isVar1Global) {
+ return -1;
+ } else if (isVar2Global) {
+ return 1;
+ } else {
+ return -var1.$createdAt.localeCompare(var2.$createdAt);
+ }
+ });
+
+ return {
+ variables,
+ globalVariables,
+ site
+ };
+};
diff --git a/src/routes/(console)/project-[project]/sites/site-[site]/settings/dangerZone.svelte b/src/routes/(console)/project-[project]/sites/site-[site]/settings/dangerZone.svelte
new file mode 100644
index 000000000..f75b2af60
--- /dev/null
+++ b/src/routes/(console)/project-[project]/sites/site-[site]/settings/dangerZone.svelte
@@ -0,0 +1,32 @@
+
+
+
+ Delete site
+
+ The function will be permanently deleted, including all deployments associated with it. This
+ action is irreversible.
+
+
+
+
+ {site.name}
+
+ Last updated: {toLocaleDateTime(site.$updatedAt)}
+
+
+
+
+
+
+
+
+
diff --git a/src/routes/(console)/project-[project]/sites/site-[site]/settings/deleteModal.svelte b/src/routes/(console)/project-[project]/sites/site-[site]/settings/deleteModal.svelte
new file mode 100644
index 000000000..b37110436
--- /dev/null
+++ b/src/routes/(console)/project-[project]/sites/site-[site]/settings/deleteModal.svelte
@@ -0,0 +1,48 @@
+
+
+
+
+ Are you sure you want to delete this function and all associated deployments from your
+ project?
+
+
+
+
+
+
diff --git a/src/routes/(console)/project-[project]/sites/site-[site]/settings/disconnectRepo.svelte b/src/routes/(console)/project-[project]/sites/site-[site]/settings/disconnectRepo.svelte
new file mode 100644
index 000000000..699aebab2
--- /dev/null
+++ b/src/routes/(console)/project-[project]/sites/site-[site]/settings/disconnectRepo.svelte
@@ -0,0 +1,80 @@
+
+
+
+
+ Are you sure you want to disconnect {$func.name}? This will affect future deployments
+ to this function.
+
+
+
+
+
+
diff --git a/src/routes/(console)/project-[project]/sites/site-[site]/settings/gitConfigurationModal.svelte b/src/routes/(console)/project-[project]/sites/site-[site]/settings/gitConfigurationModal.svelte
new file mode 100644
index 000000000..a2f6116a2
--- /dev/null
+++ b/src/routes/(console)/project-[project]/sites/site-[site]/settings/gitConfigurationModal.svelte
@@ -0,0 +1,295 @@
+
+
+
+
+ Configure a Git repository that will trigger your function deployments when updated.
+
+ {#if step === 1}
+ {#await getRepos()}
+ Fetching repositories..
+ {:then}
+
+
+
+ Manage organization configuration in your project settings.
+
+ {#if repositoriesList.length}
+
+ {#each repositoriesList as repo}
+ -
+
+
+ {/each}
+
+
+
Total results: {repositoriesList.length}
+
+
+ {:else if search}
+
+
+
+
Sorry we couldn't find "{search}"
+
There are no repositories that match your search.
+
+
+
+
+
+
+
+ {:else}
+
+
+
+
You have no repositories.
+
+ Need a hand? Learn more in our
+ documentation.
+
+
+
+
+ {/if}
+ {/await}
+ {:else}
+ {#await getBranches()}
+ Fetching branches..
+ {:then}
+
+
+
+
+
+
+
+ {selectedRepo.name}
+
+ Last updated: {toLocaleDateTime(selectedRepo.pushedAt)}
+
+
+ {
+ selectedBranch = event.detail.value;
+ }}
+ name="branch"
+ options={branchesList?.branches?.map((branch) => {
+ return {
+ value: branch.name,
+ label: branch.name
+ };
+ }) ?? []} />
+
+
+ {/await}
+ {/if}
+
+
+ {#if step === 1}
+
+
+ {:else}
+
+
+ {/if}
+
+
diff --git a/src/routes/(console)/project-[project]/sites/site-[site]/settings/updateName.svelte b/src/routes/(console)/project-[project]/sites/site-[site]/settings/updateName.svelte
new file mode 100644
index 000000000..634f10da7
--- /dev/null
+++ b/src/routes/(console)/project-[project]/sites/site-[site]/settings/updateName.svelte
@@ -0,0 +1,74 @@
+
+
+