Control Horario · Registro de Jornada · Vibecoding

FichaApp

App de registro diario de jornada laboral para un solo usuario. Offline, local, exportable. Primera fase de un sistema full-stack con panel web de administración.

React Native Expo TypeScript AsyncStorage expo-sharing CSV + JSON Supabase (fase 2) Next.js (fase 3)
F1 Este manual App offline · entrada/salida · historial · CSV/JSON
F2 Iteraciones Notas · estadísticas · GPS · Supabase + login
F3 Panel web Next.js · dashboard admin · equipos · Vercel
Pantalla · Inicio

🟢 Pantalla de Fichaje

Reloj en tiempo real · Botón ENTRADA y SALIDA · Resumen del día

Mockup de la pantalla

FichajeApp
LUNES 29 JUNIO 2026
--:--:--
Sin fichar entrada hoy
▶ ENTRADA
— Ficha para empezar a contar —
Entrada08:32
Salida—
Trabajando…4h 12min
■ SALIDA

Lógica de estados

①

Sin fichar hoyReloj en tiempo real. Botón verde ENTRADA grande. Estado: "Sin fichar entrada hoy".

②

Entrada fichadaMuestra hora de entrada, contador de tiempo transcurrido en tiempo real. Botón rojo SALIDA.

③

Jornada completaResumen con entrada, salida y total de horas calculado. Mensaje de cierre del día.

DATO EN ASYNCSTORAGE
{
  "id": "2026-06-29",
  "horaEntrada": "08:32",
  "horaSalida": null,
  "totalMinutos": null
}
Pantalla · Historial

📋 Historial de Jornadas

Lista cronológica · Horas totales · Swipe para eliminar

Mockup de la pantalla

Historial
23 registros↑ más reciente primero
Hoy, 29 jun
08:32→—
en curso
Vie, 28 jun
09:00→18:00
9h 00m
Jue, 27 jun
08:45→17:30
8h 45m
Mié, 26 jun
08:00→16:00
8h 00m
Mar, 25 jun
09:15→18:45
9h 30m
Lun, 24 jun
08:30→17:30
9h 00m
← desliza para eliminar →

Funcionalidad

①

Lista completa ordenadaTodos los registros de AsyncStorage ordenados por fecha descendente. Más reciente arriba.

②

Estado visual por filaTotal en cian si completo. Naranja "en curso" si sin salida. Guión "—" si falta la salida.

③

Eliminar con swipeSwipe a la izquierda sobre una fila muestra botón rojo de eliminar. Confirmación antes de borrar.

④

Días sin salidaSi solo hay entrada (sin salida), la fila se muestra en naranja como recordatorio.

Pantalla · Exportar

📤 Exportación de Datos

CSV · JSON · expo-sharing · WhatsApp · Email · Files

Mockup de la pantalla

Exportar
Registros disponibles: 23 jornadas
📄
Exportar CSVfichajes_2026-06-29.csv · compatible con Excel
{ }
Exportar JSONfichajes_2026-06-29.json · todos los campos
PREVISUALIZACIÓN CSV
fecha,entrada,salida,total_horas
2026-06-28,09:00,18:00,9h 00min
2026-06-27,08:45,17:30,8h 45min
2026-06-26,08:00,16:00,8h 00min

Cómo funciona la exportación

①

Lee AsyncStorageLee todos los registros guardados y los ordena por fecha para generar el archivo.

②

Genera el archivo en memoriaConstruye el string CSV o el objeto JSON con todos los campos y lo escribe en un archivo temporal.

③

expo-sharing abre el panel nativoEl sistema operativo muestra el selector de apps: WhatsApp, email, Archivos, Drive, etc.

④

Nombre de archivo con fechaEl archivo se nombra automáticamente con la fecha de exportación para facilitar el archivado.

⚠ Nota legal

El RDL 8/2019 obliga a las empresas a registrar la jornada de sus trabajadores. Este CSV es válido como soporte documental básico.

Prompt de arranque · OpenCode / IA
Genera FichajeApp desde cero
Copia este prompt en OpenCode con la carpeta 'fichaje' abierta en VS Code
PROMPT COMPLETO · OpenCode
Crea una app de control horario en React Native con Expo y TypeScript. La app se llama FichajeApp. // PANTALLA 1 — INICIO - Reloj en tiempo real (useEffect + setInterval) - Estado: sin fichar / entrada fichada / completo - Botón verde ENTRADA → guarda horaEntrada - Botón rojo SALIDA → guarda horaSalida + calcula total - Resumen del día al completar la jornada // PANTALLA 2 — HISTORIAL - Lista de registros de AsyncStorage, fecha desc - Columnas: fecha, entrada, salida, total horas - Swipe-to-delete con confirmación - Naranja si falta la salida // PANTALLA 3 — EXPORTAR - Botón exportar CSV con expo-sharing - Botón exportar JSON con expo-sharing - Nombre de archivo: fichajes_YYYY-MM-DD // DATOS en AsyncStorage clave 'fichajes': // { id, fecha, horaEntrada, horaSalida, totalMinutos } React Navigation tabs 3 pantallas. Fondo #0f172a, cian #0891B2, verde #16A34A, rojo #DC2626. Reloj: font monoespaciada, fontSize 64. Empieza por la estructura de carpetas y App.tsx.

Antes de ejecutar

1

Crea la carpeta del proyectoCrea una carpeta llamada fichaje en tu ordenador y ábrela en VS Code.

2

Abre OpenCode en el terminalCon la carpeta abierta en VS Code, abre un terminal y ejecuta opencode.

3

Pega el prompt y pulsa EnterCopia el prompt completo de la izquierda y pégalo en OpenCode.

CONSEJO DE VIBECODING

Si algo no funciona como esperas, no edites el código. Escribe un prompt de corrección describiendo exactamente qué está mal y qué quieres que cambie. La iteración es el aprendizaje.

Mejoras iterativas · Aplica en orden

Evolución de FichajeApp

5 mejoras que llevan la app de local a full-stack con panel web

Fase 2 · App mejorada

+1

Notas y tipo de jornadaModal post-fichaje para añadir nota libre y tipo: Normal, Teletrabajo, Guardia, Desplazamiento, Festivo.

+2

Resumen semanal y mensualNueva pantalla con KPIs: días trabajados, horas totales, media diaria, barra de progreso 40h semanales.

+3

Geolocalización con mapaGPS automático al fichar con expo-location. Mapa en el detalle del registro con pins de entrada y salida.

+4

Supabase + login + multi-dispositivoMigra AsyncStorage a Supabase. Login con email. Sync automático. Modo offline con cola de sincronización.

Fase 3 · Panel web

+5

Panel web Next.js + VercelDashboard de administración con tabla de usuarios, filtros, gráfico de horas semanales por usuario y gestión de equipos. Desplegado gratis en Vercel.

VISIÓN DEL SISTEMA COMPLETO
App móvil→Registro individual de jornada
Supabase→Base de datos centralizada en la nube
Panel web→Administración de usuarios y equipos
Vercel→Despliegue gratuito del panel
Hoja de ruta · Sistema completo
De app local a plataforma de empresa
FASE 1
App germinal · Offline · Un usuario

App móvil completa con las 3 pantallas. Registro local en AsyncStorage. Exportación CSV y JSON. Funciona sin internet, sin cuenta, sin servidor.

React NativeExpoAsyncStorageexpo-sharingCSV + JSONOffline 100%
FASE 2
App enriquecida · Cloud · Multi-dispositivo

Añade notas, tipos de jornada, estadísticas semanales, geolocalización con mapa, autenticación con Supabase y sincronización multi-dispositivo con modo offline.

expo-locationreact-native-mapsSupabase AuthSupabase DBSync offlinePush notifications
FASE 3
Panel web · Administración · Equipos y empresas

Dashboard web con Next.js para administradores: tabla de usuarios, historial por empleado, gráficos semanales, gestión de equipos y exportación masiva. Desplegado en Vercel.

Next.jsTailwind CSSVercelchart.jsRoles adminExport CSV por usuario