diff --git a/public/fonts/america-bold.woff2 b/public/fonts/america-bold.woff2 deleted file mode 100644 index a5cdbf5..0000000 Binary files a/public/fonts/america-bold.woff2 and /dev/null differ diff --git a/public/fonts/america-medium.woff2 b/public/fonts/america-medium.woff2 deleted file mode 100644 index 275f1a9..0000000 Binary files a/public/fonts/america-medium.woff2 and /dev/null differ diff --git a/public/fonts/font_index.ts b/public/fonts/font_index.ts index c88370e..91ce81b 100644 --- a/public/fonts/font_index.ts +++ b/public/fonts/font_index.ts @@ -7,11 +7,6 @@ export const america = localFont({ weight: "400", style: "normal", }, - // { - // path: "./america-medium.woff2", - // weight: "500", - // style: "normal", - // }, ], display: "swap", variable: "--font-america", diff --git a/public/images/companion-preview-dark.webp b/public/images/companion-preview-dark.webp new file mode 100644 index 0000000..009bf5b Binary files /dev/null and b/public/images/companion-preview-dark.webp differ diff --git a/public/images/companion-preview-light.webp b/public/images/companion-preview-light.webp new file mode 100644 index 0000000..8000352 Binary files /dev/null and b/public/images/companion-preview-light.webp differ diff --git a/public/images/dashboard-preview-dark.webp b/public/images/dashboard-preview-dark.webp index 4283f20..5342e8a 100644 Binary files a/public/images/dashboard-preview-dark.webp and b/public/images/dashboard-preview-dark.webp differ diff --git a/public/images/dashboard-preview-light.webp b/public/images/dashboard-preview-light.webp index d3ebf36..04635ea 100644 Binary files a/public/images/dashboard-preview-light.webp and b/public/images/dashboard-preview-light.webp differ diff --git a/public/images/logo_small.png b/public/images/logo_small.png index 25a436a..cea70fe 100644 Binary files a/public/images/logo_small.png and b/public/images/logo_small.png differ diff --git a/public/images/openmonetis_companion.webp b/public/images/openmonetis_companion.webp deleted file mode 100644 index 2acda8f..0000000 Binary files a/public/images/openmonetis_companion.webp and /dev/null differ diff --git a/public/images/openmonetis_pwa.webp b/public/images/openmonetis_pwa.webp new file mode 100644 index 0000000..7af2099 Binary files /dev/null and b/public/images/openmonetis_pwa.webp differ diff --git a/public/images/preview-calendario-dark.webp b/public/images/preview-calendario-dark.webp index 1dbe73a..eed9842 100644 Binary files a/public/images/preview-calendario-dark.webp and b/public/images/preview-calendario-dark.webp differ diff --git a/public/images/preview-calendario-light.webp b/public/images/preview-calendario-light.webp index e37a246..06492fc 100644 Binary files a/public/images/preview-calendario-light.webp and b/public/images/preview-calendario-light.webp differ diff --git a/public/images/preview-cartao-dark.webp b/public/images/preview-cartao-dark.webp index 1cf246d..f212ef1 100644 Binary files a/public/images/preview-cartao-dark.webp and b/public/images/preview-cartao-dark.webp differ diff --git a/public/images/preview-cartao-light.webp b/public/images/preview-cartao-light.webp index 731d6f0..9c1d1cc 100644 Binary files a/public/images/preview-cartao-light.webp and b/public/images/preview-cartao-light.webp differ diff --git a/public/images/preview-lancamentos-dark.webp b/public/images/preview-lancamentos-dark.webp index d6516f4..cab1f3b 100644 Binary files a/public/images/preview-lancamentos-dark.webp and b/public/images/preview-lancamentos-dark.webp differ diff --git a/public/images/preview-lancamentos-light.webp b/public/images/preview-lancamentos-light.webp index 391a3e7..4686e53 100644 Binary files a/public/images/preview-lancamentos-light.webp and b/public/images/preview-lancamentos-light.webp differ diff --git a/public/images/preview-orcamentos-dark.webp b/public/images/preview-orcamentos-dark.webp new file mode 100644 index 0000000..26a177c Binary files /dev/null and b/public/images/preview-orcamentos-dark.webp differ diff --git a/public/images/preview-orcamentos-light.webp b/public/images/preview-orcamentos-light.webp new file mode 100644 index 0000000..7f11e01 Binary files /dev/null and b/public/images/preview-orcamentos-light.webp differ diff --git a/public/images/preview-parcelas-dark.webp b/public/images/preview-parcelas-dark.webp new file mode 100644 index 0000000..46999b9 Binary files /dev/null and b/public/images/preview-parcelas-dark.webp differ diff --git a/public/images/preview-parcelas-light.webp b/public/images/preview-parcelas-light.webp new file mode 100644 index 0000000..492c999 Binary files /dev/null and b/public/images/preview-parcelas-light.webp differ diff --git a/public/images/preview-pre-lancamentos-dark.webp b/public/images/preview-pre-lancamentos-dark.webp new file mode 100644 index 0000000..bf0e601 Binary files /dev/null and b/public/images/preview-pre-lancamentos-dark.webp differ diff --git a/public/images/preview-pre-lancamentos-light.webp b/public/images/preview-pre-lancamentos-light.webp new file mode 100644 index 0000000..3615e13 Binary files /dev/null and b/public/images/preview-pre-lancamentos-light.webp differ diff --git a/public/images/pwa-preview-dark.webp b/public/images/pwa-preview-dark.webp new file mode 100644 index 0000000..c015f1a Binary files /dev/null and b/public/images/pwa-preview-dark.webp differ diff --git a/public/images/pwa-preview-light.webp b/public/images/pwa-preview-light.webp new file mode 100644 index 0000000..64882fb Binary files /dev/null and b/public/images/pwa-preview-light.webp differ diff --git a/public/images/web-app-manifest-192x192.png b/public/images/web-app-manifest-192x192.png index 42d094d..a2fbcd1 100644 Binary files a/public/images/web-app-manifest-192x192.png and b/public/images/web-app-manifest-192x192.png differ diff --git a/public/images/web-app-manifest-512x512.png b/public/images/web-app-manifest-512x512.png index c6e4554..054ac3c 100644 Binary files a/public/images/web-app-manifest-512x512.png and b/public/images/web-app-manifest-512x512.png differ diff --git a/public/logos/insight-steps-ea3e04996dbca687a97a55c7018ec46d5c05d77d7871c547454582c617b59854.png b/public/logos/insight-steps-ea3e04996dbca687a97a55c7018ec46d5c05d77d7871c547454582c617b59854.png deleted file mode 100644 index 1438479..0000000 Binary files a/public/logos/insight-steps-ea3e04996dbca687a97a55c7018ec46d5c05d77d7871c547454582c617b59854.png and /dev/null differ diff --git a/src/app/(landing-page)/page.tsx b/src/app/(landing-page)/page.tsx index 54699c8..0504386 100644 --- a/src/app/(landing-page)/page.tsx +++ b/src/app/(landing-page)/page.tsx @@ -1,252 +1,38 @@ import { - RiBankCard2Line, - RiBarChartBoxLine, - RiCalendarLine, - RiCheckLine, - RiCodeSSlashLine, - RiDatabase2Line, - RiDeviceLine, - RiDownloadCloudLine, - RiEyeOffLine, - RiFileTextLine, - RiFlashlightLine, - RiGitBranchLine, + RiAndroidLine, RiGithubFill, - RiInformationLine, - RiLayoutGridLine, - RiLineChartLine, - RiLockLine, - RiNotification3Line, - RiPercentLine, - RiPieChartLine, - RiRobot2Line, RiShieldCheckLine, RiSmartphoneLine, - RiStarLine, - RiTeamLine, - RiTimeLine, - RiWalletLine, } from "@remixicon/react"; import { headers } from "next/headers"; import Image from "next/image"; import Link from "next/link"; -import type { ComponentType } from "react"; import { AnimateOnScroll } from "@/features/landing/components/animate-on-scroll"; import { MobileNav } from "@/features/landing/components/mobile-nav"; +import { ScreenshotTabs } from "@/features/landing/components/screenshot-tabs"; import { SetupTabs } from "@/features/landing/components/setup-tabs"; +import { + companionBanks, + companionSteps, + extraFeatures, + getMetricsItems, + mainFeatures, + navbarActionClassName, + navLinks, + pwaHighlights, + stackItems, + whoIsItForItems, +} from "@/features/landing/constants"; +import { landingImages } from "@/features/landing/images"; +import { fetchGitHubStats } from "@/features/landing/queries"; import { AnimatedThemeToggler } from "@/shared/components/animated-theme-toggler"; import { Logo } from "@/shared/components/logo"; -import { - Alert, - AlertDescription, - AlertTitle, -} from "@/shared/components/ui/alert"; import { Badge } from "@/shared/components/ui/badge"; import { Button } from "@/shared/components/ui/button"; import { Card, CardContent } from "@/shared/components/ui/card"; import { DotPattern } from "@/shared/components/ui/dot-pattern"; import { getOptionalUserSession } from "@/shared/lib/auth/server"; -async function fetchGitHubStats() { - try { - const res = await fetch( - "https://api.github.com/repos/felipegcoutinho/openmonetis", - { next: { revalidate: 3600 } }, - ); - if (!res.ok) return { stars: 200, forks: 60 }; - const data = await res.json(); - return { - stars: data.stargazers_count as number, - forks: data.forks_count as number, - }; - } catch { - return { stars: 200, forks: 60 }; - } -} - -const navbarActionClassName = - "border-black/10 bg-transparent text-black/75 shadow-none hover:border-black/20 hover:bg-black/10 hover:text-black focus-visible:ring-black/20 data-[state=open]:bg-black/10 data-[state=open]:text-black"; - -type FeatureItem = { - icon: ComponentType<{ className?: string; style?: React.CSSProperties }>; - title: string; - description: string; - colorVar: string; -}; - -const mainFeatures: FeatureItem[] = [ - { - icon: RiWalletLine, - title: "Contas e transações", - description: - "Registre suas contas bancárias, cartões e dinheiro. Adicione receitas, despesas e transferências. Organize por categorias. Extratos detalhados por conta.", - colorVar: "var(--data-9)", - }, - { - icon: RiPercentLine, - title: "Parcelamentos avançados", - description: - "Controle completo de compras parceladas. Antecipe parcelas com cálculo automático de desconto. Veja análise consolidada de todas as parcelas em aberto.", - colorVar: "var(--data-4)", - }, - { - icon: RiRobot2Line, - title: "Insights com IA", - description: - "Análises financeiras geradas por IA (Claude, GPT, Gemini). Insights personalizados sobre seus padrões de gastos e recomendações inteligentes.", - colorVar: "var(--data-8)", - }, - { - icon: RiBarChartBoxLine, - title: "Relatórios e gráficos", - description: - "Dashboard com 20+ widgets interativos. Relatórios detalhados por categoria. Gráficos de evolução e comparativos. Exportação em PDF e Excel.", - colorVar: "var(--data-5)", - }, - { - icon: RiBankCard2Line, - title: "Faturas de cartão", - description: - "Cadastre seus cartões e acompanhe as faturas por período. Veja o que ainda não foi fechado. Controle limites, vencimentos e fechamentos.", - colorVar: "var(--data-1)", - }, - { - icon: RiTeamLine, - title: "Gestão colaborativa", - description: - "Compartilhe pagadores com permissões granulares (admin/viewer). Notificações automáticas por e-mail. Colabore em lançamentos compartilhados.", - colorVar: "var(--data-3)", - }, -]; - -const extraFeatures: FeatureItem[] = [ - { - icon: RiPieChartLine, - title: "Categorias e orçamentos", - description: - "Crie categorias personalizadas e defina orçamentos mensais com indicadores visuais.", - colorVar: "var(--data-7)", - }, - { - icon: RiFileTextLine, - title: "Anotações e tarefas", - description: - "Notas de texto e listas de tarefas com checkboxes. Arquivamento para manter histórico.", - colorVar: "var(--data-6)", - }, - { - icon: RiCalendarLine, - title: "Calendário financeiro", - description: - "Visualize transações em calendário mensal. Nunca perca prazos de pagamentos.", - colorVar: "var(--data-2)", - }, - { - icon: RiDownloadCloudLine, - title: "Importação em massa", - description: "Lance múltiplos lançamentos de uma vez", - colorVar: "var(--data-9)", - }, - { - icon: RiEyeOffLine, - title: "Modo privacidade", - description: - "Oculte valores sensíveis com um clique. Tema dark/light. Calculadora integrada.", - colorVar: "var(--data-4)", - }, - { - icon: RiFlashlightLine, - title: "Performance otimizada", - description: "Sistema rápido e com alta performance", - colorVar: "var(--data-5)", - }, -]; - -const screenshotSections = [ - { - title: "Lançamentos", - description: "Registre e organize todas as suas transações financeiras", - lightSrc: "/images/preview-lancamentos-light.webp", - darkSrc: "/images/preview-lancamentos-dark.webp", - }, - { - title: "Calendário", - description: "Visualize suas finanças no calendário mensal", - lightSrc: "/images/preview-calendario-light.webp", - darkSrc: "/images/preview-calendario-dark.webp", - }, - { - title: "Cartões", - description: "Acompanhe faturas, limites e vencimentos dos seus cartões", - lightSrc: "/images/preview-cartao-light.webp", - darkSrc: "/images/preview-cartao-dark.webp", - }, -]; - -const companionBanks = [ - { name: "Nubank", logo: "/logos/nubank.png" }, - { name: "Itaú", logo: "/logos/itau.png" }, - { name: "Inter", logo: "/logos/interpj.png" }, - { name: "Mercado Pago", logo: "/logos/mercadopago.png" }, - { name: "Outros", logo: null }, -]; - -const stackItems = [ - { - icon: RiCodeSSlashLine, - title: "Frontend", - subtitle: "Next.js 16, TypeScript, Tailwind CSS, shadcn/ui", - description: "Interface moderna e responsiva com React 19 e App Router", - colorVar: "var(--data-3)", - }, - { - icon: RiDatabase2Line, - title: "Backend", - subtitle: "PostgreSQL 18, Drizzle ORM, Better Auth", - description: "Banco relacional robusto com type-safe ORM", - colorVar: "var(--data-9)", - }, - { - icon: RiShieldCheckLine, - title: "Segurança", - subtitle: "Better Auth com OAuth (Google) e autenticação por email", - description: "Sessões seguras e proteção de rotas por middleware", - colorVar: "var(--data-1)", - }, - { - icon: RiDeviceLine, - title: "Deploy", - subtitle: - "Docker com multi-stage build, health checks e volumes persistentes", - description: "Fácil de rodar localmente ou em qualquer servidor", - colorVar: "var(--data-5)", - }, -]; - -const whoIsItForItems = [ - { - icon: RiTimeLine, - title: "Tem disciplina de registrar gastos", - description: - "Não se importa em dedicar alguns minutos por dia ou semana para manter tudo atualizado", - colorVar: "var(--data-4)", - }, - { - icon: RiLockLine, - title: "Quer controle total sobre seus dados", - description: - "Prefere hospedar seus próprios dados ao invés de depender de serviços terceiros", - colorVar: "var(--data-9)", - }, - { - icon: RiLineChartLine, - title: "Gosta de entender exatamente onde o dinheiro vai", - description: - "Quer visualizar padrões de gastos e tomar decisões informadas", - colorVar: "var(--data-3)", - }, -]; - export default async function Page() { const [session, headersList, githubStats] = await Promise.all([ getOptionalUserSession(), @@ -259,6 +45,7 @@ export default async function Page() { "", ).replace(/:\d+$/, ""); const isPublicDomain = !!(publicDomain && hostname === publicDomain); + const metricsItems = getMetricsItems(githubStats.stars, githubStats.forks); return (