Una aplicación web moderna para crear, gestionar y sincronizar presupuestos con almacenamiento flexible y gratuito.
- Local: Almacenamiento completamente local sin costos
- Google Sheets: Utiliza el espacio gratuito de Google Drive (15GB)
- Híbrido: Sincronización automática entre local y Google Sheets
- Crear presupuestos profesionales con múltiples ítems
- Calcular automáticamente subtotales, descuentos e impuestos
- Generar PDFs profesionales para envío a clientes
- Historial completo de presupuestos guardados
- Sincronización automática cada 5 minutos
- Detección de cambios sin sincronizar
- Resolución automática de conflictos
- Funciona offline con sincronización al reconectar
- Exportar datos a JSON (local, Google Sheets, o fusionado)
- Importar datos desde archivos de backup
- Migración automática entre sistemas de almacenamiento
- Respaldo automático en múltiples ubicaciones
- Vue 3 con Composition API y
<script setup> - TypeScript para type safety
- Vite para desarrollo rápido
- Google Sheets API para almacenamiento gratuito
- jsPDF para generación de PDFs
- Vue Router para navegación
# Clonar el repositorio
git clone [url-del-repo]
cd presupuesto
# Instalar dependencias
bun install
# Configurar variables de entorno
cp .env.example .env.local
# Editar .env.local con tus credenciales de Google API
# Iniciar servidor de desarrollo
bun run devCrear .env.local con:
# Google Sheets API (para almacenamiento gratuito)
VITE_GOOGLE_CLIENT_ID=tu_client_id_de_google_console
VITE_GOOGLE_API_KEY=tu_api_key_de_google_console
# Opcional: configuración adicional
VITE_DEFAULT_LOGO_URL=url_del_logo_por_defecto- Ve a Google Cloud Console
- Crea un nuevo proyecto o selecciona uno existente
- Habilita las APIs: Google Sheets API y Google Drive API
- Crea credenciales (API Key y OAuth 2.0 Client ID)
- Configura los orígenes autorizados para tu dominio
- Almacenamiento completamente local
- Sin costos ni dependencias externas
- Ideal para uso personal o privado
- Almacenamiento en Google Sheets (15GB gratis)
- Acceso desde cualquier dispositivo
- Respaldo automático en tu Google Drive
- Lo mejor de ambos mundos
- Sincronización automática bidireccional
- Funciona offline con sync al reconectar
import { setStorageMode } from '@/services/backupService';
import { authenticateUser } from '@/services/googleSheetsAuth';
// Para Google Sheets, primero autenticar
await authenticateUser();
setStorageMode('google-sheets');
// Para modo híbrido
setStorageMode('hybrid');
// Para solo local
setStorageMode('local-only');<script setup lang="ts">
import { useUnifiedStorage } from '@/composables/useUnifiedStorage';
const {
budgets,
settings,
loading,
saveBudget,
performSync
} = useUnifiedStorage();
</script>import { downloadBackup } from '@/services/backupService';
// Descargar backup completo
await downloadBackup('both');import { importBackupFile } from '@/services/backupService';
// Importar desde archivo JSON
await importBackupFile(file, 'both');src/
├── components/
│ ├── SettingsPanel.vue # Panel de configuración y sync
│ ├── BudgetForm.vue # Formulario de presupuestos
│ └── BudgetHistory.vue # Historial de presupuestos
├── services/
│ ├── unifiedStorage.ts # Servicio de almacenamiento unificado
│ ├── backupService.ts # Sistema de backup/restore
│ ├── googleSheetsAuth.ts # Autenticación con Google
│ ├── googleSheetsCRUD.ts # Operaciones CRUD en Sheets
│ └── budgetStorage.ts # Almacenamiento local (legacy)
├── composables/
│ └── useUnifiedStorage.ts # Composable para gestión de estado
└── types/
└── index.ts # Definiciones de tipos TypeScript
- Fork el proyecto
- Crea una rama para tu feature (
git checkout -b feature/AmazingFeature) - Commit tus cambios (
git commit -m 'Add some AmazingFeature') - Push a la rama (
git push origin feature/AmazingFeature) - Abre un Pull Request
¡Completamente GRATIS!
- ✅ Google Sheets API: Gratuita
- ✅ Google Drive: 15GB gratis (suficiente para miles de presupuestos)
- ✅ Hosting: Puede deployarse gratis en Vercel, Netlify, etc.
- ✅ Sin suscripciones ni pagos recurrentes
MIT License - ve LICENSE para detalles.
Si ves errores como "IdentityCredentialError" o "Error retrieving a token":
-
Verifica tu configuración:
# Tu .env.local debe contener credenciales reales: VITE_GOOGLE_CLIENT_ID=tu_client_id_real.apps.googleusercontent.com VITE_GOOGLE_API_KEY=tu_api_key_real -
Sigue la guía completa: Ver GOOGLE_SHEETS_TROUBLESHOOT.md
-
Configuración básica en Google Cloud Console:
- Habilita Google Sheets API y Google Drive API
- Crea OAuth 2.0 Client ID para aplicación web
- Agrega
http://localhost:5173a orígenes autorizados - Completa OAuth Consent Screen
GOOGLE_SHEETS_TROUBLESHOOT.md- Guía completa de solución de problemas.env.example- Ejemplo de configuración con instrucciones detalladas
Si encuentras algún problema, por favor abre un issue con:
- Descripción del problema
- Pasos para reproducir
- Modo de almacenamiento usado
- Capturas de pantalla si es relevante
- Vue.js team por el excelente framework
- Google por las APIs gratuitas
- Comunidad open source por las librerías utilizadas