WallpaperMachine
당신이 사랑하는 배경화면, 맥에서 새롭게 만나보세요
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기메이커가 쓴 소개는 위의 한 줄이 전부입니다. 더 자세한 내용은 저장소 README에서 읽을 수 있습니다. 저장소 README ↗
README 전체를 불러오는 중입니다.
README 전문 보기 ↗Mapa colaborativo para que los vecinos de la colonia San Camilo (Kanasín, Yucatán) reporten problemas en la vía pública:
Cualquiera puede ver el mapa y enviar un reporte tocando el punto donde está el problema. Los reportes no se publican hasta que el administrador los aprueba en /admin.
| Parte | Tecnología | Costo |
|---|---|---|
| Aplicación web (frontend + API) | Next.js 15, React 19, TypeScript | Gratis (Vercel Hobby) |
| Mapa | MapLibre GL JS + mapa vectorial de OpenFreeMap (datos de OpenStreetMap) | Gratis, sin API key ni límites |
| Fotos | Vercel Blob (comprimidas a ~200 KB en el teléfono) | Gratis (plan Hobby) |
| Base de datos | PostgreSQL (Neon, plan gratuito) con pg + attachDatabasePool de Vercel | Gratis |
Todo es software libre. No se guardan datos personales: la IP solo se guarda como hash irreversible para limitar envíos abusivos y contar apoyos una vez por persona. Las fotos se comprimen en el teléfono antes de subirse y se borran si el reporte se rechaza o elimina.
/admin, lo revisa y lo aprueba o rechaza./admin, los reportes pendientes muy cercanos y de la misma categoría se agrupan, y se avisa si ya existe uno publicado cerca, para rechazar duplicados.httpOnly) que se comprueba contra la base en cada petición, y bloqueo tras 5 intentos fallidos por IP o 10 por cuenta.| Administrador | Colaborador | |
|---|---|---|
| Aprobar, rechazar, ocultar, marcar arreglado | ✅ | ✅ |
| Eliminar reportes | ✅ | ❌ |
| Crear, desactivar o eliminar colaboradores y ponerles contraseña temporal | ✅ | ❌ |
| Cambiar su propia contraseña | ✅ | ✅ |
users vacía, /admin muestra "Crea tu cuenta de administrador". Se escribe la contraseña de ADMIN_PASSWORD y se eligen usuario y contraseña nuevos. Después la variable ya no sirve y se borra de Vercel.DELETE FROM users WHERE role = 'admin';, vuelve a poner ADMIN_PASSWORD en Vercel, redeploy y repite la primera vez. Los colaboradores no se borran.db/migrations/ Esquema SQL versionado (se aplica con npm run db:migrate)
db/seed.sql Reportes iniciales del mapa original de Google My Maps
src/lib/config.ts Contorno de la colonia, categorías y límites ← personalizable
src/lib/ Acceso a datos, validación, cuentas y autenticación
src/app/ Páginas (/, /admin, /admin/usuarios, /admin/cuenta) y API (/api/reports)
src/components/ Mapa y formulario
Para adaptar la app a otra colonia, basta con cambiar src/lib/config.ts.
neon.ts declara los servicios de Neon del proyecto (solo Postgres). Las migraciones usan DATABASE_URL_UNPOOLED (conexión directa) si existe; la app usa DATABASE_URL (pooled).
Requisitos: Node.js 22+ y un Postgres (local o la misma base de Neon).
npm install
cp .env.example .env.local # y llena los valores
npm run db:migrate # crea las tablas
npm run db:seed # opcional: carga los reportes iniciales
npm run dev # http://localhost:3000
Comandos útiles: npm run lint, npm run typecheck, npm test, npm run build.
san-camilo, en la región AWS US East (Ohio) o la más cercana.postgresql://usuario:[email protected]/neondb?sslmode=requireDATABASE_URL="<la cadena de Neon>" npm run db:seed
(db:seed también aplica las migraciones). Si prefieres no instalar nada, puedes pegar el contenido de db/migrations/001_init.sql y luego db/seed.sql en el SQL Editor de Neon.Crea una cuenta en https://vercel.com con tu GitHub.
Add New → Project e importa el repositorio san-camilo-reportes. Vercel detecta Next.js solo.
En Environment Variables agrega:
| Variable | Valor |
|---|---|
DATABASE_URL | La cadena de Neon (con -pooler) |
ADMIN_PASSWORD | Contraseña larga y temporal: solo sirve para crear tu cuenta de administrador en /admin; luego se borra |
SESSION_SECRET | Texto aleatorio de 32+ caracteres (openssl rand -base64 48) |
Deploy. En un minuto tendrás una URL como san-camilo-reportes.vercel.app.
En Vercel: tu proyecto → Storage → Create → Blob → conéctalo al proyecto (entornos Production y Preview). Vercel agrega sola la variable BLOB_READ_WRITE_TOKEN. Después haz Redeploy. Sin esa variable la app funciona igual, solo oculta el campo de foto. Aunque esté configurado, el campo solo aparece para el equipo con sesión iniciada y el servidor rechaza fotos de vecinos sin sesión.
npm run build aplica las migraciones pendientes antes de compilar, así que cada deploy de Vercel deja la base al día. Si cambias el esquema, agrega un archivo nuevo en db/migrations/ (p. ej. 003_algo.sql). Localmente puedes correr npm run db:migrate.