feat: add company logo and configure Cloudflare tunnel support

- Add company logo to login page and all sidebar variants
- Configure Next.js rewrites to proxy /api/* to backend
- Enable external access via Cloudflare Zero Trust tunnel

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
This commit is contained in:
Consultoria AS
2026-01-22 07:32:21 +00:00
parent 7454cf67e6
commit 4fd6f01303
6 changed files with 47 additions and 9 deletions

View File

@@ -3,6 +3,7 @@
import { useState } from 'react'; import { useState } from 'react';
import { useRouter } from 'next/navigation'; import { useRouter } from 'next/navigation';
import Link from 'next/link'; import Link from 'next/link';
import Image from 'next/image';
import { Button } from '@/components/ui/button'; import { Button } from '@/components/ui/button';
import { Input } from '@/components/ui/input'; import { Input } from '@/components/ui/input';
import { Label } from '@/components/ui/label'; import { Label } from '@/components/ui/label';
@@ -40,6 +41,16 @@ export default function LoginPage() {
return ( return (
<Card> <Card>
<CardHeader className="text-center"> <CardHeader className="text-center">
<div className="flex justify-center mb-4">
<Image
src="/logo.jpg"
alt="Horux360"
width={80}
height={80}
className="rounded-full"
priority
/>
</div>
<CardTitle className="text-2xl">Iniciar Sesión</CardTitle> <CardTitle className="text-2xl">Iniciar Sesión</CardTitle>
<CardDescription> <CardDescription>
Ingresa tus credenciales para acceder a tu cuenta Ingresa tus credenciales para acceder a tu cuenta

View File

@@ -1,6 +1,7 @@
'use client'; 'use client';
import Link from 'next/link'; import Link from 'next/link';
import Image from 'next/image';
import { usePathname } from 'next/navigation'; import { usePathname } from 'next/navigation';
import { cn } from '@/lib/utils'; import { cn } from '@/lib/utils';
import { import {
@@ -69,9 +70,13 @@ export function SidebarCompact() {
{/* Logo */} {/* Logo */}
<div className="flex h-14 items-center border-b px-4"> <div className="flex h-14 items-center border-b px-4">
<Link href="/dashboard" className="flex items-center gap-2"> <Link href="/dashboard" className="flex items-center gap-2">
<div className="h-8 w-8 rounded bg-primary flex items-center justify-center flex-shrink-0"> <Image
<span className="text-primary-foreground font-bold text-lg">H</span> src="/logo.jpg"
</div> alt="Horux360"
width={32}
height={32}
className="rounded-full flex-shrink-0"
/>
<span className={cn( <span className={cn(
'font-bold text-lg whitespace-nowrap transition-opacity duration-300', 'font-bold text-lg whitespace-nowrap transition-opacity duration-300',
expanded ? 'opacity-100' : 'opacity-0 w-0 overflow-hidden' expanded ? 'opacity-100' : 'opacity-0 w-0 overflow-hidden'

View File

@@ -1,6 +1,7 @@
'use client'; 'use client';
import Link from 'next/link'; import Link from 'next/link';
import Image from 'next/image';
import { usePathname } from 'next/navigation'; import { usePathname } from 'next/navigation';
import { cn } from '@/lib/utils'; import { cn } from '@/lib/utils';
import { import {
@@ -59,9 +60,13 @@ export function SidebarFloating() {
<div className="flex h-full flex-col p-4"> <div className="flex h-full flex-col p-4">
{/* Logo */} {/* Logo */}
<div className="flex items-center gap-3 mb-6 px-2"> <div className="flex items-center gap-3 mb-6 px-2">
<div className="h-10 w-10 rounded-xl bg-gradient-to-br from-primary to-accent flex items-center justify-center shadow-lg shadow-primary/25"> <Image
<span className="text-primary-foreground font-bold text-xl">H</span> src="/logo.jpg"
</div> alt="Horux360"
width={40}
height={40}
className="rounded-full shadow-lg shadow-primary/25"
/>
<div> <div>
<span className="font-bold text-lg block">Horux360</span> <span className="font-bold text-lg block">Horux360</span>
<span className="text-xs text-muted-foreground">Análisis Fiscal</span> <span className="text-xs text-muted-foreground">Análisis Fiscal</span>

View File

@@ -1,6 +1,7 @@
'use client'; 'use client';
import Link from 'next/link'; import Link from 'next/link';
import Image from 'next/image';
import { usePathname } from 'next/navigation'; import { usePathname } from 'next/navigation';
import { cn } from '@/lib/utils'; import { cn } from '@/lib/utils';
import { import {
@@ -60,9 +61,13 @@ export function Sidebar() {
{/* Logo */} {/* Logo */}
<div className="flex h-16 items-center border-b px-6"> <div className="flex h-16 items-center border-b px-6">
<Link href="/dashboard" className="flex items-center gap-2"> <Link href="/dashboard" className="flex items-center gap-2">
<div className="h-8 w-8 rounded-lg bg-primary flex items-center justify-center"> <Image
<span className="text-primary-foreground font-bold text-lg">H</span> src="/logo.jpg"
</div> alt="Horux360"
width={32}
height={32}
className="rounded-full"
/>
<span className="font-bold text-xl">Horux360</span> <span className="font-bold text-xl">Horux360</span>
</Link> </Link>
</div> </div>

View File

@@ -1,6 +1,18 @@
/** @type {import('next').NextConfig} */ /** @type {import('next').NextConfig} */
const nextConfig = { const nextConfig = {
transpilePackages: ['@horux/shared'], transpilePackages: ['@horux/shared'],
async rewrites() {
return [
{
source: '/api/:path*',
destination: 'http://localhost:4000/api/:path*',
},
{
source: '/health',
destination: 'http://localhost:4000/health',
},
];
},
}; };
module.exports = nextConfig; module.exports = nextConfig;

BIN
apps/web/public/logo.jpg Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.5 KiB