Proyecto de portafolio técnico

SBFinance

Aplicación full-stack de finanzas personales

Un sistema de gestión financiera listo para producción que demuestra Clean Architecture, los principios SOLID y patrones modernos de desarrollo full-stack. Hecho con Next.js 16, Go y PostgreSQL.

Clean Architecture
Principios SOLID
Patrón Repository
Inyección de dependencias
Desliza para explorar la arquitectura
Arquitectura del sistema

Clean Architecture

El backend sigue los principios de Clean Architecture con una separación clara de responsabilidades. Las dependencias apuntan hacia adentro y el dominio queda independiente de los frameworks.

Frameworks y drivers

Interfaces externas (HTTP, base de datos, logger)

Gin HTTP Server
PostgreSQL
Zerolog

Adaptadores de interfaz

Convierten los datos entre capas

Handlers
Repositories
DTOs

Capa de aplicación

Lógica de negocio y casos de uso

Services
Use Cases
Validation

Capa de dominio

Entidades y reglas centrales del negocio

User
Account
Transaction
Budget
Las dependencias siempre apuntan hacia adentro → el dominio nunca depende de las capas externas
Patrones de diseño

Patrones implementados

Patrones de diseño estándar de la industria que aseguran mantenibilidad, facilidad de prueba y código limpio.

Patrón Repository

Abstrae el acceso a datos detrás de interfaces, lo que facilita probar con mocks y cambiar de base de datos.

type UserRepository interface {
  Save(ctx, user) error
  FindById(ctx, id) (*User, error)
}

Inyección de dependencias

Los servicios reciben sus dependencias por el constructor, con bajo acoplamiento y fáciles de probar.

func NewUserService(
  repo UserRepository,
) *UserService {
  return &UserService{repo}
}

Patrón DTO

Objetos de petición y respuesta separados de las entidades del dominio para controlar el contrato de la API.

type UserRequest struct {
  Name  string `validate:"required"`
  Email string `validate:"email"`
}

Patrón Factory

Funciones constructoras crean las entidades del dominio correctamente inicializadas.

func NewUser(id, name, email string) *User {
  return &User{
    Id: id, Name: name, Email: email,
  }
}
Stack tecnológico

Tecnologías utilizadas

Un stack moderno y listo para producción, optimizado para el rendimiento, la experiencia de desarrollo y la escalabilidad.

Frontend

Next.js 16

App Router y Server Components

React 19

Funciones concurrentes y hooks

TypeScript

Tipado completo

TanStack Query

Estado del servidor y caché

Tailwind CSS

Estilos utility-first

shadcn/ui

Componentes de Radix UI

Backend

Go 1.27

Backend de alto rendimiento

Gin

Framework web HTTP

PostgreSQL

Base de datos relacional

JWT

Autenticación segura

Docker

Contenedores

Aspectos técnicos

Implementaciones clave

Funciones técnicas y decisiones de ingeniería que hacen este proyecto apto para producción.

Autenticación JWT

Autenticación sin estado con tokens, contraseñas con bcrypt y expiración configurable.

Migraciones de base de datos

Migraciones versionadas con golang-migrate, sobre PostgreSQL en producción y en las pruebas (testcontainers).

Procesos en segundo plano

Tareas programadas para las transacciones recurrentes, con apagado ordenado.

Caché en memoria

Capa de caché de transacciones con un TTL de 5 minutos para lecturas más rápidas.

Logs estructurados

Zerolog para logs en JSON con niveles configurables e IDs de correlación.

Internacionalización

Soporte completo de idiomas (ES/EN) con next-intl y traducciones tipadas.

terminal

Código abierto

Explora el código, aprende de la implementación o contribuye al proyecto.

Clona el repositorio
git clone https://github.com/Osmait/sbfinance.git