Compare commits
7 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 6f07c937e1 | |||
| 6325b009bb | |||
| 39f2140084 | |||
| 202af2f6df | |||
| 494b18aba4 | |||
| e9a6b8f136 | |||
| 1fdd767903 |
@@ -0,0 +1,5 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="28" height="28" fill="none" stroke="#0F172A" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round">
|
||||
<path d="M3 12h18" />
|
||||
<path d="M3 6h18" />
|
||||
<path d="M3 18h18" />
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 257 B |
@@ -0,0 +1,3 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="28" height="28" fill="none" stroke="#0F172A" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round">
|
||||
<path d="M20 6L9 17l-5-5" />
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 217 B |
@@ -0,0 +1,5 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="28" height="28" fill="none" stroke="#0F172A" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round">
|
||||
<path d="M12 3v12" />
|
||||
<path d="M8 7l4-4 4 4" />
|
||||
<path d="M21 21H3" />
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 262 B |
@@ -0,0 +1,4 @@
|
||||
<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24" width="28" height="28" fill="none" stroke="#0F172A" stroke-width="1.5" stroke-linecap="round" stroke-linejoin="round">
|
||||
<rect x="3" y="7" width="18" height="13" rx="2" />
|
||||
<path d="M7 7V5a5 5 0 0 1 10 0v2" />
|
||||
</svg>
|
||||
|
After Width: | Height: | Size: 278 B |
@@ -0,0 +1,555 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en" class="scroll-smooth">
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<title>🐻 NGO ERP Landingpage | ODOO4projects</title>
|
||||
<meta name="description" content="Purpose-built ERP platform for NGOs. Centralize programs, automate donor and grant reporting, and launch in weeks with ODOO4projects." />
|
||||
<meta name="keywords" content="NGO ERP system, nonprofit management software, ERP for NGOs, NGO operations platform, ODOO for nonprofits" />
|
||||
<link rel="icon" href="https://odoo4projects.com/web/image/website/1/favicon?unique=725c3af" />
|
||||
<link rel="preconnect" href="https://fonts.googleapis.com" />
|
||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
|
||||
<link rel="preload" href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap" as="style" onload="this.onload=null;this.rel='stylesheet'" />
|
||||
<noscript><link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap"></noscript>
|
||||
<link rel="preload" href="assets/site.css" as="style" onload="this.onload=null;this.rel='stylesheet'" />
|
||||
<noscript><link rel="stylesheet" href="assets/site.css"></noscript>
|
||||
<script type="application/ld+json">
|
||||
{
|
||||
"@context": "https://schema.org",
|
||||
"@type": "WebPage",
|
||||
"name": "NGO ERP Landing",
|
||||
"about": "ERP for NGOs",
|
||||
"publisher": {
|
||||
"@type": "Organization",
|
||||
"name": "ODOO4projects",
|
||||
"logo": "https://odoo4projects.com/web/image/website/1/logo?unique=1be96c3"
|
||||
},
|
||||
"mainEntity": {
|
||||
"@type": "SoftwareApplication",
|
||||
"name": "ODOO4projects NGO ERP",
|
||||
"applicationCategory": "BusinessApplication",
|
||||
"operatingSystem": "Cloud",
|
||||
"offers": {
|
||||
"@type": "Offer",
|
||||
"price": "0",
|
||||
"priceCurrency": "USD",
|
||||
"description": "4-week free trial of NGO ERP workspace"
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
<script defer data-domain="ngo.odoo4projects.com" src="https://plausible.odoo4projects.com/js/script.tagged-events.js"></script>
|
||||
<script>window.plausible = window.plausible || function() { (window.plausible.q = window.plausible.q || []).push(arguments) }</script>
|
||||
|
||||
<style id="emoji-style">
|
||||
/* Emoji styling to match heading font and spacing */
|
||||
.emoji{font-family:inherit;font-size:1em;vertical-align:middle;margin-right:0.5rem;display:inline-block}
|
||||
</style>
|
||||
</head>
|
||||
<body class="bg-brand-snow text-brand-ink">
|
||||
<header class="bg-hero-gradient text-white">
|
||||
<div class="max-w-6xl mx-auto px-6 py-6 flex flex-wrap items-center justify-between gap-4">
|
||||
<div class="flex items-center gap-3">
|
||||
<img src="https://odoo4projects.com/web/image/website/1/logo?unique=1be96c3" alt="ODOO4projects logo" class="h-10 w-auto" />
|
||||
<span class="uppercase tracking-[0.3em] text-xs text-brand-smoke" data-i18n="hero-badge"></span>
|
||||
</div>
|
||||
<nav class="flex flex-wrap items-center gap-6 text-sm">
|
||||
<a href="#blog" class="hover:text-brand-sunrise transition" data-i18n="nav-resources"></a>
|
||||
<a href="#trial" class="hover:text-brand-sunrise transition" data-i18n="nav-trial"></a>
|
||||
</nav>
|
||||
<div class="flex items-center gap-3">
|
||||
<label for="lang-selector" class="sr-only">Language</label>
|
||||
<select id="lang-selector" class="bg-white/10 border border-white/30 text-sm rounded-full px-3 py-1.5 focus:outline-none focus:ring-2 focus:ring-brand-sunrise/70">
|
||||
<option value="en">English</option>
|
||||
<option value="es">Español</option>
|
||||
<option value="de">Deutsch</option>
|
||||
</select>
|
||||
<a href="https://calendar.google.com/calendar/u/0/appointments/schedules/AcZssZ3DDbaiHFlhNhWySszAQoPXE_H73QLqYT3w7H9IYWC76RA_TgNIhLESjb4N7ep_D2D_OyW9q4-c" target="_blank" rel="noopener" class="px-5 py-2 bg-brand-sunrise text-brand-ink font-semibold rounded-full text-sm shadow-brand hover:translate-y-0.5 transition plausible-event-name=meeting" data-i18n="cta-meeting"></a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="max-w-6xl mx-auto px-6 py-16 grid md:grid-cols-2 gap-12 items-center">
|
||||
<div>
|
||||
<p class="text-brand-sunrise font-semibold mb-4" data-i18n="hero-pill"></p>
|
||||
<h1 class="text-4xl md:text-5xl font-semibold leading-tight mb-6"><span class=\"emoji\" role=\"img\" aria-label=\"bear\">🐻</span> <span data-i18n=\"hero-headline\"></span></h1>
|
||||
<p class="text-lg text-white/80 mb-8" data-i18n="hero-subheadline"></p>
|
||||
<div class="flex flex-wrap gap-4">
|
||||
<a href="#trial" class="px-6 py-3 bg-brand-accent hover:bg-brand-sunrise text-brand-ink font-semibold rounded-full transition" data-i18n="cta-trial" data-event="cta:hero-trial"></a>
|
||||
</div>
|
||||
<div class="mt-10 grid grid-cols-2 gap-6 text-sm text-white/80">
|
||||
<div>
|
||||
<p class="text-3xl font-semibold text-white">38%</p>
|
||||
<p data-i18n="hero-stat1"></p>
|
||||
</div>
|
||||
<div>
|
||||
<p class="text-3xl font-semibold text-white">2x</p>
|
||||
<p data-i18n="hero-stat2"></p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="bg-white/10 backdrop-blur-lg rounded-3xl p-8 shadow-brand">
|
||||
<div class="relative">
|
||||
<img src="https://images.unsplash.com/photo-1521737604893-d14cc237f11d?auto=format&fit=crop&w=900&q=80" alt="NGO team collaborating" class="rounded-2xl" />
|
||||
<div class="absolute -bottom-8 left-8 bg-white/90 text-brand-ink px-4 py-3 rounded-2xl shadow-lg">
|
||||
<p class="text-xs uppercase tracking-widest text-brand-primary mb-1" data-i18n="hero-card-title"></p>
|
||||
<p class="text-lg font-semibold" data-i18n="hero-card-headline"></p>
|
||||
<p class="text-sm text-brand-primary" data-i18n="hero-card-body"></p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</header>
|
||||
|
||||
<section class="max-w-6xl mx-auto px-6 py-16 grid md:grid-cols-3 gap-8">
|
||||
<article class="bg-white rounded-2xl p-6 shadow-brand border border-brand-smoke">
|
||||
<h2 class="text-xl font-semibold mb-2" data-i18n="value1-title"></h2>
|
||||
<p class="text-sm text-brand-ink/80" data-i18n="value1-body"></p>
|
||||
</article>
|
||||
<article class="bg-white rounded-2xl p-6 shadow-brand border border-brand-smoke">
|
||||
<h2 class="text-xl font-semibold mb-2" data-i18n="value2-title"></h2>
|
||||
<p class="text-sm text-brand-ink/80" data-i18n="value2-body"></p>
|
||||
</article>
|
||||
<article class="bg-white rounded-2xl p-6 shadow-brand border border-brand-smoke">
|
||||
<h2 class="text-xl font-semibold mb-2" data-i18n="value3-title"></h2>
|
||||
<p class="text-sm text-brand-ink/80" data-i18n="value3-body"></p>
|
||||
</article>
|
||||
</section>
|
||||
|
||||
<section id="blog" class="bg-white py-20">
|
||||
<div class="max-w-6xl mx-auto px-6">
|
||||
<div class="flex flex-col md:flex-row md:items-end md:justify-between gap-6 mb-12">
|
||||
<div>
|
||||
<p class="text-sm uppercase tracking-[0.3em] text-brand-primary mb-3" data-i18n="blog-tagline"></p>
|
||||
<h2 class="text-3xl font-semibold" data-i18n="blog-title"></h2>
|
||||
<p class="text-brand-ink/80" data-i18n="blog-subtitle"></p>
|
||||
</div>
|
||||
<button id="blog-toggle" type="button" class="text-brand-accent font-semibold hover:underline underline-offset-4">Browse all articles →</button>
|
||||
</div>
|
||||
<div id="blog-grid" class="grid gap-6 md:grid-cols-3"></div>
|
||||
<p id="blog-error" class="text-sm text-brand-ink/70 mt-6 hidden"></p>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section id="trial" class="bg-brand-ink text-white py-20">
|
||||
<div class="max-w-5xl mx-auto px-6 grid md:grid-cols-2 gap-12">
|
||||
<div>
|
||||
<p class="text-brand-sunrise text-sm uppercase tracking-[0.3em] mb-4" data-i18n="trial-tagline"></p>
|
||||
<h2 class="text-3xl font-semibold mb-4" data-i18n="trial-heading"></h2>
|
||||
<p class="text-white/80 mb-6" data-i18n="trial-body"></p>
|
||||
<ul class="space-y-4 text-sm text-white/80">
|
||||
<li class="flex gap-3"><span class="text-brand-emerald">✔</span><span data-i18n="trial-bullet1"></span></li>
|
||||
<li class="flex gap-3"><span class="text-brand-emerald">✔</span><span data-i18n="trial-bullet2"></span></li>
|
||||
<li class="flex gap-3"><span class="text-brand-emerald">✔</span><span data-i18n="trial-bullet3"></span></li>
|
||||
</ul>
|
||||
</div>
|
||||
<form class="bg-white text-brand-ink rounded-3xl p-8 shadow-brand space-y-5" data-event="form:trial">
|
||||
<label class="block text-sm font-medium">
|
||||
<span data-i18n="trial-label-email"></span>
|
||||
<input type="email" required class="mt-2 w-full rounded-2xl border border-brand-smoke px-4 py-3 focus:outline-none focus:ring-2 focus:ring-brand-accent" data-i18n-placeholder="trial-placeholder-email" />
|
||||
</label>
|
||||
<label class="block text-sm font-medium">
|
||||
<span data-i18n="trial-label-priority"></span>
|
||||
<select class="mt-2 w-full rounded-2xl border border-brand-smoke px-4 py-3 focus:outline-none focus:ring-2 focus:ring-brand-accent">
|
||||
<option data-i18n-option="priority-1"></option>
|
||||
<option data-i18n-option="priority-2"></option>
|
||||
<option data-i18n-option="priority-3"></option>
|
||||
<option data-i18n-option="priority-4"></option>
|
||||
</select>
|
||||
</label>
|
||||
<label class="block text-sm font-medium">
|
||||
<span data-i18n="trial-label-region"></span>
|
||||
<input type="text" class="mt-2 w-full rounded-2xl border border-brand-smoke px-4 py-3 focus:outline-none focus:ring-2 focus:ring-brand-accent" data-i18n-placeholder="trial-placeholder-region" />
|
||||
</label>
|
||||
<p class="text-xs text-brand-ink/70" data-i18n="trial-microcopy"></p>
|
||||
<button type="submit" class="w-full py-3 rounded-2xl bg-brand-accent text-brand-ink font-semibold" data-i18n="cta-trial"></button>
|
||||
<p class="text-xs text-brand-ink/60 text-center" data-i18n="trial-help"></p>
|
||||
</form>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section id="meeting" class="py-20 bg-white">
|
||||
<div class="max-w-5xl mx-auto px-6 grid md:grid-cols-2 gap-12 items-center">
|
||||
<div>
|
||||
<p class="uppercase text-xs tracking-[0.3em] text-brand-primary mb-3" data-i18n="meeting-tagline"></p>
|
||||
<h2 class="text-3xl font-semibold mb-4" data-i18n="meeting-heading"></h2>
|
||||
<p class="text-brand-ink/80 mb-6" data-i18n="meeting-body"></p>
|
||||
<ul class="space-y-4 text-sm text-brand-ink/80">
|
||||
<li class="flex gap-3"><span class="text-brand-primary">◎</span><span data-i18n="meeting-bullet1"></span></li>
|
||||
<li class="flex gap-3"><span class="text-brand-primary">◎</span><span data-i18n="meeting-bullet2"></span></li>
|
||||
<li class="flex gap-3"><span class="text-brand-primary">◎</span><span data-i18n="meeting-bullet3"></span></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="bg-brand-snow border border-brand-smoke rounded-3xl p-8 shadow-brand">
|
||||
<p class="text-sm text-brand-primary font-semibold mb-2" data-i18n="meeting-note-title"></p>
|
||||
<p class="text-brand-ink font-semibold text-xl mb-4" data-i18n="meeting-note-body"></p>
|
||||
<p class="text-sm text-brand-ink/70" data-i18n="meeting-note-hint"></p>
|
||||
<a href="https://calendar.google.com/calendar/u/0/appointments/schedules/AcZssZ3DDbaiHFlhNhWySszAQoPXE_H73QLqYT3w7H9IYWC76RA_TgNIhLESjb4N7ep_D2D_OyW9q4-c" target="_blank" rel="noopener" class="inline-flex items-center gap-2 mt-4 text-sm font-semibold text-brand-primary hover:text-brand-accent plausible-event-name=meeting" data-i18n="meeting-note-cta"></a>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<footer class="bg-brand-ink text-white py-10">
|
||||
<div class="max-w-6xl mx-auto px-6 flex flex-col md:flex-row gap-6 items-center justify-between text-sm">
|
||||
<p>© <span id="year"></span> <span data-i18n="footer-note"></span></p>
|
||||
<div class="flex gap-4">
|
||||
<a href="https://odoo4projects.com/support" class="hover:text-brand-sunrise" data-i18n="footer-support"></a>
|
||||
<a href="https://odoo4projects.com/legal" class="hover:text-brand-sunrise" data-i18n="footer-legal"></a>
|
||||
<a href="https://odoo4projects.com/contactus" class="hover:text-brand-sunrise" data-i18n="footer-contact"></a>
|
||||
</div>
|
||||
</div>
|
||||
</footer>
|
||||
|
||||
<script>
|
||||
const translations = {
|
||||
en: {
|
||||
'nav-resources': 'Resources',
|
||||
'nav-trial': 'Free Trial',
|
||||
'hero-badge': 'ERP FOR NGOs',
|
||||
'hero-pill': 'Unified NGO ERP Platform',
|
||||
'hero-headline': 'Simplify every mission workflow with an ERP built for NGOs',
|
||||
'hero-subheadline': 'Consolidate programs, automate donor and grant reporting, and give every field office the same source of truth. Launch in weeks with templates tailored to humanitarian and community-impact teams.',
|
||||
'cta-trial': 'Sign Up for Free Trial',
|
||||
'cta-meeting': 'Schedule a Meeting',
|
||||
'hero-stat1': 'Faster donor & grant reporting cycles',
|
||||
'hero-stat2': 'Increase in volunteer onboarding speed',
|
||||
'hero-card-title': 'Live KPI snapshot',
|
||||
'hero-card-headline': 'Program Impact Dashboard',
|
||||
'hero-card-body': 'Realtime budgets • Volunteer hours • Donor health',
|
||||
'value1-title': 'Transparency for Donors',
|
||||
'value1-body': 'Accounting-ready ledgers pair receipts with stories so donors see every peso without extra spreadsheets or calls.',
|
||||
'value2-title': 'Donor Management & Communications',
|
||||
'value2-body': 'Automation buddies queue thank-yous, newsletters, and SMS nudges so every supporter hears from you right on time.',
|
||||
'value3-title': 'International Fund Raising',
|
||||
'value3-body': 'Multilingual homepages, acquisition kanbans, and project trackers keep campaigns aligned across countries without rebuilding playbooks.',
|
||||
'blog-tagline': 'Insights for NGO leaders',
|
||||
'blog-title': 'Blog & resource hub',
|
||||
'blog-subtitle': 'Get your impulses with our entertaining playbooks.',
|
||||
'blog-link': 'Browse all articles →',
|
||||
'blog-all-open': 'Show fewer articles',
|
||||
'blog-read-more': 'Read more',
|
||||
'blog-show-less': 'Show less',
|
||||
'blog-error': 'Unable to load articles right now.',
|
||||
'trial-tagline': 'Sign up free trial',
|
||||
'trial-heading': 'Launch your NGO ERP sandbox in under 5 minutes',
|
||||
'trial-body': 'Experience localized NGO templates, donor CRM, and automation recipes. No credit card required—just choose your focus area and invite teammates.',
|
||||
'trial-bullet1': 'Pre-loaded NGO chart of accounts & grant tracking',
|
||||
'trial-bullet2': 'Automated donor receipts + impact dashboards',
|
||||
'trial-bullet3': 'Guided checklists for go-live within 30 days',
|
||||
'trial-label-email': 'Work email',
|
||||
'trial-placeholder-email': 'impact@yourngo.org',
|
||||
'trial-label-priority': 'Primary priority',
|
||||
'priority-1': 'Grant compliance reporting',
|
||||
'priority-2': 'Volunteer management',
|
||||
'priority-3': 'Donor CRM & fundraising',
|
||||
'priority-4': 'Finance & procurement',
|
||||
'trial-label-region': 'Country / region',
|
||||
'trial-placeholder-region': 'e.g., Paraguay, LATAM',
|
||||
'trial-microcopy': 'No credit card required. EU hosting & GDPR-ready.',
|
||||
'trial-help': 'Need help? Use the Schedule a Meeting button in the header to book a guided call.',
|
||||
'meeting-tagline': 'Have a meeting',
|
||||
'meeting-heading': 'See how your NGO can streamline operations, save time, and reduce errors',
|
||||
'meeting-body': 'A 30-minute live walkthrough tailored to your mission, covering localization, integrations, and governance. Walk away with a rollout roadmap.',
|
||||
'meeting-bullet1': 'Baseline automation scoring',
|
||||
'meeting-bullet2': 'Tech stack alignment & data migration plan',
|
||||
'meeting-bullet3': 'Budget templates & total cost forecast',
|
||||
'meeting-note-title': 'How scheduling works',
|
||||
'meeting-note-body': 'You will meet with an NGO consultant from ODOO4projects.',
|
||||
'meeting-note-hint': 'Use the Schedule a Meeting button in the header and tell us during booking which question we should prepare for.',
|
||||
'meeting-note-cta': 'Open booking calendar',
|
||||
'footer-note': 'ODOO4projects — Hosting for the AI generation',
|
||||
'footer-support': 'Support',
|
||||
'footer-legal': 'Legal',
|
||||
'footer-contact': 'Contact'
|
||||
},
|
||||
es: {
|
||||
'nav-resources': 'Recursos',
|
||||
'nav-trial': 'Prueba gratuita',
|
||||
'hero-badge': 'ERP PARA ONGs',
|
||||
'hero-pill': 'Plataforma ERP unificada para ONGs',
|
||||
'hero-headline': 'Simplifica cada misión con un ERP diseñado para ONGs',
|
||||
'hero-subheadline': 'Centraliza programas, automatiza reportes de donantes y subvenciones y ofrece a cada sede la misma fuente de verdad. Implementa en semanas con plantillas creadas para equipos humanitarios.',
|
||||
'cta-trial': 'Crear prueba gratuita',
|
||||
'cta-meeting': 'Agendar una reunión',
|
||||
'hero-stat1': 'Ciclos más rápidos de reportes a donantes y subvenciones',
|
||||
'hero-stat2': 'Mayor velocidad en la incorporación de voluntarios',
|
||||
'hero-card-title': 'Panel de KPIs en vivo',
|
||||
'hero-card-headline': 'Tablero de impacto programático',
|
||||
'hero-card-body': 'Presupuestos en tiempo real • Horas voluntarias • Salud de donantes',
|
||||
'value1-title': 'Transparencia para donantes',
|
||||
'value1-body': 'Libros contables listos unen recibos y relatos para que cada donante vea su aporte sin hojas extra.',
|
||||
'value2-title': 'Gestión y comunicación con donantes',
|
||||
'value2-body': 'Bots de automatización programan agradecimientos, boletines y SMS para que cada aliado reciba noticias a tiempo.',
|
||||
'value3-title': 'Recaudación internacional',
|
||||
'value3-body': 'Sitios multilingües, tableros de adquisición y proyectos coordinan campañas globales sin rehacer playbooks ni procesos.',
|
||||
'blog-tagline': 'Ideas para líderes de ONG',
|
||||
'blog-title': 'Blog y centro de recursos',
|
||||
'blog-subtitle': 'Recibe impulsos con nuestros playbooks entretenidos.',
|
||||
'blog-link': 'Ver todos los artículos →',
|
||||
'blog-all-open': 'Mostrar menos artículos',
|
||||
'blog-read-more': 'Leer más',
|
||||
'blog-show-less': 'Mostrar menos',
|
||||
'blog-error': 'No pudimos cargar los artículos en este momento.',
|
||||
'trial-tagline': 'Activa tu prueba',
|
||||
'trial-heading': 'Lanza tu sandbox ERP para ONG en menos de 5 minutos',
|
||||
'trial-body': 'Explora plantillas localizadas, CRM de donantes y recetas de automatización. Sin tarjeta; solo elige tu prioridad e invita al equipo.',
|
||||
'trial-bullet1': 'Plan contable para ONG y seguimiento de subvenciones precargado',
|
||||
'trial-bullet2': 'Recibos automáticos más tableros de impacto',
|
||||
'trial-bullet3': 'Checklists guiados para salir a producción en 30 días',
|
||||
'trial-label-email': 'Correo laboral',
|
||||
'trial-placeholder-email': 'impacto@tuong.org',
|
||||
'trial-label-priority': 'Prioridad principal',
|
||||
'priority-1': 'Reportes de subvenciones',
|
||||
'priority-2': 'Gestión de voluntarios',
|
||||
'priority-3': 'CRM y recaudación',
|
||||
'priority-4': 'Finanzas y compras',
|
||||
'trial-label-region': 'País / región',
|
||||
'trial-placeholder-region': 'ej. Paraguay, LATAM',
|
||||
'trial-microcopy': 'Sin tarjeta. Hosting en la UE y cumplimiento GDPR.',
|
||||
'trial-help': '¿Dudas? Usa el botón “Agendar una reunión” en el encabezado para reservar una llamada guiada.',
|
||||
'meeting-tagline': 'Agenda una reunión',
|
||||
'meeting-heading': 'Descubre cómo optimizar operaciones, ahorrar tiempo y reducir errores',
|
||||
'meeting-body': 'Sesión de 30 minutos adaptada a tu misión, con localización, integraciones y gobernanza. Sal con un plan de implementación.',
|
||||
'meeting-bullet1': 'Diagnóstico de automatización',
|
||||
'meeting-bullet2': 'Plan de migración y alineación tecnológica',
|
||||
'meeting-bullet3': 'Plantillas presupuestarias y previsión de costes',
|
||||
'meeting-note-title': 'Cómo reservar',
|
||||
'meeting-note-body': 'Te reunirás con un consultor ONG de ODOO4projects.',
|
||||
'meeting-note-hint': 'Usa el botón “Agendar una reunión” del encabezado y cuéntanos durante la reserva qué pregunta debemos preparar.',
|
||||
'meeting-note-cta': 'Abrir calendario de reservas',
|
||||
'footer-note': 'ODOO4projects — Hosting para la generación IA',
|
||||
'footer-support': 'Soporte',
|
||||
'footer-legal': 'Legal',
|
||||
'footer-contact': 'Contacto'
|
||||
},
|
||||
de: {
|
||||
'nav-resources': 'Ressourcen',
|
||||
'nav-trial': 'Kostenlose Testphase',
|
||||
'hero-badge': 'ERP FÜR NGOs',
|
||||
'hero-pill': 'Vereintes NGO-ERP',
|
||||
'hero-headline': 'Vereinfache jeden Einsatz mit einem ERP für NGOs',
|
||||
'hero-subheadline': 'Bündele Programme, automatisiere Spender- und Förderberichte und gib allen Standorten dieselbe Datenbasis. Starte in wenigen Wochen mit maßgeschneiderten Templates.',
|
||||
'cta-trial': 'Kostenlose Testphase starten',
|
||||
'cta-meeting': 'Meeting planen',
|
||||
'hero-stat1': 'Schnellere Förder- & Spenderberichte',
|
||||
'hero-stat2': 'Doppelt so schnelle Ehrenamtlichen-Onboardings',
|
||||
'hero-card-title': 'Live-KPI-Überblick',
|
||||
'hero-card-headline': 'Impact-Dashboard für Programme',
|
||||
'hero-card-body': 'Budgets in Echtzeit • Ehrenamtsstunden • Donor Health',
|
||||
'value1-title': 'Transparenz für Spender',
|
||||
'value1-body': 'Buchhaltungsbereite Ledger verbinden Belege mit Geschichten, damit Spender jeden Euro ohne Zusatz-Excel sofort klar sehen.',
|
||||
'value2-title': 'Spenderverwaltung & Kommunikation',
|
||||
'value2-body': 'Automations-Buddys planen Dankesnachrichten, Newsletter und SMS, damit jede Beziehung pünktlich gepflegt und dokumentiert bleibt.',
|
||||
'value3-title': 'Internationale Fundraising',
|
||||
'value3-body': 'Mehrsprachige Homepages, Akquise-Kanban und Projekttracker halten Kampagnen weltweit synchron ohne Playbooks ständig umzuschreiben.',
|
||||
'blog-tagline': 'Insights für NGO-Führungskräfte',
|
||||
'blog-title': 'Blog & Wissenshub',
|
||||
'blog-subtitle': 'Hol dir Impulse mit unseren unterhaltsamen Playbooks.',
|
||||
'blog-link': 'Alle Artikel ansehen →',
|
||||
'blog-all-open': 'Weniger Artikel anzeigen',
|
||||
'blog-read-more': 'Mehr lesen',
|
||||
'blog-show-less': 'Weniger anzeigen',
|
||||
'blog-error': 'Artikel konnten gerade nicht geladen werden.',
|
||||
'trial-tagline': 'Kostenlos testen',
|
||||
'trial-heading': 'Starte dein NGO-ERP-Sandbox in unter 5 Minuten',
|
||||
'trial-body': 'Teste lokalisierte Templates, Donor-CRM und Automatisierungen. Keine Kreditkarte – wähle den Fokus und lade dein Team ein.',
|
||||
'trial-bullet1': 'Vorkonfigurierter Kontenplan & Fördertracking',
|
||||
'trial-bullet2': 'Automatische Spendenbelege & Impact-Dashboards',
|
||||
'trial-bullet3': 'Geführte Checklisten für Go-Live in 30 Tagen',
|
||||
'trial-label-email': 'Arbeits-E-Mail',
|
||||
'trial-placeholder-email': 'impact@deinengo.org',
|
||||
'trial-label-priority': 'Höchste Priorität',
|
||||
'priority-1': 'Förder-Reporting',
|
||||
'priority-2': 'Ehrenamt-Management',
|
||||
'priority-3': 'Spender-CRM & Fundraising',
|
||||
'priority-4': 'Finanzen & Beschaffung',
|
||||
'trial-label-region': 'Land / Region',
|
||||
'trial-placeholder-region': 'z. B. Paraguay, LATAM',
|
||||
'trial-microcopy': 'Keine Kreditkarte. EU-Hosting & DSGVO-konform.',
|
||||
'trial-help': 'Brauchen Sie Hilfe? Nutzen Sie den Button „Meeting planen“ im Header für einen geführten Call.',
|
||||
'meeting-tagline': 'Meeting vereinbaren',
|
||||
'meeting-heading': 'Erleben Sie, wie Ihre NGO Zeit spart und Fehler reduziert',
|
||||
'meeting-body': 'Ein 30-minütiger Walkthrough zu Lokalisierung, Integrationen und Governance – inklusive Rollout-Fahrplan.',
|
||||
'meeting-bullet1': 'Automation-Score als Ausgangspunkt',
|
||||
'meeting-bullet2': 'Technologie- & Migrationsplan',
|
||||
'meeting-bullet3': 'Budgetvorlagen & Kostenprognose',
|
||||
'meeting-note-title': 'So buchen Sie',
|
||||
'meeting-note-body': 'Sie sprechen mit einem NGO-Berater von ODOO4projects.',
|
||||
'meeting-note-hint': 'Verwenden Sie den Button „Meeting planen“ im Header und nennen Sie bei der Buchung Ihre Frage, damit wir uns vorbereiten können.',
|
||||
'meeting-note-cta': 'Buchungskalender öffnen',
|
||||
'footer-note': 'ODOO4projects — Hosting für die KI-Generation',
|
||||
'footer-support': 'Support',
|
||||
'footer-legal': 'Rechtliches',
|
||||
'footer-contact': 'Kontakt'
|
||||
}
|
||||
};
|
||||
|
||||
const BLOG_LIMIT = 3;
|
||||
const blogGrid = document.getElementById('blog-grid');
|
||||
const blogToggle = document.getElementById('blog-toggle');
|
||||
const blogError = document.getElementById('blog-error');
|
||||
let blogPosts = [];
|
||||
let blogExpanded = false;
|
||||
|
||||
if (blogGrid) {
|
||||
fetch('blog.json')
|
||||
.then(response => response.json())
|
||||
.then(data => {
|
||||
blogPosts = Array.isArray(data) ? data : [];
|
||||
renderBlogCards();
|
||||
})
|
||||
.catch(error => {
|
||||
if (blogError) {
|
||||
blogError.classList.remove('hidden');
|
||||
blogError.textContent = getTranslation(document.documentElement.lang, 'blog-error', 'Unable to load articles right now.');
|
||||
}
|
||||
console.error('blog.json load failed', error);
|
||||
});
|
||||
}
|
||||
|
||||
if (blogToggle) {
|
||||
blogToggle.addEventListener('click', () => {
|
||||
if (blogPosts.length <= BLOG_LIMIT) return;
|
||||
blogExpanded = !blogExpanded;
|
||||
renderBlogCards();
|
||||
});
|
||||
}
|
||||
|
||||
function getTranslation(locale, key, fallback) {
|
||||
return (translations[locale] && translations[locale][key]) ?? translations.en[key] ?? fallback;
|
||||
}
|
||||
|
||||
function renderBlogCards() {
|
||||
if (!blogGrid) {
|
||||
return;
|
||||
}
|
||||
if (!blogPosts.length) {
|
||||
blogGrid.innerHTML = '';
|
||||
updateBlogToggleLabel();
|
||||
return;
|
||||
}
|
||||
const limit = blogExpanded ? blogPosts.length : Math.min(BLOG_LIMIT, blogPosts.length);
|
||||
blogGrid.innerHTML = '';
|
||||
blogPosts.slice(0, limit).forEach(post => {
|
||||
blogGrid.appendChild(createBlogCard(post));
|
||||
});
|
||||
updateBlogToggleLabel();
|
||||
}
|
||||
|
||||
function createBlogCard(post) {
|
||||
const card = document.createElement('article');
|
||||
card.className = 'border border-brand-smoke rounded-3xl p-6 h-full flex flex-col';
|
||||
|
||||
const meta = document.createElement('div');
|
||||
meta.className = 'flex items-center justify-between mb-3';
|
||||
const area = document.createElement('p');
|
||||
area.className = 'text-xs uppercase tracking-widest text-brand-primary';
|
||||
area.textContent = post.area || '';
|
||||
const dateEl = document.createElement('time');
|
||||
dateEl.className = 'text-xs text-brand-ink/60';
|
||||
if (post.date) {
|
||||
dateEl.dateTime = post.date;
|
||||
}
|
||||
dateEl.textContent = formatBlogDate(post.date);
|
||||
meta.append(area, dateEl);
|
||||
card.appendChild(meta);
|
||||
|
||||
const title = document.createElement('h3');
|
||||
title.className = 'text-xl font-semibold mb-3';
|
||||
title.textContent = post.title || '';
|
||||
card.appendChild(title);
|
||||
|
||||
const teaser = document.createElement('div');
|
||||
teaser.className = 'text-sm text-brand-ink/80 space-y-3 mb-4';
|
||||
teaser.innerHTML = post.teaser || '';
|
||||
card.appendChild(teaser);
|
||||
|
||||
let contentBlock = null;
|
||||
const hasMore = post.content && post.content.trim() !== (post.teaser || '').trim();
|
||||
if (post.content) {
|
||||
contentBlock = document.createElement('div');
|
||||
contentBlock.className = 'text-sm text-brand-ink/80 space-y-3 mb-4 hidden';
|
||||
contentBlock.innerHTML = post.content;
|
||||
card.appendChild(contentBlock);
|
||||
}
|
||||
|
||||
if (hasMore && contentBlock) {
|
||||
const btn = document.createElement('button');
|
||||
btn.type = 'button';
|
||||
btn.className = 'text-sm font-semibold text-brand-accent underline-offset-4 hover:underline self-start';
|
||||
btn.textContent = getTranslation(document.documentElement.lang, 'blog-read-more', 'Read more');
|
||||
btn.addEventListener('click', () => {
|
||||
const isHidden = contentBlock.classList.contains('hidden');
|
||||
if (isHidden) {
|
||||
contentBlock.classList.remove('hidden');
|
||||
btn.textContent = getTranslation(document.documentElement.lang, 'blog-show-less', 'Show less');
|
||||
} else {
|
||||
contentBlock.classList.add('hidden');
|
||||
btn.textContent = getTranslation(document.documentElement.lang, 'blog-read-more', 'Read more');
|
||||
}
|
||||
});
|
||||
card.appendChild(btn);
|
||||
}
|
||||
|
||||
return card;
|
||||
}
|
||||
|
||||
function formatBlogDate(dateString) {
|
||||
if (!dateString) return '';
|
||||
try {
|
||||
const locale = document.documentElement.lang || 'en';
|
||||
return new Intl.DateTimeFormat(locale, { year: 'numeric', month: 'short', day: 'numeric' }).format(new Date(dateString));
|
||||
} catch (error) {
|
||||
return dateString;
|
||||
}
|
||||
}
|
||||
|
||||
function updateBlogToggleLabel() {
|
||||
if (!blogToggle) return;
|
||||
if (blogPosts.length <= BLOG_LIMIT) {
|
||||
blogToggle.classList.add('hidden');
|
||||
blogExpanded = false;
|
||||
return;
|
||||
}
|
||||
blogToggle.classList.remove('hidden');
|
||||
blogToggle.disabled = false;
|
||||
const locale = document.documentElement.lang || 'en';
|
||||
blogToggle.textContent = blogExpanded
|
||||
? getTranslation(locale, 'blog-all-open', 'Show fewer articles')
|
||||
: getTranslation(locale, 'blog-link', 'Browse all articles →');
|
||||
}
|
||||
|
||||
function setLanguage(lang) {
|
||||
const locale = translations[lang] ? lang : 'en';
|
||||
document.documentElement.lang = locale;
|
||||
document.querySelectorAll('[data-i18n]').forEach(el => {
|
||||
const key = el.dataset.i18n;
|
||||
const value = translations[locale][key] ?? translations.en[key] ?? '';
|
||||
if (value !== undefined) el.innerHTML = value;
|
||||
});
|
||||
document.querySelectorAll('[data-i18n-placeholder]').forEach(el => {
|
||||
const key = el.dataset.i18nPlaceholder;
|
||||
const value = translations[locale][key] ?? translations.en[key] ?? '';
|
||||
if (value !== undefined) el.setAttribute('placeholder', value);
|
||||
});
|
||||
document.querySelectorAll('[data-i18n-option]').forEach(el => {
|
||||
const key = el.dataset.i18nOption;
|
||||
const value = translations[locale][key] ?? translations.en[key] ?? '';
|
||||
if (value !== undefined) el.textContent = value;
|
||||
});
|
||||
document.querySelectorAll('[data-i18n-aria]').forEach(el => {
|
||||
const key = el.dataset.i18nAria;
|
||||
const value = translations[locale][key] ?? translations.en[key] ?? '';
|
||||
if (value !== undefined) el.setAttribute('aria-label', value);
|
||||
});
|
||||
renderBlogCards();
|
||||
updateBlogToggleLabel();
|
||||
}
|
||||
|
||||
document.getElementById('lang-selector').addEventListener('change', (event) => {
|
||||
setLanguage(event.target.value);
|
||||
});
|
||||
|
||||
setLanguage('en');
|
||||
document.getElementById('year').textContent = new Date().getFullYear();
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,555 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en" class="scroll-smooth">
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<title>🐻🐻🐻 NGO ERP Landingpage | ODOO4projects</title>
|
||||
<meta name="description" content="Purpose-built ERP platform for NGOs. Centralize programs, automate donor and grant reporting, and launch in weeks with ODOO4projects." />
|
||||
<meta name="keywords" content="NGO ERP system, nonprofit management software, ERP for NGOs, NGO operations platform, ODOO for nonprofits" />
|
||||
<link rel="icon" href="https://odoo4projects.com/web/image/website/1/favicon?unique=725c3af" />
|
||||
<link rel="preconnect" href="https://fonts.googleapis.com" />
|
||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
|
||||
<link rel="preload" href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap" as="style" onload="this.onload=null;this.rel='stylesheet'" />
|
||||
<noscript><link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap"></noscript>
|
||||
<link rel="preload" href="assets/site.css" as="style" onload="this.onload=null;this.rel='stylesheet'" />
|
||||
<noscript><link rel="stylesheet" href="assets/site.css"></noscript>
|
||||
<script type="application/ld+json">
|
||||
{
|
||||
"@context": "https://schema.org",
|
||||
"@type": "WebPage",
|
||||
"name": "NGO ERP Landing",
|
||||
"about": "ERP for NGOs",
|
||||
"publisher": {
|
||||
"@type": "Organization",
|
||||
"name": "ODOO4projects",
|
||||
"logo": "https://odoo4projects.com/web/image/website/1/logo?unique=1be96c3"
|
||||
},
|
||||
"mainEntity": {
|
||||
"@type": "SoftwareApplication",
|
||||
"name": "ODOO4projects NGO ERP",
|
||||
"applicationCategory": "BusinessApplication",
|
||||
"operatingSystem": "Cloud",
|
||||
"offers": {
|
||||
"@type": "Offer",
|
||||
"price": "0",
|
||||
"priceCurrency": "USD",
|
||||
"description": "4-week free trial of NGO ERP workspace"
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
<script defer data-domain="ngo.odoo4projects.com" src="https://plausible.odoo4projects.com/js/script.tagged-events.js"></script>
|
||||
<script>window.plausible = window.plausible || function() { (window.plausible.q = window.plausible.q || []).push(arguments) }</script>
|
||||
|
||||
<style id="emoji-style">
|
||||
/* Emoji styling to match heading font and spacing */
|
||||
.emoji{font-family:inherit;font-size:1em;vertical-align:middle;margin-right:0.5rem;display:inline-block}
|
||||
</style>
|
||||
</head>
|
||||
<body class="bg-brand-snow text-brand-ink">
|
||||
<header class="bg-hero-gradient text-white">
|
||||
<div class="max-w-6xl mx-auto px-6 py-6 flex flex-wrap items-center justify-between gap-4">
|
||||
<div class="flex items-center gap-3">
|
||||
<img src="https://odoo4projects.com/web/image/website/1/logo?unique=1be96c3" alt="ODOO4projects logo" class="h-10 w-auto" />
|
||||
<span class="uppercase tracking-[0.3em] text-xs text-brand-smoke" data-i18n="hero-badge"></span>
|
||||
</div>
|
||||
<nav class="flex flex-wrap items-center gap-6 text-sm">
|
||||
<a href="#blog" class="hover:text-brand-sunrise transition" data-i18n="nav-resources"></a>
|
||||
<a href="#trial" class="hover:text-brand-sunrise transition" data-i18n="nav-trial"></a>
|
||||
</nav>
|
||||
<div class="flex items-center gap-3">
|
||||
<label for="lang-selector" class="sr-only">Language</label>
|
||||
<select id="lang-selector" class="bg-white/10 border border-white/30 text-sm rounded-full px-3 py-1.5 focus:outline-none focus:ring-2 focus:ring-brand-sunrise/70">
|
||||
<option value="en">English</option>
|
||||
<option value="es">Español</option>
|
||||
<option value="de">Deutsch</option>
|
||||
</select>
|
||||
<a href="https://calendar.google.com/calendar/u/0/appointments/schedules/AcZssZ3DDbaiHFlhNhWySszAQoPXE_H73QLqYT3w7H9IYWC76RA_TgNIhLESjb4N7ep_D2D_OyW9q4-c" target="_blank" rel="noopener" class="px-5 py-2 bg-brand-sunrise text-brand-ink font-semibold rounded-full text-sm shadow-brand hover:translate-y-0.5 transition plausible-event-name=meeting" data-i18n="cta-meeting"></a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="max-w-6xl mx-auto px-6 py-16 grid md:grid-cols-2 gap-12 items-center">
|
||||
<div>
|
||||
<p class="text-brand-sunrise font-semibold mb-4" data-i18n="hero-pill"></p>
|
||||
<h1 class="text-4xl md:text-5xl font-semibold leading-tight mb-6"><span class=\"emoji\" role=\"img\" aria-label=\"bear\">🐻</span> <span data-i18n=\"hero-headline\"></span></h1>
|
||||
<p class="text-lg text-white/80 mb-8" data-i18n="hero-subheadline"></p>
|
||||
<div class="flex flex-wrap gap-4">
|
||||
<a href="#trial" class="px-6 py-3 bg-brand-accent hover:bg-brand-sunrise text-brand-ink font-semibold rounded-full transition" data-i18n="cta-trial" data-event="cta:hero-trial"></a>
|
||||
</div>
|
||||
<div class="mt-10 grid grid-cols-2 gap-6 text-sm text-white/80">
|
||||
<div>
|
||||
<p class="text-3xl font-semibold text-white">38%</p>
|
||||
<p data-i18n="hero-stat1"></p>
|
||||
</div>
|
||||
<div>
|
||||
<p class="text-3xl font-semibold text-white">2x</p>
|
||||
<p data-i18n="hero-stat2"></p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="bg-white/10 backdrop-blur-lg rounded-3xl p-8 shadow-brand">
|
||||
<div class="relative">
|
||||
<img src="https://images.unsplash.com/photo-1521737604893-d14cc237f11d?auto=format&fit=crop&w=900&q=80" alt="NGO team collaborating" class="rounded-2xl" />
|
||||
<div class="absolute -bottom-8 left-8 bg-white/90 text-brand-ink px-4 py-3 rounded-2xl shadow-lg">
|
||||
<p class="text-xs uppercase tracking-widest text-brand-primary mb-1" data-i18n="hero-card-title"></p>
|
||||
<p class="text-lg font-semibold" data-i18n="hero-card-headline"></p>
|
||||
<p class="text-sm text-brand-primary" data-i18n="hero-card-body"></p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</header>
|
||||
|
||||
<section class="max-w-6xl mx-auto px-6 py-16 grid md:grid-cols-3 gap-8">
|
||||
<article class="bg-white rounded-2xl p-6 shadow-brand border border-brand-smoke">
|
||||
<h2 class="text-xl font-semibold mb-2" data-i18n="value1-title"></h2>
|
||||
<p class="text-sm text-brand-ink/80" data-i18n="value1-body"></p>
|
||||
</article>
|
||||
<article class="bg-white rounded-2xl p-6 shadow-brand border border-brand-smoke">
|
||||
<h2 class="text-xl font-semibold mb-2" data-i18n="value2-title"></h2>
|
||||
<p class="text-sm text-brand-ink/80" data-i18n="value2-body"></p>
|
||||
</article>
|
||||
<article class="bg-white rounded-2xl p-6 shadow-brand border border-brand-smoke">
|
||||
<h2 class="text-xl font-semibold mb-2" data-i18n="value3-title"></h2>
|
||||
<p class="text-sm text-brand-ink/80" data-i18n="value3-body"></p>
|
||||
</article>
|
||||
</section>
|
||||
|
||||
<section id="blog" class="bg-white py-20">
|
||||
<div class="max-w-6xl mx-auto px-6">
|
||||
<div class="flex flex-col md:flex-row md:items-end md:justify-between gap-6 mb-12">
|
||||
<div>
|
||||
<p class="text-sm uppercase tracking-[0.3em] text-brand-primary mb-3" data-i18n="blog-tagline"></p>
|
||||
<h2 class="text-3xl font-semibold" data-i18n="blog-title"></h2>
|
||||
<p class="text-brand-ink/80" data-i18n="blog-subtitle"></p>
|
||||
</div>
|
||||
<button id="blog-toggle" type="button" class="text-brand-accent font-semibold hover:underline underline-offset-4">Browse all articles →</button>
|
||||
</div>
|
||||
<div id="blog-grid" class="grid gap-6 md:grid-cols-3"></div>
|
||||
<p id="blog-error" class="text-sm text-brand-ink/70 mt-6 hidden"></p>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section id="trial" class="bg-brand-ink text-white py-20">
|
||||
<div class="max-w-5xl mx-auto px-6 grid md:grid-cols-2 gap-12">
|
||||
<div>
|
||||
<p class="text-brand-sunrise text-sm uppercase tracking-[0.3em] mb-4" data-i18n="trial-tagline"></p>
|
||||
<h2 class="text-3xl font-semibold mb-4" data-i18n="trial-heading"></h2>
|
||||
<p class="text-white/80 mb-6" data-i18n="trial-body"></p>
|
||||
<ul class="space-y-4 text-sm text-white/80">
|
||||
<li class="flex gap-3"><span class="text-brand-emerald">✔</span><span data-i18n="trial-bullet1"></span></li>
|
||||
<li class="flex gap-3"><span class="text-brand-emerald">✔</span><span data-i18n="trial-bullet2"></span></li>
|
||||
<li class="flex gap-3"><span class="text-brand-emerald">✔</span><span data-i18n="trial-bullet3"></span></li>
|
||||
</ul>
|
||||
</div>
|
||||
<form class="bg-white text-brand-ink rounded-3xl p-8 shadow-brand space-y-5" data-event="form:trial">
|
||||
<label class="block text-sm font-medium">
|
||||
<span data-i18n="trial-label-email"></span>
|
||||
<input type="email" required class="mt-2 w-full rounded-2xl border border-brand-smoke px-4 py-3 focus:outline-none focus:ring-2 focus:ring-brand-accent" data-i18n-placeholder="trial-placeholder-email" />
|
||||
</label>
|
||||
<label class="block text-sm font-medium">
|
||||
<span data-i18n="trial-label-priority"></span>
|
||||
<select class="mt-2 w-full rounded-2xl border border-brand-smoke px-4 py-3 focus:outline-none focus:ring-2 focus:ring-brand-accent">
|
||||
<option data-i18n-option="priority-1"></option>
|
||||
<option data-i18n-option="priority-2"></option>
|
||||
<option data-i18n-option="priority-3"></option>
|
||||
<option data-i18n-option="priority-4"></option>
|
||||
</select>
|
||||
</label>
|
||||
<label class="block text-sm font-medium">
|
||||
<span data-i18n="trial-label-region"></span>
|
||||
<input type="text" class="mt-2 w-full rounded-2xl border border-brand-smoke px-4 py-3 focus:outline-none focus:ring-2 focus:ring-brand-accent" data-i18n-placeholder="trial-placeholder-region" />
|
||||
</label>
|
||||
<p class="text-xs text-brand-ink/70" data-i18n="trial-microcopy"></p>
|
||||
<button type="submit" class="w-full py-3 rounded-2xl bg-brand-accent text-brand-ink font-semibold" data-i18n="cta-trial"></button>
|
||||
<p class="text-xs text-brand-ink/60 text-center" data-i18n="trial-help"></p>
|
||||
</form>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section id="meeting" class="py-20 bg-white">
|
||||
<div class="max-w-5xl mx-auto px-6 grid md:grid-cols-2 gap-12 items-center">
|
||||
<div>
|
||||
<p class="uppercase text-xs tracking-[0.3em] text-brand-primary mb-3" data-i18n="meeting-tagline"></p>
|
||||
<h2 class="text-3xl font-semibold mb-4" data-i18n="meeting-heading"></h2>
|
||||
<p class="text-brand-ink/80 mb-6" data-i18n="meeting-body"></p>
|
||||
<ul class="space-y-4 text-sm text-brand-ink/80">
|
||||
<li class="flex gap-3"><span class="text-brand-primary">◎</span><span data-i18n="meeting-bullet1"></span></li>
|
||||
<li class="flex gap-3"><span class="text-brand-primary">◎</span><span data-i18n="meeting-bullet2"></span></li>
|
||||
<li class="flex gap-3"><span class="text-brand-primary">◎</span><span data-i18n="meeting-bullet3"></span></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="bg-brand-snow border border-brand-smoke rounded-3xl p-8 shadow-brand">
|
||||
<p class="text-sm text-brand-primary font-semibold mb-2" data-i18n="meeting-note-title"></p>
|
||||
<p class="text-brand-ink font-semibold text-xl mb-4" data-i18n="meeting-note-body"></p>
|
||||
<p class="text-sm text-brand-ink/70" data-i18n="meeting-note-hint"></p>
|
||||
<a href="https://calendar.google.com/calendar/u/0/appointments/schedules/AcZssZ3DDbaiHFlhNhWySszAQoPXE_H73QLqYT3w7H9IYWC76RA_TgNIhLESjb4N7ep_D2D_OyW9q4-c" target="_blank" rel="noopener" class="inline-flex items-center gap-2 mt-4 text-sm font-semibold text-brand-primary hover:text-brand-accent plausible-event-name=meeting" data-i18n="meeting-note-cta"></a>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<footer class="bg-brand-ink text-white py-10">
|
||||
<div class="max-w-6xl mx-auto px-6 flex flex-col md:flex-row gap-6 items-center justify-between text-sm">
|
||||
<p>© <span id="year"></span> <span data-i18n="footer-note"></span></p>
|
||||
<div class="flex gap-4">
|
||||
<a href="https://odoo4projects.com/support" class="hover:text-brand-sunrise" data-i18n="footer-support"></a>
|
||||
<a href="https://odoo4projects.com/legal" class="hover:text-brand-sunrise" data-i18n="footer-legal"></a>
|
||||
<a href="https://odoo4projects.com/contactus" class="hover:text-brand-sunrise" data-i18n="footer-contact"></a>
|
||||
</div>
|
||||
</div>
|
||||
</footer>
|
||||
|
||||
<script>
|
||||
const translations = {
|
||||
en: {
|
||||
'nav-resources': 'Resources',
|
||||
'nav-trial': 'Free Trial',
|
||||
'hero-badge': 'ERP FOR NGOs',
|
||||
'hero-pill': 'Unified NGO ERP Platform',
|
||||
'hero-headline': 'Simplify every mission workflow with an ERP built for NGOs',
|
||||
'hero-subheadline': 'Consolidate programs, automate donor and grant reporting, and give every field office the same source of truth. Launch in weeks with templates tailored to humanitarian and community-impact teams.',
|
||||
'cta-trial': 'Sign Up for Free Trial',
|
||||
'cta-meeting': 'Schedule a Meeting',
|
||||
'hero-stat1': 'Faster donor & grant reporting cycles',
|
||||
'hero-stat2': 'Increase in volunteer onboarding speed',
|
||||
'hero-card-title': 'Live KPI snapshot',
|
||||
'hero-card-headline': 'Program Impact Dashboard',
|
||||
'hero-card-body': 'Realtime budgets • Volunteer hours • Donor health',
|
||||
'value1-title': 'Transparency for Donors',
|
||||
'value1-body': 'Accounting-ready ledgers pair receipts with stories so donors see every peso without extra spreadsheets or calls.',
|
||||
'value2-title': 'Donor Management & Communications',
|
||||
'value2-body': 'Automation buddies queue thank-yous, newsletters, and SMS nudges so every supporter hears from you right on time.',
|
||||
'value3-title': 'International Fund Raising',
|
||||
'value3-body': 'Multilingual homepages, acquisition kanbans, and project trackers keep campaigns aligned across countries without rebuilding playbooks.',
|
||||
'blog-tagline': 'Insights for NGO leaders',
|
||||
'blog-title': 'Blog & resource hub',
|
||||
'blog-subtitle': 'Get your impulses with our entertaining playbooks.',
|
||||
'blog-link': 'Browse all articles →',
|
||||
'blog-all-open': 'Show fewer articles',
|
||||
'blog-read-more': 'Read more',
|
||||
'blog-show-less': 'Show less',
|
||||
'blog-error': 'Unable to load articles right now.',
|
||||
'trial-tagline': 'Sign up free trial',
|
||||
'trial-heading': 'Launch your NGO ERP sandbox in under 5 minutes',
|
||||
'trial-body': 'Experience localized NGO templates, donor CRM, and automation recipes. No credit card required—just choose your focus area and invite teammates.',
|
||||
'trial-bullet1': 'Pre-loaded NGO chart of accounts & grant tracking',
|
||||
'trial-bullet2': 'Automated donor receipts + impact dashboards',
|
||||
'trial-bullet3': 'Guided checklists for go-live within 30 days',
|
||||
'trial-label-email': 'Work email',
|
||||
'trial-placeholder-email': 'impact@yourngo.org',
|
||||
'trial-label-priority': 'Primary priority',
|
||||
'priority-1': 'Grant compliance reporting',
|
||||
'priority-2': 'Volunteer management',
|
||||
'priority-3': 'Donor CRM & fundraising',
|
||||
'priority-4': 'Finance & procurement',
|
||||
'trial-label-region': 'Country / region',
|
||||
'trial-placeholder-region': 'e.g., Paraguay, LATAM',
|
||||
'trial-microcopy': 'No credit card required. EU hosting & GDPR-ready.',
|
||||
'trial-help': 'Need help? Use the Schedule a Meeting button in the header to book a guided call.',
|
||||
'meeting-tagline': 'Have a meeting',
|
||||
'meeting-heading': 'See how your NGO can streamline operations, save time, and reduce errors',
|
||||
'meeting-body': 'A 30-minute live walkthrough tailored to your mission, covering localization, integrations, and governance. Walk away with a rollout roadmap.',
|
||||
'meeting-bullet1': 'Baseline automation scoring',
|
||||
'meeting-bullet2': 'Tech stack alignment & data migration plan',
|
||||
'meeting-bullet3': 'Budget templates & total cost forecast',
|
||||
'meeting-note-title': 'How scheduling works',
|
||||
'meeting-note-body': 'You will meet with an NGO consultant from ODOO4projects.',
|
||||
'meeting-note-hint': 'Use the Schedule a Meeting button in the header and tell us during booking which question we should prepare for.',
|
||||
'meeting-note-cta': 'Open booking calendar',
|
||||
'footer-note': 'ODOO4projects — Hosting for the AI generation',
|
||||
'footer-support': 'Support',
|
||||
'footer-legal': 'Legal',
|
||||
'footer-contact': 'Contact'
|
||||
},
|
||||
es: {
|
||||
'nav-resources': 'Recursos',
|
||||
'nav-trial': 'Prueba gratuita',
|
||||
'hero-badge': 'ERP PARA ONGs',
|
||||
'hero-pill': 'Plataforma ERP unificada para ONGs',
|
||||
'hero-headline': 'Simplifica cada misión con un ERP diseñado para ONGs',
|
||||
'hero-subheadline': 'Centraliza programas, automatiza reportes de donantes y subvenciones y ofrece a cada sede la misma fuente de verdad. Implementa en semanas con plantillas creadas para equipos humanitarios.',
|
||||
'cta-trial': 'Crear prueba gratuita',
|
||||
'cta-meeting': 'Agendar una reunión',
|
||||
'hero-stat1': 'Ciclos más rápidos de reportes a donantes y subvenciones',
|
||||
'hero-stat2': 'Mayor velocidad en la incorporación de voluntarios',
|
||||
'hero-card-title': 'Panel de KPIs en vivo',
|
||||
'hero-card-headline': 'Tablero de impacto programático',
|
||||
'hero-card-body': 'Presupuestos en tiempo real • Horas voluntarias • Salud de donantes',
|
||||
'value1-title': 'Transparencia para donantes',
|
||||
'value1-body': 'Libros contables listos unen recibos y relatos para que cada donante vea su aporte sin hojas extra.',
|
||||
'value2-title': 'Gestión y comunicación con donantes',
|
||||
'value2-body': 'Bots de automatización programan agradecimientos, boletines y SMS para que cada aliado reciba noticias a tiempo.',
|
||||
'value3-title': 'Recaudación internacional',
|
||||
'value3-body': 'Sitios multilingües, tableros de adquisición y proyectos coordinan campañas globales sin rehacer playbooks ni procesos.',
|
||||
'blog-tagline': 'Ideas para líderes de ONG',
|
||||
'blog-title': 'Blog y centro de recursos',
|
||||
'blog-subtitle': 'Recibe impulsos con nuestros playbooks entretenidos.',
|
||||
'blog-link': 'Ver todos los artículos →',
|
||||
'blog-all-open': 'Mostrar menos artículos',
|
||||
'blog-read-more': 'Leer más',
|
||||
'blog-show-less': 'Mostrar menos',
|
||||
'blog-error': 'No pudimos cargar los artículos en este momento.',
|
||||
'trial-tagline': 'Activa tu prueba',
|
||||
'trial-heading': 'Lanza tu sandbox ERP para ONG en menos de 5 minutos',
|
||||
'trial-body': 'Explora plantillas localizadas, CRM de donantes y recetas de automatización. Sin tarjeta; solo elige tu prioridad e invita al equipo.',
|
||||
'trial-bullet1': 'Plan contable para ONG y seguimiento de subvenciones precargado',
|
||||
'trial-bullet2': 'Recibos automáticos más tableros de impacto',
|
||||
'trial-bullet3': 'Checklists guiados para salir a producción en 30 días',
|
||||
'trial-label-email': 'Correo laboral',
|
||||
'trial-placeholder-email': 'impacto@tuong.org',
|
||||
'trial-label-priority': 'Prioridad principal',
|
||||
'priority-1': 'Reportes de subvenciones',
|
||||
'priority-2': 'Gestión de voluntarios',
|
||||
'priority-3': 'CRM y recaudación',
|
||||
'priority-4': 'Finanzas y compras',
|
||||
'trial-label-region': 'País / región',
|
||||
'trial-placeholder-region': 'ej. Paraguay, LATAM',
|
||||
'trial-microcopy': 'Sin tarjeta. Hosting en la UE y cumplimiento GDPR.',
|
||||
'trial-help': '¿Dudas? Usa el botón “Agendar una reunión” en el encabezado para reservar una llamada guiada.',
|
||||
'meeting-tagline': 'Agenda una reunión',
|
||||
'meeting-heading': 'Descubre cómo optimizar operaciones, ahorrar tiempo y reducir errores',
|
||||
'meeting-body': 'Sesión de 30 minutos adaptada a tu misión, con localización, integraciones y gobernanza. Sal con un plan de implementación.',
|
||||
'meeting-bullet1': 'Diagnóstico de automatización',
|
||||
'meeting-bullet2': 'Plan de migración y alineación tecnológica',
|
||||
'meeting-bullet3': 'Plantillas presupuestarias y previsión de costes',
|
||||
'meeting-note-title': 'Cómo reservar',
|
||||
'meeting-note-body': 'Te reunirás con un consultor ONG de ODOO4projects.',
|
||||
'meeting-note-hint': 'Usa el botón “Agendar una reunión” del encabezado y cuéntanos durante la reserva qué pregunta debemos preparar.',
|
||||
'meeting-note-cta': 'Abrir calendario de reservas',
|
||||
'footer-note': 'ODOO4projects — Hosting para la generación IA',
|
||||
'footer-support': 'Soporte',
|
||||
'footer-legal': 'Legal',
|
||||
'footer-contact': 'Contacto'
|
||||
},
|
||||
de: {
|
||||
'nav-resources': 'Ressourcen',
|
||||
'nav-trial': 'Kostenlose Testphase',
|
||||
'hero-badge': 'ERP FÜR NGOs',
|
||||
'hero-pill': 'Vereintes NGO-ERP',
|
||||
'hero-headline': 'Vereinfache jeden Einsatz mit einem ERP für NGOs',
|
||||
'hero-subheadline': 'Bündele Programme, automatisiere Spender- und Förderberichte und gib allen Standorten dieselbe Datenbasis. Starte in wenigen Wochen mit maßgeschneiderten Templates.',
|
||||
'cta-trial': 'Kostenlose Testphase starten',
|
||||
'cta-meeting': 'Meeting planen',
|
||||
'hero-stat1': 'Schnellere Förder- & Spenderberichte',
|
||||
'hero-stat2': 'Doppelt so schnelle Ehrenamtlichen-Onboardings',
|
||||
'hero-card-title': 'Live-KPI-Überblick',
|
||||
'hero-card-headline': 'Impact-Dashboard für Programme',
|
||||
'hero-card-body': 'Budgets in Echtzeit • Ehrenamtsstunden • Donor Health',
|
||||
'value1-title': 'Transparenz für Spender',
|
||||
'value1-body': 'Buchhaltungsbereite Ledger verbinden Belege mit Geschichten, damit Spender jeden Euro ohne Zusatz-Excel sofort klar sehen.',
|
||||
'value2-title': 'Spenderverwaltung & Kommunikation',
|
||||
'value2-body': 'Automations-Buddys planen Dankesnachrichten, Newsletter und SMS, damit jede Beziehung pünktlich gepflegt und dokumentiert bleibt.',
|
||||
'value3-title': 'Internationale Fundraising',
|
||||
'value3-body': 'Mehrsprachige Homepages, Akquise-Kanban und Projekttracker halten Kampagnen weltweit synchron ohne Playbooks ständig umzuschreiben.',
|
||||
'blog-tagline': 'Insights für NGO-Führungskräfte',
|
||||
'blog-title': 'Blog & Wissenshub',
|
||||
'blog-subtitle': 'Hol dir Impulse mit unseren unterhaltsamen Playbooks.',
|
||||
'blog-link': 'Alle Artikel ansehen →',
|
||||
'blog-all-open': 'Weniger Artikel anzeigen',
|
||||
'blog-read-more': 'Mehr lesen',
|
||||
'blog-show-less': 'Weniger anzeigen',
|
||||
'blog-error': 'Artikel konnten gerade nicht geladen werden.',
|
||||
'trial-tagline': 'Kostenlos testen',
|
||||
'trial-heading': 'Starte dein NGO-ERP-Sandbox in unter 5 Minuten',
|
||||
'trial-body': 'Teste lokalisierte Templates, Donor-CRM und Automatisierungen. Keine Kreditkarte – wähle den Fokus und lade dein Team ein.',
|
||||
'trial-bullet1': 'Vorkonfigurierter Kontenplan & Fördertracking',
|
||||
'trial-bullet2': 'Automatische Spendenbelege & Impact-Dashboards',
|
||||
'trial-bullet3': 'Geführte Checklisten für Go-Live in 30 Tagen',
|
||||
'trial-label-email': 'Arbeits-E-Mail',
|
||||
'trial-placeholder-email': 'impact@deinengo.org',
|
||||
'trial-label-priority': 'Höchste Priorität',
|
||||
'priority-1': 'Förder-Reporting',
|
||||
'priority-2': 'Ehrenamt-Management',
|
||||
'priority-3': 'Spender-CRM & Fundraising',
|
||||
'priority-4': 'Finanzen & Beschaffung',
|
||||
'trial-label-region': 'Land / Region',
|
||||
'trial-placeholder-region': 'z. B. Paraguay, LATAM',
|
||||
'trial-microcopy': 'Keine Kreditkarte. EU-Hosting & DSGVO-konform.',
|
||||
'trial-help': 'Brauchen Sie Hilfe? Nutzen Sie den Button „Meeting planen“ im Header für einen geführten Call.',
|
||||
'meeting-tagline': 'Meeting vereinbaren',
|
||||
'meeting-heading': 'Erleben Sie, wie Ihre NGO Zeit spart und Fehler reduziert',
|
||||
'meeting-body': 'Ein 30-minütiger Walkthrough zu Lokalisierung, Integrationen und Governance – inklusive Rollout-Fahrplan.',
|
||||
'meeting-bullet1': 'Automation-Score als Ausgangspunkt',
|
||||
'meeting-bullet2': 'Technologie- & Migrationsplan',
|
||||
'meeting-bullet3': 'Budgetvorlagen & Kostenprognose',
|
||||
'meeting-note-title': 'So buchen Sie',
|
||||
'meeting-note-body': 'Sie sprechen mit einem NGO-Berater von ODOO4projects.',
|
||||
'meeting-note-hint': 'Verwenden Sie den Button „Meeting planen“ im Header und nennen Sie bei der Buchung Ihre Frage, damit wir uns vorbereiten können.',
|
||||
'meeting-note-cta': 'Buchungskalender öffnen',
|
||||
'footer-note': 'ODOO4projects — Hosting für die KI-Generation',
|
||||
'footer-support': 'Support',
|
||||
'footer-legal': 'Rechtliches',
|
||||
'footer-contact': 'Kontakt'
|
||||
}
|
||||
};
|
||||
|
||||
const BLOG_LIMIT = 3;
|
||||
const blogGrid = document.getElementById('blog-grid');
|
||||
const blogToggle = document.getElementById('blog-toggle');
|
||||
const blogError = document.getElementById('blog-error');
|
||||
let blogPosts = [];
|
||||
let blogExpanded = false;
|
||||
|
||||
if (blogGrid) {
|
||||
fetch('blog.json')
|
||||
.then(response => response.json())
|
||||
.then(data => {
|
||||
blogPosts = Array.isArray(data) ? data : [];
|
||||
renderBlogCards();
|
||||
})
|
||||
.catch(error => {
|
||||
if (blogError) {
|
||||
blogError.classList.remove('hidden');
|
||||
blogError.textContent = getTranslation(document.documentElement.lang, 'blog-error', 'Unable to load articles right now.');
|
||||
}
|
||||
console.error('blog.json load failed', error);
|
||||
});
|
||||
}
|
||||
|
||||
if (blogToggle) {
|
||||
blogToggle.addEventListener('click', () => {
|
||||
if (blogPosts.length <= BLOG_LIMIT) return;
|
||||
blogExpanded = !blogExpanded;
|
||||
renderBlogCards();
|
||||
});
|
||||
}
|
||||
|
||||
function getTranslation(locale, key, fallback) {
|
||||
return (translations[locale] && translations[locale][key]) ?? translations.en[key] ?? fallback;
|
||||
}
|
||||
|
||||
function renderBlogCards() {
|
||||
if (!blogGrid) {
|
||||
return;
|
||||
}
|
||||
if (!blogPosts.length) {
|
||||
blogGrid.innerHTML = '';
|
||||
updateBlogToggleLabel();
|
||||
return;
|
||||
}
|
||||
const limit = blogExpanded ? blogPosts.length : Math.min(BLOG_LIMIT, blogPosts.length);
|
||||
blogGrid.innerHTML = '';
|
||||
blogPosts.slice(0, limit).forEach(post => {
|
||||
blogGrid.appendChild(createBlogCard(post));
|
||||
});
|
||||
updateBlogToggleLabel();
|
||||
}
|
||||
|
||||
function createBlogCard(post) {
|
||||
const card = document.createElement('article');
|
||||
card.className = 'border border-brand-smoke rounded-3xl p-6 h-full flex flex-col';
|
||||
|
||||
const meta = document.createElement('div');
|
||||
meta.className = 'flex items-center justify-between mb-3';
|
||||
const area = document.createElement('p');
|
||||
area.className = 'text-xs uppercase tracking-widest text-brand-primary';
|
||||
area.textContent = post.area || '';
|
||||
const dateEl = document.createElement('time');
|
||||
dateEl.className = 'text-xs text-brand-ink/60';
|
||||
if (post.date) {
|
||||
dateEl.dateTime = post.date;
|
||||
}
|
||||
dateEl.textContent = formatBlogDate(post.date);
|
||||
meta.append(area, dateEl);
|
||||
card.appendChild(meta);
|
||||
|
||||
const title = document.createElement('h3');
|
||||
title.className = 'text-xl font-semibold mb-3';
|
||||
title.textContent = post.title || '';
|
||||
card.appendChild(title);
|
||||
|
||||
const teaser = document.createElement('div');
|
||||
teaser.className = 'text-sm text-brand-ink/80 space-y-3 mb-4';
|
||||
teaser.innerHTML = post.teaser || '';
|
||||
card.appendChild(teaser);
|
||||
|
||||
let contentBlock = null;
|
||||
const hasMore = post.content && post.content.trim() !== (post.teaser || '').trim();
|
||||
if (post.content) {
|
||||
contentBlock = document.createElement('div');
|
||||
contentBlock.className = 'text-sm text-brand-ink/80 space-y-3 mb-4 hidden';
|
||||
contentBlock.innerHTML = post.content;
|
||||
card.appendChild(contentBlock);
|
||||
}
|
||||
|
||||
if (hasMore && contentBlock) {
|
||||
const btn = document.createElement('button');
|
||||
btn.type = 'button';
|
||||
btn.className = 'text-sm font-semibold text-brand-accent underline-offset-4 hover:underline self-start';
|
||||
btn.textContent = getTranslation(document.documentElement.lang, 'blog-read-more', 'Read more');
|
||||
btn.addEventListener('click', () => {
|
||||
const isHidden = contentBlock.classList.contains('hidden');
|
||||
if (isHidden) {
|
||||
contentBlock.classList.remove('hidden');
|
||||
btn.textContent = getTranslation(document.documentElement.lang, 'blog-show-less', 'Show less');
|
||||
} else {
|
||||
contentBlock.classList.add('hidden');
|
||||
btn.textContent = getTranslation(document.documentElement.lang, 'blog-read-more', 'Read more');
|
||||
}
|
||||
});
|
||||
card.appendChild(btn);
|
||||
}
|
||||
|
||||
return card;
|
||||
}
|
||||
|
||||
function formatBlogDate(dateString) {
|
||||
if (!dateString) return '';
|
||||
try {
|
||||
const locale = document.documentElement.lang || 'en';
|
||||
return new Intl.DateTimeFormat(locale, { year: 'numeric', month: 'short', day: 'numeric' }).format(new Date(dateString));
|
||||
} catch (error) {
|
||||
return dateString;
|
||||
}
|
||||
}
|
||||
|
||||
function updateBlogToggleLabel() {
|
||||
if (!blogToggle) return;
|
||||
if (blogPosts.length <= BLOG_LIMIT) {
|
||||
blogToggle.classList.add('hidden');
|
||||
blogExpanded = false;
|
||||
return;
|
||||
}
|
||||
blogToggle.classList.remove('hidden');
|
||||
blogToggle.disabled = false;
|
||||
const locale = document.documentElement.lang || 'en';
|
||||
blogToggle.textContent = blogExpanded
|
||||
? getTranslation(locale, 'blog-all-open', 'Show fewer articles')
|
||||
: getTranslation(locale, 'blog-link', 'Browse all articles →');
|
||||
}
|
||||
|
||||
function setLanguage(lang) {
|
||||
const locale = translations[lang] ? lang : 'en';
|
||||
document.documentElement.lang = locale;
|
||||
document.querySelectorAll('[data-i18n]').forEach(el => {
|
||||
const key = el.dataset.i18n;
|
||||
const value = translations[locale][key] ?? translations.en[key] ?? '';
|
||||
if (value !== undefined) el.innerHTML = value;
|
||||
});
|
||||
document.querySelectorAll('[data-i18n-placeholder]').forEach(el => {
|
||||
const key = el.dataset.i18nPlaceholder;
|
||||
const value = translations[locale][key] ?? translations.en[key] ?? '';
|
||||
if (value !== undefined) el.setAttribute('placeholder', value);
|
||||
});
|
||||
document.querySelectorAll('[data-i18n-option]').forEach(el => {
|
||||
const key = el.dataset.i18nOption;
|
||||
const value = translations[locale][key] ?? translations.en[key] ?? '';
|
||||
if (value !== undefined) el.textContent = value;
|
||||
});
|
||||
document.querySelectorAll('[data-i18n-aria]').forEach(el => {
|
||||
const key = el.dataset.i18nAria;
|
||||
const value = translations[locale][key] ?? translations.en[key] ?? '';
|
||||
if (value !== undefined) el.setAttribute('aria-label', value);
|
||||
});
|
||||
renderBlogCards();
|
||||
updateBlogToggleLabel();
|
||||
}
|
||||
|
||||
document.getElementById('lang-selector').addEventListener('change', (event) => {
|
||||
setLanguage(event.target.value);
|
||||
});
|
||||
|
||||
setLanguage('en');
|
||||
document.getElementById('year').textContent = new Date().getFullYear();
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
@@ -0,0 +1,551 @@
|
||||
<!DOCTYPE html>
|
||||
<html lang="en" class="scroll-smooth">
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<title> NGO ERP Landingpage | ODOO4projects</title>
|
||||
<meta name="description" content="Purpose-built ERP platform for NGOs. Centralize programs, automate donor and grant reporting, and launch in weeks with ODOO4projects." />
|
||||
<meta name="keywords" content="NGO ERP system, nonprofit management software, ERP for NGOs, NGO operations platform, ODOO for nonprofits" />
|
||||
<link rel="icon" href="https://odoo4projects.com/web/image/website/1/favicon?unique=725c3af" />
|
||||
<link rel="preconnect" href="https://fonts.googleapis.com" />
|
||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
|
||||
<link rel="preload" href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap" as="style" onload="this.onload=null;this.rel='stylesheet'" />
|
||||
<noscript><link rel="stylesheet" href="https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap"></noscript>
|
||||
<link rel="preload" href="assets/site.css" as="style" onload="this.onload=null;this.rel='stylesheet'" />
|
||||
<noscript><link rel="stylesheet" href="assets/site.css"></noscript>
|
||||
<script type="application/ld+json">
|
||||
{
|
||||
"@context": "https://schema.org",
|
||||
"@type": "WebPage",
|
||||
"name": "NGO ERP Landing",
|
||||
"about": "ERP for NGOs",
|
||||
"publisher": {
|
||||
"@type": "Organization",
|
||||
"name": "ODOO4projects",
|
||||
"logo": "https://odoo4projects.com/web/image/website/1/logo?unique=1be96c3"
|
||||
},
|
||||
"mainEntity": {
|
||||
"@type": "SoftwareApplication",
|
||||
"name": "ODOO4projects NGO ERP",
|
||||
"applicationCategory": "BusinessApplication",
|
||||
"operatingSystem": "Cloud",
|
||||
"offers": {
|
||||
"@type": "Offer",
|
||||
"price": "0",
|
||||
"priceCurrency": "USD",
|
||||
"description": "4-week free trial of NGO ERP workspace"
|
||||
}
|
||||
}
|
||||
}
|
||||
</script>
|
||||
<script defer data-domain="ngo.odoo4projects.com" src="https://plausible.odoo4projects.com/js/script.tagged-events.js"></script>
|
||||
<script>window.plausible = window.plausible || function() { (window.plausible.q = window.plausible.q || []).push(arguments) }</script>
|
||||
|
||||
</head>
|
||||
<body class="bg-brand-snow text-brand-ink">
|
||||
<header class="bg-hero-gradient text-white">
|
||||
<div class="max-w-6xl mx-auto px-6 py-6 flex flex-wrap items-center justify-between gap-4">
|
||||
<div class="flex items-center gap-3">
|
||||
<img src="https://odoo4projects.com/web/image/website/1/logo?unique=1be96c3" alt="ODOO4projects logo" class="h-10 w-auto" />
|
||||
<span class="uppercase tracking-[0.3em] text-xs text-brand-smoke" data-i18n="hero-badge"></span>
|
||||
</div>
|
||||
<nav class="flex flex-wrap items-center gap-6 text-sm">
|
||||
<a href="#blog" class="hover:text-brand-sunrise transition" data-i18n="nav-resources"></a>
|
||||
<a href="#trial" class="hover:text-brand-sunrise transition" data-i18n="nav-trial"></a>
|
||||
</nav>
|
||||
<div class="flex items-center gap-3">
|
||||
<label for="lang-selector" class="sr-only">Language</label>
|
||||
<select id="lang-selector" class="bg-white/10 border border-white/30 text-sm rounded-full px-3 py-1.5 focus:outline-none focus:ring-2 focus:ring-brand-sunrise/70">
|
||||
<option value="en">English</option>
|
||||
<option value="es">Español</option>
|
||||
<option value="de">Deutsch</option>
|
||||
</select>
|
||||
<a href="https://calendar.google.com/calendar/u/0/appointments/schedules/AcZssZ3DDbaiHFlhNhWySszAQoPXE_H73QLqYT3w7H9IYWC76RA_TgNIhLESjb4N7ep_D2D_OyW9q4-c" target="_blank" rel="noopener" class="px-5 py-2 bg-brand-sunrise text-brand-ink font-semibold rounded-full text-sm shadow-brand hover:translate-y-0.5 transition plausible-event-name=meeting" data-i18n="cta-meeting"></a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="max-w-6xl mx-auto px-6 py-16 grid md:grid-cols-2 gap-12 items-center">
|
||||
<div>
|
||||
<p class="text-brand-sunrise font-semibold mb-4" data-i18n="hero-pill"></p>
|
||||
<h1 class="text-4xl md:text-5xl font-semibold leading-tight mb-6"><span class=\"emoji\" aria-hidden=\"true\"></span> <span data-i18n=\"hero-headline\"></span></h1>
|
||||
<p class="text-lg text-white/80 mb-8" data-i18n="hero-subheadline"></p>
|
||||
<div class="flex flex-wrap gap-4">
|
||||
<a href="#trial" class="px-6 py-3 bg-brand-accent hover:bg-brand-sunrise text-brand-ink font-semibold rounded-full transition" data-i18n="cta-trial" data-event="cta:hero-trial"></a>
|
||||
</div>
|
||||
<div class="mt-10 grid grid-cols-2 gap-6 text-sm text-white/80">
|
||||
<div>
|
||||
<p class="text-3xl font-semibold text-white">38%</p>
|
||||
<p data-i18n="hero-stat1"></p>
|
||||
</div>
|
||||
<div>
|
||||
<p class="text-3xl font-semibold text-white">2x</p>
|
||||
<p data-i18n="hero-stat2"></p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="bg-white/10 backdrop-blur-lg rounded-3xl p-8 shadow-brand">
|
||||
<div class="relative">
|
||||
<img src="https://images.unsplash.com/photo-1521737604893-d14cc237f11d?auto=format&fit=crop&w=900&q=80" alt="NGO team collaborating" class="rounded-2xl" />
|
||||
<div class="absolute -bottom-8 left-8 bg-white/90 text-brand-ink px-4 py-3 rounded-2xl shadow-lg">
|
||||
<p class="text-xs uppercase tracking-widest text-brand-primary mb-1" data-i18n="hero-card-title"></p>
|
||||
<p class="text-lg font-semibold" data-i18n="hero-card-headline"></p>
|
||||
<p class="text-sm text-brand-primary" data-i18n="hero-card-body"></p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</header>
|
||||
|
||||
<section class="max-w-6xl mx-auto px-6 py-16 grid md:grid-cols-3 gap-8">
|
||||
<article class="bg-white rounded-2xl p-6 shadow-brand border border-brand-smoke">
|
||||
<h2 class="text-xl font-semibold mb-2" data-i18n="value1-title"></h2>
|
||||
<p class="text-sm text-brand-ink/80" data-i18n="value1-body"></p>
|
||||
</article>
|
||||
<article class="bg-white rounded-2xl p-6 shadow-brand border border-brand-smoke">
|
||||
<h2 class="text-xl font-semibold mb-2" data-i18n="value2-title"></h2>
|
||||
<p class="text-sm text-brand-ink/80" data-i18n="value2-body"></p>
|
||||
</article>
|
||||
<article class="bg-white rounded-2xl p-6 shadow-brand border border-brand-smoke">
|
||||
<h2 class="text-xl font-semibold mb-2" data-i18n="value3-title"></h2>
|
||||
<p class="text-sm text-brand-ink/80" data-i18n="value3-body"></p>
|
||||
</article>
|
||||
</section>
|
||||
|
||||
<section id="blog" class="bg-white py-20">
|
||||
<div class="max-w-6xl mx-auto px-6">
|
||||
<div class="flex flex-col md:flex-row md:items-end md:justify-between gap-6 mb-12">
|
||||
<div>
|
||||
<p class="text-sm uppercase tracking-[0.3em] text-brand-primary mb-3" data-i18n="blog-tagline"></p>
|
||||
<h2 class="text-3xl font-semibold" data-i18n="blog-title"></h2>
|
||||
<p class="text-brand-ink/80" data-i18n="blog-subtitle"></p>
|
||||
</div>
|
||||
<button id="blog-toggle" type="button" class="text-brand-accent font-semibold hover:underline underline-offset-4">Browse all articles →</button>
|
||||
</div>
|
||||
<div id="blog-grid" class="grid gap-6 md:grid-cols-3"></div>
|
||||
<p id="blog-error" class="text-sm text-brand-ink/70 mt-6 hidden"></p>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section id="trial" class="bg-brand-ink text-white py-20">
|
||||
<div class="max-w-5xl mx-auto px-6 grid md:grid-cols-2 gap-12">
|
||||
<div>
|
||||
<p class="text-brand-sunrise text-sm uppercase tracking-[0.3em] mb-4" data-i18n="trial-tagline"></p>
|
||||
<h2 class="text-3xl font-semibold mb-4" data-i18n="trial-heading"></h2>
|
||||
<p class="text-white/80 mb-6" data-i18n="trial-body"></p>
|
||||
<ul class="space-y-4 text-sm text-white/80">
|
||||
<li class="flex gap-3"><span class="text-brand-emerald" aria-hidden="true">•</span><span data-i18n="trial-bullet1"></span></li>
|
||||
<li class="flex gap-3"><span class="text-brand-emerald" aria-hidden="true">•</span><span data-i18n="trial-bullet2"></span></li>
|
||||
<li class="flex gap-3"><span class="text-brand-emerald" aria-hidden="true">•</span><span data-i18n="trial-bullet3"></span></li>
|
||||
</ul>
|
||||
</div>
|
||||
<form class="bg-white text-brand-ink rounded-3xl p-8 shadow-brand space-y-5" data-event="form:trial">
|
||||
<label class="block text-sm font-medium">
|
||||
<span data-i18n="trial-label-email"></span>
|
||||
<input type="email" required class="mt-2 w-full rounded-2xl border border-brand-smoke px-4 py-3 focus:outline-none focus:ring-2 focus:ring-brand-accent" data-i18n-placeholder="trial-placeholder-email" />
|
||||
</label>
|
||||
<label class="block text-sm font-medium">
|
||||
<span data-i18n="trial-label-priority"></span>
|
||||
<select class="mt-2 w-full rounded-2xl border border-brand-smoke px-4 py-3 focus:outline-none focus:ring-2 focus:ring-brand-accent">
|
||||
<option data-i18n-option="priority-1"></option>
|
||||
<option data-i18n-option="priority-2"></option>
|
||||
<option data-i18n-option="priority-3"></option>
|
||||
<option data-i18n-option="priority-4"></option>
|
||||
</select>
|
||||
</label>
|
||||
<label class="block text-sm font-medium">
|
||||
<span data-i18n="trial-label-region"></span>
|
||||
<input type="text" class="mt-2 w-full rounded-2xl border border-brand-smoke px-4 py-3 focus:outline-none focus:ring-2 focus:ring-brand-accent" data-i18n-placeholder="trial-placeholder-region" />
|
||||
</label>
|
||||
<p class="text-xs text-brand-ink/70" data-i18n="trial-microcopy"></p>
|
||||
<button type="submit" class="w-full py-3 rounded-2xl bg-brand-accent text-brand-ink font-semibold" data-i18n="cta-trial"></button>
|
||||
<p class="text-xs text-brand-ink/60 text-center" data-i18n="trial-help"></p>
|
||||
</form>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section id="meeting" class="py-20 bg-white">
|
||||
<div class="max-w-5xl mx-auto px-6 grid md:grid-cols-2 gap-12 items-center">
|
||||
<div>
|
||||
<p class="uppercase text-xs tracking-[0.3em] text-brand-primary mb-3" data-i18n="meeting-tagline"></p>
|
||||
<h2 class="text-3xl font-semibold mb-4" data-i18n="meeting-heading"></h2>
|
||||
<p class="text-brand-ink/80 mb-6" data-i18n="meeting-body"></p>
|
||||
<ul class="space-y-4 text-sm text-brand-ink/80">
|
||||
<li class="flex gap-3"><span class="text-brand-primary" aria-hidden="true">•</span><span data-i18n="meeting-bullet1"></span></li>
|
||||
<li class="flex gap-3"><span class="text-brand-primary" aria-hidden="true">•</span><span data-i18n="meeting-bullet2"></span></li>
|
||||
<li class="flex gap-3"><span class="text-brand-primary" aria-hidden="true">•</span><span data-i18n="meeting-bullet3"></span></li>
|
||||
</ul>
|
||||
</div>
|
||||
<div class="bg-brand-snow border border-brand-smoke rounded-3xl p-8 shadow-brand">
|
||||
<p class="text-sm text-brand-primary font-semibold mb-2" data-i18n="meeting-note-title"></p>
|
||||
<p class="text-brand-ink font-semibold text-xl mb-4" data-i18n="meeting-note-body"></p>
|
||||
<p class="text-sm text-brand-ink/70" data-i18n="meeting-note-hint"></p>
|
||||
<a href="https://calendar.google.com/calendar/u/0/appointments/schedules/AcZssZ3DDbaiHFlhNhWySszAQoPXE_H73QLqYT3w7H9IYWC76RA_TgNIhLESjb4N7ep_D2D_OyW9q4-c" target="_blank" rel="noopener" class="inline-flex items-center gap-2 mt-4 text-sm font-semibold text-brand-primary hover:text-brand-accent plausible-event-name=meeting" data-i18n="meeting-note-cta"></a>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<footer class="bg-brand-ink text-white py-10">
|
||||
<div class="max-w-6xl mx-auto px-6 flex flex-col md:flex-row gap-6 items-center justify-between text-sm">
|
||||
<p>© <span id="year"></span> <span data-i18n="footer-note"></span></p>
|
||||
<div class="flex gap-4">
|
||||
<a href="https://odoo4projects.com/support" class="hover:text-brand-sunrise" data-i18n="footer-support"></a>
|
||||
<a href="https://odoo4projects.com/legal" class="hover:text-brand-sunrise" data-i18n="footer-legal"></a>
|
||||
<a href="https://odoo4projects.com/contactus" class="hover:text-brand-sunrise" data-i18n="footer-contact"></a>
|
||||
</div>
|
||||
</div>
|
||||
</footer>
|
||||
|
||||
<script>
|
||||
const translations = {
|
||||
en: {
|
||||
'nav-resources': 'Resources',
|
||||
'nav-trial': 'Free Trial',
|
||||
'hero-badge': 'ERP FOR NGOs',
|
||||
'hero-pill': 'Unified NGO ERP Platform',
|
||||
'hero-headline': 'Simplify every mission workflow with an ERP built for NGOs',
|
||||
'hero-subheadline': 'Consolidate programs, automate donor and grant reporting, and give every field office the same source of truth. Launch in weeks with templates tailored to humanitarian and community-impact teams.',
|
||||
'cta-trial': 'Sign Up for Free Trial',
|
||||
'cta-meeting': 'Schedule a Meeting',
|
||||
'hero-stat1': 'Faster donor & grant reporting cycles',
|
||||
'hero-stat2': 'Increase in volunteer onboarding speed',
|
||||
'hero-card-title': 'Live KPI snapshot',
|
||||
'hero-card-headline': 'Program Impact Dashboard',
|
||||
'hero-card-body': 'Realtime budgets • Volunteer hours • Donor health',
|
||||
'value1-title': 'Transparency for Donors',
|
||||
'value1-body': 'Accounting-ready ledgers pair receipts with stories so donors see every peso without extra spreadsheets or calls.',
|
||||
'value2-title': 'Donor Management & Communications',
|
||||
'value2-body': 'Automation buddies queue thank-yous, newsletters, and SMS nudges so every supporter hears from you right on time.',
|
||||
'value3-title': 'International Fund Raising',
|
||||
'value3-body': 'Multilingual homepages, acquisition kanbans, and project trackers keep campaigns aligned across countries without rebuilding playbooks.',
|
||||
'blog-tagline': 'Insights for NGO leaders',
|
||||
'blog-title': 'Blog & resource hub',
|
||||
'blog-subtitle': 'Get your impulses with our entertaining playbooks.',
|
||||
'blog-link': 'Browse all articles →',
|
||||
'blog-all-open': 'Show fewer articles',
|
||||
'blog-read-more': 'Read more',
|
||||
'blog-show-less': 'Show less',
|
||||
'blog-error': 'Unable to load articles right now.',
|
||||
'trial-tagline': 'Sign up free trial',
|
||||
'trial-heading': 'Launch your NGO ERP sandbox in under 5 minutes',
|
||||
'trial-body': 'Experience localized NGO templates, donor CRM, and automation recipes. No credit card required—just choose your focus area and invite teammates.',
|
||||
'trial-bullet1': 'Pre-loaded NGO chart of accounts & grant tracking',
|
||||
'trial-bullet2': 'Automated donor receipts + impact dashboards',
|
||||
'trial-bullet3': 'Guided checklists for go-live within 30 days',
|
||||
'trial-label-email': 'Work email',
|
||||
'trial-placeholder-email': 'impact@yourngo.org',
|
||||
'trial-label-priority': 'Primary priority',
|
||||
'priority-1': 'Grant compliance reporting',
|
||||
'priority-2': 'Volunteer management',
|
||||
'priority-3': 'Donor CRM & fundraising',
|
||||
'priority-4': 'Finance & procurement',
|
||||
'trial-label-region': 'Country / region',
|
||||
'trial-placeholder-region': 'e.g., Paraguay, LATAM',
|
||||
'trial-microcopy': 'No credit card required. EU hosting & GDPR-ready.',
|
||||
'trial-help': 'Need help? Use the Schedule a Meeting button in the header to book a guided call.',
|
||||
'meeting-tagline': 'Have a meeting',
|
||||
'meeting-heading': 'See how your NGO can streamline operations, save time, and reduce errors',
|
||||
'meeting-body': 'A 30-minute live walkthrough tailored to your mission, covering localization, integrations, and governance. Walk away with a rollout roadmap.',
|
||||
'meeting-bullet1': 'Baseline automation scoring',
|
||||
'meeting-bullet2': 'Tech stack alignment & data migration plan',
|
||||
'meeting-bullet3': 'Budget templates & total cost forecast',
|
||||
'meeting-note-title': 'How scheduling works',
|
||||
'meeting-note-body': 'You will meet with an NGO consultant from ODOO4projects.',
|
||||
'meeting-note-hint': 'Use the Schedule a Meeting button in the header and tell us during booking which question we should prepare for.',
|
||||
'meeting-note-cta': 'Open booking calendar',
|
||||
'footer-note': 'ODOO4projects — Hosting for the AI generation',
|
||||
'footer-support': 'Support',
|
||||
'footer-legal': 'Legal',
|
||||
'footer-contact': 'Contact'
|
||||
},
|
||||
es: {
|
||||
'nav-resources': 'Recursos',
|
||||
'nav-trial': 'Prueba gratuita',
|
||||
'hero-badge': 'ERP PARA ONGs',
|
||||
'hero-pill': 'Plataforma ERP unificada para ONGs',
|
||||
'hero-headline': 'Simplifica cada misión con un ERP diseñado para ONGs',
|
||||
'hero-subheadline': 'Centraliza programas, automatiza reportes de donantes y subvenciones y ofrece a cada sede la misma fuente de verdad. Implementa en semanas con plantillas creadas para equipos humanitarios.',
|
||||
'cta-trial': 'Crear prueba gratuita',
|
||||
'cta-meeting': 'Agendar una reunión',
|
||||
'hero-stat1': 'Ciclos más rápidos de reportes a donantes y subvenciones',
|
||||
'hero-stat2': 'Mayor velocidad en la incorporación de voluntarios',
|
||||
'hero-card-title': 'Panel de KPIs en vivo',
|
||||
'hero-card-headline': 'Tablero de impacto programático',
|
||||
'hero-card-body': 'Presupuestos en tiempo real • Horas voluntarias • Salud de donantes',
|
||||
'value1-title': 'Transparencia para donantes',
|
||||
'value1-body': 'Libros contables listos unen recibos y relatos para que cada donante vea su aporte sin hojas extra.',
|
||||
'value2-title': 'Gestión y comunicación con donantes',
|
||||
'value2-body': 'Bots de automatización programan agradecimientos, boletines y SMS para que cada aliado reciba noticias a tiempo.',
|
||||
'value3-title': 'Recaudación internacional',
|
||||
'value3-body': 'Sitios multilingües, tableros de adquisición y proyectos coordinan campañas globales sin rehacer playbooks ni procesos.',
|
||||
'blog-tagline': 'Ideas para líderes de ONG',
|
||||
'blog-title': 'Blog y centro de recursos',
|
||||
'blog-subtitle': 'Recibe impulsos con nuestros playbooks entretenidos.',
|
||||
'blog-link': 'Ver todos los artículos →',
|
||||
'blog-all-open': 'Mostrar menos artículos',
|
||||
'blog-read-more': 'Leer más',
|
||||
'blog-show-less': 'Mostrar menos',
|
||||
'blog-error': 'No pudimos cargar los artículos en este momento.',
|
||||
'trial-tagline': 'Activa tu prueba',
|
||||
'trial-heading': 'Lanza tu sandbox ERP para ONG en menos de 5 minutos',
|
||||
'trial-body': 'Explora plantillas localizadas, CRM de donantes y recetas de automatización. Sin tarjeta; solo elige tu prioridad e invita al equipo.',
|
||||
'trial-bullet1': 'Plan contable para ONG y seguimiento de subvenciones precargado',
|
||||
'trial-bullet2': 'Recibos automáticos más tableros de impacto',
|
||||
'trial-bullet3': 'Checklists guiados para salir a producción en 30 días',
|
||||
'trial-label-email': 'Correo laboral',
|
||||
'trial-placeholder-email': 'impacto@tuong.org',
|
||||
'trial-label-priority': 'Prioridad principal',
|
||||
'priority-1': 'Reportes de subvenciones',
|
||||
'priority-2': 'Gestión de voluntarios',
|
||||
'priority-3': 'CRM y recaudación',
|
||||
'priority-4': 'Finanzas y compras',
|
||||
'trial-label-region': 'País / región',
|
||||
'trial-placeholder-region': 'ej. Paraguay, LATAM',
|
||||
'trial-microcopy': 'Sin tarjeta. Hosting en la UE y cumplimiento GDPR.',
|
||||
'trial-help': '¿Dudas? Usa el botón “Agendar una reunión” en el encabezado para reservar una llamada guiada.',
|
||||
'meeting-tagline': 'Agenda una reunión',
|
||||
'meeting-heading': 'Descubre cómo optimizar operaciones, ahorrar tiempo y reducir errores',
|
||||
'meeting-body': 'Sesión de 30 minutos adaptada a tu misión, con localización, integraciones y gobernanza. Sal con un plan de implementación.',
|
||||
'meeting-bullet1': 'Diagnóstico de automatización',
|
||||
'meeting-bullet2': 'Plan de migración y alineación tecnológica',
|
||||
'meeting-bullet3': 'Plantillas presupuestarias y previsión de costes',
|
||||
'meeting-note-title': 'Cómo reservar',
|
||||
'meeting-note-body': 'Te reunirás con un consultor ONG de ODOO4projects.',
|
||||
'meeting-note-hint': 'Usa el botón “Agendar una reunión” del encabezado y cuéntanos durante la reserva qué pregunta debemos preparar.',
|
||||
'meeting-note-cta': 'Abrir calendario de reservas',
|
||||
'footer-note': 'ODOO4projects — Hosting para la generación IA',
|
||||
'footer-support': 'Soporte',
|
||||
'footer-legal': 'Legal',
|
||||
'footer-contact': 'Contacto'
|
||||
},
|
||||
de: {
|
||||
'nav-resources': 'Ressourcen',
|
||||
'nav-trial': 'Kostenlose Testphase',
|
||||
'hero-badge': 'ERP FÜR NGOs',
|
||||
'hero-pill': 'Vereintes NGO-ERP',
|
||||
'hero-headline': 'Vereinfache jeden Einsatz mit einem ERP für NGOs',
|
||||
'hero-subheadline': 'Bündele Programme, automatisiere Spender- und Förderberichte und gib allen Standorten dieselbe Datenbasis. Starte in wenigen Wochen mit maßgeschneiderten Templates.',
|
||||
'cta-trial': 'Kostenlose Testphase starten',
|
||||
'cta-meeting': 'Meeting planen',
|
||||
'hero-stat1': 'Schnellere Förder- & Spenderberichte',
|
||||
'hero-stat2': 'Doppelt so schnelle Ehrenamtlichen-Onboardings',
|
||||
'hero-card-title': 'Live-KPI-Überblick',
|
||||
'hero-card-headline': 'Impact-Dashboard für Programme',
|
||||
'hero-card-body': 'Budgets in Echtzeit • Ehrenamtsstunden • Donor Health',
|
||||
'value1-title': 'Transparenz für Spender',
|
||||
'value1-body': 'Buchhaltungsbereite Ledger verbinden Belege mit Geschichten, damit Spender jeden Euro ohne Zusatz-Excel sofort klar sehen.',
|
||||
'value2-title': 'Spenderverwaltung & Kommunikation',
|
||||
'value2-body': 'Automations-Buddys planen Dankesnachrichten, Newsletter und SMS, damit jede Beziehung pünktlich gepflegt und dokumentiert bleibt.',
|
||||
'value3-title': 'Internationale Fundraising',
|
||||
'value3-body': 'Mehrsprachige Homepages, Akquise-Kanban und Projekttracker halten Kampagnen weltweit synchron ohne Playbooks ständig umzuschreiben.',
|
||||
'blog-tagline': 'Insights für NGO-Führungskräfte',
|
||||
'blog-title': 'Blog & Wissenshub',
|
||||
'blog-subtitle': 'Hol dir Impulse mit unseren unterhaltsamen Playbooks.',
|
||||
'blog-link': 'Alle Artikel ansehen →',
|
||||
'blog-all-open': 'Weniger Artikel anzeigen',
|
||||
'blog-read-more': 'Mehr lesen',
|
||||
'blog-show-less': 'Weniger anzeigen',
|
||||
'blog-error': 'Artikel konnten gerade nicht geladen werden.',
|
||||
'trial-tagline': 'Kostenlos testen',
|
||||
'trial-heading': 'Starte dein NGO-ERP-Sandbox in unter 5 Minuten',
|
||||
'trial-body': 'Teste lokalisierte Templates, Donor-CRM und Automatisierungen. Keine Kreditkarte – wähle den Fokus und lade dein Team ein.',
|
||||
'trial-bullet1': 'Vorkonfigurierter Kontenplan & Fördertracking',
|
||||
'trial-bullet2': 'Automatische Spendenbelege & Impact-Dashboards',
|
||||
'trial-bullet3': 'Geführte Checklisten für Go-Live in 30 Tagen',
|
||||
'trial-label-email': 'Arbeits-E-Mail',
|
||||
'trial-placeholder-email': 'impact@deinengo.org',
|
||||
'trial-label-priority': 'Höchste Priorität',
|
||||
'priority-1': 'Förder-Reporting',
|
||||
'priority-2': 'Ehrenamt-Management',
|
||||
'priority-3': 'Spender-CRM & Fundraising',
|
||||
'priority-4': 'Finanzen & Beschaffung',
|
||||
'trial-label-region': 'Land / Region',
|
||||
'trial-placeholder-region': 'z. B. Paraguay, LATAM',
|
||||
'trial-microcopy': 'Keine Kreditkarte. EU-Hosting & DSGVO-konform.',
|
||||
'trial-help': 'Brauchen Sie Hilfe? Nutzen Sie den Button „Meeting planen“ im Header für einen geführten Call.',
|
||||
'meeting-tagline': 'Meeting vereinbaren',
|
||||
'meeting-heading': 'Erleben Sie, wie Ihre NGO Zeit spart und Fehler reduziert',
|
||||
'meeting-body': 'Ein 30-minütiger Walkthrough zu Lokalisierung, Integrationen und Governance – inklusive Rollout-Fahrplan.',
|
||||
'meeting-bullet1': 'Automation-Score als Ausgangspunkt',
|
||||
'meeting-bullet2': 'Technologie- & Migrationsplan',
|
||||
'meeting-bullet3': 'Budgetvorlagen & Kostenprognose',
|
||||
'meeting-note-title': 'So buchen Sie',
|
||||
'meeting-note-body': 'Sie sprechen mit einem NGO-Berater von ODOO4projects.',
|
||||
'meeting-note-hint': 'Verwenden Sie den Button „Meeting planen“ im Header und nennen Sie bei der Buchung Ihre Frage, damit wir uns vorbereiten können.',
|
||||
'meeting-note-cta': 'Buchungskalender öffnen',
|
||||
'footer-note': 'ODOO4projects — Hosting für die KI-Generation',
|
||||
'footer-support': 'Support',
|
||||
'footer-legal': 'Rechtliches',
|
||||
'footer-contact': 'Kontakt'
|
||||
}
|
||||
};
|
||||
|
||||
const BLOG_LIMIT = 3;
|
||||
const blogGrid = document.getElementById('blog-grid');
|
||||
const blogToggle = document.getElementById('blog-toggle');
|
||||
const blogError = document.getElementById('blog-error');
|
||||
let blogPosts = [];
|
||||
let blogExpanded = false;
|
||||
|
||||
if (blogGrid) {
|
||||
fetch('blog.json')
|
||||
.then(response => response.json())
|
||||
.then(data => {
|
||||
blogPosts = Array.isArray(data) ? data : [];
|
||||
renderBlogCards();
|
||||
})
|
||||
.catch(error => {
|
||||
if (blogError) {
|
||||
blogError.classList.remove('hidden');
|
||||
blogError.textContent = getTranslation(document.documentElement.lang, 'blog-error', 'Unable to load articles right now.');
|
||||
}
|
||||
console.error('blog.json load failed', error);
|
||||
});
|
||||
}
|
||||
|
||||
if (blogToggle) {
|
||||
blogToggle.addEventListener('click', () => {
|
||||
if (blogPosts.length <= BLOG_LIMIT) return;
|
||||
blogExpanded = !blogExpanded;
|
||||
renderBlogCards();
|
||||
});
|
||||
}
|
||||
|
||||
function getTranslation(locale, key, fallback) {
|
||||
return (translations[locale] && translations[locale][key]) ?? translations.en[key] ?? fallback;
|
||||
}
|
||||
|
||||
function renderBlogCards() {
|
||||
if (!blogGrid) {
|
||||
return;
|
||||
}
|
||||
if (!blogPosts.length) {
|
||||
blogGrid.innerHTML = '';
|
||||
updateBlogToggleLabel();
|
||||
return;
|
||||
}
|
||||
const limit = blogExpanded ? blogPosts.length : Math.min(BLOG_LIMIT, blogPosts.length);
|
||||
blogGrid.innerHTML = '';
|
||||
blogPosts.slice(0, limit).forEach(post => {
|
||||
blogGrid.appendChild(createBlogCard(post));
|
||||
});
|
||||
updateBlogToggleLabel();
|
||||
}
|
||||
|
||||
function createBlogCard(post) {
|
||||
const card = document.createElement('article');
|
||||
card.className = 'border border-brand-smoke rounded-3xl p-6 h-full flex flex-col';
|
||||
|
||||
const meta = document.createElement('div');
|
||||
meta.className = 'flex items-center justify-between mb-3';
|
||||
const area = document.createElement('p');
|
||||
area.className = 'text-xs uppercase tracking-widest text-brand-primary';
|
||||
area.textContent = post.area || '';
|
||||
const dateEl = document.createElement('time');
|
||||
dateEl.className = 'text-xs text-brand-ink/60';
|
||||
if (post.date) {
|
||||
dateEl.dateTime = post.date;
|
||||
}
|
||||
dateEl.textContent = formatBlogDate(post.date);
|
||||
meta.append(area, dateEl);
|
||||
card.appendChild(meta);
|
||||
|
||||
const title = document.createElement('h3');
|
||||
title.className = 'text-xl font-semibold mb-3';
|
||||
title.textContent = post.title || '';
|
||||
card.appendChild(title);
|
||||
|
||||
const teaser = document.createElement('div');
|
||||
teaser.className = 'text-sm text-brand-ink/80 space-y-3 mb-4';
|
||||
teaser.innerHTML = post.teaser || '';
|
||||
card.appendChild(teaser);
|
||||
|
||||
let contentBlock = null;
|
||||
const hasMore = post.content && post.content.trim() !== (post.teaser || '').trim();
|
||||
if (post.content) {
|
||||
contentBlock = document.createElement('div');
|
||||
contentBlock.className = 'text-sm text-brand-ink/80 space-y-3 mb-4 hidden';
|
||||
contentBlock.innerHTML = post.content;
|
||||
card.appendChild(contentBlock);
|
||||
}
|
||||
|
||||
if (hasMore && contentBlock) {
|
||||
const btn = document.createElement('button');
|
||||
btn.type = 'button';
|
||||
btn.className = 'text-sm font-semibold text-brand-accent underline-offset-4 hover:underline self-start';
|
||||
btn.textContent = getTranslation(document.documentElement.lang, 'blog-read-more', 'Read more');
|
||||
btn.addEventListener('click', () => {
|
||||
const isHidden = contentBlock.classList.contains('hidden');
|
||||
if (isHidden) {
|
||||
contentBlock.classList.remove('hidden');
|
||||
btn.textContent = getTranslation(document.documentElement.lang, 'blog-show-less', 'Show less');
|
||||
} else {
|
||||
contentBlock.classList.add('hidden');
|
||||
btn.textContent = getTranslation(document.documentElement.lang, 'blog-read-more', 'Read more');
|
||||
}
|
||||
});
|
||||
card.appendChild(btn);
|
||||
}
|
||||
|
||||
return card;
|
||||
}
|
||||
|
||||
function formatBlogDate(dateString) {
|
||||
if (!dateString) return '';
|
||||
try {
|
||||
const locale = document.documentElement.lang || 'en';
|
||||
return new Intl.DateTimeFormat(locale, { year: 'numeric', month: 'short', day: 'numeric' }).format(new Date(dateString));
|
||||
} catch (error) {
|
||||
return dateString;
|
||||
}
|
||||
}
|
||||
|
||||
function updateBlogToggleLabel() {
|
||||
if (!blogToggle) return;
|
||||
if (blogPosts.length <= BLOG_LIMIT) {
|
||||
blogToggle.classList.add('hidden');
|
||||
blogExpanded = false;
|
||||
return;
|
||||
}
|
||||
blogToggle.classList.remove('hidden');
|
||||
blogToggle.disabled = false;
|
||||
const locale = document.documentElement.lang || 'en';
|
||||
blogToggle.textContent = blogExpanded
|
||||
? getTranslation(locale, 'blog-all-open', 'Show fewer articles')
|
||||
: getTranslation(locale, 'blog-link', 'Browse all articles →');
|
||||
}
|
||||
|
||||
function setLanguage(lang) {
|
||||
const locale = translations[lang] ? lang : 'en';
|
||||
document.documentElement.lang = locale;
|
||||
document.querySelectorAll('[data-i18n]').forEach(el => {
|
||||
const key = el.dataset.i18n;
|
||||
const value = translations[locale][key] ?? translations.en[key] ?? '';
|
||||
if (value !== undefined) el.innerHTML = value;
|
||||
});
|
||||
document.querySelectorAll('[data-i18n-placeholder]').forEach(el => {
|
||||
const key = el.dataset.i18nPlaceholder;
|
||||
const value = translations[locale][key] ?? translations.en[key] ?? '';
|
||||
if (value !== undefined) el.setAttribute('placeholder', value);
|
||||
});
|
||||
document.querySelectorAll('[data-i18n-option]').forEach(el => {
|
||||
const key = el.dataset.i18nOption;
|
||||
const value = translations[locale][key] ?? translations.en[key] ?? '';
|
||||
if (value !== undefined) el.textContent = value;
|
||||
});
|
||||
document.querySelectorAll('[data-i18n-aria]').forEach(el => {
|
||||
const key = el.dataset.i18nAria;
|
||||
const value = translations[locale][key] ?? translations.en[key] ?? '';
|
||||
if (value !== undefined) el.setAttribute('aria-label', value);
|
||||
});
|
||||
renderBlogCards();
|
||||
updateBlogToggleLabel();
|
||||
}
|
||||
|
||||
document.getElementById('lang-selector').addEventListener('change', (event) => {
|
||||
setLanguage(event.target.value);
|
||||
});
|
||||
|
||||
setLanguage('en');
|
||||
document.getElementById('year').textContent = new Date().getFullYear();
|
||||
</script>
|
||||
</body>
|
||||
</html>
|
||||
@@ -5,11 +5,28 @@
|
||||
"title": "How Odoo makes donor management easy",
|
||||
"date": "2026-03-24",
|
||||
"author": "Odoo4Projects - NGO team",
|
||||
"categories": ["donor-management", "transparency", "productivity"],
|
||||
"tags": ["Odoo", "donor communication", "automation", "minimal admin"],
|
||||
"excerpt": "Learn how Odoo reduces administrative effort, improves donor communication, and increases transparency for NGOs.",
|
||||
"content": "Odoo makes donor management easy by centralizing donor data, automating receipts and updates, and generating transparent reports donors trust. With minimal admin required, NGOs can set up templates, schedule automated communications, and track gifts and commitments in one place. Donors receive timely receipts and impact updates that strengthen trust and retention. Odoo’s dashboards provide simple, exportable reports for accountability. The result: less time on admin, more time on mission.",
|
||||
"area": "Donor Management",
|
||||
"categories": [
|
||||
"Donor Management"
|
||||
],
|
||||
"tags": [
|
||||
"donor management",
|
||||
"transparency",
|
||||
"automated receipts",
|
||||
"donor communication",
|
||||
"Odoo"
|
||||
],
|
||||
"excerpt": "Discover how Odoo streamlines donor management with automation, transparent reporting and donor communication.",
|
||||
"meta_title": "How Odoo makes donor management easy \u2014 less admin, more impact",
|
||||
"meta_description": "Discover how Odoo streamlines donor management with automation, transparent reporting and donor communication.",
|
||||
"content": "\n<h3>Introduction</h3>\n<p>Donor management can feel like heavy administration \u2014 but it doesn't have to. Odoo centralizes donor data, automates receipts and tax documents, and makes transparent reporting simple so your team spends less time on admin and more on mission.</p>\n\n<h3>How Odoo reduces admin</h3>\n<ul>\n <li>Automated receipts and recurring donation handling</li>\n <li>Bank reconciliation and accounting links</li>\n <li>Pre-built workflows for gift acknowledgements and tax documents</li>\n</ul>\n\n<h3>How Odoo builds transparency</h3>\n<ul>\n <li>Real-time financial dashboards</li>\n <li>Exportable reports for audits and public impact pages</li>\n <li>Permissions and audit trails for donor data</li>\n</ul>\n\n<h3>How Odoo helps donor communication and retention</h3>\n<ul>\n <li>Segmented donor lists and targeted email campaigns</li>\n <li>Personalized thank-you messages and automated follow-ups</li>\n <li>Donation portals and clear donor histories to build trust</li>\n</ul>\n\n<h3>Mini case: \"Community Clean Water\" (hypothetical)</h3>\n<p>Community Clean Water reduced admin time by 40% after switching to Odoo. Automated receipts removed manual steps, and public impact reports increased repeat donations by 18%.</p>\n\n<h3>Conclusion & CTA</h3>\n<p>Ready to reduce admin and increase donor trust? <a href=\"/demo\">Request a demo</a> to see how Odoo can work for your NGO.</p>\n",
|
||||
"featured": true
|
||||
}
|
||||
]
|
||||
}
|
||||
],
|
||||
"categories_info": {
|
||||
"Donor Management": "Tools and best practices to acquire, acknowledge and retain donors with minimal admin.",
|
||||
"Transparency & Reporting": "Guides on clear reporting, audit trails, and public impact communication.",
|
||||
"Fundraising": "Insights and tactics for effective, donor-centric fundraising campaigns.",
|
||||
"Product Updates": "Latest product and feature updates relevant to NGOs and donor management."
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,24 @@
|
||||
Implementation notes for developer/designer:
|
||||
|
||||
- CTAs:
|
||||
- Header & hero primary CTA: "Donate now" -> /donate (prominent button, high-contrast).
|
||||
- Header & hero secondary CTA: "Request a demo" -> /demo (outline or secondary button).
|
||||
- Floating/footer CTA: "Subscribe for impact reports" — add an email capture in the footer with accessible label and placeholder "your email"; use aria-label and server-side handling.
|
||||
|
||||
- Accessibility:
|
||||
- All new headings use semantic h1/h2/h3.
|
||||
- Added alt text for icons and images; ensure color contrast for buttons.
|
||||
|
||||
- SEO & schema:
|
||||
- Homepage <title> and meta description updated.
|
||||
- Blog post entry in blog.json includes meta_title and meta_description.
|
||||
- JSON-LD for Organization exists in index.html. For blog posts, render Article schema when generating individual pages (use blog.json meta fields).
|
||||
|
||||
- Icons & assets:
|
||||
- Added simple SVG icons in assets/icons/ to match CI (stroke color #0F172A). If a CI icon set is available, replace these with approved icons.
|
||||
|
||||
- Responsive behavior:
|
||||
- Feature cards and trust block use grid breakpoints; verify on mobile that CTAs remain visible and stacked.
|
||||
|
||||
- If the CMS or build process requires separate SEO config files, map the homepage title/meta and blog post meta to that system.
|
||||
|
||||
@@ -0,0 +1,16 @@
|
||||
Twitter/X:
|
||||
1) Simplify fundraising with Odoo: automated receipts, clear reports, and donor communication that reduces admin and builds trust. Donate now → /donate | Request a demo → /demo #NGO #DonorManagement #Transparency #Odoo #Fundraising
|
||||
|
||||
2) Little admin, big impact. Odoo automates receipts, reconciliations and donor follow-ups so your team focuses on mission delivery. Read our post → /blog/how-odoo-makes-donor-management-easy #NGO #DonorManagement #Transparency #Odoo
|
||||
|
||||
LinkedIn/Facebook:
|
||||
1) Donor management shouldn't be heavy administration. Odoo centralizes donor data, automates receipts and tax documents, and provides transparent, exportable reports that build trust with supporters. Reduce admin and improve retention — donate or request a demo to see how it works. /donate /demo #NGO #DonorManagement #Transparency #Odoo #Fundraising
|
||||
|
||||
2) Transparency and low admin are essential for donor trust. With Odoo you get automated receipts, real-time dashboards, and personalized donor communication tools — all designed to reduce manual work and increase impact. Read our blog to learn more: /blog/how-odoo-makes-donor-management-easy #NGO #DonorManagement #Transparency #Odoo
|
||||
|
||||
Instagram:
|
||||
1) Caption: Little admin, more impact. Odoo automates receipts, provides transparent reports, and helps you keep donors engaged. CTA: Request a demo → /demo
|
||||
Image idea: Photo of a small NGO team reviewing impact reports on a laptop; overlay a short headline: "Make every donation count." #NGO #DonorManagement #Odoo #Fundraising
|
||||
|
||||
2) Caption: Build donor trust with clear, auditable reporting and automated communication. CTA: Read our blog → /blog/how-odoo-makes-donor-management-easy
|
||||
Image idea: Close-up of a donor receipt email and a public impact page mockup; warm, trustworthy colors. #Transparency #DonorManagement #Odoo
|
||||
+158
-46
@@ -3,9 +3,9 @@
|
||||
<head>
|
||||
<meta charset="UTF-8" />
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
||||
<title> NGO ERP Landingpage | ODOO4projects</title>
|
||||
<meta name="description" content="Purpose-built ERP platform for NGOs. Centralize programs, automate donor and grant reporting, and launch in weeks with ODOO4projects." />
|
||||
<meta name="keywords" content="NGO ERP system, nonprofit management software, ERP for NGOs, NGO operations platform, ODOO for nonprofits" />
|
||||
<title>Odoo donor management for NGOs — Transparent, low‑admin fundraising</title>
|
||||
<meta name="description" content="Simplify fundraising with Odoo: automated receipts, clear reports, and donor communication that reduces admin and builds trust." />
|
||||
<meta name="keywords" content="donor management software, Odoo NGO, NGO donor management, transparent fundraising" />
|
||||
<link rel="icon" href="https://odoo4projects.com/web/image/website/1/favicon?unique=725c3af" />
|
||||
<link rel="preconnect" href="https://fonts.googleapis.com" />
|
||||
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
|
||||
@@ -60,16 +60,23 @@
|
||||
<option value="es">Español</option>
|
||||
<option value="de">Deutsch</option>
|
||||
</select>
|
||||
<a href="https://calendar.google.com/calendar/u/0/appointments/schedules/AcZssZ3DDbaiHFlhNhWySszAQoPXE_H73QLqYT3w7H9IYWC76RA_TgNIhLESjb4N7ep_D2D_OyW9q4-c" target="_blank" rel="noopener" class="px-5 py-2 bg-brand-sunrise text-brand-ink font-semibold rounded-full text-sm shadow-brand hover:translate-y-0.5 transition plausible-event-name=meeting" data-i18n="cta-meeting"></a>
|
||||
<a href="/donate" class="px-4 py-2 bg-white text-brand-ink font-semibold rounded-full text-sm shadow-sm hover:translate-y-0.5 transition">Donate now</a>
|
||||
<a href="/demo" class="px-4 py-2 border border-white/30 text-sm rounded-full hover:bg-white/10 transition">Request a demo</a>
|
||||
</div>
|
||||
</div>
|
||||
<div class="max-w-6xl mx-auto px-6 py-16 grid md:grid-cols-2 gap-12 items-center">
|
||||
<div>
|
||||
<p class="text-brand-sunrise font-semibold mb-4" data-i18n="hero-pill"></p>
|
||||
<h1 class="text-4xl md:text-5xl font-semibold leading-tight mb-6"><span class=\"emoji\" aria-hidden=\"true\"></span> <span data-i18n=\"hero-headline\"></span></h1>
|
||||
<p class="text-lg text-white/80 mb-8" data-i18n="hero-subheadline"></p>
|
||||
<p class="text-lg text-white/80 mb-4" data-i18n="hero-subheadline"></p>
|
||||
<ul class="mt-4 text-sm text-white/90 space-y-2">
|
||||
<li>Little admin: automated receipts, reconciliations, and workflows</li>
|
||||
<li>Transparent reports: donor summaries, public impact reports, and audit trails</li>
|
||||
<li>Better relationships: personalized donor communication and retention tools</li>
|
||||
</ul>
|
||||
<div class="flex flex-wrap gap-4">
|
||||
<a href="#trial" class="px-6 py-3 bg-brand-accent hover:bg-brand-sunrise text-brand-ink font-semibold rounded-full transition" data-i18n="cta-trial" data-event="cta:hero-trial"></a>
|
||||
<a href="/donate" class="px-6 py-3 bg-brand-accent hover:bg-brand-sunrise text-brand-ink font-semibold rounded-full transition">Donate now</a>
|
||||
<a href="/demo" class="px-6 py-3 border border-white/30 rounded-full hover:bg-white/5">Request a demo</a>
|
||||
</div>
|
||||
<div class="mt-10 grid grid-cols-2 gap-6 text-sm text-white/80">
|
||||
<div>
|
||||
@@ -95,22 +102,60 @@
|
||||
</div>
|
||||
</header>
|
||||
|
||||
<section class="max-w-6xl mx-auto px-6 py-16 grid md:grid-cols-3 gap-8">
|
||||
<article class="bg-white rounded-2xl p-6 shadow-brand border border-brand-smoke">
|
||||
<h2 class="text-xl font-semibold mb-2" data-i18n="value1-title"></h2>
|
||||
<p class="text-sm text-brand-ink/80" data-i18n="value1-body"></p>
|
||||
</article>
|
||||
<article class="bg-white rounded-2xl p-6 shadow-brand border border-brand-smoke">
|
||||
<h2 class="text-xl font-semibold mb-2" data-i18n="value2-title"></h2>
|
||||
<p class="text-sm text-brand-ink/80" data-i18n="value2-body"></p>
|
||||
</article>
|
||||
<article class="bg-white rounded-2xl p-6 shadow-brand border border-brand-smoke">
|
||||
<h2 class="text-xl font-semibold mb-2" data-i18n="value3-title"></h2>
|
||||
<p class="text-sm text-brand-ink/80" data-i18n="value3-body"></p>
|
||||
</article>
|
||||
<section class="max-w-6xl mx-auto px-6 py-16">
|
||||
<div class="max-w-4xl mx-auto text-center mb-12">
|
||||
<h2 class="text-3xl font-semibold">Donor management made easy</h2>
|
||||
<p class="text-brand-ink/80 mt-4">Everything you need to acquire, acknowledge and retain donors — without heavy administration.</p>
|
||||
</div>
|
||||
<div class="max-w-6xl mx-auto px-6 grid md:grid-cols-2 lg:grid-cols-4 gap-6">
|
||||
<article class="bg-white rounded-2xl p-6 shadow-brand border border-brand-smoke">
|
||||
<h3 class="text-lg font-semibold mb-2">Automated receipts & tax documents</h3>
|
||||
<p class="text-sm text-brand-ink/80 mb-4">Instant, compliant receipts and recurring donation handling with minimal setup.</p>
|
||||
<a href="#receipts" class="text-sm text-brand-accent font-semibold">Learn more</a>
|
||||
</article>
|
||||
<article class="bg-white rounded-2xl p-6 shadow-brand border border-brand-smoke">
|
||||
<h3 class="text-lg font-semibold mb-2">Donor CRM & segmentation</h3>
|
||||
<p class="text-sm text-brand-ink/80 mb-4">Track donor histories, segment supporters, and send personalized appeals.</p>
|
||||
<a href="#crm" class="text-sm text-brand-accent font-semibold">Learn more</a>
|
||||
</article>
|
||||
<article class="bg-white rounded-2xl p-6 shadow-brand border border-brand-smoke">
|
||||
<h3 class="text-lg font-semibold mb-2">Transparent financial reports</h3>
|
||||
<p class="text-sm text-brand-ink/80 mb-4">Real-time dashboards, exportable reports, and public impact pages for donors.</p>
|
||||
<a href="#reports" class="text-sm text-brand-accent font-semibold">Learn more</a>
|
||||
</article>
|
||||
<article class="bg-white rounded-2xl p-6 shadow-brand border border-brand-smoke">
|
||||
<h3 class="text-lg font-semibold mb-2">Easy donor communication</h3>
|
||||
<p class="text-sm text-brand-ink/80 mb-4">Email templates, scheduled campaigns, and integrated follow-ups to build trust.</p>
|
||||
<a href="#communication" class="text-sm text-brand-accent font-semibold">Learn more</a>
|
||||
</article>
|
||||
</div>
|
||||
</section>
|
||||
|
||||
<section id="blog" class="bg-white py-20">
|
||||
<section class="max-w-6xl mx-auto px-6 py-12">
|
||||
<div class="bg-white rounded-2xl p-8 shadow-brand border border-brand-smoke">
|
||||
<h2 class="text-2xl font-semibold mb-3">Built for transparency</h2>
|
||||
<p class="text-brand-ink/80 mb-4">Provide donors with clear, auditable records and public impact updates. Odoo’s built-in reporting and access controls make it easy to show where funds go.</p>
|
||||
<div class="grid grid-cols-2 md:grid-cols-4 gap-4 mt-6">
|
||||
<div class="flex items-center gap-3">
|
||||
<img src="assets/icons/audit.svg" alt="Audit trails" width="28" height="28" />
|
||||
<span class="text-sm font-medium">Audit trails</span>
|
||||
</div>
|
||||
<div class="flex items-center gap-3">
|
||||
<img src="assets/icons/export.svg" alt="Exportable reports" width="28" height="28" />
|
||||
<span class="text-sm font-medium">Exportable reports</span>
|
||||
</div>
|
||||
<div class="flex items-center gap-3">
|
||||
<img src="assets/icons/gdpr.svg" alt="GDPR-ready data controls" width="28" height="28" />
|
||||
<span class="text-sm font-medium">GDPR-ready data controls</span>
|
||||
</div>
|
||||
<div class="flex items-center gap-3">
|
||||
<img src="assets/icons/consent.svg" alt="Donor consent management" width="28" height="28" />
|
||||
<span class="text-sm font-medium">Donor consent management</span>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</section>
|
||||
class="bg-white py-20">
|
||||
<div class="max-w-6xl mx-auto px-6">
|
||||
<div class="flex flex-col md:flex-row md:items-end md:justify-between gap-6 mb-12">
|
||||
<div>
|
||||
@@ -137,28 +182,92 @@
|
||||
<li class="flex gap-3"><span class="text-brand-emerald" aria-hidden="true">•</span><span data-i18n="trial-bullet3"></span></li>
|
||||
</ul>
|
||||
</div>
|
||||
<form class="bg-white text-brand-ink rounded-3xl p-8 shadow-brand space-y-5" data-event="form:trial">
|
||||
<label class="block text-sm font-medium">
|
||||
<span data-i18n="trial-label-email"></span>
|
||||
<input type="email" required class="mt-2 w-full rounded-2xl border border-brand-smoke px-4 py-3 focus:outline-none focus:ring-2 focus:ring-brand-accent" data-i18n-placeholder="trial-placeholder-email" />
|
||||
</label>
|
||||
<label class="block text-sm font-medium">
|
||||
<span data-i18n="trial-label-priority"></span>
|
||||
<select class="mt-2 w-full rounded-2xl border border-brand-smoke px-4 py-3 focus:outline-none focus:ring-2 focus:ring-brand-accent">
|
||||
<option data-i18n-option="priority-1"></option>
|
||||
<option data-i18n-option="priority-2"></option>
|
||||
<option data-i18n-option="priority-3"></option>
|
||||
<option data-i18n-option="priority-4"></option>
|
||||
</select>
|
||||
</label>
|
||||
<label class="block text-sm font-medium">
|
||||
<span data-i18n="trial-label-region"></span>
|
||||
<input type="text" class="mt-2 w-full rounded-2xl border border-brand-smoke px-4 py-3 focus:outline-none focus:ring-2 focus:ring-brand-accent" data-i18n-placeholder="trial-placeholder-region" />
|
||||
</label>
|
||||
<p class="text-xs text-brand-ink/70" data-i18n="trial-microcopy"></p>
|
||||
<button type="submit" class="w-full py-3 rounded-2xl bg-brand-accent text-brand-ink font-semibold" data-i18n="cta-trial"></button>
|
||||
<p class="text-xs text-brand-ink/60 text-center" data-i18n="trial-help"></p>
|
||||
</form>
|
||||
<form id="donorForm" novalidate>
|
||||
<select name="location" id="locationSelect" style="display:none">
|
||||
<option value="">Select Location</option>
|
||||
<option value="Boston">US, Boston</option>
|
||||
<option value="Manchester">UK, Manchester</option>
|
||||
<option value="Mumbai">IN, Mumbai</option>
|
||||
<option value="Saopaulo">BR, Sao Paulo</option>
|
||||
<option value="meppel">NL, Meppel</option>
|
||||
<option value="sydney">AU, Sydney</option>
|
||||
</select>
|
||||
|
||||
<input type="text" name="name" placeholder="Name" required>
|
||||
<input type="text" name="company" placeholder="Company" required>
|
||||
<input type="text" name="country" placeholder="Country" required>
|
||||
<input type="text" name="street" placeholder="Street" required>
|
||||
|
||||
<div>
|
||||
<input type="text" name="zip" placeholder="ZIP" required>
|
||||
<input type="text" name="town" placeholder="Town" required>
|
||||
</div>
|
||||
|
||||
<input type="email" name="email" placeholder="Email" required>
|
||||
|
||||
<input type="hidden" name="product" id="productField" value="">
|
||||
<input type="hidden" name="price" id="priceField" value="">
|
||||
|
||||
<button type="submit">Send</button>
|
||||
|
||||
<div id="formMessage" aria-live="polite"></div>
|
||||
</form>
|
||||
|
||||
<script>
|
||||
const WEBHOOK_URL = "https://002-001-5dd6e535-4d1c-46bc-9bd9-42ad4bc5f082.odoo4projects.com/webhook/c76e6b4e-af2f-4bc3-9875-6460d0ffc8e3";
|
||||
|
||||
document.addEventListener('DOMContentLoaded', () => {
|
||||
const form = document.getElementById('donorForm');
|
||||
const msg = document.getElementById('formMessage');
|
||||
const locationSelect = document.getElementById('locationSelect');
|
||||
|
||||
function maybeShowLocation(productName) {
|
||||
if (!productName) { locationSelect.style.display = 'none'; locationSelect.required = false; return; }
|
||||
if (productName.startsWith('_')) {
|
||||
locationSelect.style.display = 'block';
|
||||
locationSelect.required = true;
|
||||
} else {
|
||||
locationSelect.style.display = 'none';
|
||||
locationSelect.required = false;
|
||||
locationSelect.value = '';
|
||||
}
|
||||
}
|
||||
|
||||
// If you set product/price from buttons/links on the page, ensure those handlers call:
|
||||
// document.getElementById('productField').value = 'exampleProduct';
|
||||
// document.getElementById('priceField').value = '123';
|
||||
// maybeShowLocation('exampleProduct');
|
||||
|
||||
form.addEventListener('submit', async (e) => {
|
||||
e.preventDefault();
|
||||
msg.textContent = '';
|
||||
|
||||
const data = {};
|
||||
new FormData(form).forEach((value, key) => data[key] = value);
|
||||
|
||||
try {
|
||||
const res = await fetch(WEBHOOK_URL, {
|
||||
method: 'POST',
|
||||
headers: { 'Content-Type': 'application/json' },
|
||||
body: JSON.stringify(data)
|
||||
});
|
||||
|
||||
if (res.ok) {
|
||||
msg.textContent = 'Thank you — your submission was sent.';
|
||||
form.reset();
|
||||
maybeShowLocation('');
|
||||
} else {
|
||||
msg.textContent = 'Submission failed. Please try again.';
|
||||
console.error('Webhook response status:', res.status, await res.text());
|
||||
}
|
||||
} catch (err) {
|
||||
console.error(err);
|
||||
msg.textContent = 'Error submitting form. Please try later.';
|
||||
}
|
||||
});
|
||||
});
|
||||
</script>
|
||||
|
||||
</div>
|
||||
</section>
|
||||
|
||||
@@ -201,12 +310,15 @@
|
||||
'nav-trial': 'Free Trial',
|
||||
'hero-badge': 'ERP FOR NGOs',
|
||||
'hero-pill': 'Unified NGO ERP Platform',
|
||||
'hero-headline': 'Simplify every mission workflow with an ERP built for NGOs',
|
||||
'hero-subheadline': 'Consolidate programs, automate donor and grant reporting, and give every field office the same source of truth. Launch in weeks with templates tailored to humanitarian and community-impact teams.',
|
||||
'cta-trial': 'Sign Up for Free Trial',
|
||||
'cta-meeting': 'Schedule a Meeting',
|
||||
'hero-headline': 'Make every donation count — simple donor management with Odoo',
|
||||
'hero-subheadline': 'Transparent reporting, automated donor communication, and minimal admin — so you can focus on impact.',
|
||||
'cta-trial': 'Donate now',
|
||||
'cta-meeting': 'Request a demo',
|
||||
'hero-stat1': 'Faster donor & grant reporting cycles',
|
||||
'hero-stat2': 'Increase in volunteer onboarding speed',
|
||||
'hero-bullet1': 'Little admin: automated receipts, reconciliations, and workflows',
|
||||
'hero-bullet2': 'Transparent reports: donor summaries, public impact reports, and audit trails',
|
||||
'hero-bullet3': 'Better relationships: personalized donor communication and retention tools',
|
||||
'hero-card-title': 'Live KPI snapshot',
|
||||
'hero-card-headline': 'Program Impact Dashboard',
|
||||
'hero-card-body': 'Realtime budgets • Volunteer hours • Donor health',
|
||||
|
||||
Reference in New Issue
Block a user