Ramble
가치 있는 활동을 위한 마켓플레이스
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기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.