feat(v1.5.1): renomeação OpenSheets → OpenMonetis + multi-domínio
Renomeia o projeto em ~40 arquivos (package.json, manifests, layouts, componentes, server actions, emails, Docker, docs, landing page). Adiciona suporte a multi-domínio via PUBLIC_DOMAIN onde o domínio público serve apenas a landing page sem botões de auth. Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
@@ -2,7 +2,7 @@ import { RiSettings2Line } from "@remixicon/react";
|
||||
import PageDescription from "@/components/page-description";
|
||||
|
||||
export const metadata = {
|
||||
title: "Ajustes | Opensheets",
|
||||
title: "Ajustes | OpenMonetis",
|
||||
};
|
||||
|
||||
export default function RootLayout({
|
||||
|
||||
@@ -53,7 +53,7 @@ export default async function Page() {
|
||||
<div>
|
||||
<h2 className="text-lg font-bold mb-1">Preferências</h2>
|
||||
<p className="text-sm text-muted-foreground mb-4">
|
||||
Personalize sua experiência no Opensheets ajustando as
|
||||
Personalize sua experiência no OpenMonetis ajustando as
|
||||
configurações de acordo com suas necessidades.
|
||||
</p>
|
||||
</div>
|
||||
@@ -78,7 +78,7 @@ export default async function Page() {
|
||||
<div>
|
||||
<h2 className="text-lg font-bold mb-1">Alterar nome</h2>
|
||||
<p className="text-sm text-muted-foreground mb-4">
|
||||
Atualize como seu nome aparece no Opensheets. Esse nome pode
|
||||
Atualize como seu nome aparece no OpenMonetis. Esse nome pode
|
||||
ser exibido em diferentes seções do app e em comunicações.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
@@ -2,7 +2,7 @@ import { RiTodoLine } from "@remixicon/react";
|
||||
import PageDescription from "@/components/page-description";
|
||||
|
||||
export const metadata = {
|
||||
title: "Anotações | Opensheets",
|
||||
title: "Anotações | OpenMonetis",
|
||||
};
|
||||
|
||||
export default function RootLayout({
|
||||
|
||||
@@ -2,7 +2,7 @@ import { RiCalendarEventLine } from "@remixicon/react";
|
||||
import PageDescription from "@/components/page-description";
|
||||
|
||||
export const metadata = {
|
||||
title: "Calendário | Opensheets",
|
||||
title: "Calendário | OpenMonetis",
|
||||
};
|
||||
|
||||
export default function RootLayout({
|
||||
|
||||
@@ -2,7 +2,7 @@ import { RiBankCard2Line } from "@remixicon/react";
|
||||
import PageDescription from "@/components/page-description";
|
||||
|
||||
export const metadata = {
|
||||
title: "Cartões | Opensheets",
|
||||
title: "Cartões | OpenMonetis",
|
||||
};
|
||||
|
||||
export default function RootLayout({
|
||||
|
||||
@@ -2,7 +2,7 @@ import { RiPriceTag3Line } from "@remixicon/react";
|
||||
import PageDescription from "@/components/page-description";
|
||||
|
||||
export const metadata = {
|
||||
title: "Categorias | Opensheets",
|
||||
title: "Categorias | OpenMonetis",
|
||||
};
|
||||
|
||||
export default function RootLayout({
|
||||
|
||||
@@ -2,7 +2,7 @@ import { RiBankLine } from "@remixicon/react";
|
||||
import PageDescription from "@/components/page-description";
|
||||
|
||||
export const metadata = {
|
||||
title: "Contas | Opensheets",
|
||||
title: "Contas | OpenMonetis",
|
||||
};
|
||||
|
||||
export default function RootLayout({
|
||||
|
||||
@@ -2,7 +2,7 @@ import { RiSecurePaymentLine } from "@remixicon/react";
|
||||
import PageDescription from "@/components/page-description";
|
||||
|
||||
export const metadata = {
|
||||
title: "Análise de Parcelas | Opensheets",
|
||||
title: "Análise de Parcelas | OpenMonetis",
|
||||
};
|
||||
|
||||
export default function RootLayout({
|
||||
|
||||
@@ -2,7 +2,7 @@ import { RiSparklingLine } from "@remixicon/react";
|
||||
import PageDescription from "@/components/page-description";
|
||||
|
||||
export const metadata = {
|
||||
title: "Insights | Opensheets",
|
||||
title: "Insights | OpenMonetis",
|
||||
};
|
||||
|
||||
export default function RootLayout({
|
||||
|
||||
@@ -292,7 +292,7 @@ const resolveUserLabel = (user: {
|
||||
if (user?.email && user.email.trim().length > 0) {
|
||||
return user.email;
|
||||
}
|
||||
return "Opensheets";
|
||||
return "OpenMonetis";
|
||||
};
|
||||
|
||||
type InitialCandidate = {
|
||||
|
||||
@@ -2,7 +2,7 @@ import { RiArrowLeftRightLine } from "@remixicon/react";
|
||||
import PageDescription from "@/components/page-description";
|
||||
|
||||
export const metadata = {
|
||||
title: "Lançamentos | Opensheets",
|
||||
title: "Lançamentos | OpenMonetis",
|
||||
};
|
||||
|
||||
export default function RootLayout({
|
||||
|
||||
@@ -2,7 +2,7 @@ import { RiFundsLine } from "@remixicon/react";
|
||||
import PageDescription from "@/components/page-description";
|
||||
|
||||
export const metadata = {
|
||||
title: "Anotações | Opensheets",
|
||||
title: "Orçamentos | OpenMonetis",
|
||||
};
|
||||
|
||||
export default function RootLayout({
|
||||
|
||||
@@ -388,7 +388,7 @@ const buildSummaryHtml = ({
|
||||
|
||||
<!-- Rodapé externo -->
|
||||
<p style="margin:16px 0 0 0;font-size:12.5px;color:#94a3b8;text-align:center;">
|
||||
Este e-mail foi enviado automaticamente pelo <strong>Opensheets</strong>.
|
||||
Este e-mail foi enviado automaticamente pelo <strong>OpenMonetis</strong>.
|
||||
</p>
|
||||
</div>
|
||||
|
||||
@@ -419,7 +419,7 @@ export async function sendPagadorSummaryAction(
|
||||
|
||||
const resendApiKey = process.env.RESEND_API_KEY;
|
||||
const resendFrom =
|
||||
process.env.RESEND_FROM_EMAIL ?? "Opensheets <onboarding@resend.dev>";
|
||||
process.env.RESEND_FROM_EMAIL ?? "OpenMonetis <onboarding@resend.dev>";
|
||||
|
||||
if (!resendApiKey) {
|
||||
return {
|
||||
|
||||
@@ -2,7 +2,7 @@ import { RiGroupLine } from "@remixicon/react";
|
||||
import PageDescription from "@/components/page-description";
|
||||
|
||||
export const metadata = {
|
||||
title: "Pagadores | Opensheets",
|
||||
title: "Pagadores | OpenMonetis",
|
||||
};
|
||||
|
||||
export default function RootLayout({
|
||||
|
||||
@@ -2,7 +2,7 @@ import { RiInboxLine } from "@remixicon/react";
|
||||
import PageDescription from "@/components/page-description";
|
||||
|
||||
export const metadata = {
|
||||
title: "Pré-Lançamentos | Opensheets",
|
||||
title: "Pré-Lançamentos | OpenMonetis",
|
||||
};
|
||||
|
||||
export default function RootLayout({
|
||||
|
||||
@@ -2,7 +2,7 @@ import { RiFileChartLine } from "@remixicon/react";
|
||||
import PageDescription from "@/components/page-description";
|
||||
|
||||
export const metadata = {
|
||||
title: "Tendências | Opensheets",
|
||||
title: "Tendências | OpenMonetis",
|
||||
};
|
||||
|
||||
export default function RootLayout({
|
||||
|
||||
@@ -2,7 +2,7 @@ import { RiBankCard2Line } from "@remixicon/react";
|
||||
import PageDescription from "@/components/page-description";
|
||||
|
||||
export const metadata = {
|
||||
title: "Uso de Cartões | Opensheets",
|
||||
title: "Uso de Cartões | OpenMonetis",
|
||||
};
|
||||
|
||||
export default function RootLayout({
|
||||
|
||||
@@ -2,7 +2,7 @@ import { RiStore2Line } from "@remixicon/react";
|
||||
import PageDescription from "@/components/page-description";
|
||||
|
||||
export const metadata = {
|
||||
title: "Top Estabelecimentos | Opensheets",
|
||||
title: "Top Estabelecimentos | OpenMonetis",
|
||||
};
|
||||
|
||||
export default function RootLayout({
|
||||
|
||||
@@ -21,6 +21,7 @@ import {
|
||||
RiTimeLine,
|
||||
RiWalletLine,
|
||||
} from "@remixicon/react";
|
||||
import { headers } from "next/headers";
|
||||
import Image from "next/image";
|
||||
import Link from "next/link";
|
||||
import { AnimatedThemeToggler } from "@/components/animated-theme-toggler";
|
||||
@@ -32,6 +33,13 @@ import { getOptionalUserSession } from "@/lib/auth/server";
|
||||
|
||||
export default async function Page() {
|
||||
const session = await getOptionalUserSession();
|
||||
const headersList = await headers();
|
||||
const hostname = headersList.get("host")?.replace(/:\d+$/, "");
|
||||
const publicDomain = process.env.PUBLIC_DOMAIN?.replace(
|
||||
/^https?:\/\//,
|
||||
"",
|
||||
).replace(/:\d+$/, "");
|
||||
const isPublicDomain = publicDomain && hostname === publicDomain;
|
||||
|
||||
return (
|
||||
<div className="flex min-h-screen flex-col">
|
||||
@@ -66,27 +74,28 @@ export default async function Page() {
|
||||
|
||||
<nav className="flex items-center gap-2 md:gap-4">
|
||||
<AnimatedThemeToggler />
|
||||
{session?.user ? (
|
||||
<Link prefetch href="/dashboard">
|
||||
<Button variant="outline" size="sm">
|
||||
Dashboard
|
||||
</Button>
|
||||
</Link>
|
||||
) : (
|
||||
<>
|
||||
<Link href="/login">
|
||||
<Button variant="ghost" size="sm">
|
||||
Entrar
|
||||
{!isPublicDomain &&
|
||||
(session?.user ? (
|
||||
<Link prefetch href="/dashboard">
|
||||
<Button variant="outline" size="sm">
|
||||
Dashboard
|
||||
</Button>
|
||||
</Link>
|
||||
<Link href="/signup">
|
||||
<Button size="sm" className="gap-2">
|
||||
Começar
|
||||
<RiArrowRightSLine size={16} />
|
||||
</Button>
|
||||
</Link>
|
||||
</>
|
||||
)}
|
||||
) : (
|
||||
<>
|
||||
<Link href="/login">
|
||||
<Button variant="ghost" size="sm">
|
||||
Entrar
|
||||
</Button>
|
||||
</Link>
|
||||
<Link href="/signup">
|
||||
<Button size="sm" className="gap-2">
|
||||
Começar
|
||||
<RiArrowRightSLine size={16} />
|
||||
</Button>
|
||||
</Link>
|
||||
</>
|
||||
))}
|
||||
</nav>
|
||||
</div>
|
||||
</header>
|
||||
@@ -124,7 +133,7 @@ export default async function Page() {
|
||||
|
||||
<div className="flex flex-col sm:flex-row gap-4 mt-4">
|
||||
<Link
|
||||
href="https://github.com/felipegcoutinho/opensheets-app"
|
||||
href="https://github.com/felipegcoutinho/openmonetis"
|
||||
target="_blank"
|
||||
>
|
||||
<Button size="lg" className="gap-2 w-full sm:w-auto">
|
||||
@@ -133,7 +142,7 @@ export default async function Page() {
|
||||
</Button>
|
||||
</Link>
|
||||
<Link
|
||||
href="https://github.com/felipegcoutinho/opensheets-app#readme"
|
||||
href="https://github.com/felipegcoutinho/openmonetis#readme"
|
||||
target="_blank"
|
||||
>
|
||||
<Button
|
||||
@@ -166,7 +175,7 @@ export default async function Page() {
|
||||
<div className="mx-auto max-w-6xl">
|
||||
<Image
|
||||
src="/dashboard-preview-light.png"
|
||||
alt="opensheets Dashboard Preview"
|
||||
alt="openmonetis Dashboard Preview"
|
||||
width={1920}
|
||||
height={1080}
|
||||
className="w-full h-auto dark:hidden"
|
||||
@@ -174,7 +183,7 @@ export default async function Page() {
|
||||
/>
|
||||
<Image
|
||||
src="/dashboard-preview-dark.png"
|
||||
alt="opensheets Dashboard Preview"
|
||||
alt="openmonetis Dashboard Preview"
|
||||
width={1920}
|
||||
height={1080}
|
||||
className="w-full h-auto hidden dark:block"
|
||||
@@ -581,7 +590,7 @@ export default async function Page() {
|
||||
</h3>
|
||||
<code className="text-sm bg-muted px-2 py-1 rounded">
|
||||
git clone
|
||||
https://github.com/felipegcoutinho/opensheets-app.git
|
||||
https://github.com/felipegcoutinho/openmonetis.git
|
||||
</code>
|
||||
</div>
|
||||
</div>
|
||||
@@ -658,7 +667,7 @@ export default async function Page() {
|
||||
|
||||
<div className="mt-8 text-center">
|
||||
<Link
|
||||
href="https://github.com/felipegcoutinho/opensheets-app#-início-rápido"
|
||||
href="https://github.com/felipegcoutinho/openmonetis#-início-rápido"
|
||||
target="_blank"
|
||||
className="text-sm text-primary hover:underline"
|
||||
>
|
||||
@@ -678,7 +687,7 @@ export default async function Page() {
|
||||
Para quem funciona?
|
||||
</h2>
|
||||
<p className="text-lg text-muted-foreground">
|
||||
O opensheets funciona melhor se você:
|
||||
O openmonetis funciona melhor se você:
|
||||
</p>
|
||||
</div>
|
||||
|
||||
@@ -765,7 +774,7 @@ export default async function Page() {
|
||||
</p>
|
||||
<div className="flex flex-col sm:flex-row gap-4 justify-center">
|
||||
<Link
|
||||
href="https://github.com/felipegcoutinho/opensheets-app"
|
||||
href="https://github.com/felipegcoutinho/openmonetis"
|
||||
target="_blank"
|
||||
>
|
||||
<Button size="lg" className="gap-2 w-full sm:w-auto">
|
||||
@@ -774,7 +783,7 @@ export default async function Page() {
|
||||
</Button>
|
||||
</Link>
|
||||
<Link
|
||||
href="https://github.com/felipegcoutinho/opensheets-app#-início-rápido"
|
||||
href="https://github.com/felipegcoutinho/openmonetis#-início-rápido"
|
||||
target="_blank"
|
||||
>
|
||||
<Button
|
||||
@@ -808,7 +817,7 @@ export default async function Page() {
|
||||
<ul className="space-y-3 text-sm text-muted-foreground">
|
||||
<li>
|
||||
<Link
|
||||
href="https://github.com/felipegcoutinho/opensheets-app"
|
||||
href="https://github.com/felipegcoutinho/openmonetis"
|
||||
target="_blank"
|
||||
className="hover:text-foreground transition-colors flex items-center gap-2"
|
||||
>
|
||||
@@ -818,7 +827,7 @@ export default async function Page() {
|
||||
</li>
|
||||
<li>
|
||||
<Link
|
||||
href="https://github.com/felipegcoutinho/opensheets-app#readme"
|
||||
href="https://github.com/felipegcoutinho/openmonetis#readme"
|
||||
target="_blank"
|
||||
className="hover:text-foreground transition-colors"
|
||||
>
|
||||
@@ -827,7 +836,7 @@ export default async function Page() {
|
||||
</li>
|
||||
<li>
|
||||
<Link
|
||||
href="https://github.com/felipegcoutinho/opensheets-app/issues"
|
||||
href="https://github.com/felipegcoutinho/openmonetis/issues"
|
||||
target="_blank"
|
||||
className="hover:text-foreground transition-colors"
|
||||
>
|
||||
@@ -850,8 +859,8 @@ export default async function Page() {
|
||||
|
||||
<div className="border-t mt-12 pt-8 flex flex-col md:flex-row justify-between items-center gap-4 text-sm text-muted-foreground">
|
||||
<p>
|
||||
© {new Date().getFullYear()} opensheets. Projeto open source sob
|
||||
licença MIT.
|
||||
© {new Date().getFullYear()} openmonetis. Projeto open source
|
||||
sob licença MIT.
|
||||
</p>
|
||||
<div className="flex items-center gap-2">
|
||||
<RiShieldCheckLine size={16} className="text-primary" />
|
||||
|
||||
@@ -4,7 +4,7 @@ import { db } from "@/lib/db";
|
||||
const APP_VERSION = "1.0.0";
|
||||
|
||||
/**
|
||||
* Health check endpoint para Docker, monitoring e OpenSheets Companion
|
||||
* Health check endpoint para Docker, monitoring e OpenMonetis Companion
|
||||
* GET /api/health
|
||||
*
|
||||
* Retorna status 200 se a aplicação está saudável
|
||||
@@ -20,7 +20,7 @@ export async function GET() {
|
||||
return NextResponse.json(
|
||||
{
|
||||
status: "ok",
|
||||
name: "OpenSheets",
|
||||
name: "OpenMonetis",
|
||||
version: APP_VERSION,
|
||||
timestamp: new Date().toISOString(),
|
||||
},
|
||||
@@ -33,7 +33,7 @@ export async function GET() {
|
||||
return NextResponse.json(
|
||||
{
|
||||
status: "error",
|
||||
name: "OpenSheets",
|
||||
name: "OpenMonetis",
|
||||
version: APP_VERSION,
|
||||
timestamp: new Date().toISOString(),
|
||||
message: "Database connection failed",
|
||||
|
||||
@@ -7,8 +7,9 @@ import { allFontVariables } from "@/public/fonts/font_index";
|
||||
import "./globals.css";
|
||||
|
||||
export const metadata: Metadata = {
|
||||
title: "Opensheets",
|
||||
description: "Finanças pessoais descomplicadas.",
|
||||
title: "OpenMonetis | Suas finanças, do seu jeito",
|
||||
description:
|
||||
"Controle suas finanças pessoais de forma simples e transparente.",
|
||||
};
|
||||
|
||||
export default function RootLayout({
|
||||
@@ -19,7 +20,7 @@ export default function RootLayout({
|
||||
return (
|
||||
<html lang="en" className={allFontVariables} suppressHydrationWarning>
|
||||
<head>
|
||||
<meta name="apple-mobile-web-app-title" content="Opensheets" />
|
||||
<meta name="apple-mobile-web-app-title" content="OpenMonetis" />
|
||||
</head>
|
||||
<body className="antialiased" suppressHydrationWarning>
|
||||
<ThemeProvider attribute="class" defaultTheme="light">
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
{
|
||||
"name": "Opensheets",
|
||||
"short_name": "Opensheets",
|
||||
"name": "OpenMonetis",
|
||||
"short_name": "OpenMonetis",
|
||||
"icons": [
|
||||
{
|
||||
"src": "/web-app-manifest-192x192.png",
|
||||
|
||||
Reference in New Issue
Block a user