β Implementado
Design System β Primitivos
9 componentes
Todos los primitivos estΓ‘n completos y funcionando con soporte light/dark mode via
useTheme(). Son la base sobre la que se construyen todos los componentes de negocio.Text
β Done
10 variantes tipogrΓ‘ficas (display, headline, title, subtitle, body, bodyMedium, small, caption, label, mono). Soporte de color semΓ‘ntico.
Button
β Done
5 variantes (primary, secondary, outline, ghost, destructive) Γ 3 tamaΓ±os. Estado loading con spinner.
Card
β Done
4 variantes (default, elevated, outlined, flat). Base de contenedor reutilizable.
Input
β Done
Campo de texto con label, placeholder, mensaje de error, helper text, Γconos left/right.
Badge
β Done
6 variantes (primary, success, warning, error, info, neutral) Γ 2 tamaΓ±os.
Divider
β Done
Separador horizontal con variante labeled (texto centrado).
Skeleton
β Done
Placeholder animado (shimmer) para estados de carga. Configurable en ancho/alto.
TransactionCard
β Done
Tarjeta de transacciΓ³n con estado categorizado y pendiente. Swipe-to-reveal con acciones Edit/Delete via Feather icons. 18 category color mappings.
β Basado en: TransactionList.tsx
BudgetCard
β Done
Tarjeta de presupuesto con 3 estados (normal/warning/exceeded), barra de progreso, y panel expansible con ΓΊltimas 3 transacciones + "Ver todas" CTA.
β Basado en: BudgetCard.tsx
P1 Β· Foundation
Auth + Dashboard
8 componentes
LoginForm
P1 Β· Pendiente
Email + password con validaciΓ³n Zod. Manejo de errores de servidor (credenciales incorrectas). Link a registro y forgot password.
β Web: Auth.tsx
RegisterForm
P1 Β· Pendiente
Email ΓΊnico + password + confirm password. ValidaciΓ³n de requisitos de seguridad. Redirect al dashboard al completar.
β Web: Auth.tsx
ForgotPasswordForm
P1 Β· Pendiente
EnvΓo de email de recuperaciΓ³n. Estado de Γ©xito con instrucciones. Deep link para abrir formulario de reset.
β Web: ForgotPassword.tsx
AppHeader
β Done
Barra superior con logo FinPal + menΓΊ hamburguesa (dropdown: cerrar sesiΓ³n, exportar datos, preferencias, tema). Sticky con safe area.
β Web: Index.tsx (nav bar)
StatsCard
β Done
Tarjeta de resumen con icono, valor principal y label. Variantes: total gastado, presupuesto restante, ingresos, balance. Soporte de tendencia (β/β).
β Web: StatsCard.tsx
EmptyState
β Done
Estado vacΓo genΓ©rico con icono, tΓtulo, descripciΓ³n y CTA opcional. Reutilizable para listas vacΓas de transacciones, presupuestos, Gmail.
LoadingScreen
β Done
Pantalla de carga inicial con logo + spinner. Se muestra durante verificaciΓ³n de auth y carga de datos crΓticos.
PeriodNavigator
β Done
Navegador de perΓodo β Anterior / Mes actual / Siguiente β. Muestra nombre del mes + rango de fechas exacto del perΓodo. BotΓ³n "Hoy" para regresar al perΓodo actual.
β Web: BudgetPeriodNavigator.tsx
P2 Β· Budgets
Presupuestos Core
6 componentes
BottomSheet
P2 Β· Pendiente
Modal deslizable desde abajo. Base reutilizable para formularios, confirmaciones y selectores. Drag handle, backdrop dismiss, snap points.
NewBudgetSheet
P2 Β· Pendiente
Bottom sheet para crear presupuesto: nombre de categorΓa (con sugerencias), monto y moneda. ValidaciΓ³n con react-hook-form + Zod.
β Web: NewBudgetModal.tsx
EditBudgetSheet
P2 Β· Pendiente
Bottom sheet para editar monto o nombre de categorΓa de un presupuesto existente. Precarga los valores actuales.
β Web: AddBudgetCard.tsx inline edit
CategoryPicker
P2 Β· Pendiente
Selector de categorΓa reutilizable (en formularios de presupuestos y transacciones). Lista de categorΓas existentes + opciΓ³n "Nueva categorΓa". Chips con color de categorΓa.
BudgetWizard
P2 Β· Pendiente
Flujo multi-paso para primer uso: selecciΓ³n de perfil de gasto β categorΓas personalizables β configuraciΓ³n de perΓodo. Se muestra cuando no hay presupuestos.
β Web: BudgetWizard.tsx
MissingBudgetsBanner
P2 Β· Pendiente
Banner con CTA "Copiar presupuestos del mes anterior" cuando hay categorΓas del perΓodo anterior sin crear en el perΓodo actual.
β Web: CreateMissingBudgetsCard.tsx
P3 Β· Transactions
Transacciones Core
7 componentes
TransactionList
P3 Β· Pendiente
FlatList paginada de TransactionCards con infinite scroll. SearchBar integrado con debounce. Estado vacΓo diferenciado (sin resultados vs. sin transacciones).
β Web: TransactionList.tsx
AddTransactionFAB
P3 Β· Pendiente
Floating Action Button (+) posicionado sobre el tab bar. Abre el TransactionFormSheet al presionar.
β Web: AddTransactionButton.tsx
TransactionFormSheet
P3 Β· Pendiente
Bottom sheet con formulario completo: monto, descripciΓ³n, categorΓa (CategoryPicker), fecha (DatePicker), tipo (gasto/ingreso), moneda. Modo crear y editar.
β Web: TransactionForm.tsx + EditTransactionDialog.tsx
UncategorizedBanner
P3 Β· Pendiente
SecciΓ³n colapsable en el dashboard con transacciones sin categorΓa. Contador visual (badge rojo). Prioridad alta en la jerarquΓa visual.
β Web: UncategorizedTransactions.tsx
CategorySelectSheet
P3 Β· Pendiente
Bottom sheet rΓ‘pido para asignar categorΓa a una transacciΓ³n pendiente. Lista de categorΓas existentes + opciΓ³n de crear presupuesto nuevo.
DeleteConfirmSheet
P3 Β· Pendiente
Bottom sheet de confirmaciΓ³n de borrado con mensaje descriptivo y botones Cancel/Delete. Reutilizable para transacciones y presupuestos.
SearchBar
P3 Β· Pendiente
Barra de bΓΊsqueda con Γcono de lupa, clear button (Γ), debounce 300ms. Reset de paginaciΓ³n al cambiar la query. Estado de "sin resultados" para bΓΊsqueda vacΓa.
β Web: TransactionList.tsx (search input)
P4 Β· Gmail
IntegraciΓ³n Gmail / Penny
4 componentes
β οΈ Requiere Development Build (EAS). Usa
expo-auth-session con PKCE β no WebView. Necesita deep links configurados en app.json.GmailConnectButton
P4 Β· Gmail
BotΓ³n "Conectar con Google" que inicia el flujo OAuth 2.0 con PKCE via expo-auth-session. Maneja callback y almacena tokens.
β Web: GmailConnectButton.tsx
GmailStatusCard
P4 Β· Gmail
Card de estado de cuenta Gmail: conectado (verde) / sincronizando (amarillo) / error (rojo). Muestra email, ΓΊltima sincronizaciΓ³n y monitoreo activo.
β Web: GmailStatusIndicator.tsx + GmailAccountCard.tsx
GmailAccountList
P4 Β· Gmail
Lista de cuentas Gmail conectadas con opciones: pausar/reanudar monitoreo, desconectar cuenta. Estado vacΓo con CTA de conectar.
β Web: GmailAccountList.tsx
GmailSettingsScreen
P4 Β· Gmail
Pantalla completa de gestiΓ³n de Gmail (fuera de tabs). Incluye GmailAccountList + GmailConnectButton + info de integraciΓ³n con Penny.
β Web: GmailSettings.tsx
P5 Β· Push & Native
Push Notifications + BiometrΓa
3 componentes
β οΈ Requiere Development Build (EAS) con FCM credentials (Android) y APNs (iOS). Nuevas tablas Prisma: PushToken, NotificationSetting.
BiometricPrompt
P5 Β· Native
Prompt de autenticaciΓ³n biomΓ©trica (Face ID / Touch ID) al abrir la app si hay sesiΓ³n activa. Usa expo-local-authentication + SecureStore.
NotificationSettings
P5 Β· Native
Panel de configuraciΓ³n de alertas push por categorΓa: toggle on/off y umbral de % para alerta de presupuesto. Guardado en backend via NotificationSetting table.
PushPermissionPrompt
P5 Β· Native
Pantalla/modal de solicitud de permisos de notificaciones con valor claro ("Te avisamos cuando te acercas al lΓmite"). Solo se muestra una vez.
P6 Β· Polish & Offline
SincronizaciΓ³n Offline
2 componentes
Requiere MMKV para offline queue, NetInfo para detecciΓ³n de conectividad, y lΓ³gica de reconciliaciΓ³n de cambios en Zustand.
OfflineBanner
P6 Β· Offline
Banner persistente en la parte superior cuando no hay conexiΓ³n: "Sin conexiΓ³n β los cambios se sincronizarΓ‘n al reconectar". Desaparece automΓ‘ticamente al recuperar conexiΓ³n.
SyncIndicator
P6 Β· Offline
Indicador sutil (spinner pequeΓ±o o badge en el header) cuando hay cambios pendientes de sincronizar. Muestra conteo de operaciones en cola.
Screens
Pantallas / Rutas
10 pantallas
Estructura de rutas con Expo Router. Las pantallas de tabs ya existen como archivos vacΓos; las de auth y modales estΓ‘n pendientes.
app/(auth)/login.tsx
Login
Pantalla de inicio de sesiΓ³n con LoginForm. Redirect a /tabs si ya autenticado.
P1
app/(auth)/register.tsx
Registro
Pantalla de creaciΓ³n de cuenta con RegisterForm.
P1
app/(auth)/forgot-password.tsx
Recuperar ContraseΓ±a
ForgotPasswordForm + confirmaciΓ³n de envΓo de email.
P1
app/(tabs)/index.tsx
Dashboard
Resumen del perΓodo: StatsCards + PeriodNavigator + BudgetCards + UncategorizedBanner. Archivo existe, pendiente de implementar.
P1
app/(tabs)/budgets.tsx
Presupuestos
Lista completa de BudgetCards + FAB para agregar + BudgetWizard (primer uso). Archivo existe, vacΓo.
P2
app/(tabs)/transactions.tsx
Gastos
TransactionList con SearchBar + AddTransactionFAB. Filtros por categorΓa opcionales. Archivo existe, vacΓo.
P3
app/(tabs)/settings.tsx
Ajustes
Idioma, moneda, tipo de perΓodo, tema, notificaciones. Actualmente tiene el design system showcase.
P1
app/gmail-settings.tsx
ConfiguraciΓ³n Gmail
GmailSettingsScreen β gestiΓ³n de cuentas Gmail conectadas y monitoreo Penny.
P4
app/preferences.tsx
Preferencias
Idioma, moneda predeterminada, tipo de perΓodo. Puede combinarse con settings.
P2
app/reset-password.tsx
Reset Password
Formulario de nueva contraseΓ±a accesible via deep link desde el email de reset.
P1