Una nueva forma de contratar servicios con seguridad y transparencia.
Translation pending
CommerceTypeScript · CSSGitHub @grossoviti-dotcomOnlineOwner unconfirmed
Have you tried it? One tap is enough. No sign-in needed.
No updates detected yet. GitHub releases will appear here.
Owners of public repositories under a personal GitHub account can sign in to verify ownership and manage the introduction themselves. No administrator approval is needed.
Sign in, generate a verification file, and commit it to this repository’s default branch within 30 minutes. Files on other branches or forks do not count. Then check the file below to manage the project without administrator approval. Keep the file to retain your access.
If needed, you will go to sign-in. After signing in, return here and press your chosen verification button again.
Run /nomorevibe verify in your project folder to verify ownership and manage the introduction yourself.
Verify in one minuteAsk about other verification options
Manny a la Obra — MVP: plataforma para contratar servicios con profesionales verificados (Rosario)
Translation pending
Taken from the repository README
Loading the full README.
Read the full 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.