diff --git a/packages/app/cypress.config.ts b/packages/app/cypress.config.ts
index 6d530adf..22ab95a1 100644
--- a/packages/app/cypress.config.ts
+++ b/packages/app/cypress.config.ts
@@ -19,7 +19,7 @@ export default defineConfig({
testIsolation: false,
baseUrl: 'http://localhost:3000',
specPattern: 'cypress/e2e/**/*.cy.ts',
- supportFile: false,
+ supportFile: 'cypress/support/e2e.ts',
setupNodeEvents(on, config) {
on(
'file:preprocessor',
diff --git a/packages/app/cypress/support/e2e.ts b/packages/app/cypress/support/e2e.ts
new file mode 100644
index 00000000..d8209e33
--- /dev/null
+++ b/packages/app/cypress/support/e2e.ts
@@ -0,0 +1,16 @@
+/**
+ * Global e2e setup. Loaded before every `cy.visit` via `supportFile` in
+ * `cypress.config.ts`.
+ *
+ * Snoozes the feedback-modal nudge so it doesn't render its centered modal
+ * + backdrop on top of the UI under test. Specs that want to exercise the
+ * feedback-modal flow can clear `inferencex-feedback-modal-snoozed` in their
+ * own `onBeforeLoad`.
+ */
+Cypress.on('window:before:load', (win) => {
+ try {
+ win.localStorage.setItem('inferencex-feedback-modal-snoozed', String(Date.now()));
+ } catch {
+ // localStorage unavailable — fine, the test will just see the modal.
+ }
+});
diff --git a/packages/app/src/components/feedback-modal.tsx b/packages/app/src/components/feedback-modal.tsx
index 56a80129..990e2867 100644
--- a/packages/app/src/components/feedback-modal.tsx
+++ b/packages/app/src/components/feedback-modal.tsx
@@ -105,7 +105,7 @@ export function FeedbackForm({ onDismiss }: FeedbackFormProps) {
Help us improve InferenceX
- You're a regular! We'd love to hear what's working and what isn't.
+ We'd love to hear what's working and what isn't.
diff --git a/packages/app/src/components/nudge-engine.tsx b/packages/app/src/components/nudge-engine.tsx
index 6108311a..ef066307 100644
--- a/packages/app/src/components/nudge-engine.tsx
+++ b/packages/app/src/components/nudge-engine.tsx
@@ -355,15 +355,20 @@ function ModalRenderer({
const { content } = def;
const Icon = content.icon;
const idPrefix = def.id;
+ const centered = content.centered;
- return (
+ const dialog = (