fix: corrige a grafia de "OpenSheets" para "Opensheets"
Este commit altera todas as ocorrências de "OpenSheets" para "Opensheets" em arquivos de layout, README, componentes e notificações, garantindo consistência na nomenclatura do projeto.
This commit is contained in:
@@ -1,4 +1,4 @@
|
|||||||
# OpenSheets
|
# Opensheets
|
||||||
|
|
||||||
> Projeto pessoal de gestão financeira. Self-hosted, manual e open source.
|
> Projeto pessoal de gestão financeira. Self-hosted, manual e open source.
|
||||||
|
|
||||||
@@ -31,7 +31,7 @@
|
|||||||
|
|
||||||
## 🎯 Sobre o Projeto
|
## 🎯 Sobre o Projeto
|
||||||
|
|
||||||
**OpenSheets** é um projeto pessoal de gestão financeira que criei para organizar minhas próprias finanças. Cansei de usar planilhas desorganizadas e aplicativos que não fazem exatamente o que preciso, então decidi construir algo do jeito que funciona pra mim.
|
**Opensheets** é um projeto pessoal de gestão financeira que criei para organizar minhas próprias finanças. Cansei de usar planilhas desorganizadas e aplicativos que não fazem exatamente o que preciso, então decidi construir algo do jeito que funciona pra mim.
|
||||||
|
|
||||||
A ideia é simples: ter um lugar onde consigo ver todas as minhas contas, cartões, gastos e receitas de forma clara. Se isso for útil pra você também, fique à vontade para usar e contribuir.
|
A ideia é simples: ter um lugar onde consigo ver todas as minhas contas, cartões, gastos e receitas de forma clara. Se isso for útil pra você também, fique à vontade para usar e contribuir.
|
||||||
|
|
||||||
@@ -47,7 +47,7 @@ Você precisa registrar manualmente suas transações. Se você procura algo que
|
|||||||
|
|
||||||
**3. Requer disciplina**
|
**3. Requer disciplina**
|
||||||
|
|
||||||
O OpenSheets funciona melhor para quem:
|
O Opensheets funciona melhor para quem:
|
||||||
|
|
||||||
- Tem disciplina de registrar os gastos regularmente
|
- Tem disciplina de registrar os gastos regularmente
|
||||||
- Quer controle total sobre seus dados
|
- Quer controle total sobre seus dados
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ import PageDescription from "@/components/page-description";
|
|||||||
import { RiSettingsLine } from "@remixicon/react";
|
import { RiSettingsLine } from "@remixicon/react";
|
||||||
|
|
||||||
export const metadata = {
|
export const metadata = {
|
||||||
title: "Ajustes | OpenSheets",
|
title: "Ajustes | Opensheets",
|
||||||
};
|
};
|
||||||
|
|
||||||
export default function RootLayout({
|
export default function RootLayout({
|
||||||
|
|||||||
@@ -47,7 +47,7 @@ export default async function Page() {
|
|||||||
<div>
|
<div>
|
||||||
<h2 className="text-lg font-medium mb-1">Alterar nome</h2>
|
<h2 className="text-lg font-medium mb-1">Alterar nome</h2>
|
||||||
<p className="text-sm text-muted-foreground mb-4">
|
<p className="text-sm text-muted-foreground mb-4">
|
||||||
Atualize como seu nome aparece no OpenSheets. Esse nome pode ser
|
Atualize como seu nome aparece no Opensheets. Esse nome pode ser
|
||||||
exibido em diferentes seções do app e em comunicações.
|
exibido em diferentes seções do app e em comunicações.
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
@@ -73,7 +73,10 @@ export default async function Page() {
|
|||||||
atual (quando aplicável) para concluir a alteração.
|
atual (quando aplicável) para concluir a alteração.
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
<UpdateEmailForm currentEmail={userEmail} authProvider={authProvider} />
|
<UpdateEmailForm
|
||||||
|
currentEmail={userEmail}
|
||||||
|
authProvider={authProvider}
|
||||||
|
/>
|
||||||
</TabsContent>
|
</TabsContent>
|
||||||
|
|
||||||
<TabsContent value="deletar" className="space-y-4">
|
<TabsContent value="deletar" className="space-y-4">
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ import PageDescription from "@/components/page-description";
|
|||||||
import { RiTodoLine } from "@remixicon/react";
|
import { RiTodoLine } from "@remixicon/react";
|
||||||
|
|
||||||
export const metadata = {
|
export const metadata = {
|
||||||
title: "Anotações | OpenSheets",
|
title: "Anotações | Opensheets",
|
||||||
};
|
};
|
||||||
|
|
||||||
export default function RootLayout({
|
export default function RootLayout({
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ import PageDescription from "@/components/page-description";
|
|||||||
import { RiCalendarEventLine } from "@remixicon/react";
|
import { RiCalendarEventLine } from "@remixicon/react";
|
||||||
|
|
||||||
export const metadata = {
|
export const metadata = {
|
||||||
title: "Calendário | OpenSheets",
|
title: "Calendário | Opensheets",
|
||||||
};
|
};
|
||||||
|
|
||||||
export default function RootLayout({
|
export default function RootLayout({
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ import PageDescription from "@/components/page-description";
|
|||||||
import { RiBankCardLine } from "@remixicon/react";
|
import { RiBankCardLine } from "@remixicon/react";
|
||||||
|
|
||||||
export const metadata = {
|
export const metadata = {
|
||||||
title: "Cartões | OpenSheets",
|
title: "Cartões | Opensheets",
|
||||||
};
|
};
|
||||||
|
|
||||||
export default function RootLayout({
|
export default function RootLayout({
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ import PageDescription from "@/components/page-description";
|
|||||||
import { RiPriceTag3Line } from "@remixicon/react";
|
import { RiPriceTag3Line } from "@remixicon/react";
|
||||||
|
|
||||||
export const metadata = {
|
export const metadata = {
|
||||||
title: "Categorias | OpenSheets",
|
title: "Categorias | Opensheets",
|
||||||
};
|
};
|
||||||
|
|
||||||
export default function RootLayout({
|
export default function RootLayout({
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ import PageDescription from "@/components/page-description";
|
|||||||
import { RiBankLine } from "@remixicon/react";
|
import { RiBankLine } from "@remixicon/react";
|
||||||
|
|
||||||
export const metadata = {
|
export const metadata = {
|
||||||
title: "Contas | OpenSheets",
|
title: "Contas | Opensheets",
|
||||||
};
|
};
|
||||||
|
|
||||||
export default function RootLayout({
|
export default function RootLayout({
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ import PageDescription from "@/components/page-description";
|
|||||||
import { RiSecurePaymentLine } from "@remixicon/react";
|
import { RiSecurePaymentLine } from "@remixicon/react";
|
||||||
|
|
||||||
export const metadata = {
|
export const metadata = {
|
||||||
title: "Análise de Parcelas | OpenSheets",
|
title: "Análise de Parcelas | Opensheets",
|
||||||
};
|
};
|
||||||
|
|
||||||
export default function RootLayout({
|
export default function RootLayout({
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ import PageDescription from "@/components/page-description";
|
|||||||
import { RiSparklingLine } from "@remixicon/react";
|
import { RiSparklingLine } from "@remixicon/react";
|
||||||
|
|
||||||
export const metadata = {
|
export const metadata = {
|
||||||
title: "Insights | OpenSheets",
|
title: "Insights | Opensheets",
|
||||||
};
|
};
|
||||||
|
|
||||||
export default function RootLayout({
|
export default function RootLayout({
|
||||||
|
|||||||
@@ -209,7 +209,7 @@ const resolveUserLabel = (user: {
|
|||||||
if (user?.email && user.email.trim().length > 0) {
|
if (user?.email && user.email.trim().length > 0) {
|
||||||
return user.email;
|
return user.email;
|
||||||
}
|
}
|
||||||
return "OpenSheets";
|
return "Opensheets";
|
||||||
};
|
};
|
||||||
|
|
||||||
type InitialCandidate = {
|
type InitialCandidate = {
|
||||||
@@ -1320,8 +1320,12 @@ export async function deleteMultipleLancamentosAction(
|
|||||||
|
|
||||||
// Send notifications
|
// Send notifications
|
||||||
const notificationData = existing
|
const notificationData = existing
|
||||||
.filter((item): item is typeof item & { pagadorId: NonNullable<typeof item.pagadorId> } =>
|
.filter(
|
||||||
Boolean(item.pagadorId)
|
(
|
||||||
|
item
|
||||||
|
): item is typeof item & {
|
||||||
|
pagadorId: NonNullable<typeof item.pagadorId>;
|
||||||
|
} => Boolean(item.pagadorId)
|
||||||
)
|
)
|
||||||
.map((item) => ({
|
.map((item) => ({
|
||||||
pagadorId: item.pagadorId,
|
pagadorId: item.pagadorId,
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ import PageDescription from "@/components/page-description";
|
|||||||
import { RiArrowLeftRightLine } from "@remixicon/react";
|
import { RiArrowLeftRightLine } from "@remixicon/react";
|
||||||
|
|
||||||
export const metadata = {
|
export const metadata = {
|
||||||
title: "Lançamentos | OpenSheets",
|
title: "Lançamentos | Opensheets",
|
||||||
};
|
};
|
||||||
|
|
||||||
export default function RootLayout({
|
export default function RootLayout({
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ import PageDescription from "@/components/page-description";
|
|||||||
import { RiFundsLine } from "@remixicon/react";
|
import { RiFundsLine } from "@remixicon/react";
|
||||||
|
|
||||||
export const metadata = {
|
export const metadata = {
|
||||||
title: "Anotações | OpenSheets",
|
title: "Anotações | Opensheets",
|
||||||
};
|
};
|
||||||
|
|
||||||
export default function RootLayout({
|
export default function RootLayout({
|
||||||
|
|||||||
@@ -398,7 +398,7 @@ const buildSummaryHtml = ({
|
|||||||
|
|
||||||
<!-- Rodapé externo -->
|
<!-- Rodapé externo -->
|
||||||
<p style="margin:16px 0 0 0;font-size:12.5px;color:#94a3b8;text-align:center;">
|
<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>Opensheets</strong>.
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -429,7 +429,7 @@ export async function sendPagadorSummaryAction(
|
|||||||
|
|
||||||
const resendApiKey = process.env.RESEND_API_KEY;
|
const resendApiKey = process.env.RESEND_API_KEY;
|
||||||
const resendFrom =
|
const resendFrom =
|
||||||
process.env.RESEND_FROM_EMAIL ?? "OpenSheets <onboarding@resend.dev>";
|
process.env.RESEND_FROM_EMAIL ?? "Opensheets <onboarding@resend.dev>";
|
||||||
|
|
||||||
if (!resendApiKey) {
|
if (!resendApiKey) {
|
||||||
return {
|
return {
|
||||||
|
|||||||
@@ -2,7 +2,7 @@ import PageDescription from "@/components/page-description";
|
|||||||
import { RiGroupLine } from "@remixicon/react";
|
import { RiGroupLine } from "@remixicon/react";
|
||||||
|
|
||||||
export const metadata = {
|
export const metadata = {
|
||||||
title: "Pagadores | OpenSheets",
|
title: "Pagadores | Opensheets",
|
||||||
};
|
};
|
||||||
|
|
||||||
export default function RootLayout({
|
export default function RootLayout({
|
||||||
|
|||||||
@@ -21,6 +21,7 @@ import {
|
|||||||
RiTimeLine,
|
RiTimeLine,
|
||||||
RiWalletLine,
|
RiWalletLine,
|
||||||
} from "@remixicon/react";
|
} from "@remixicon/react";
|
||||||
|
import Image from "next/image";
|
||||||
import Link from "next/link";
|
import Link from "next/link";
|
||||||
|
|
||||||
export default async function Page() {
|
export default async function Page() {
|
||||||
@@ -153,6 +154,25 @@ export default async function Page() {
|
|||||||
</div>
|
</div>
|
||||||
</section>
|
</section>
|
||||||
|
|
||||||
|
{/* Dashboard Preview Section */}
|
||||||
|
<section className="py-8 md:py-16">
|
||||||
|
<div className="container">
|
||||||
|
<div className="mx-auto max-w-6xl">
|
||||||
|
<div className="relative rounded-xl border bg-muted/20 shadow-2xl overflow-hidden">
|
||||||
|
<div className="absolute inset-0 bg-linear-to-t from-background/80 to-transparent z-10 pointer-events-none" />
|
||||||
|
<Image
|
||||||
|
src="/dashboard-preview.png"
|
||||||
|
alt="opensheets Dashboard Preview"
|
||||||
|
width={1920}
|
||||||
|
height={1080}
|
||||||
|
className="w-full h-auto"
|
||||||
|
priority
|
||||||
|
/>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
</section>
|
||||||
|
|
||||||
{/* What's Here Section */}
|
{/* What's Here Section */}
|
||||||
<section id="funcionalidades" className="py-16 md:py-24 bg-muted/30">
|
<section id="funcionalidades" className="py-16 md:py-24 bg-muted/30">
|
||||||
<div className="container">
|
<div className="container">
|
||||||
@@ -524,7 +544,7 @@ export default async function Page() {
|
|||||||
Para quem funciona?
|
Para quem funciona?
|
||||||
</h2>
|
</h2>
|
||||||
<p className="text-lg text-muted-foreground">
|
<p className="text-lg text-muted-foreground">
|
||||||
O OpenSheets funciona melhor se você:
|
O opensheets funciona melhor se você:
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@@ -696,7 +716,7 @@ 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">
|
<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>
|
<p>
|
||||||
© {new Date().getFullYear()} OpenSheets. Projeto open source sob
|
© {new Date().getFullYear()} opensheets. Projeto open source sob
|
||||||
licença MIT.
|
licença MIT.
|
||||||
</p>
|
</p>
|
||||||
<div className="flex items-center gap-2">
|
<div className="flex items-center gap-2">
|
||||||
|
|||||||
@@ -6,7 +6,7 @@ import "./globals.css";
|
|||||||
import { Analytics } from "@vercel/analytics/next";
|
import { Analytics } from "@vercel/analytics/next";
|
||||||
|
|
||||||
export const metadata: Metadata = {
|
export const metadata: Metadata = {
|
||||||
title: "OpenSheets",
|
title: "Opensheets",
|
||||||
description: "Finanças pessoais descomplicadas.",
|
description: "Finanças pessoais descomplicadas.",
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@@ -99,7 +99,7 @@ export function LoginForm({ className, ...props }: DivProps) {
|
|||||||
noValidate
|
noValidate
|
||||||
>
|
>
|
||||||
<FieldGroup className="gap-4">
|
<FieldGroup className="gap-4">
|
||||||
<AuthHeader title="Entrar no OpenSheets" />
|
<AuthHeader title="Entrar no Opensheets" />
|
||||||
|
|
||||||
<AuthErrorAlert error={error} />
|
<AuthErrorAlert error={error} />
|
||||||
|
|
||||||
|
|||||||
@@ -11,7 +11,7 @@ export function Logo({ variant = "full", className }: LogoProps) {
|
|||||||
return (
|
return (
|
||||||
<Image
|
<Image
|
||||||
src="/logo_small.png"
|
src="/logo_small.png"
|
||||||
alt="OpenSheets"
|
alt="Opensheets"
|
||||||
width={32}
|
width={32}
|
||||||
height={32}
|
height={32}
|
||||||
className={cn("object-contain", className)}
|
className={cn("object-contain", className)}
|
||||||
@@ -24,7 +24,7 @@ export function Logo({ variant = "full", className }: LogoProps) {
|
|||||||
<div className={cn("flex items-center", className)}>
|
<div className={cn("flex items-center", className)}>
|
||||||
<Image
|
<Image
|
||||||
src="/logo_small.png"
|
src="/logo_small.png"
|
||||||
alt="OpenSheets"
|
alt="Opensheets"
|
||||||
width={28}
|
width={28}
|
||||||
height={28}
|
height={28}
|
||||||
className="object-contain"
|
className="object-contain"
|
||||||
@@ -32,7 +32,7 @@ export function Logo({ variant = "full", className }: LogoProps) {
|
|||||||
/>
|
/>
|
||||||
<Image
|
<Image
|
||||||
src="/logo_text.png"
|
src="/logo_text.png"
|
||||||
alt="OpenSheets"
|
alt="Opensheets"
|
||||||
width={100}
|
width={100}
|
||||||
height={32}
|
height={32}
|
||||||
className="object-contain dark:invert"
|
className="object-contain dark:invert"
|
||||||
|
|||||||
@@ -100,7 +100,7 @@ const buildHtmlBody = ({
|
|||||||
</table>
|
</table>
|
||||||
|
|
||||||
<p style="margin:0;font-size:12px;color:#94a3b8;">
|
<p style="margin:0;font-size:12px;color:#94a3b8;">
|
||||||
Enviado automaticamente por ${userLabel} via OpenSheets.
|
Enviado automaticamente por ${userLabel} via Opensheets.
|
||||||
</p>
|
</p>
|
||||||
</div>
|
</div>
|
||||||
`;
|
`;
|
||||||
@@ -119,7 +119,7 @@ export async function sendPagadorAutoEmails({
|
|||||||
|
|
||||||
const resendApiKey = process.env.RESEND_API_KEY;
|
const resendApiKey = process.env.RESEND_API_KEY;
|
||||||
const resendFrom =
|
const resendFrom =
|
||||||
process.env.RESEND_FROM_EMAIL ?? "OpenSheets <onboarding@resend.dev>";
|
process.env.RESEND_FROM_EMAIL ?? "Opensheets <onboarding@resend.dev>";
|
||||||
|
|
||||||
if (!resendApiKey) {
|
if (!resendApiKey) {
|
||||||
console.warn(
|
console.warn(
|
||||||
|
|||||||
Binary file not shown.
|
Before Width: | Height: | Size: 15 KiB After Width: | Height: | Size: 38 KiB |
Reference in New Issue
Block a user