diff --git a/apps/web/public/icon-192x192.png b/apps/web/public/icon-192x192.png index 7cb8a480..ca3a5232 100644 Binary files a/apps/web/public/icon-192x192.png and b/apps/web/public/icon-192x192.png differ diff --git a/apps/web/public/icon-512x512.png b/apps/web/public/icon-512x512.png index 7cb8a480..ca3a5232 100644 Binary files a/apps/web/public/icon-512x512.png and b/apps/web/public/icon-512x512.png differ diff --git a/apps/web/public/manifest.json b/apps/web/public/manifest.json index 3f4142eb..453c7334 100644 --- a/apps/web/public/manifest.json +++ b/apps/web/public/manifest.json @@ -4,8 +4,7 @@ "description": "A collection of developer tools for everyday use.", "start_url": "/", "display": "standalone", - "background_color": "#ffffff", - "theme_color": "#000000", + "background_color": "#0a0b12", "icons": [ { "src": "/icon-192x192.png", diff --git a/apps/web/src/app/globals.css b/apps/web/src/app/globals.css index 34ad86ec..5ab536f3 100644 --- a/apps/web/src/app/globals.css +++ b/apps/web/src/app/globals.css @@ -1845,3 +1845,14 @@ html { overflow-x: hidden; } /* dashboard editor caret */ .mdt-dash-caret { background: var(--mdt-cyan); box-shadow: 0 0 8px var(--mdt-cyan); border-radius: 1px; animation: mdt-caret-blink 1.1s steps(2) infinite; } @keyframes mdt-caret-blink { 50% { opacity: 0; } } + +/* ============================================ + iOS INPUT AUTO-ZOOM PREVENTION + ============================================ */ +@media (max-width: 640px) { + input, + textarea, + select { + font-size: 16px !important; + } +} diff --git a/apps/web/src/app/help/page.tsx b/apps/web/src/app/help/page.tsx index 9c1274a2..4d1febab 100644 --- a/apps/web/src/app/help/page.tsx +++ b/apps/web/src/app/help/page.tsx @@ -108,7 +108,7 @@ export default function HelpPage() { const tTools = useTranslations('Dashboard.tools') return ( -
+

diff --git a/apps/web/src/app/profile/page.tsx b/apps/web/src/app/profile/page.tsx index 90141c09..d8ecd35e 100644 --- a/apps/web/src/app/profile/page.tsx +++ b/apps/web/src/app/profile/page.tsx @@ -21,8 +21,10 @@ import { AtSign, Github, ChevronDown, + ChevronRight, FileDown, } from 'lucide-react' +import { useActiveOrg, useActiveWorkspace } from '@/store/workspace-store' import { Avatar, AvatarFallback, AvatarImage } from '@/components/ui/avatar' import Link from 'next/link' import { Input } from '@/components/ui/input' @@ -57,6 +59,8 @@ import { export default function ProfilePage() { const t = useTranslations('SettingsPage') const { user } = useAuth() + const activeOrg = useActiveOrg() + const activeWorkspace = useActiveWorkspace() const [mounted, setMounted] = useState(false) const [username, setUsername] = useState(null) const [editUsernameVal, setEditUsernameVal] = useState('') @@ -253,10 +257,19 @@ export default function ProfilePage() { {/* ── Page header ── */}
-

- - Developer identity -

+ {activeOrg && activeWorkspace ? ( +

+ + {activeOrg.name} + + {activeWorkspace.name} +

+ ) : ( +

+ + Developer identity +

+ )}

Your Profile

Manage your identity and developer portfolio.

diff --git a/apps/web/src/app/settings/page.tsx b/apps/web/src/app/settings/page.tsx index 3a55f17c..73c516bb 100644 --- a/apps/web/src/app/settings/page.tsx +++ b/apps/web/src/app/settings/page.tsx @@ -17,6 +17,8 @@ import { useRouter } from 'next/navigation' import { COLOR_THEME_OPTIONS, type ColorTheme, useColorTheme } from '@/hooks/use-color-theme' import { getToolMessageKey } from '@/lib/tool-i18n' import { PasskeySection } from '@/components/settings/passkey-section' +import { useActiveOrg, useActiveWorkspace } from '@/store/workspace-store' +import { Briefcase, ChevronRight } from 'lucide-react' const colorDisplay: Record = { cyan: { swatchClass: 'bg-cyan-500', name: 'Teal' }, blue: { swatchClass: 'bg-blue-500', name: 'Blue' }, @@ -36,6 +38,8 @@ export default function SettingsPage() { const { theme, setTheme } = useTheme() const { colorTheme, setColorTheme } = useColorTheme() const { isToolEnabled, toggleTool } = useToolVisibility() + const activeOrg = useActiveOrg() + const activeWorkspace = useActiveWorkspace() const [mounted, setMounted] = useState(false) useEffect(() => { @@ -54,10 +58,19 @@ export default function SettingsPage() { return (
-

- - Workspace -

+ {activeOrg && activeWorkspace ? ( +

+ + {activeOrg.name} + + {activeWorkspace.name} +

+ ) : ( +

+ + Workspace +

+ )}

{t('title')}

{t('subtitle')}

diff --git a/apps/web/src/components/header.tsx b/apps/web/src/components/header.tsx index d576f3db..43840659 100644 --- a/apps/web/src/components/header.tsx +++ b/apps/web/src/components/header.tsx @@ -71,7 +71,7 @@ export function Header({ showThemeToggle = true }: HeaderProps) { return (
setIsMenuOpen(!isMenuOpen)} aria-expanded={isMenuOpen} aria-label={isMenuOpen ? "Close menu" : "Open menu"} diff --git a/apps/web/src/components/logo.tsx b/apps/web/src/components/logo.tsx index 41df0f9a..f0018f86 100644 --- a/apps/web/src/components/logo.tsx +++ b/apps/web/src/components/logo.tsx @@ -27,7 +27,7 @@ export function Logo({ size = 32, className = '', showText = true }: LogoProps) />
{showText && ( -
+
{ + if (!applies) return + setDismissed(sessionStorage.getItem(storageKey) === '1') + }, [applies, storageKey]) + + if (!applies || dismissed) return null + + return ( +
+ +

+ This tool works best on a larger screen. You can keep going on mobile, but expect a tight fit. +

+ +
+ ) +} diff --git a/apps/web/src/components/mobile-nav.tsx b/apps/web/src/components/mobile-nav.tsx index d11ddd19..9829e7f9 100644 --- a/apps/web/src/components/mobile-nav.tsx +++ b/apps/web/src/components/mobile-nav.tsx @@ -106,7 +106,7 @@ export function MobileNav() { return (