Skip to content

open-ong/openong

Repository files navigation

OpenONG

Recaudación con IA para ONGs sostenibles. OpenONG es una plataforma de código abierto y self-hostable que ayuda a las organizaciones sin fines de lucro a recaudar fondos: crea campañas de crowdfunding y una tienda solidaria, listas para recaudar en días.

Es un proyecto multi-tenant (cada organización vive en su propio subdominio) construido con Next.js 15.

Características

  • 🧩 Multi-tenant por subdominio (tu-ong.tudominio.com)
  • 💸 Campañas de crowdfunding y tienda solidaria
  • 🤖 Onboarding y generación de contenido asistidos por IA
  • 🎙️ Onboarding por voz opcional (ElevenLabs)
  • 🧱 Editor de páginas visual (Puck)
  • 🔐 Autenticación y permisos (Clerk)
  • 📊 Analítica de producto (PostHog)
  • 🖼️ Gestión de imágenes (Cloudinary)

Stack

Setup

Requisitos

  • Node.js 18.17 o superior
  • pnpm (recomendado)

Pasos

  1. Cloná el repositorio e instalá dependencias:

    git clone https://github.com/open-ong/openong.git
    cd openong
    pnpm install
  2. Creá un archivo .env en la raíz con las variables de los servicios que uses (ver la sección siguiente). Para arrancar rápido en local, lo mínimo es Redis y Clerk.

  3. Levantá el entorno de desarrollo:

    pnpm dev
  4. Accedé a la aplicación:

Variables de entorno

Configuralas en .env. Cada bloque corresponde a un servicio externo; al lado de cada uno se indica dónde obtener las credenciales.

Aplicación

Variable Requerida Descripción
NEXT_PUBLIC_ROOT_DOMAIN Recomendada Dominio raíz para el ruteo multi-tenant. En local: localhost:3000.

Redis — Upstash

Almacenamiento principal (organizaciones, campañas, etc.). Creá una base Redis y copiá las credenciales REST.

Variable Requerida Descripción
KV_REST_API_URL URL REST de la base Upstash.
KV_REST_API_TOKEN Token REST de la base Upstash.

Autenticación — Clerk

Manejo de usuarios, sesiones y permisos. Creá una aplicación en Clerk y copiá las API keys.

Variable Requerida Descripción
NEXT_PUBLIC_CLERK_PUBLISHABLE_KEY Publishable key del frontend.
CLERK_SECRET_KEY Secret key del backend.

Medios — Cloudinary

Subida y entrega de imágenes. Las credenciales están en el Dashboard de Cloudinary.

Variable Requerida Descripción
CLOUDINARY_CLOUD_NAME Nombre del cloud.
CLOUDINARY_API_KEY API key.
CLOUDINARY_API_SECRET API secret.

Editor de páginas — Puck

Editor visual de las páginas públicas de cada organización.

Variable Requerida Descripción
PUCK_API_KEY API key de Puck Cloud.

Analítica — PostHog

Eventos y métricas de producto. El token público se usa en el cliente; las claves de servidor son opcionales y solo se necesitan para consultar métricas desde el backend.

Variable Requerida Descripción
NEXT_PUBLIC_POSTHOG_PROJECT_TOKEN Project token (cliente).
NEXT_PUBLIC_POSTHOG_HOST Host de ingest (ej. https://us.i.posthog.com).
POSTHOG_PROJECT_ID Opcional ID del proyecto (consultas de servidor).
POSTHOG_PERSONAL_API_KEY Opcional Personal API key (consultas de servidor).
POSTHOG_API_HOST Opcional Host de la API (ej. https://us.posthog.com).

Personal API key: al crearla en PostHog, configurá el acceso con scope Projects (seleccionando tu proyecto) en lugar de "All access", y otorgá el scope Query → Read. Así la key queda limitada a leer métricas del proyecto de OpenONG.

IA — Anthropic / OpenAI

Generación de contenido y onboarding asistido.

Variable Requerida Descripción
ANTHROPIC_API_KEY Para features de IA API key de Anthropic.
OPENAI_API_KEY Para features de IA API key de OpenAI.
ONBOARDING_LLM_MODEL Opcional Modelo a usar en el onboarding.

Onboarding por voz — ElevenLabs (opcional)

Asistente de voz para el onboarding. Desactivalo poniendo NEXT_PUBLIC_ONBOARDING_VOICE_ENABLED=false.

Variable Requerida Descripción
NEXT_PUBLIC_ONBOARDING_VOICE_ENABLED Opcional true/false para activar la voz.
ELEVENLABS_API_KEY Si la voz está activa API key de ElevenLabs.
ELEVENLABS_AGENT_ID Si la voz está activa ID del agente de voz.
ELEVENLABS_BRANCH_ID Si la voz está activa ID del branch del agente.
NEXT_PUBLIC_ELEVENLABS_AGENT_ID Si la voz está activa ID del agente expuesto al cliente.
ONBOARDING_AGENT_SERVICE_TOKEN Si la voz está activa Token de servicio del agente de onboarding.

Arquitectura multi-tenant

OpenONG usa un esquema multi-tenant basado en subdominios:

  • Cada organización tiene su propio subdominio (tu-ong.tudominio.com).
  • El middleware (middleware.ts) detecta el subdominio en local, producción y previews de Vercel, y rutea al contenido correcto.
  • Los datos se guardan en Redis con un patrón de clave subdomain:{nombre}.
  • El dominio raíz aloja la landing y el panel de administración.

Despliegue

Pensado para desplegarse en Vercel (o cualquier hosting compatible con Next.js, dado que es self-hostable):

  1. Subí el repositorio a tu GitHub.
  2. Conectá el repositorio a tu proveedor.
  3. Configurá las variables de entorno descritas arriba.
  4. Desplegá.

Para dominios personalizados con multi-tenant, agregá un registro DNS wildcard (*.tudominio.com) apuntando a tu despliegue.

Contribuir

OpenONG es de código abierto. Las contribuciones, issues y sugerencias son bienvenidas en https://github.com/open-ong/openong.

Licencia

OpenONG se distribuye bajo la Functional Source License 1.1 (FSL-1.1-MIT). Podés usar, modificar, auto-hospedar y redistribuir el software libremente para cualquier propósito permitido —incluido el uso interno de tu organización—; lo único que la licencia no permite es ofrecerlo como un producto o servicio que compita con OpenONG. Dos años después de cada versión publicada, esa versión pasa automáticamente a la licencia MIT.

Releases

Packages

Contributors

Languages