Co-authored-by: domfelipe <53182096+domfelipe@users.noreply.github.com>
This commit is contained in:
gpt-engineer-app[bot] 2026-04-17 16:52:25 +00:00
parent 52c43fd510
commit d629591030
3 changed files with 107 additions and 3 deletions

View file

@ -9,8 +9,20 @@
// Additionally, you should also exclude this file from your linter and/or formatter to prevent it from being checked or modified.
import { Route as rootRouteImport } from './routes/__root'
import { Route as SignupRouteImport } from './routes/signup'
import { Route as LoginRouteImport } from './routes/login'
import { Route as IndexRouteImport } from './routes/index'
const SignupRoute = SignupRouteImport.update({
id: '/signup',
path: '/signup',
getParentRoute: () => rootRouteImport,
} as any)
const LoginRoute = LoginRouteImport.update({
id: '/login',
path: '/login',
getParentRoute: () => rootRouteImport,
} as any)
const IndexRoute = IndexRouteImport.update({
id: '/',
path: '/',
@ -19,28 +31,50 @@ const IndexRoute = IndexRouteImport.update({
export interface FileRoutesByFullPath {
'/': typeof IndexRoute
'/login': typeof LoginRoute
'/signup': typeof SignupRoute
}
export interface FileRoutesByTo {
'/': typeof IndexRoute
'/login': typeof LoginRoute
'/signup': typeof SignupRoute
}
export interface FileRoutesById {
__root__: typeof rootRouteImport
'/': typeof IndexRoute
'/login': typeof LoginRoute
'/signup': typeof SignupRoute
}
export interface FileRouteTypes {
fileRoutesByFullPath: FileRoutesByFullPath
fullPaths: '/'
fullPaths: '/' | '/login' | '/signup'
fileRoutesByTo: FileRoutesByTo
to: '/'
id: '__root__' | '/'
to: '/' | '/login' | '/signup'
id: '__root__' | '/' | '/login' | '/signup'
fileRoutesById: FileRoutesById
}
export interface RootRouteChildren {
IndexRoute: typeof IndexRoute
LoginRoute: typeof LoginRoute
SignupRoute: typeof SignupRoute
}
declare module '@tanstack/react-router' {
interface FileRoutesByPath {
'/signup': {
id: '/signup'
path: '/signup'
fullPath: '/signup'
preLoaderRoute: typeof SignupRouteImport
parentRoute: typeof rootRouteImport
}
'/login': {
id: '/login'
path: '/login'
fullPath: '/login'
preLoaderRoute: typeof LoginRouteImport
parentRoute: typeof rootRouteImport
}
'/': {
id: '/'
path: '/'
@ -53,7 +87,18 @@ declare module '@tanstack/react-router' {
const rootRouteChildren: RootRouteChildren = {
IndexRoute: IndexRoute,
LoginRoute: LoginRoute,
SignupRoute: SignupRoute,
}
export const routeTree = rootRouteImport
._addFileChildren(rootRouteChildren)
._addFileTypes<FileRouteTypes>()
import type { getRouter } from './router.tsx'
import type { createStart } from '@tanstack/react-start'
declare module '@tanstack/react-start' {
interface Register {
ssr: true
router: Awaited<ReturnType<typeof getRouter>>
}
}

21
src/routes/login.tsx Normal file
View file

@ -0,0 +1,21 @@
import { createFileRoute, Link } from "@tanstack/react-router";
import { Logo } from "@/components/mika/Logo";
export const Route = createFileRoute("/login")({
component: LoginPlaceholder,
});
function LoginPlaceholder() {
return (
<div className="min-h-screen grid place-items-center bg-background px-4">
<div className="max-w-md text-center space-y-4">
<Logo size="lg" />
<h1 className="text-2xl font-bold">Login</h1>
<p className="text-muted-foreground">
A página de login completa será implementada na Etapa 2 (Auth + Supabase).
</p>
<Link to="/" className="inline-block text-primary hover:underline"> Voltar para o início</Link>
</div>
</div>
);
}

38
src/routes/signup.tsx Normal file
View file

@ -0,0 +1,38 @@
import { createFileRoute, Link } from "@tanstack/react-router";
import { Logo } from "@/components/mika/Logo";
type SignupSearch = {
plan?: string;
cycle?: "monthly" | "yearly";
};
export const Route = createFileRoute("/signup")({
validateSearch: (search: Record<string, unknown>): SignupSearch => ({
plan: typeof search.plan === "string" ? search.plan : undefined,
cycle: search.cycle === "yearly" || search.cycle === "monthly" ? search.cycle : undefined,
}),
component: SignupPlaceholder,
});
function SignupPlaceholder() {
const { plan, cycle } = Route.useSearch();
return (
<div className="min-h-screen grid place-items-center bg-background px-4">
<div className="max-w-md text-center space-y-4">
<Logo size="lg" />
<h1 className="text-2xl font-bold">Criar conta</h1>
<p className="text-muted-foreground">
Cadastro completo será implementado na Etapa 2.
</p>
{plan && (
<p className="text-sm bg-primary/10 text-primary rounded-lg px-3 py-2 inline-block">
Plano selecionado: <strong>{plan}</strong> · {cycle === "yearly" ? "anual" : "mensal"}
</p>
)}
<div>
<Link to="/" className="inline-block text-primary hover:underline"> Voltar para o início</Link>
</div>
</div>
</div>
);
}