Plataforma web construida con Next.js y Payload CMS para gestionar el directorio de startups, empresas, comunidades y personas del ecosistema tech de Sinaloa.
Este repositorio cubre un solo estado por ahora, pero esta diseñado para que cualquier persona pueda hacer fork y crear el atlas de su propio estado.
- Next.js 15 — framework fullstack con App Router y React Server Components
- Payload CMS 3 — CMS headless integrado en Next.js, panel de admin en
/admin - React 19 + Tailwind CSS 4 — UI con componentes cliente y utilidades CSS
- Drizzle ORM — esquemas de base de datos para auth y tablas custom (
src/db/schema/) - PostgreSQL — base de datos principal (Payload usa su propio adaptador, Drizzle maneja el esquema de auth)
- better-auth — autenticacion de usuarios con Google OAuth
- S3 — almacenamiento de imagenes (Cloudflare R2 en produccion, MinIO local)
pnpm install
cp .env.example .env # configura tus variables
pnpm dev # servidor de desarrollo en localhost:3000El panel de administracion de Payload esta disponible en /admin.
- Un usuario inicia sesion con su cuenta de Google
- Desde su dashboard, envia un registro a traves del formulario wizard seleccionando el tipo (startup, empresa, comunidad, etc.)
- El registro se guarda como borrador en la base de datos via Payload
- Un moderador revisa el registro desde el panel de admin (
/admin) y lo publica o lo rechaza con una nota de retroalimentacion - Al publicarse, el contenido aparece automaticamente en el directorio publico
Las imagenes (logos, portadas) se suben a almacenamiento S3 compatible (Cloudflare R2 en produccion, MinIO en desarrollo local).
Los usuarios autenticados pueden generar un pase digital con su perfil del directorio, compatible con:
- Apple Wallet — genera un archivo
.pkpassdescargable - Google Wallet — genera un link para agregar el pase
Requiere configurar los certificados de Apple y la service account de Google (ver variables de entorno).
Copia .env.example y configura segun tu entorno:
Requeridas:
| Variable | Descripcion | Como obtenerla |
|---|---|---|
DATABASE_URI |
Conexion a PostgreSQL | Local: postgresql://user:pass@localhost:5432/db. Produccion: Neon, Supabase, etc. |
PAYLOAD_SECRET |
Secret para Payload CMS | Genera con openssl rand -hex 16 |
BETTER_AUTH_SECRET |
Secret para autenticacion | Genera con openssl rand -base64 32 |
NEXT_PUBLIC_SITE_URL |
URL publica del sitio | http://localhost:3000 en desarrollo |
GOOGLE_CLIENT_ID |
ID de cliente OAuth de Google | Crea un proyecto en Google Cloud Console, configura la pantalla de consentimiento OAuth y crea credenciales tipo "ID de cliente de OAuth" para aplicacion web |
GOOGLE_CLIENT_SECRET |
Secret del cliente OAuth | Se genera junto con el Client ID en el paso anterior |
Almacenamiento S3 (imagenes):
| Variable | Descripcion |
|---|---|
S3_ENDPOINT |
URL del endpoint S3. Local: http://localhost:9000 (MinIO). Produccion: https://<account-id>.r2.cloudflarestorage.com (Cloudflare R2) |
S3_BUCKET |
Nombre del bucket |
S3_ACCESS_KEY_ID / S3_SECRET_ACCESS_KEY |
Credenciales de acceso al bucket |
S3_REGION |
Region (us-east-1 para MinIO, auto para R2) |
MEDIA_URL |
URL publica donde se sirven las imagenes |
Wallet passes (opcional):
| Variable | Descripcion |
|---|---|
APPLE_PASS_* |
Certificados para Apple Wallet. Guia: Apple Developer — Wallet |
GOOGLE_WALLET_* |
Service account y IDs para Google Wallet. Guia: Google Wallet API |
El Dockerfile multi-stage construye la app en 3 fases:
- deps — instala dependencias con
pnpm install --frozen-lockfile - builder — genera el import map de Payload, ejecuta migraciones de base de datos y construye la app Next.js
- runner — imagen minima de produccion con el output standalone de Next.js
docker build --build-arg DATABASE_URI="postgresql://..." -t atlas-tech .
docker run -p 3000:3000 --env-file .env atlas-techLa base de datos debe estar accesible durante el build para que las migraciones se ejecuten.
Los mapas geograficos utilizan archivos tipo AGEM (Area Geoestadistica Municipal) de INEGI:
https://www.inegi.org.mx/temas/mg/#mapas
Coloca el archivo descargado en public/topo/.
- Haz fork de este repositorio
- Configura tu base de datos PostgreSQL y variables de entorno
- Crea credenciales OAuth en Google Cloud Console
- Descarga los mapas AGEM de tu estado desde INEGI
- Despliega con Docker o en cualquier plataforma compatible con Next.js
