From 6de1c6f6b7f4b0fc136da914b0c25dcbcab61216 Mon Sep 17 00:00:00 2001
From: adibarra <93070681+adibarra@users.noreply.github.com>
Date: Thu, 19 Mar 2026 22:59:43 -0500
Subject: [PATCH 1/3] re-add GitHub star modal on first load
---
.../app/src/components/github-star-modal.tsx | 111 ++++++++++++++++++
packages/app/src/components/page-content.tsx | 2 +
2 files changed, 113 insertions(+)
create mode 100644 packages/app/src/components/github-star-modal.tsx
diff --git a/packages/app/src/components/github-star-modal.tsx b/packages/app/src/components/github-star-modal.tsx
new file mode 100644
index 0000000..730ac17
--- /dev/null
+++ b/packages/app/src/components/github-star-modal.tsx
@@ -0,0 +1,111 @@
+'use client';
+
+import { track } from '@/lib/analytics';
+import { Star } from 'lucide-react';
+import { useCallback, useEffect, useState } from 'react';
+
+import { GITHUB_OWNER, GITHUB_REPO } from '@semianalysisai/inferencex-constants';
+import { Button } from '@/components/ui/button';
+import {
+ Dialog,
+ DialogContent,
+ DialogDescription,
+ DialogFooter,
+ DialogHeader,
+ DialogTitle,
+} from '@/components/ui/dialog';
+
+const GITHUB_REPO_URL = `https://github.com/${GITHUB_OWNER}/${GITHUB_REPO}`;
+export const STORAGE_KEY = 'inferencex-star-modal-dismissed';
+export const DISMISS_DURATION_MS = 7 * 24 * 60 * 60 * 1000; // 1 week
+
+export function shouldShowModal(): boolean {
+ try {
+ const value = localStorage.getItem(STORAGE_KEY);
+ if (!value) return true;
+ const dismissedAt = Number(value);
+ if (Number.isNaN(dismissedAt)) return true;
+ return Date.now() - dismissedAt >= DISMISS_DURATION_MS;
+ } catch {
+ return false;
+ }
+}
+
+export function saveDismissTimestamp(): void {
+ try {
+ localStorage.setItem(STORAGE_KEY, String(Date.now()));
+ } catch {
+ // localStorage unavailable
+ }
+}
+
+export function GitHubStarModal() {
+ const [open, setOpen] = useState(false);
+ const [ready, setReady] = useState(false);
+
+ useEffect(() => {
+ if (shouldShowModal()) {
+ setOpen(true);
+ track('github_star_modal_shown');
+ }
+ setReady(true);
+ }, []);
+
+ const handleDismiss = useCallback(() => {
+ setOpen(false);
+ saveDismissTimestamp();
+ track('github_star_modal_dismissed');
+ }, []);
+
+ const handleStar = useCallback(() => {
+ window.open(GITHUB_REPO_URL, '_blank', 'noopener,noreferrer');
+ setOpen(false);
+ saveDismissTimestamp();
+ track('github_star_modal_starred');
+ }, []);
+
+ return (
+ <>
+ {ready && }
+
+ >
+ );
+}
diff --git a/packages/app/src/components/page-content.tsx b/packages/app/src/components/page-content.tsx
index b119962..5688bd6 100644
--- a/packages/app/src/components/page-content.tsx
+++ b/packages/app/src/components/page-content.tsx
@@ -10,6 +10,7 @@ import { GpuSpecsContent } from '@/components/gpu-specs/gpu-specs-content';
import GpuMetricsDisplay from '@/components/gpu-power/GpuPowerDisplay';
import HistoricalTrendsDisplay from '@/components/trends/HistoricalTrendsDisplay';
import { ExportNudge } from '@/components/export-nudge';
+import { GitHubStarModal } from '@/components/github-star-modal';
import { StarNudge } from '@/components/star-nudge';
import { InferenceProvider } from '@/components/inference/InferenceContext';
import InferenceChartDisplay from '@/components/inference/ui/ChartDisplay';
@@ -244,6 +245,7 @@ function ChartTabs({ initialTab }: { initialTab: string }) {
export function PageContent({ initialTab = 'inference' }: { initialTab?: string }) {
return (
<>
+
From 383a8ef4de487adaf749146aebeca0e4509e55b3 Mon Sep 17 00:00:00 2001
From: adibarra <93070681+adibarra@users.noreply.github.com>
Date: Fri, 20 Mar 2026 00:43:27 -0500
Subject: [PATCH 2/3] permanently disable star modal after clicking star
---
packages/app/src/components/github-star-modal.tsx | 12 +++++++++++-
1 file changed, 11 insertions(+), 1 deletion(-)
diff --git a/packages/app/src/components/github-star-modal.tsx b/packages/app/src/components/github-star-modal.tsx
index 730ac17..7f88d5a 100644
--- a/packages/app/src/components/github-star-modal.tsx
+++ b/packages/app/src/components/github-star-modal.tsx
@@ -17,10 +17,12 @@ import {
const GITHUB_REPO_URL = `https://github.com/${GITHUB_OWNER}/${GITHUB_REPO}`;
export const STORAGE_KEY = 'inferencex-star-modal-dismissed';
+export const STARRED_KEY = 'inferencex-star-modal-starred';
export const DISMISS_DURATION_MS = 7 * 24 * 60 * 60 * 1000; // 1 week
export function shouldShowModal(): boolean {
try {
+ if (localStorage.getItem(STARRED_KEY)) return false;
const value = localStorage.getItem(STORAGE_KEY);
if (!value) return true;
const dismissedAt = Number(value);
@@ -39,6 +41,14 @@ export function saveDismissTimestamp(): void {
}
}
+export function saveStarred(): void {
+ try {
+ localStorage.setItem(STARRED_KEY, '1');
+ } catch {
+ // localStorage unavailable
+ }
+}
+
export function GitHubStarModal() {
const [open, setOpen] = useState(false);
const [ready, setReady] = useState(false);
@@ -60,7 +70,7 @@ export function GitHubStarModal() {
const handleStar = useCallback(() => {
window.open(GITHUB_REPO_URL, '_blank', 'noopener,noreferrer');
setOpen(false);
- saveDismissTimestamp();
+ saveStarred();
track('github_star_modal_starred');
}, []);
From c8dc45a71d96332b25ad3c720479ce572638fbc3 Mon Sep 17 00:00:00 2001
From: adibarra <93070681+adibarra@users.noreply.github.com>
Date: Fri, 20 Mar 2026 00:45:00 -0500
Subject: [PATCH 3/3] prevent star modal reopening when localStorage
unavailable
---
packages/app/src/components/github-star-modal.tsx | 5 +++++
1 file changed, 5 insertions(+)
diff --git a/packages/app/src/components/github-star-modal.tsx b/packages/app/src/components/github-star-modal.tsx
index 7f88d5a..36c985a 100644
--- a/packages/app/src/components/github-star-modal.tsx
+++ b/packages/app/src/components/github-star-modal.tsx
@@ -20,7 +20,10 @@ export const STORAGE_KEY = 'inferencex-star-modal-dismissed';
export const STARRED_KEY = 'inferencex-star-modal-starred';
export const DISMISS_DURATION_MS = 7 * 24 * 60 * 60 * 1000; // 1 week
+let sessionDismissed = false;
+
export function shouldShowModal(): boolean {
+ if (sessionDismissed) return false;
try {
if (localStorage.getItem(STARRED_KEY)) return false;
const value = localStorage.getItem(STORAGE_KEY);
@@ -63,6 +66,7 @@ export function GitHubStarModal() {
const handleDismiss = useCallback(() => {
setOpen(false);
+ sessionDismissed = true;
saveDismissTimestamp();
track('github_star_modal_dismissed');
}, []);
@@ -70,6 +74,7 @@ export function GitHubStarModal() {
const handleStar = useCallback(() => {
window.open(GITHUB_REPO_URL, '_blank', 'noopener,noreferrer');
setOpen(false);
+ sessionDismissed = true;
saveStarred();
track('github_star_modal_starred');
}, []);