Finence es una aplicacion web para gestionar tus finanzas personales. Controla tus ingresos y gastos de manera sencilla, visualiza tu historial financiero y mantien un registro detallado de todas tus transacciones.
- Gestion de transacciones: Agrega, edita y elimina ingresos y gastos
- Resumen financiero: Visualiza tus ingresos totales, gastos y balance en tiempo real
- Historial completo: Consulta todas tus transacciones pasadas con detalles
- Gráfico de tendencias: Observa la evolución de tus finanzas con gráficos visuales
- Autenticación segura: Sistema de inicio de sesión con Supabase Auth
- Diseño responsivo: Interfaz adaptativa que funciona en dispositivos móviles y escritorio
- Frontend: React 19 con TypeScript
- Build: Vite
- Estilos: TailwindCSS v4
- Estado: Zustand
- Autenticacion: Supabase Auth
- Base de datos: Supabase (PostgreSQL)
- Graficos: Recharts
- Enrutamiento: React Router DOM v7
- Iconos: React Icons
- Notificaciones: React Hot Toast
- Node.js 18+
- npm o pnpm
- Cuenta de Supabase (para la base de datos)
- Clona el repositorio:
git clone https://github.com/tu-usuario/finence.git
cd finence- Instala las dependencias:
npm install
# o si prefieres pnpm
pnpm install- Configura las variables de entorno:
- Crea un archivo
.enven la raiz del proyecto - Anade tus credenciales de Supabase:
- Crea un archivo
VITE_SUPABASE_URL=tu_url_de_supabase
VITE_SUPABASE_KEY=tu_clave_anonima- Crea un proyecto en Supabase
- Crea dos tablas:
ingresosygastoscon las siguientes columnas:id(uuid, primary key, default: gen_random_uuid())monto(numeric)descripcion(text)fecha(timestamp with time zone)user_id(uuid, foreign key referencing auth.users)
- Configura las politicas RLS (Row Level Security) para permitir acceso solo al usuario propietario
Inicia el servidor de desarrollo:
npm run devLa aplicacion estara disponible en http://localhost:5173
- Login: Pagina de autenticacion para usuarios nuevos y existentes
- Home: Panel principal con resumen de finanzas y grafico de tendencias
- Historial: Lista completa de todas las transacciones
- Opciones: Configuracion de la cuenta y zona de peligro (reset de datos)
src/
├── components/ # Componentes de la aplicacion
│ ├── common/ # Componentes reutilizables
│ │ ├── ActivityList.tsx
│ │ ├── Header.tsx
│ │ ├── SummaryCards.tsx
│ │ ├── TrendChart.tsx
│ │ └── UserWidget.tsx
│ ├── forms/ # Formularios
│ │ └── TransactionForm.tsx
│ ├── modals/ # Modales
│ │ ├── ConfirmDeleteModal.tsx
│ │ └── EditTransactionModal.tsx
│ └── ui/ # Componentes de UI basica
│ ├── Skeleton.tsx
│ └── TitleUpdater.tsx
├── constants/ # Constantes de la aplicacion
│ └── index.ts
├── hooks/ # Hooks personalizados
│ ├── useAuth.ts
│ └── useUsuario.ts
├── lib/ # Configuracion de librerias
│ └── supabaseClient.ts
├── pages/ # Paginas de la aplicacion
│ ├── History.tsx
│ ├── Home.tsx
│ ├── Login.tsx
│ └── Options.tsx
├── routes/ # Configuracion de rutas
│ └── ProtectedRoute.tsx
├── services/ # Servicios externos
│ └── toastService.ts
├── store/ # Gestion de estado global (Zustand)
│ └── useFinanceStore.ts
├── types/ # Definiciones de TypeScript
│ └── finance.ts
├── App.tsx # Componente principal con rutas
├── globals.css # Estilos globales y Tailwind
└── main.tsx # Punto de entrada
La aplicacion sigue una arquitectura basada en:
- Hooks personalizados: Lógica de negocio encapsulada (useAuth, useUsuario)
- Store centralizado: Estado global con Zustand
- Composicion de componentes: Componentes pequeños y reutilizables
- Separacion de preocupaciones: Servicios, tipos, constantes y componentes separados
- El usuario se autentica mediante Supabase Auth
- Los datos se almacenan en la store de Zustand
- Los componentes consumen la store directamente
- Las operaciones se realizan a traves de la store
| Comando | Descripcion |
|---|---|
npm run dev |
Inicia el servidor de desarrollo |
npm run build |
Compila para produccion |
npm run lint |
Ejecuta el linter |
npm run preview |
Previsualiza el build de produccion |
Las contribuciones son bienvenidas! Si deseas mejorar Finence:
- Haz fork del repositorio
- Crea una rama para tu caracteristica (
git checkout -b feature/nueva-caracteristica) - Realiza tus cambios y commitea (
git commit -m 'Agregar nueva característica') - Push a la rama (
git push origin feature/nueva-caracteristica) - Abre un Pull Request
Este proyecto esta bajo la Licencia MIT. Consulta el archivo LICENSE para mas informacion.
Desarrollado como proyecto de práctica.



