尚未检测到更新。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.