尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證Manny a la Obra — MVP: plataforma para contratar servicios con profesionales verificados (Rosario)
翻譯準備中
取自儲存庫 README
正在載入完整 README。
檢視完整 README ↗Encontrá. Compará. Confiá. Plataforma web que conecta a personas que necesitan contratar un servicio con profesionales verificados de Rosario y su área de influencia: reputación basada en trabajos reales, comparación de presupuestos y respaldo ante problemas.
Proyecto de la Licenciatura en Gestión de Negocios Digitales (UCA Rosario) · Alesio Seijas, Luisina Borgogno, Valentino Perez, Vito Grosso.
⚠️ Los profesionales, clientes, reseñas y pedidos cargados son datos de demostración (
users.is_demo = true). Los textos legales son borradores a revisar por un abogado.
| Capa | Elección | Por qué |
|---|---|---|
| Web | Next.js 16 (App Router, Server Actions) + TypeScript | SSR para SEO y un solo despliegue para sitio público + app |
| Estilos | Tailwind CSS v4 con tokens de marca en src/app/globals.css | Sistema de diseño de la sección 3 |
| Base de datos | PostgreSQL en Neon + Drizzle ORM | Serverless, ramas para pruebas, integración con Vercel |
| Auth | Email + contraseña (bcrypt) y sesión JWT en cookie httpOnly (jose) | Simple, sin dependencias externas; el rol se lee siempre de la base |
| Archivos | Guardados en Postgres (files.data, bytea) y servidos por /api/archivos/[id] con control de acceso | Documentos de verificación privados sin un bucket extra; límite 5 MB y validación por firma real del archivo |
| Deploy | Vercel (conectado al repo de GitHub) |
Se eligió Neon en lugar de Supabase porque el equipo ya lo usa y Vercel lo integra de forma nativa. La autenticación propia reemplaza a Supabase Auth. El login con Google queda como gancho (ver "Próximos pasos").
Requisitos: Node 20.9+ y una base Postgres (Neon recomendado).
npm install
cp .env.example .env.local # completar DATABASE_URL, AUTH_SECRET y SEED_ADMIN_PASSWORD
npm run db:migrate # crea las tablas
npm run db:seed # carga datos de demostración (borra todo antes)
npm run dev
| Rol | Contraseña | |
|---|---|---|
| Cliente ("Lucía", con pedidos en todos los estados) | [email protected] | demo1234 |
| Profesional verificado (tiene un pedido para responder) | [email protected] | demo1234 |
| Profesional en revisión | [email protected] | demo1234 |
| Profesional pendiente / rechazado | matias.correa@… / [email protected] | demo1234 |
| Admin | SEED_ADMIN_EMAIL (por defecto [email protected]) | el valor de SEED_ADMIN_PASSWORD (no está en el repo) |
npm run dev / build / startnpm run typecheck, npm run lintnpm test: pruebas de los flujos críticos contra una rama aislada de Neon (.env.test o TEST_DATABASE_URL). Nunca apuntar a producción.npm run db:generate (nueva migración tras cambiar src/db/schema.ts), db:migrate y db:seedsrc/
app/ rutas (sitio público, /cliente, /profesional, /admin, /pedidos/[id], /reclamos/[id])
actions/ Server Actions (validan sesión y delegan en servicios)
api/archivos/[id] descarga de archivos con control de acceso
components/ UI (botones, insignia Verificado, estrellas, chips, tarjetas)
db/schema.ts modelo de datos (Drizzle)
lib/
services/ lógica de negocio y reglas de integridad (testeables, sin Next)
adapters/ email (mock → consola + tabla email_log) e identidad (mock)
analytics.ts eventos de producto
validation.ts esquemas zod (validación en servidor)
proxy.ts chequeo optimista de sesión + cookie anónima de analítica
scripts/seed.ts datos de demostración
tests/ pruebas de flujos y roles (vitest)
verificado con verification_expires_at vigente (revalidación anual) y cuenta activa.IdentityVerificationProvider (src/lib/adapters/identity.ts) deja enchufable un proveedor externo.audit_log./admin)Eventos en analytics_events (ver src/lib/analytics.ts):
| Meta | Cálculo |
|---|---|
| ≥ 60% de profesionales completan la verificación | verificados vigentes / perfiles profesionales creados (pro_signup_started) |
| ≥ 30% de búsquedas derivan en pedido | visitantes (cookie anónima) con search_performed que luego tienen quote_request_created |
| ≥ 20% de pedidos terminan en contratación | trabajos / pedidos |
| Calificación ≥ 4,5 | promedio de reseñas publicadas |
También se ven: usuarios registrados, profesionales verificados y por vencer, solicitudes, tiempo hasta contratar, reclamos abiertos y tiempo de resolución, % de trabajos concretados dentro de la plataforma y los últimos emails del adaptador mock. Los números del seed son ilustrativos.
httpOnly, sameSite=lax y secure en producción. Mismo mensaje de error para email inexistente o contraseña incorrecta.nosniff y CSP sandbox.next.config.ts. Sin secretos en el repo: ver .env.example.grossoviti-dotcom/manny-a-la-obra). Cada push a main despliega en Vercel.DATABASE_URL (Neon, rama principal), AUTH_SECRET y NEXT_PUBLIC_SITE_URL.npm run db:migrate apuntando a la base de producción. No corren en el build.createSession().EmailProvider (Resend, SES, etc.) en src/lib/adapters/email.ts.IdentityVerificationProvider.jobs ya modela los estados. Falta agregar payments.