{"id":35133460,"url":"https://github.com/dtreasuresp/webquote","last_synced_at":"2026-01-26T00:28:34.005Z","repository":{"id":325027916,"uuid":"1095392902","full_name":"dtreasuresp/webquote","owner":"dtreasuresp","description":"WebQuote es una solución digital que transforma la complejidad de las cotizaciones en un proceso ágil, transparente y profesional. Diseñado para proyectos web, permite a empresas y clientes construir propuestas claras y competitivas en cuestión de minutos.","archived":false,"fork":false,"pushed_at":"2026-01-17T23:31:08.000Z","size":49173,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-01-18T06:52:39.209Z","etag":null,"topics":["quote-pipeline-management","quotes-application","webapp"],"latest_commit_sha":null,"homepage":"https://webquote.vercel.app","language":"TypeScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"cc0-1.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/dtreasuresp.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-11-13T01:48:09.000Z","updated_at":"2026-01-04T23:22:36.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/dtreasuresp/webquote","commit_stats":null,"previous_names":["dtreasuresp/webquote"],"tags_count":9,"template":false,"template_full_name":null,"purl":"pkg:github/dtreasuresp/webquote","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dtreasuresp%2Fwebquote","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dtreasuresp%2Fwebquote/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dtreasuresp%2Fwebquote/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dtreasuresp%2Fwebquote/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/dtreasuresp","download_url":"https://codeload.github.com/dtreasuresp/webquote/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/dtreasuresp%2Fwebquote/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28762490,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-25T23:06:19.311Z","status":"ssl_error","status_checked_at":"2026-01-25T23:03:50.555Z","response_time":113,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["quote-pipeline-management","quotes-application","webapp"],"created_at":"2025-12-28T07:35:37.922Z","updated_at":"2026-01-26T00:28:33.997Z","avatar_url":"https://github.com/dtreasuresp.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# WebQuote - Donde las ideas web se convierten en números claros\n\nWebQuote es una solución digital que transforma la complejidad de las cotizaciones en un proceso ágil, transparente y profesional. Diseñado para proyectos web, permite a empresas y clientes construir propuestas claras y competitivas en cuestión de minutos.\n\n**URL en Producción**: [webquote.vercel.app](https://webquote.vercel.app)\n\n## 🚀 Características\n\n- **Next.js 14** con App Router y TypeScript\n- **Prisma ORM** para gestión de datos\n- **PostgreSQL (Neon)** como base de datos en la nube\n- **Tailwind CSS** con tema corporativo personalizado\n- **Responsive Design** optimizado para todos los dispositivos\n- **Analytics** integrado (Vercel Analytics \u0026 Speed Insights)\n- **Snapshots dinámicos** para paquetes de servicios\n- **Sistema de pago flexible** con múltiples opciones\n- **Despliegue automático** en Vercel y Netlify\n\n## 📋 Requisitos Previos\n\n- **Node.js** 18.x o superior\n- **npm** 9.x o superior\n- **Git** para control de versiones\n\n## 🛠️ Instalación y Configuración\n\n### 1. Clonar el repositorio\n\n```bash\ngit clone https://github.com/dtreasuresp/Urbanisima_Constructora.git\ncd webquote\n```\n\n### 2. Instalar dependencias\n\n```bash\nnpm install\n```\n\n### 3. Configurar variables de entorno\n\nCrear archivo `.env.local` (NO commitar) con las credenciales de BD:\n\n```bash\n# Copiar desde Neon Dashboard (https://console.neon.tech)\nSTORAGE_POSTGRES_PRISMA_URL=\"postgresql://[user]:[password]@[host]-pooler.c-3.us-east-1.aws.neon.tech/neondb?connect_timeout=15\u0026sslmode=require\"\nSTORAGE_POSTGRES_URL_NON_POOLING=\"postgresql://[user]:[password]@[host].c-3.us-east-1.aws.neon.tech/neondb?sslmode=require\"\n```\n\n### 4. Sincronizar base de datos\n\n```bash\nnpm run prisma:generate\nnpm run prisma:migrate\n```\n\n### 5. (Opcional) Ejecutar seed\n\n```bash\nnpm run seed\n```\n\n## 🚀 Desarrollo\n\n```bash\nnpm run dev\n```\n\nAbrir [http://localhost:3000](http://localhost:3000) en el navegador.\n\n## 🏗️ Estructura del Proyecto\n\n```\nwebquote/\n├── src/\n│   ├── app/              # Next.js App Router\n│   │   ├── layout.tsx    # Layout raíz\n│   │   ├── page.tsx      # Página principal\n│   │   ├── api/          # Rutas API\n│   │   └── paquete/      # Páginas de paquetes\n│   ├── components/       # Componentes React reutilizables\n│   ├── lib/              # Utilidades y hooks\n│   │   ├── prisma.ts     # Cliente Prisma\n│   │   ├── snapshotApi.ts # API de snapshots\n│   │   ├── types.ts      # Tipos TypeScript\n│   │   └── hooks/        # Custom React hooks\n│   ├── contexts/         # React Context\n│   ├── styles/           # CSS global y módulos\n│   └── img/              # Imágenes estáticas\n├── prisma/\n│   ├── schema.prisma     # Esquema de BD\n│   ├── migrations/       # Histórico de migraciones\n│   ├── seed.ts           # Script de datos iniciales\n│   └── migrate-*.ts      # Scripts de migración específicos\n├── public/               # Archivos públicos (assets)\n├── scripts/              # Scripts de utilidad\n├── docs/                 # Documentación adicional\n├── .env                  # Variables de entorno (placeholders)\n├── .env.local           # Variables locales (NO COMMITAR)\n├── package.json         # Dependencias y scripts\n├── tsconfig.json        # Configuración TypeScript\n├── next.config.js       # Configuración Next.js\n└── tailwind.config.js   # Configuración Tailwind CSS\n```\n\n## 📦 Scripts Disponibles\n\n| Script | Descripción |\n|--------|-------------|\n| `npm run dev` | Inicia servidor de desarrollo |\n| `npm run build` | Compila para producción |\n| `npm start` | Inicia servidor de producción |\n| `npm run prisma:generate` | Genera cliente Prisma |\n| `npm run prisma:migrate` | Aplica migraciones pendientes |\n| `npm run migrate:payment-options` | Migra opciones de pago |\n| `npm run migrate:servicios-base` | Migra servicios base |\n| `npm run seed` | Carga datos iniciales |\n\n## 🗄️ Base de Datos\n\n### Modelo Principal: PackageSnapshot\n\nTabla que almacena snapshots de paquetes de servicios con:\n\n- **Información básica**: nombre, descripción, emoji, tagline\n- **Servicios**: servicios base, otros servicios (JSON)\n- **Precios**: gestión, desarrollo, hosting, mailbox, dominio\n- **Opciones de pago**: múltiples planes con descuentos\n- **Costos**: inicial, año 1, año 2\n- **Metadata**: fechas de creación/actualización, estado\n\n## 🚢 Despliegue\n\n### En Vercel\n\n1. Conectar repositorio en [Vercel Dashboard](https://vercel.com)\n2. Vercel detectará Next.js automáticamente\n3. Configurar variables de entorno en **Settings \u003e Environment Variables**\n4. El despliegue ocurre automáticamente en cada push a `main`\n\n```bash\n# Deploy manual (si está instalado Vercel CLI)\nvercel deploy --prod\n```\n\n### En Netlify\n\n1. Conectar repositorio en [Netlify Dashboard](https://netlify.com)\n2. Build command: `npm run build`\n3. Publish directory: `.next`\n4. Configurar variables de entorno en **Site Settings \u003e Build \u0026 Deploy**\n\n```bash\n# Deploy manual (si está instalado Netlify CLI)\nnetlify deploy --prod\n```\n\n## 🔐 Seguridad\n\n- **Credenciales de BD**: NUNCA commitar `.env.local`\n- **Variables sensibles**: Usar Vercel/Netlify Dashboard en producción\n- **Prisma**: Usar directUrl para migraciones, PRISMA_URL para aplicación\n- **SQL Injection**: Prisma previene esto automáticamente\n\n## 🛡️ Vulnerabilidades\n\nLas vulnerabilidades son auditadas y corregidas automáticamente:\n\n```bash\nnpm audit fix\n```\n\n## 📊 Paquetes Principales\n\n| Paquete | Versión | Uso |\n|---------|---------|-----|\n| next | 14.2.33 | Framework web |\n| react | 18.3.1 | Librería UI |\n| @prisma/client | 6.19.0 | ORM para BD |\n| typescript | 5.6.3 | Lenguaje tipado |\n| tailwindcss | 3.4.11 | Estilos CSS |\n| sharp | 0.34.5 | Optimización de imágenes |\n\n## 📝 Temas de Diseño\n\n**Paleta corporativa** (Tailwind personalizado):\n\n- **Primario**: Rojo #DC2626 (energía y construcción)\n- **Secundario**: Negro #0F1419 (elegancia)\n- **Acento**: Dorado #F59E0B (destacar ofertas)\n- **Neutral**: Escala de grises completa\n\n## 🤝 Contribuciones\n\n1. Crear branch desde `main`\n2. Hacer cambios y commits\n3. Crear Pull Request con descripción\n4. Esperar aprobación antes de merge\n\n## 📞 Soporte\n\nPara preguntas o problemas:\n\n- Revisar [Documentación de Vercel](https://vercel.com/docs)\n- Revisar [Documentación de Prisma](https://www.prisma.io/docs)\n- Contactar al equipo de desarrollo\n\n\n## 🎨 Admin Panel (Phases 8-10)\n\n### Phase 8: Layout Components ✅\n\nComponentes profesionales y reutilizables para el admin panel:\n\n- **AdminHeader.tsx** (180 líneas)\n  - Header sticky con botones de acción\n  - Estados de carga visuales\n  - Indicador de cambios\n  - Dropdown menu integrado\n\n- **DialogoGenerico.tsx** (180 líneas)\n  - Modal reutilizable con animaciones\n  - 4 tipos: info, warning, error, success\n  - 4 tamaños: sm, md, lg, xl\n  - Cierre con Escape y backdrop\n\n- **SharedComponents.tsx** (250 líneas)\n  - Button: 5 variantes, 3 tamaños\n  - Badge: 6 variantes, 3 tamaños\n  - IconButton: 4 variantes con tooltip\n\n### Phase 9: Utilities Extraction ✅\n\n95+ funciones reutilizables organizadas en 4 módulos:\n\n- **validators.ts** (340 líneas, 20+ funciones)\n  - Validación de email, WhatsApp, teléfono, fechas\n  - Validadores específicos por TAB\n  - Validadores genéricos\n\n- **formatters.ts** (360 líneas, 20+ funciones)\n  - Formateo de fechas (larga, corta, ISO)\n  - Formateo de moneda (USD, COP)\n  - Formateo de números, strings, arrays\n\n- **calculations.ts** (380 líneas, 30+ funciones)\n  - Cálculos de fechas y vencimientos\n  - Cálculos de precios y descuentos\n  - Cálculos de servicios e inversión\n  - Cálculos de snapshots y paquetes\n\n- **generators.ts** (380 líneas, 25+ funciones)\n  - Generación de UUIDs e IDs\n  - Generación de números y secuencias\n  - Generación de configuraciones\n  - Generación de datos de prueba\n\n### Phase 10: Integration ✅\n\nAdminPage.tsx completamente refactorizado e integrado:\n\n- ✅ Componentes integrados (AdminHeader, DialogoGenerico)\n- ✅ Estado centralizado con useAdminState\n- ✅ Handlers mejorados (save, pdf, new, settings)\n- ✅ Estados de carga y detección de cambios\n- ✅ Manejo robusto de errores\n- ✅ TypeScript sin errores\n- ✅ 0 lint warnings\n\n### 📊 Estadísticas\n\n- **Código nuevo**: 2,350 líneas\n- **Documentación**: 1,350 líneas\n- **Componentes nuevos**: 3\n- **Utilities nuevos**: 4 (95+ funciones)\n- **Funciones reutilizables**: 95+\n\n### 📚 Documentación Completa\n\n- `PHASE_8_COMPONENTS.md` - Documentación de componentes\n- `PHASE_9_UTILITIES.md` - API referencia de utilities\n- `PHASE_10_INTEGRATION.md` - Cambios e integración\n- `CHECKLIST_PHASE_10_COMPLETITUD.md` - Checklist de completitud\n- `RESUMEN_EJECUTIVO_PHASES_8-10.md` - Visión general\n- `INDICE_DOCUMENTACION_PHASES_8-10.md` - Índice de navegación\n\n### 🎯 Uso Rápido\n\n```tsx\n// Importar componentes\nimport { AdminHeader, DialogoGenerico } from '@/features/admin/components'\n\n// Importar utilities\nimport { validarEmail, formatearMonedaUSD, calcularPrecioAnual } from '@/features/admin/utils'\n\n// Usar en componente\nconst { cotizacionConfig } = useAdminState()\nconst [showDialog, setShowDialog] = useState(false)\n```\n\n## 📄 Licencia\n\nEste proyecto está licenciado bajo la Licencia MIT. Ver archivo `LICENSE` para detalles.\n\n## 📅 Changelog\n\n### v0.2.0 (Noviembre 2025) - Phases 8-10 ✅\n\n- AdminHeader component sticky con botones profesionales\n- DialogoGenerico modal reutilizable con 4 tipos\n- SharedComponents (Button, Badge, IconButton)\n- 95+ funciones utility (validators, formatters, calculations, generators)\n- AdminPage completamente refactorizado e integrado\n- Documentación completa (1,350 líneas)\n- TypeScript strict sin errores\n- Listo para testing\n\n### v0.1.0 (18 Noviembre 2025)\n\n- Proyecto inicial\n- Setup Next.js + Prisma + PostgreSQL\n- Tema corporativo Tailwind\n- Integración Vercel/Netlify\n- Snapshots dinámicos\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdtreasuresp%2Fwebquote","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdtreasuresp%2Fwebquote","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdtreasuresp%2Fwebquote/lists"}