Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
38 commits
Select commit Hold shift + click to select a range
594a673
feat: ai suggestions [wip].
ItzNotABug Sep 15, 2025
3ed568d
add: some nice stuff.
ItzNotABug Sep 16, 2025
d276182
add: some nice stuff.
ItzNotABug Sep 16, 2025
bc46be0
update: misc fixes and updates.
ItzNotABug Sep 17, 2025
c278249
update: progress.
ItzNotABug Sep 22, 2025
a4ee350
lint.
ItzNotABug Sep 22, 2025
2b466b3
Merge branch 'main' into 'suggestions-api'.
ItzNotABug Sep 22, 2025
60d993a
add: column suggestions.
ItzNotABug Sep 22, 2025
07f223f
update: disable fields on creation.
ItzNotABug Sep 22, 2025
6249794
update: redefined empty state [wip].
ItzNotABug Sep 23, 2025
d71a9e4
update: improve ui.
ItzNotABug Sep 24, 2025
b294c55
update: ui;
ItzNotABug Sep 24, 2025
e62e58a
fic: notification spacing on phone.
ItzNotABug Sep 24, 2025
3e9480a
fic: notification spacing on phone.
ItzNotABug Sep 24, 2025
e25a0fa
fix: better fade on show/hide of overlays on mobile.
ItzNotABug Sep 24, 2025
a192cb5
update: flow.
ItzNotABug Sep 24, 2025
9ea9e78
update: flow and a bit of animation.
ItzNotABug Sep 25, 2025
44019cf
update: enable the email verification notification via an env config.…
ItzNotABug Sep 25, 2025
521c381
fix: env logic.
ItzNotABug Sep 25, 2025
574e163
fix: width calc.
ItzNotABug Sep 25, 2025
1c17c3c
fix: width calc, again.
ItzNotABug Sep 25, 2025
dc0a720
update: clear id, name in the end.
ItzNotABug Sep 25, 2025
5990c93
fix: address rabbit's comment > children shouldn't open popover's too…
ItzNotABug Sep 25, 2025
aec79aa
remove: todo.
ItzNotABug Sep 25, 2025
7105437
remove: todo.
ItzNotABug Sep 25, 2025
6df5b0d
fix: missing icons on sheet view and elements support for enums.
ItzNotABug Sep 25, 2025
cd804b2
remove: transitions for height change on empty sheets.
ItzNotABug Sep 25, 2025
4561b79
lint;
ItzNotABug Sep 25, 2025
d7aca13
fix: possible variable shadowed.
ItzNotABug Sep 25, 2025
1e0315f
fix: lint.
ItzNotABug Sep 25, 2025
e496836
fix: incorrect numeric limits on columns.
ItzNotABug Sep 25, 2025
c05e2f5
update: cancel navigating when suggestions are up for review.
ItzNotABug Sep 26, 2025
dcdf1b0
update: center the floating action bar!
ItzNotABug Sep 26, 2025
117e0c5
update: address remaining comments from design.
ItzNotABug Sep 26, 2025
dfb77b0
address comment.
ItzNotABug Sep 26, 2025
648f84e
add: console mock suggestions env.
ItzNotABug Sep 26, 2025
c1e5385
Merge branch 'main' into suggestions-api
ItzNotABug Sep 26, 2025
3e4ac31
address comment.
ItzNotABug Sep 26, 2025
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: 3 additions & 1 deletion .env.example
Original file line number Diff line number Diff line change
Expand Up @@ -3,4 +3,6 @@ PUBLIC_CONSOLE_FEATURE_FLAGS=
PUBLIC_APPWRITE_MULTI_REGION=false
PUBLIC_APPWRITE_ENDPOINT=http://localhost/v1
PUBLIC_STRIPE_KEY=
PUBLIC_GROWTH_ENDPOINT=
PUBLIC_GROWTH_ENDPOINT=
PUBLIC_CONSOLE_EMAIL_VERIFICATION=false
PUBLIC_CONSOLE_MOCK_AI_SUGGESTIONS=true
4 changes: 4 additions & 0 deletions .github/workflows/publish.yml
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@ jobs:
"PUBLIC_CONSOLE_MODE=cloud"
"PUBLIC_CONSOLE_FEATURE_FLAGS="
"PUBLIC_APPWRITE_MULTI_REGION=true"
"PUBLIC_CONSOLE_MOCK_AI_SUGGESTIONS=false"
"PUBLIC_GROWTH_ENDPOINT=${{ secrets.PUBLIC_GROWTH_ENDPOINT }}"
"PUBLIC_STRIPE_KEY=${{ secrets.PUBLIC_STRIPE_KEY }}"
"SENTRY_AUTH_TOKEN=${{ secrets.SENTRY_AUTH_TOKEN }}"
Expand Down Expand Up @@ -81,6 +82,7 @@ jobs:
"PUBLIC_CONSOLE_MODE=cloud"
"PUBLIC_CONSOLE_FEATURE_FLAGS="
"PUBLIC_APPWRITE_MULTI_REGION=true"
"PUBLIC_CONSOLE_MOCK_AI_SUGGESTIONS=false"
"PUBLIC_GROWTH_ENDPOINT=${{ secrets.PUBLIC_GROWTH_ENDPOINT }}"
"PUBLIC_STRIPE_KEY=${{ secrets.PUBLIC_STRIPE_KEY_STAGE }}"
publish-self-hosted:
Expand Down Expand Up @@ -118,6 +120,7 @@ jobs:
build-args: |
"PUBLIC_CONSOLE_MODE=self-hosted"
"PUBLIC_APPWRITE_MULTI_REGION=false"
"PUBLIC_CONSOLE_MOCK_AI_SUGGESTIONS=false"
"PUBLIC_CONSOLE_FEATURE_FLAGS="
"PUBLIC_GROWTH_ENDPOINT=${{ secrets.PUBLIC_GROWTH_ENDPOINT }}"

Expand Down Expand Up @@ -156,6 +159,7 @@ jobs:
build-args: |
"PUBLIC_CONSOLE_MODE=cloud"
"PUBLIC_APPWRITE_MULTI_REGION=false"
"PUBLIC_CONSOLE_MOCK_AI_SUGGESTIONS=false"
"PUBLIC_CONSOLE_FEATURE_FLAGS="
"PUBLIC_STRIPE_KEY=${{ secrets.PUBLIC_STRIPE_KEY_STAGE }}"
"PUBLIC_GROWTH_ENDPOINT=${{ secrets.PUBLIC_GROWTH_ENDPOINT }}"
2 changes: 2 additions & 0 deletions Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ ADD ./static /app/static
ARG PUBLIC_CONSOLE_MODE
ARG PUBLIC_CONSOLE_FEATURE_FLAGS
ARG PUBLIC_APPWRITE_MULTI_REGION
ARG PUBLIC_CONSOLE_MOCK_AI_SUGGESTIONS
ARG PUBLIC_APPWRITE_ENDPOINT
ARG PUBLIC_GROWTH_ENDPOINT
ARG PUBLIC_STRIPE_KEY
Expand All @@ -34,6 +35,7 @@ ENV PUBLIC_GROWTH_ENDPOINT=$PUBLIC_GROWTH_ENDPOINT
ENV PUBLIC_CONSOLE_MODE=$PUBLIC_CONSOLE_MODE
ENV PUBLIC_CONSOLE_FEATURE_FLAGS=$PUBLIC_CONSOLE_FEATURE_FLAGS
ENV PUBLIC_APPWRITE_MULTI_REGION=$PUBLIC_APPWRITE_MULTI_REGION
ENV PUBLIC_CONSOLE_MOCK_AI_SUGGESTIONS=$PUBLIC_CONSOLE_MOCK_AI_SUGGESTIONS
ENV PUBLIC_STRIPE_KEY=$PUBLIC_STRIPE_KEY
ENV SENTRY_AUTH_TOKEN=$SENTRY_AUTH_TOKEN
ENV SENTRY_RELEASE=$SENTRY_RELEASE
Expand Down
6 changes: 3 additions & 3 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -22,11 +22,11 @@
},
"dependencies": {
"@ai-sdk/svelte": "^1.1.24",
"@appwrite.io/console": "https://pkg.pr.new/appwrite-labs/cloud/@appwrite.io/console@7747562",
"@appwrite.io/console": "https://pkg.pr.new/appwrite-labs/cloud/@appwrite.io/console@f08cb74",
"@appwrite.io/pink-icons": "0.25.0",
"@appwrite.io/pink-icons-svelte": "https://pkg.vc/-/@appwrite/@appwrite.io/pink-icons-svelte@f2198f1",
"@appwrite.io/pink-icons-svelte": "https://pkg.vc/-/@appwrite/@appwrite.io/pink-icons-svelte@077179c",
"@appwrite.io/pink-legacy": "^1.0.3",
"@appwrite.io/pink-svelte": "https://pkg.vc/-/@appwrite/@appwrite.io/pink-svelte@f2198f1",
"@appwrite.io/pink-svelte": "https://pkg.vc/-/@appwrite/@appwrite.io/pink-svelte@077179c",
"@faker-js/faker": "^9.9.0",
"@popperjs/core": "^2.11.8",
"@sentry/sveltekit": "^8.38.0",
Expand Down
30 changes: 15 additions & 15 deletions pnpm-lock.yaml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 3 additions & 0 deletions src/lib/actions/analytics.ts
Original file line number Diff line number Diff line change
Expand Up @@ -274,9 +274,12 @@ export enum Submit {
DatabaseDelete = 'submit_database_delete',
DatabaseUpdateName = 'submit_database_update_name',
DatabaseImportCsv = 'submit_database_import_csv',

ColumnCreate = 'submit_column_create',
ColumnUpdate = 'submit_column_update',
ColumnDelete = 'submit_column_delete',
ColumnSuggestions = 'submit_column_suggestions',

RowCreate = 'submit_row_create',
RowDelete = 'submit_row_delete',
RowUpdate = 'submit_row_update',
Expand Down
10 changes: 8 additions & 2 deletions src/lib/components/alerts/emailVerificationBanner.svelte
Original file line number Diff line number Diff line change
Expand Up @@ -6,14 +6,20 @@
import SendVerificationEmailModal from '../account/sendVerificationEmailModal.svelte';
import { page } from '$app/stores';
import { wizard, isNewWizardStatusOpen } from '$lib/stores/wizard';
import { isCloud } from '$lib/system';
import { isCloud, VARS } from '$lib/system';

const hasUser = $derived(!!$user);
const needsEmailVerification = $derived(hasUser && !$user.emailVerification);
const notOnOnboarding = $derived(!$page.route.id.includes('/onboarding'));
const notOnWizard = $derived(!$wizard.show && !$isNewWizardStatusOpen);
const isEnabledViaEnvConfig = $derived(VARS.EMAIL_VERIFICATION);
const shouldShowEmailBanner = $derived(
isCloud && hasUser && needsEmailVerification && notOnOnboarding && notOnWizard
isEnabledViaEnvConfig &&
isCloud &&
hasUser &&
needsEmailVerification &&
notOnOnboarding &&
notOnWizard
);

let showSendVerification = $state(false);
Expand Down
8 changes: 4 additions & 4 deletions src/lib/layout/notifications.svelte
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
<script lang="ts">
import { dismissNotification, notifications } from '../stores/notifications';
import { flip } from 'svelte/animate';
import { Layout, Toast } from '@appwrite.io/pink-svelte';
import { dismissNotification, notifications } from '../stores/notifications';
</script>

{#if $notifications}
Expand All @@ -28,16 +28,16 @@

<style lang="scss">
section {
right: 3.25px;
z-index: 1001;
position: fixed;
top: calc(var(--main-header-height) + 12px);
right: 12px;
z-index: 1001;
}
@media (min-width: 768px) {
section {
top: calc(var(--main-header-height) + 24px);
right: 24px;
top: calc(var(--main-header-height) + 24px);
}
}
</style>
8 changes: 8 additions & 0 deletions src/lib/layout/progress.svelte
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
<script lang="ts">
import { navigationCancelled } from '$lib/stores/navigation';
import { afterNavigate, beforeNavigate } from '$app/navigation';

const minimum = 0.08;
Expand Down Expand Up @@ -97,6 +98,13 @@
complete();
});

navigationCancelled.subscribe((cancelled) => {
if (cancelled) {
complete();
navigationCancelled.set(false);
}
});

$: barStyle = (width && width * 100 && `width: ${width * 100}%;`) || '';
</script>

Expand Down
3 changes: 3 additions & 0 deletions src/lib/stores/navigation.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
import { writable } from 'svelte/store';

export const navigationCancelled = writable(false);
3 changes: 2 additions & 1 deletion src/lib/stores/sdk.ts
Original file line number Diff line number Diff line change
Expand Up @@ -126,7 +126,8 @@ const sdkForProject = {
proxy: new Proxy(clientProject),
migrations: new Migrations(clientProject),
sites: new Sites(clientProject),
tablesDB: new TablesDB(clientProject)
tablesDB: new TablesDB(clientProject),
console: new Console(clientProject) // for suggestions API
};

export const realtime = {
Expand Down
4 changes: 3 additions & 1 deletion src/lib/system.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,9 @@ export const VARS = {
CONSOLE_MODE: (env.PUBLIC_CONSOLE_MODE as Mode) ?? undefined,
APPWRITE_ENDPOINT: env.PUBLIC_APPWRITE_ENDPOINT ?? undefined,
GROWTH_ENDPOINT: env.PUBLIC_GROWTH_ENDPOINT ?? undefined,
PUBLIC_STRIPE_KEY: env.PUBLIC_STRIPE_KEY ?? undefined
PUBLIC_STRIPE_KEY: env.PUBLIC_STRIPE_KEY ?? undefined,
EMAIL_VERIFICATION: env.PUBLIC_CONSOLE_EMAIL_VERIFICATION === 'true',
MOCK_AI_SUGGESTIONS: (env.PUBLIC_CONSOLE_MOCK_AI_SUGGESTIONS ?? 'true') === 'true'
};

export const ENV = {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -138,8 +138,13 @@

@media (max-width: 768px) {
.layout-level-progress-bars {
position: relative;
width: 100%;
align-items: center;
box-sizing: border-box;
}

:global(main:has([data-side-sheet-visible='true']) .layout-level-progress-bars) {
visibility: hidden;
}
}
</style>
Original file line number Diff line number Diff line change
Expand Up @@ -2,9 +2,9 @@
import { goto } from '$app/navigation';
import { base } from '$app/paths';
import { page } from '$app/state';
import { Empty, PaginationWithLimit, SearchQuery, ViewSelector } from '$lib/components';
import { Empty, PaginationWithLimit } from '$lib/components';
import { Button } from '$lib/elements/forms';
import { Container } from '$lib/layout';
import { Container, ResponsiveContainerHeader } from '$lib/layout';
import type { Models } from '@appwrite.io/console';

import type { PageData } from './$types';
Expand All @@ -14,7 +14,7 @@
import Table from './table.svelte';
import { registerCommands } from '$lib/commandCenter';
import { canWriteDatabases } from '$lib/stores/roles';
import { Icon, Layout } from '@appwrite.io/pink-svelte';
import { Icon } from '@appwrite.io/pink-svelte';
import { IconPlus } from '@appwrite.io/pink-icons-svelte';
import EmptySearch from '$lib/components/emptySearch.svelte';

Expand Down Expand Up @@ -46,25 +46,18 @@
</script>

<Container>
<Layout.Stack direction="row" justifyContent="space-between">
<Layout.Stack direction="row" alignItems="center">
<SearchQuery placeholder="Search by name or ID" />
</Layout.Stack>
<Layout.Stack direction="row" alignItems="center" justifyContent="flex-end">
<ViewSelector
ui="new"
{columns}
view={data.view}
hideColumns={!data.databases.total}
hideView={!data.databases.total} />
{#if $canWriteDatabases}
<Button event="create_database" on:click={() => (showCreate = true)}>
<Icon icon={IconPlus} slot="start" size="s" />
Create database
</Button>
{/if}
</Layout.Stack>
</Layout.Stack>
<ResponsiveContainerHeader
hasSearch
{columns}
bind:view={data.view}
searchPlaceholder="Search by name or ID">
{#if $canWriteDatabases}
<Button event="create_database" on:click={() => (showCreate = true)}>
<Icon icon={IconPlus} slot="start" size="s" />
Create database
</Button>
{/if}
</ResponsiveContainerHeader>

{#if data.databases.total}
{#if data.view === 'grid'}
Expand Down
Loading