Files
app_umbrix/app/layout.tsx
Umbrix Dev 33b20b979f 🔒 Аудит: безопасность, TypeScript, UI, BottomNav
Безопасность:
- proxy: белый список путей (только /sub/*), POST заблокирован
- console.log заменён на logger (утечки URL/данных)
- OnboardingFlow: убраны --tg-theme-* (не существуют в проекте)

TypeScript (0 ошибок):
- tsconfig target es5→es2017 (regex /u flag fix)
- layout.tsx: viewport перенесён в metadata (Next.js 13.5)
- telegram-webhook: fix text possibly undefined
- hooks/useTelegramWebApp: fix Object possibly undefined
- types/telegram: убрана дублирующая Window декларация

UI:
- BottomNav: новый компонент (Назад/Главная/Помощь)
- safe-area-bottom CSS класс добавлен в globals.css
- dashboard: spacer h-20, toast поднят над BottomNav
- OnboardingFlow: цены 149/249/350₽ (были 200/350/500₽)

Очистка:
- page_NEW.tsx удалён локально (не был в git)
2026-02-08 18:59:02 +03:00

56 lines
1.2 KiB
TypeScript

import './globals.css';
import type { Metadata } from 'next';
import { Inter } from 'next/font/google';
import BottomNav from '@/components/BottomNav';
const inter = Inter({ subsets: ['latin'] });
export const metadata: Metadata = {
title: 'Umbrix VPN',
description: 'Быстрый и безопасный VPN сервис',
themeColor: '#191f23',
viewport: {
width: 'device-width',
initialScale: 1,
maximumScale: 1,
userScalable: false,
},
openGraph: {
title: 'Umbrix VPN',
description: 'Быстрый и безопасный VPN сервис',
images: [
{
url: 'https://bolt.new/static/og_default.png',
},
],
},
twitter: {
card: 'summary_large_image',
title: 'Umbrix VPN',
description: 'Быстрый и безопасный VPN сервис',
images: [
{
url: 'https://bolt.new/static/og_default.png',
},
],
},
};
export default function RootLayout({
children,
}: {
children: React.ReactNode;
}) {
return (
<html lang="en">
<head>
<script src="https://telegram.org/js/telegram-web-app.js" async></script>
</head>
<body className={inter.className}>
{children}
<BottomNav />
</body>
</html>
);
}