From 2547c100601b2e2d0fccf497bd80e903e8d33a4a Mon Sep 17 00:00:00 2001 From: Linus Rath <139418639+rathlinus@users.noreply.github.com> Date: Sat, 21 Mar 2026 01:38:42 +0100 Subject: [PATCH 1/7] feat: add demo data for emails, files, filters, identities, mailboxes, vacation responses, and JMAP client interface - Created demo emails with various states (inbox, sent, drafts, trash, etc.) in `emails.ts`. - Added demo file nodes representing directories and files in `files.ts`. - Implemented demo Sieve capabilities and scripts in `filters.ts`. - Defined demo identities for users in `identities.ts`. - Established demo mailboxes with permissions and counts in `mailboxes.ts`. - Created a demo vacation response in `vacation.ts`. - Introduced a comprehensive JMAP client interface in `client-interface.ts` to standardize interactions with the JMAP API. --- app/[locale]/calendar/page.tsx | 1 + app/[locale]/contacts/page.tsx | 1 + app/[locale]/layout.tsx | 5 +- app/[locale]/login/page.tsx | 195 ++++- app/[locale]/page.tsx | 5 +- app/[locale]/settings/page.tsx | 2 +- app/api/config/route.ts | 1 + .../calendar/calendar-sidebar-panel.tsx | 4 +- components/calendar/calendar-toolbar.tsx | 2 +- components/calendar/event-modal.tsx | 2 +- components/calendar/ical-import-modal.tsx | 4 +- .../calendar/ical-subscription-modal.tsx | 4 +- components/email/email-composer.tsx | 1 + components/email/email-list.tsx | 2 +- components/email/email-viewer.tsx | 54 +- components/keyboard-shortcuts-modal.tsx | 10 + components/layout/navigation-rail.tsx | 7 +- components/layout/sidebar.tsx | 78 +- components/settings/account-settings.tsx | 20 +- components/settings/appearance-settings.tsx | 18 + components/tour/tour-overlay.tsx | 413 +++++++++ components/tour/tour-provider.tsx | 148 ++++ components/tour/tour-steps.ts | 221 +++++ components/ui/welcome-banner.tsx | 13 +- hooks/use-config.ts | 4 + lib/demo/demo-client.ts | 800 ++++++++++++++++++ lib/demo/demo-data.ts | 45 + lib/demo/demo-utils.ts | 35 + lib/demo/fixtures/calendars.ts | 274 ++++++ lib/demo/fixtures/contacts.ts | 194 +++++ lib/demo/fixtures/emails.ts | 364 ++++++++ lib/demo/fixtures/files.ts | 94 ++ lib/demo/fixtures/filters.ts | 48 ++ lib/demo/fixtures/identities.ts | 22 + lib/demo/fixtures/mailboxes.ts | 17 + lib/demo/fixtures/vacation.ts | 13 + lib/jmap/client-interface.ts | 228 +++++ lib/jmap/client.ts | 3 +- locales/de/common.json | 67 +- locales/en/common.json | 73 +- locales/es/common.json | 67 +- locales/fr/common.json | 67 +- locales/it/common.json | 67 +- locales/ja/common.json | 67 +- locales/nl/common.json | 67 +- locales/pt/common.json | 67 +- stores/auth-store.ts | 104 ++- stores/calendar-store.ts | 32 +- stores/contact-store.ts | 30 +- stores/email-store.ts | 64 +- stores/file-store.ts | 8 +- stores/filter-store.ts | 8 +- stores/vacation-store.ts | 6 +- 53 files changed, 4036 insertions(+), 110 deletions(-) create mode 100644 components/tour/tour-overlay.tsx create mode 100644 components/tour/tour-provider.tsx create mode 100644 components/tour/tour-steps.ts create mode 100644 lib/demo/demo-client.ts create mode 100644 lib/demo/demo-data.ts create mode 100644 lib/demo/demo-utils.ts create mode 100644 lib/demo/fixtures/calendars.ts create mode 100644 lib/demo/fixtures/contacts.ts create mode 100644 lib/demo/fixtures/emails.ts create mode 100644 lib/demo/fixtures/files.ts create mode 100644 lib/demo/fixtures/filters.ts create mode 100644 lib/demo/fixtures/identities.ts create mode 100644 lib/demo/fixtures/mailboxes.ts create mode 100644 lib/demo/fixtures/vacation.ts create mode 100644 lib/jmap/client-interface.ts diff --git a/app/[locale]/calendar/page.tsx b/app/[locale]/calendar/page.tsx index 19e41bbc..671b7ffe 100644 --- a/app/[locale]/calendar/page.tsx +++ b/app/[locale]/calendar/page.tsx @@ -795,6 +795,7 @@ export default function CalendarPage() {
+ {t("demo_tagline")} +
++ {t(`error.${error}`) || t("error.generic")} +
++ {t("demo_no_signup")} +
++ {loginCompanyName} +
+ )} + {(loginImprintUrl || loginPrivacyPolicyUrl || loginWebsiteUrl) && ( ++ v{APP_VERSION} +
++ {t("demo_description")} +
+