Skip to content

Pre-Release#513

Merged
felix-schultz merged 10 commits intoalphafrom
dev
Feb 15, 2026
Merged

Pre-Release#513
felix-schultz merged 10 commits intoalphafrom
dev

Conversation

@felix-schultz
Copy link
Copy Markdown
Member

This pull request primarily refactors the error handling UI and removes several unused components from the store section of the desktop app, while also updating Sentry dependencies. The most significant changes are the introduction of a custom error page, removal of unused store components, and a dependency update for Sentry.

Error Handling Improvements

  • Added a new custom error page in apps/desktop/app/error.tsx that captures exceptions with Sentry and provides user-friendly "Go Back" and "Reload" actions.
  • Replaced the default Next.js error page in apps/desktop/app/global-error.tsx with a custom-styled error UI, removing the dependency on NextError.

Codebase Cleanup (Store Components)

  • Removed unused store UI components: AboutSection.tsx, StoreHero.tsx, StoreInfo.tsx, and StoreRecommendations.tsx, reducing codebase complexity and potential maintenance overhead. [1] [2] [3] [4]

Dependency Updates

  • Upgraded Sentry-related dependencies in Cargo.toml to version 0.46.2 and enabled the anyhow feature for improved error reporting.

Minor UI/Code Quality Tweaks

  • Adjusted the <html> element in apps/desktop/app/layout.tsx to include a min-h-screen class for improved layout consistency.
  • Minor formatting and dependency array cleanup in apps/desktop/app/library/config/layout.tsx for better readability and maintainability. [1] [2]

felix-schultz and others added 10 commits February 13, 2026 12:20
- Refactored JSON schemas in desktop and macOS to improve structure and maintainability by reordering properties and removing redundant definitions.
- Updated the version of @sentry/nextjs to ^10.38.0 in web, ui, and root package.json files to ensure compatibility and access to the latest features and fixes.
Enhance iOS overscroll support with layout adjustments and safe area …
… for better structure

- Updated LoadingScreen component to include dynamic tips and hints during loading.
- Refactored FlowLogo and TipCard components for improved readability and maintainability.
- Introduced useThemeGradient hook for theme management and gradient generation.
- Added size prop to ShareButton for better customization.
- Cleaned up unused code and optimized existing functionality.
@felix-schultz felix-schultz merged commit 9736380 into alpha Feb 15, 2026
7 of 17 checks passed
@gemini-code-assist
Copy link
Copy Markdown

Summary of Changes

Hello @felix-schultz, I'm Gemini Code Assist1! I'm currently reviewing this pull request and will post my feedback shortly. In the meantime, here's a summary to help you and other reviewers quickly get up to speed!

This pull request focuses on improving the application's stability, maintainability, and user experience through a series of targeted refactorings and updates. Key efforts include overhauling error handling with custom pages and Sentry integration, streamlining the codebase by removing obsolete store UI components, and updating critical Sentry dependencies. Furthermore, it consolidates UI logic for core pages into a shared library, enhances chart rendering with theme support, and introduces robust page synchronization capabilities.

Highlights

  • Enhanced Error Handling UI: Introduced a custom error page (apps/desktop/app/error.tsx, apps/web/app/error.tsx) that integrates with Sentry for exception capture and provides user-friendly recovery options. The default Next.js global error page has been replaced with a custom-styled UI.
  • Significant Codebase Cleanup: Removed numerous unused UI components and associated logic from the store section of both desktop and web applications, including AboutSection.tsx, StoreHero.tsx, StoreInfo.tsx, StoreRecommendations.tsx, StoreSkeletons.tsx, Visibility.tsx, and useStoreData.ts. This reduces complexity and maintenance overhead.
  • Dependency Updates: Upgraded Sentry-related dependencies across the project (Cargo.toml, Cargo.lock, package.json) to version 0.46.2, enabling the anyhow feature for improved Rust error reporting and @sentry/nextjs to ^10.38.0.
  • UI Component Consolidation and Refactoring: Refactored the Library and Store pages in both desktop and web applications to leverage new, shared UI components from the @tm9657/flow-like-ui package, promoting consistency and reusability.
  • Improved Chart Theming: Integrated theme awareness into Nivo and Plotly chart previews, ensuring charts adapt correctly to light and dark modes.
  • Enhanced Page Synchronization: Implemented server synchronization logic for page operations (get, create, update, delete) in page-state.ts, ensuring data consistency between local and remote states.
  • Refreshed Loading Screen UI: Completely redesigned the loading screen with new animations and dynamic tip/hint cards to improve user experience during startup.
Changelog
  • Cargo.lock
    • Updated Sentry, proc-macro-crate, base64, itertools, and reqwest dependency versions.
  • Cargo.toml
    • Updated Sentry and sentry-tracing versions to 0.46.2.
    • Enabled the anyhow feature for the Sentry dependency.
  • apps/desktop/app/error.tsx
    • Added a new custom error page for the desktop application.
  • apps/desktop/app/global-error.tsx
    • Removed the NextError import.
    • Replaced the default Next.js error page with a custom-styled error UI.
  • apps/desktop/app/layout.tsx
    • Added the min-h-screen class to the <html> element for improved layout consistency.
  • apps/desktop/app/library/config/layout.tsx
    • Applied minor formatting adjustments.
    • Cleaned up a dependency array.
  • apps/desktop/app/library/page.tsx
    • Refactored the page to utilize the new LibraryPage component from @tm9657/flow-like-ui.
  • apps/desktop/app/store/components/AboutSection.tsx
    • Removed the file as its functionality was moved to a shared UI component.
  • apps/desktop/app/store/components/StoreHero.tsx
    • Removed the file as its functionality was moved to a shared UI component.
  • apps/desktop/app/store/components/StoreInfo.tsx
    • Removed the file as its functionality was moved to a shared UI component.
  • apps/desktop/app/store/components/StoreRecommendations.tsx
    • Removed the file as its functionality was moved to a shared UI component.
  • apps/desktop/app/store/components/StoreSkeletons.tsx
    • Removed the file as its functionality was moved to a shared UI component.
  • apps/desktop/app/store/explore/apps/page.tsx
    • Refactored the page to utilize the new ExploreAppsPage component from @tm9657/flow-like-ui.
  • apps/desktop/app/store/packages/page.tsx
    • Refactored the page to utilize the new PackagesStorePage component from @tm9657/flow-like-ui.
  • apps/desktop/app/store/page.tsx
    • Refactored the page to utilize shared store components from @tm9657/flow-like-ui.
  • apps/desktop/components/app-sidebar.tsx
    • Removed IOSQuickMenuTrigger component.
    • Adjusted styling for main and SidebarInset elements.
  • apps/desktop/components/auth-provider.tsx
    • Applied minor formatting changes.
  • apps/desktop/components/ios-webview-hardening.tsx
    • Applied minor formatting changes.
    • Removed redundant event listeners.
  • apps/desktop/components/tauri-provider.tsx
    • Applied minor formatting changes.
  • apps/desktop/components/tauri-provider/page-state.ts
    • Added pushPageToServer and fetchRemotePage methods for server synchronization.
    • Updated getPage, createPage, updatePage, and deletePage methods to include server synchronization logic.
  • apps/desktop/package.json
    • Updated @sentry/nextjs dependency to ^10.38.0.
  • apps/desktop/src-tauri/Cargo.toml
    • Updated Sentry and sentry-tracing dependencies to use workspace versions.
  • apps/desktop/src-tauri/gen/schemas/desktop-schema.json
    • Reordered properties within OpenerUrl, OpenerPath, ShellScopeEntryAllowedCommand, ShellScopeEntryAllowedSidecar, and ShellScopeEntryAllowedScript definitions.
    • Removed the ShellScopeEntryAllowedArgs definition (moved to a different location).
  • apps/desktop/src-tauri/gen/schemas/macOS-schema.json
    • Reordered properties within OpenerUrl, OpenerPath, ShellScopeEntryAllowedCommand, ShellScopeEntryAllowedSidecar, and ShellScopeEntryAllowedScript definitions.
    • Removed the ShellScopeEntryAllowedArgs definition (moved to a different location).
  • apps/web/app/error.tsx
    • Added a new custom error page for the web application.
  • apps/web/app/global-error.tsx
    • Removed the NextError import.
    • Replaced the default Next.js error page with a custom-styled error UI.
  • apps/web/app/library/config/events/page.tsx
    • Applied minor formatting changes.
  • apps/web/app/library/config/layout.tsx
    • Applied minor formatting adjustments.
    • Cleaned up a dependency array.
  • apps/web/app/library/config/pages/page.tsx
    • Applied minor formatting changes.
  • apps/web/app/library/page.tsx
    • Refactored the page to utilize the new LibraryPage component from @tm9657/flow-like-ui.
  • apps/web/app/store/components/AboutSection.tsx
    • Removed the file as its functionality was moved to a shared UI component.
  • apps/web/app/store/components/StoreHero.tsx
    • Removed the file as its functionality was moved to a shared UI component.
  • apps/web/app/store/components/StoreInfo.tsx
    • Removed the file as its functionality was moved to a shared UI component.
  • apps/web/app/store/components/StoreRecommendations.tsx
    • Removed the file as its functionality was moved to a shared UI component.
  • apps/web/app/store/components/StoreSkeletons.tsx
    • Removed the file as its functionality was moved to a shared UI component.
  • apps/web/app/store/components/Visibility.tsx
    • Removed the file as its functionality was moved to a shared UI component.
  • apps/web/app/store/components/useStoreData.ts
    • Removed the file as its logic was moved to a shared UI package.
  • apps/web/app/store/explore/apps/page.tsx
    • Refactored the page to utilize the new ExploreAppsPage component from @tm9657/flow-like-ui.
  • apps/web/app/store/packages/page.tsx
    • Refactored the page to utilize the new PackagesStorePage component from @tm9657/flow-like-ui.
  • apps/web/app/store/page.tsx
    • Refactored the page to utilize shared store components from @tm9657/flow-like-ui.
  • apps/web/components/app-sidebar.tsx
    • Applied minor formatting changes.
  • apps/web/lib/oauth-service.ts
    • Applied minor formatting changes.
  • apps/web/package.json
    • Added @dnd-kit/sortable and @dnd-kit/utilities dependencies.
    • Updated @sentry/nextjs dependency.
    • Added overrides for @sentry/nextjs.
  • apps/web/public/.well-known/assetlinks.json
    • Applied minor formatting changes.
  • apps/website/src/components/backend-provider.tsx
    • Reordered type imports.
  • apps/website/src/i18n/locales/pages/data-deletion-en.ts
    • Applied minor formatting changes.
  • apps/website/src/i18n/locales/pages/data-deletion-es.ts
    • Applied minor formatting changes.
  • apps/website/src/i18n/locales/pages/data-deletion-fr.ts
    • Applied minor formatting changes.
  • apps/website/src/i18n/locales/pages/data-deletion-it.ts
    • Applied minor formatting changes.
  • apps/website/src/i18n/locales/pages/data-deletion-ja.ts
    • Applied minor formatting changes.
  • apps/website/src/i18n/locales/pages/data-deletion-ko.ts
    • Applied minor formatting changes.
  • apps/website/src/i18n/locales/pages/data-deletion-nl.ts
    • Applied minor formatting changes.
  • apps/website/src/i18n/locales/pages/data-deletion-pt.ts
    • Applied minor formatting changes.
  • apps/website/src/i18n/locales/pages/data-deletion-sv.ts
    • Applied minor formatting changes.
  • apps/website/src/i18n/locales/pages/data-deletion-zh.ts
    • Applied minor formatting changes.
  • apps/website/src/lib/seo.ts
    • Applied minor formatting changes.
  • apps/website/src/pages/rss.xml.js
    • Applied minor formatting changes.
  • package.json
    • Added overrides for @sentry/nextjs.
  • packages/ui/components/editor/ui/chart-nivo-preview.tsx
    • Integrated theme awareness for Nivo charts.
    • Updated default theme and label text color modifiers based on dark mode.
  • packages/ui/components/editor/ui/chart-plotly-preview.tsx
    • Integrated theme awareness for Plotly charts.
    • Applied themed colors to various layout elements like fonts, backgrounds, and axes.
  • packages/ui/components/index.ts
    • Exported new library components.
  • packages/ui/components/interfaces/chat-default.tsx
    • Adjusted padding for safe areas in chat history.
    • Applied minor formatting changes.
  • packages/ui/components/interfaces/chat-default/chat.tsx
    • Adjusted styling for the chat main and chatbox elements to improve mobile and safe area handling.
  • packages/ui/components/interfaces/chat-default/history.tsx
    • Adjusted padding for safe areas in chat history header.
  • packages/ui/components/library/index.ts
    • Added new file, exporting library components.
  • packages/ui/components/library/library-page.tsx
    • Added new file, implementing the new shared library page UI.
  • packages/ui/components/library/library-sub-components.tsx
    • Added new file, implementing sub-components for the library page, including drag-and-drop functionality for favorites.
  • packages/ui/components/library/library-types.ts
    • Added new file, defining types and constants for the library.
  • packages/ui/components/library/use-grid-columns.ts
    • Added new file, providing a hook for dynamic grid column calculation.
  • packages/ui/components/pages/store/store-package-detail.tsx
    • Exported the GenericFetcher type.
  • packages/ui/components/store/about-section.tsx
    • Added new file, implementing the new about section UI for the store.
  • packages/ui/components/store/explore-apps-page.tsx
    • Added new file, implementing the new shared explore apps page UI.
  • packages/ui/components/store/index.ts
    • Exported new store components.
  • packages/ui/components/store/packages-store-page.tsx
    • Added new file, implementing the new shared packages store page UI.
  • packages/ui/components/store/store-hero.tsx
    • Added new file, implementing the new store hero UI.
  • packages/ui/components/store/store-recommendations.tsx
    • Added new file, implementing the new store recommendations UI.
  • packages/ui/components/store/store-skeletons.tsx
    • Added new file, implementing new store skeleton and empty state UI.
  • packages/ui/components/store/use-store-data.ts
    • Added new file, moving store data fetching logic here.
  • packages/ui/components/store/visibility.tsx
    • Added new file, moving visibility logic here.
  • packages/ui/components/ui/app-card.tsx
    • Added theme gradient generation for app cards.
    • Applied minor styling adjustments.
  • packages/ui/components/ui/loading-screen.tsx
    • Refactored the loading screen UI with new animations and dynamic tip/hint cards.
  • packages/ui/components/ui/model-card.tsx
    • Applied minor formatting changes.
  • packages/ui/components/ui/model-detail-sheet.tsx
    • Applied minor formatting changes.
  • packages/ui/components/ui/share-button.tsx
    • Added a size prop to the ShareButton component.
  • packages/ui/components/ui/sidebar.tsx
    • Adjusted padding for safe areas in the sidebar.
  • packages/ui/global.css
    • Adjusted safe area CSS variables.
    • Added bg-background class to the html element.
    • Updated desktop app hardening styles for better layout and overflow handling.
  • packages/ui/hooks/index.ts
    • Exported use-mobile and use-theme-gradient hooks.
  • packages/ui/hooks/use-theme-gradient.ts
    • Added new file, providing a hook for theme information and gradient generation.
  • packages/ui/lib/oauth/service.ts
    • Applied minor formatting changes.
  • packages/ui/package.json
    • Updated @sentry/nextjs dependency to ^10.38.0.
  • packages/ui/state/log-aggregation-state.ts
    • Applied minor formatting changes.
Using Gemini Code Assist

The full guide for Gemini Code Assist can be found on our documentation page, here are some quick tips.

Invoking Gemini

You can request assistance from Gemini at any point by creating a comment using either /gemini <command> or @gemini-code-assist <command>. Below is a summary of the supported commands on the current page.

Feature Command Description
Code Review /gemini review Performs a code review for the current pull request in its current state.
Pull Request Summary /gemini summary Provides a summary of the current pull request in its current state.
Comment @gemini-code-assist Responds in comments when explicitly tagged, both in pull request comments and review comments.
Help /gemini help Displays a list of available commands.

Customization

To customize Gemini Code Assist for GitHub experience, repository maintainers can create a configuration file and/or provide a custom code review style guide (such as PEP-8 for Python) by creating and adding files to a .gemini/ folder in the base of the repository. Detailed instructions can be found here.

Limitations & Feedback

Gemini Code Assist may make mistakes. Please leave feedback on any instances where its feedback is incorrect or counter productive. You can react with 👍 and 👎 on @gemini-code-assist comments. If you're interested in giving your feedback about your experience with Gemini Code Assist for Github and other Google products, sign up here.

You can also get AI-powered code generation, chat, as well as code reviews directly in the IDE at no cost with the Gemini Code Assist IDE Extension.

Footnotes

  1. Review the Privacy Notices, Generative AI Prohibited Use Policy, Terms of Service, and learn how to configure Gemini Code Assist in GitHub here. Gemini can make mistakes, so double check it and use code with caution.

Copy link
Copy Markdown

@gemini-code-assist gemini-code-assist bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request is a significant and well-executed refactoring. It centralizes many UI components from the desktop and web applications into the shared packages/ui library, which greatly improves code reuse and maintainability. The introduction of new, polished components for the Library, Store, and loading screens is a major UX enhancement. The Sentry dependency updates and the addition of server-side synchronization for page state are also valuable improvements. My feedback includes a couple of suggestions to enhance maintainability and fix a potential bug related to UI updates after importing an app.

Comment on lines +76 to +92
const importApp = useCallback(async (path: string) => {
if (path.toLowerCase().endsWith(".enc.flow-app")) {
setEncryptedImportPath(path);
setImportDialogOpen(true);
return;
}
const toastId = toast.loading("Importing app...", {
description: "Please wait.",
});
try {
await invoke("import_app_from_file", { path });
toast.success("App imported successfully!", { id: toastId });
} catch (err) {
console.error(err);
toast.error("Failed to import app", { id: toastId });
}
}, []);
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

high

The importApp function handles importing a non-encrypted app file. After a successful import, it shows a success toast, but it doesn't seem to trigger a refetch of the app list. This will result in the UI not updating to show the newly imported app until the user manually refreshes or navigates away and back. You should invalidate the relevant queries using useQueryClient to ensure the library view updates automatically.

Suggested change
const importApp = useCallback(async (path: string) => {
if (path.toLowerCase().endsWith(".enc.flow-app")) {
setEncryptedImportPath(path);
setImportDialogOpen(true);
return;
}
const toastId = toast.loading("Importing app...", {
description: "Please wait.",
});
try {
await invoke("import_app_from_file", { path });
toast.success("App imported successfully!", { id: toastId });
} catch (err) {
console.error(err);
toast.error("Failed to import app", { id: toastId });
}
}, []);
const importApp = useCallback(async (path: string) => {
if (path.toLowerCase().endsWith(".enc.flow-app")) {
setEncryptedImportPath(path);
setImportDialogOpen(true);
return;
}
const toastId = toast.loading("Importing app...", {
description: "Please wait.",
});
try {
await invoke("import_app_from_file", { path });
toast.success("App imported successfully!", { id: toastId });
await queryClient.invalidateQueries();
} catch (err) {
console.error(err);
toast.error("Failed to import app", { id: toastId });
}
}, [queryClient]);

Comment on lines +18 to +70
<div
style={{
display: "flex",
flexDirection: "column",
alignItems: "center",
justifyContent: "center",
minHeight: "100vh",
gap: "24px",
padding: "24px",
fontFamily: "system-ui, sans-serif",
background: "#0a0a0a",
color: "#fafafa",
}}
>
<h2 style={{ fontSize: "1.5rem", fontWeight: 600 }}>
Something went wrong
</h2>
<p style={{ fontSize: "0.875rem", color: "#a1a1aa" }}>
An unexpected error occurred.
</p>
<div style={{ display: "flex", gap: "12px" }}>
<button
type="button"
onClick={() => window.history.back()}
style={{
padding: "8px 16px",
fontSize: "0.875rem",
borderRadius: "6px",
border: "1px solid #27272a",
background: "transparent",
color: "#fafafa",
cursor: "pointer",
}}
>
Go Back
</button>
<button
type="button"
onClick={() => window.location.reload()}
style={{
padding: "8px 16px",
fontSize: "0.875rem",
borderRadius: "6px",
border: "none",
background: "#fafafa",
color: "#0a0a0a",
cursor: "pointer",
}}
>
Reload
</button>
</div>
</div>
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

The inline styles for the error page are quite verbose, which can make the component harder to read and maintain. While using inline styles for a global error page is a reasonable fallback to avoid CSS dependency issues, extracting these styles into constant objects at the top of the file would significantly improve readability and make the JSX tree cleaner.

For example:

const containerStyle: React.CSSProperties = {
  display: "flex",
  flexDirection: "column",
  alignItems: "center",
  // ... other styles
};

// ... in component:
<div style={containerStyle}>
  {/* ... */}
</div>

Comment on lines +18 to +70
<div
style={{
display: "flex",
flexDirection: "column",
alignItems: "center",
justifyContent: "center",
minHeight: "100vh",
gap: "24px",
padding: "24px",
fontFamily: "system-ui, sans-serif",
background: "#0a0a0a",
color: "#fafafa",
}}
>
<h2 style={{ fontSize: "1.5rem", fontWeight: 600 }}>
Something went wrong
</h2>
<p style={{ fontSize: "0.875rem", color: "#a1a1aa" }}>
An unexpected error occurred.
</p>
<div style={{ display: "flex", gap: "12px" }}>
<button
type="button"
onClick={() => window.history.back()}
style={{
padding: "8px 16px",
fontSize: "0.875rem",
borderRadius: "6px",
border: "1px solid #27272a",
background: "transparent",
color: "#fafafa",
cursor: "pointer",
}}
>
Go Back
</button>
<button
type="button"
onClick={() => window.location.reload()}
style={{
padding: "8px 16px",
fontSize: "0.875rem",
borderRadius: "6px",
border: "none",
background: "#fafafa",
color: "#0a0a0a",
cursor: "pointer",
}}
>
Reload
</button>
</div>
</div>
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

The inline styles for the error page are quite verbose, which can make the component harder to read and maintain. While using inline styles for a global error page is a reasonable fallback to avoid CSS dependency issues, extracting these styles into constant objects at the top of the file would significantly improve readability and make the JSX tree cleaner.

For example:

const containerStyle: React.CSSProperties = {
  display: "flex",
  flexDirection: "column",
  alignItems: "center",
  // ... other styles
};

// ... in component:
<div style={containerStyle}>
  {/* ... */}
</div>

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant