dev_env
This commit is contained in:
20
.env.dev.example
Normal file
20
.env.dev.example
Normal file
@@ -0,0 +1,20 @@
|
||||
# Copier ce fichier en .env.dev et remplir les valeurs
|
||||
|
||||
SECRET_KEY=change-this-to-a-long-random-string-50-chars-minimum
|
||||
|
||||
# Base de données
|
||||
POSTGRES_DB=jool_db_dev
|
||||
POSTGRES_USER=jool_user
|
||||
POSTGRES_PASSWORD=change-this-password
|
||||
DATABASE_URL=postgresql://jool_user:change-this-password@db:5432/jool_db_dev
|
||||
|
||||
# Django
|
||||
DJANGO_SETTINGS_MODULE=config.settings.prod
|
||||
ALLOWED_HOSTS=dev.jool-international.com
|
||||
SECURE_SSL_REDIRECT=true
|
||||
|
||||
# Email (optionnel pour le dev)
|
||||
EMAIL_HOST=smtp.dreamhost.com
|
||||
EMAIL_PORT=465
|
||||
EMAIL_HOST_USER=
|
||||
EMAIL_HOST_PASSWORD=
|
||||
45
deploy-dev.sh
Executable file
45
deploy-dev.sh
Executable file
@@ -0,0 +1,45 @@
|
||||
#!/bin/bash
|
||||
# Déploiement dev.jool-international.com
|
||||
# Usage : bash deploy-dev.sh
|
||||
set -e
|
||||
|
||||
DOMAIN="dev.jool-international.com"
|
||||
EMAIL="info@jool-int.com"
|
||||
COMPOSE="docker compose -f docker-compose.dev.yml"
|
||||
|
||||
# ── 1. Vérifier .env.dev ─────────────────────────────────
|
||||
if [ ! -f .env.dev ]; then
|
||||
echo "❌ .env.dev introuvable."
|
||||
echo " Copie .env.dev.example en .env.dev et remplis les valeurs."
|
||||
exit 1
|
||||
fi
|
||||
|
||||
echo "✅ .env.dev trouvé"
|
||||
|
||||
# ── 2. Démarrer avec nginx HTTP only ─────────────────────
|
||||
echo "🚀 Démarrage des conteneurs (HTTP only)..."
|
||||
$COMPOSE up -d --build
|
||||
|
||||
# Attendre que nginx soit prêt
|
||||
sleep 5
|
||||
|
||||
# ── 3. Obtenir le certificat SSL ─────────────────────────
|
||||
echo "🔒 Obtention du certificat SSL pour $DOMAIN..."
|
||||
$COMPOSE run --rm certbot certonly \
|
||||
--webroot \
|
||||
--webroot-path=/var/www/certbot \
|
||||
-d "$DOMAIN" \
|
||||
--email "$EMAIL" \
|
||||
--agree-tos \
|
||||
--no-eff-email
|
||||
|
||||
# ── 4. Passer à la config HTTPS ──────────────────────────
|
||||
echo "🔄 Activation de la config HTTPS..."
|
||||
sed -i 's|nginx.dev-init.conf|nginx.dev.conf|g' docker-compose.dev.yml
|
||||
|
||||
# Redémarrer nginx avec la config HTTPS
|
||||
$COMPOSE up -d nginx
|
||||
|
||||
echo ""
|
||||
echo "✅ Déploiement terminé !"
|
||||
echo " Site disponible sur https://$DOMAIN"
|
||||
61
docker-compose.dev.yml
Normal file
61
docker-compose.dev.yml
Normal file
@@ -0,0 +1,61 @@
|
||||
services:
|
||||
|
||||
# ── Base de données PostgreSQL ──────────────────────────
|
||||
db:
|
||||
image: postgres:16-alpine
|
||||
restart: always
|
||||
volumes:
|
||||
- postgres_data_dev:/var/lib/postgresql/data
|
||||
env_file: .env.dev
|
||||
healthcheck:
|
||||
test: ["CMD-SHELL", "pg_isready"]
|
||||
interval: 10s
|
||||
timeout: 5s
|
||||
retries: 5
|
||||
|
||||
# ── Application Django (Gunicorn) ───────────────────────
|
||||
web:
|
||||
build: .
|
||||
restart: always
|
||||
env_file: .env.dev
|
||||
volumes:
|
||||
- static_volume_dev:/app/staticfiles
|
||||
- media_volume_dev:/app/media
|
||||
depends_on:
|
||||
db:
|
||||
condition: service_healthy
|
||||
command: >
|
||||
sh -c "python manage.py migrate --noinput &&
|
||||
gunicorn config.wsgi:application --bind 0.0.0.0:8000 --workers 2
|
||||
--timeout 60 --access-logfile - --error-logfile -"
|
||||
|
||||
# ── Nginx (reverse proxy + static files) ───────────────
|
||||
nginx:
|
||||
image: nginx:alpine
|
||||
restart: always
|
||||
ports:
|
||||
- "80:80"
|
||||
- "443:443"
|
||||
volumes:
|
||||
- ./nginx/nginx.dev-init.conf:/etc/nginx/conf.d/default.conf:ro
|
||||
- static_volume_dev:/app/staticfiles:ro
|
||||
- media_volume_dev:/app/media:ro
|
||||
- certbot_www_dev:/var/www/certbot:ro
|
||||
- certbot_certs_dev:/etc/letsencrypt:ro
|
||||
depends_on:
|
||||
- web
|
||||
|
||||
# ── Certbot (SSL Let's Encrypt) ─────────────────────────
|
||||
certbot:
|
||||
image: certbot/certbot
|
||||
volumes:
|
||||
- certbot_www_dev:/var/www/certbot
|
||||
- certbot_certs_dev:/etc/letsencrypt
|
||||
entrypoint: "/bin/sh -c 'trap exit TERM; while :; do certbot renew; sleep 12h & wait $${!}; done;'"
|
||||
|
||||
volumes:
|
||||
postgres_data_dev:
|
||||
static_volume_dev:
|
||||
media_volume_dev:
|
||||
certbot_www_dev:
|
||||
certbot_certs_dev:
|
||||
@@ -7,12 +7,8 @@ services:
|
||||
volumes:
|
||||
- postgres_data:/var/lib/postgresql/data
|
||||
env_file: .env.prod
|
||||
environment:
|
||||
POSTGRES_DB: ${POSTGRES_DB}
|
||||
POSTGRES_USER: ${POSTGRES_USER}
|
||||
POSTGRES_PASSWORD: ${POSTGRES_PASSWORD}
|
||||
healthcheck:
|
||||
test: ["CMD-SHELL", "pg_isready -U ${POSTGRES_USER} -d ${POSTGRES_DB}"]
|
||||
test: ["CMD-SHELL", "pg_isready"]
|
||||
interval: 10s
|
||||
timeout: 5s
|
||||
retries: 5
|
||||
|
||||
142
export_pages.py
142
export_pages.py
@@ -1,142 +0,0 @@
|
||||
"""
|
||||
Exporte chaque page Django en HTML autonome (CSS + JS inline).
|
||||
Usage : python3 export_pages.py
|
||||
"""
|
||||
import os, re, base64, mimetypes
|
||||
from pathlib import Path
|
||||
import requests
|
||||
from bs4 import BeautifulSoup
|
||||
from urllib.parse import urljoin, urlparse
|
||||
|
||||
BASE_URL = 'http://127.0.0.1:8000'
|
||||
OUT_DIR = Path(__file__).parent / 'figma_export'
|
||||
OUT_DIR.mkdir(exist_ok=True)
|
||||
|
||||
PAGES = [
|
||||
('home', '/'),
|
||||
('a-propos', '/a-propos/'),
|
||||
('kiriq', '/produits/kiriq/'),
|
||||
('monitor', '/produits/monitor/'),
|
||||
('joolid', '/produits/joolid/'),
|
||||
('carrieres','/carrieres/'),
|
||||
]
|
||||
|
||||
session = requests.Session()
|
||||
|
||||
def fetch(url):
|
||||
r = session.get(urljoin(BASE_URL, url), timeout=10)
|
||||
r.raise_for_status()
|
||||
return r
|
||||
|
||||
def to_data_uri(url_or_path):
|
||||
"""Convertit une URL de ressource en data URI base64."""
|
||||
try:
|
||||
r = fetch(url_or_path)
|
||||
mime = r.headers.get('Content-Type', 'application/octet-stream').split(';')[0]
|
||||
b64 = base64.b64encode(r.content).decode()
|
||||
return f"data:{mime};base64,{b64}"
|
||||
except Exception as e:
|
||||
print(f" ⚠️ Impossible de charger {url_or_path}: {e}")
|
||||
return url_or_path
|
||||
|
||||
def inline_css(soup, base_url):
|
||||
"""Remplace les <link rel=stylesheet> par des <style> inline."""
|
||||
for link in soup.find_all('link', rel='stylesheet'):
|
||||
href = link.get('href', '')
|
||||
if not href:
|
||||
continue
|
||||
try:
|
||||
css_text = fetch(href).text
|
||||
# Inline les url() dans le CSS (fonts, images)
|
||||
def replace_url(m):
|
||||
raw = m.group(1).strip('"\'')
|
||||
if raw.startswith('data:') or raw.startswith('http'):
|
||||
return m.group(0)
|
||||
full = urljoin(BASE_URL + href, raw)
|
||||
path = urlparse(full).path
|
||||
return f"url('{to_data_uri(path)}')"
|
||||
css_text = re.sub(r'url\(([^)]+)\)', replace_url, css_text)
|
||||
style_tag = soup.new_tag('style')
|
||||
style_tag.string = css_text
|
||||
link.replace_with(style_tag)
|
||||
print(f" ✅ CSS inline : {href}")
|
||||
except Exception as e:
|
||||
print(f" ⚠️ CSS ignoré {href}: {e}")
|
||||
|
||||
def inline_images(soup):
|
||||
"""Remplace les src d'images par des data URI."""
|
||||
for img in soup.find_all('img'):
|
||||
src = img.get('src', '')
|
||||
if src and not src.startswith('data:') and not src.startswith('http'):
|
||||
img['src'] = to_data_uri(src)
|
||||
print(f" 🖼️ Image inline : {src}")
|
||||
|
||||
def inline_js(soup):
|
||||
"""Remplace les <script src=...> par du JS inline."""
|
||||
for script in soup.find_all('script', src=True):
|
||||
src = script.get('src', '')
|
||||
if not src or src.startswith('http'):
|
||||
continue
|
||||
try:
|
||||
js_text = fetch(src).text
|
||||
new_script = soup.new_tag('script')
|
||||
new_script.string = js_text
|
||||
script.replace_with(new_script)
|
||||
print(f" ⚡ JS inline : {src}")
|
||||
except Exception as e:
|
||||
print(f" ⚠️ JS ignoré {src}: {e}")
|
||||
|
||||
def fix_google_fonts(soup):
|
||||
"""Garde les liens Google Fonts (ils fonctionnent sans serveur)."""
|
||||
# On ne touche pas aux fonts Google — elles chargent via CDN
|
||||
pass
|
||||
|
||||
def export_page(name, path):
|
||||
print(f"\n📄 Export : {name} ({path})")
|
||||
try:
|
||||
html = fetch(path).text
|
||||
except Exception as e:
|
||||
print(f" ❌ Erreur : {e}")
|
||||
return
|
||||
|
||||
soup = BeautifulSoup(html, 'html.parser')
|
||||
|
||||
# Supprimer les balises CSRF et admin (inutiles en statique)
|
||||
for tag in soup.find_all('input', {'name': 'csrfmiddlewaretoken'}):
|
||||
tag.decompose()
|
||||
|
||||
fix_google_fonts(soup)
|
||||
inline_css(soup, path)
|
||||
inline_images(soup)
|
||||
inline_js(soup)
|
||||
|
||||
# Fixer les liens internes pour qu'ils pointent vers les fichiers exportés
|
||||
page_map = {
|
||||
'/': 'home.html',
|
||||
'/a-propos/': 'a-propos.html',
|
||||
'/produits/kiriq/': 'kiriq.html',
|
||||
'/produits/monitor/': 'monitor.html',
|
||||
'/produits/joolid/': 'joolid.html',
|
||||
'/carrieres/': 'carrieres.html',
|
||||
}
|
||||
for a in soup.find_all('a', href=True):
|
||||
href = a['href']
|
||||
# Supprimer les ancres avec fragment pour les pages principales
|
||||
clean = href.split('#')[0]
|
||||
if clean in page_map:
|
||||
a['href'] = page_map[clean] + (('#' + href.split('#')[1]) if '#' in href else '')
|
||||
|
||||
out_file = OUT_DIR / f"{name}.html"
|
||||
out_file.write_text(str(soup), encoding='utf-8')
|
||||
size_kb = out_file.stat().st_size / 1024
|
||||
print(f" ✅ Sauvegardé : {out_file.name} ({size_kb:.0f} KB)")
|
||||
|
||||
if __name__ == '__main__':
|
||||
print("🚀 Export HTML autonome — Jool International\n")
|
||||
for name, path in PAGES:
|
||||
export_page(name, path)
|
||||
print(f"\n🎉 Terminé ! Fichiers dans : {OUT_DIR}")
|
||||
print("\n📌 Étapes suivantes :")
|
||||
print(" 1. Ouvrez Figma Desktop")
|
||||
print(" 2. Installez le plugin 'html.to.design' depuis la communauté Figma")
|
||||
print(" 3. Dans le plugin : Local File → sélectionnez chaque .html dans figma_export/")
|
||||
22
nginx/nginx.dev-init.conf
Normal file
22
nginx/nginx.dev-init.conf
Normal file
@@ -0,0 +1,22 @@
|
||||
upstream django {
|
||||
server web:8000;
|
||||
}
|
||||
|
||||
# HTTP only — utilisé uniquement pour obtenir le certificat SSL (étape 1)
|
||||
server {
|
||||
listen 80;
|
||||
server_name dev.jool-international.com;
|
||||
|
||||
location /.well-known/acme-challenge/ {
|
||||
root /var/www/certbot;
|
||||
}
|
||||
|
||||
location / {
|
||||
proxy_pass http://django;
|
||||
proxy_set_header Host $host;
|
||||
proxy_set_header X-Real-IP $remote_addr;
|
||||
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||
proxy_set_header X-Forwarded-Proto $scheme;
|
||||
proxy_redirect off;
|
||||
}
|
||||
}
|
||||
63
nginx/nginx.dev.conf
Normal file
63
nginx/nginx.dev.conf
Normal file
@@ -0,0 +1,63 @@
|
||||
upstream django {
|
||||
server web:8000;
|
||||
}
|
||||
|
||||
# ── HTTP → HTTPS redirect ──────────────────────────────────
|
||||
server {
|
||||
listen 80;
|
||||
server_name dev.jool-international.com;
|
||||
|
||||
location /.well-known/acme-challenge/ {
|
||||
root /var/www/certbot;
|
||||
}
|
||||
|
||||
location / {
|
||||
return 301 https://$host$request_uri;
|
||||
}
|
||||
}
|
||||
|
||||
# ── HTTPS ──────────────────────────────────────────────────
|
||||
server {
|
||||
listen 443 ssl;
|
||||
http2 on;
|
||||
server_name dev.jool-international.com;
|
||||
|
||||
ssl_certificate /etc/letsencrypt/live/dev.jool-international.com/fullchain.pem;
|
||||
ssl_certificate_key /etc/letsencrypt/live/dev.jool-international.com/privkey.pem;
|
||||
include /etc/letsencrypt/options-ssl-nginx.conf;
|
||||
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
|
||||
|
||||
server_tokens off;
|
||||
client_max_body_size 10M;
|
||||
|
||||
add_header X-Robots-Tag "noindex, nofollow" always;
|
||||
|
||||
location /static/ {
|
||||
alias /app/staticfiles/;
|
||||
expires 1d;
|
||||
add_header Cache-Control "public";
|
||||
access_log off;
|
||||
}
|
||||
|
||||
location /media/careers/cvs/ {
|
||||
deny all;
|
||||
return 404;
|
||||
}
|
||||
|
||||
location /media/ {
|
||||
alias /app/media/;
|
||||
expires 1d;
|
||||
add_header Cache-Control "public";
|
||||
access_log off;
|
||||
}
|
||||
|
||||
location / {
|
||||
proxy_pass http://django;
|
||||
proxy_set_header Host $host;
|
||||
proxy_set_header X-Real-IP $remote_addr;
|
||||
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||
proxy_set_header X-Forwarded-Proto $scheme;
|
||||
proxy_redirect off;
|
||||
proxy_read_timeout 60s;
|
||||
}
|
||||
}
|
||||
@@ -1928,8 +1928,12 @@
|
||||
color: #fff;
|
||||
}
|
||||
|
||||
@media (max-width: 768px) {
|
||||
.lang-switcher {
|
||||
@media (max-width: 960px) {
|
||||
.nav-topbar .lang-switcher {
|
||||
display: none;
|
||||
}
|
||||
.nav-drawer .lang-switcher {
|
||||
display: flex;
|
||||
margin-left: 0;
|
||||
}
|
||||
}
|
||||
|
||||
@@ -54,8 +54,10 @@
|
||||
{% endif %}
|
||||
<!-- Switcher mobile -->
|
||||
<li style="margin-top:12px;">
|
||||
<a href="{{ fr_url }}" class="lang-btn {% if CURRENT_LANG == 'fr' %}lang-active{% endif %}" style="margin-right:4px;">FR</a>
|
||||
<div class="lang-switcher">
|
||||
<a href="{{ fr_url }}" class="lang-btn {% if CURRENT_LANG == 'fr' %}lang-active{% endif %}">FR</a>
|
||||
<a href="{{ en_url }}" class="lang-btn {% if CURRENT_LANG == 'en' %}lang-active{% endif %}">EN</a>
|
||||
</div>
|
||||
</li>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
366
trad.txt
366
trad.txt
@@ -1,366 +0,0 @@
|
||||
Agriculture no longer has blind spots.
|
||||
JooL reveals what every hectare hides: risks, anomalies, potential, and critical decisions through AI, satellite intelligence, and drones.
|
||||
CTA: Request a demo →
|
||||
Badge: Diagnostics delivered in under 2 hours
|
||||
Cards
|
||||
KIRiQ AI — Risks detected, report available
|
||||
JooL Monitor — Drone map ready
|
||||
JooL ID — Farmer georeferenced
|
||||
Mon Agro — Agronomist available
|
||||
Agricultural identity · Satellite analytics · AI reports · Field operations
|
||||
|
||||
Slide 2
|
||||
KIRiQ AI · SATELLITE & AI
|
||||
Read the real condition of your fields.
|
||||
KIRiQ AI transforms satellite imagery into actionable agricultural intelligence to detect risks, monitor crop dynamics, estimate yield impact, and guide field decisions at scale.
|
||||
|
||||
Early anomaly detection
|
||||
Identify weak signals and detect areas under stress before losses become visible in the field.
|
||||
Risk scoring & yield estimation
|
||||
Measure anomaly severity, estimate yield impact, and prioritize the most critical interventions.
|
||||
Portfolio-scale risk monitoring
|
||||
Compare plots over time, monitor risk evolution, and manage decisions from individual blocks to entire agricultural portfolios.
|
||||
|
||||
Primary CTA
|
||||
Request a demo
|
||||
Secondary CTA
|
||||
Discover KIRiQ
|
||||
Visual labels
|
||||
4 anomalies detected
|
||||
Estimated yield impact
|
||||
AI report available
|
||||
|
||||
Slide 3
|
||||
JOOL MONITOR · DRONE & HIGH-RESOLUTION MAPPING
|
||||
See your land in high resolution.
|
||||
JooL Monitor transforms drone flights into detailed maps, precise measurements, and field-ready reports to analyze surfaces, count plants, and monitor plot evolution over time.
|
||||
|
||||
Advanced mapping
|
||||
Generate orthomosaics, 3D models, and precise boundaries to visualize your land with field-level detail.
|
||||
Smart counting & measurements
|
||||
Measure surfaces, distances, and densities, count trees, identify missing plants, and analyze distribution across each plot.
|
||||
Continuous visual monitoring
|
||||
Compare plot evolution over time, track meaningful deviations, and document the changes that matter.
|
||||
|
||||
Primary CTA
|
||||
Schedule a flight
|
||||
Secondary CTA
|
||||
Discover JooL Monitor
|
||||
|
||||
Slide 4
|
||||
JOOL ID · AGRICULTURAL IDENTITY
|
||||
Give every farmer and every plot a clear identity.
|
||||
JooL ID structures essential agricultural data — farmers, plots, crops, surfaces, cooperatives, and verification statuses — into a reliable, traceable, and scalable infrastructure.
|
||||
|
||||
Farmer identification
|
||||
Centralize farmer profiles with key information, verification statuses, and cooperative affiliations.
|
||||
Farm mapping
|
||||
Link each farmer to their plots, crops, surfaces, and geographic data to create a clear operational view.
|
||||
Agricultural program management
|
||||
Manage cooperatives, certifications, subsidies, audits, and agricultural projects through a structured and verifiable database.
|
||||
|
||||
Primary CTA
|
||||
Structure my agricultural database
|
||||
Secondary CTA
|
||||
Discover JooL ID
|
||||
Visual labels
|
||||
300,000 registered farmers
|
||||
610,000 hectares mapped
|
||||
|
||||
Slide 5
|
||||
MON AGRO · FIELD OPERATIONS & AGRONOMIC SUPPORT
|
||||
Turn recommendations into field execution.
|
||||
Mon Agro by JooL connects JooL diagnostics to a network of agronomists, technicians, and field operators to support farmers, execute interventions, and monitor plots with precision.
|
||||
|
||||
Targeted interventions
|
||||
Deploy the right actions in the right places using alerts, recommendations, and priority levels generated by KIRiQ AI.
|
||||
Farmer support
|
||||
Support producers through agronomic recommendations, field visits, and tailored action plans.
|
||||
Continuous operational monitoring
|
||||
Coordinate field teams, document interventions, and track plot evolution over time.
|
||||
|
||||
Primary CTA
|
||||
Deploy Mon Agro
|
||||
Secondary CTA
|
||||
Discover Mon Agro
|
||||
Visual labels
|
||||
Agronomist assigned
|
||||
Intervention scheduled
|
||||
Active field monitoring
|
||||
|
||||
Trusted agricultural intelligence infrastructure.
|
||||
From insurers and agro-industrials to cooperatives and public institutions, JooL helps agricultural stakeholders see better, decide faster, and act more effectively in the field.
|
||||
PALMCI · SAPH · PALMAFRIQUE · Tony’s Chocolonely · KORIGIN · CORIS Insurance · EMERGING VEOLIA SIM · FEPMACI · TRCI · CARRE D’OR · ARCHETYP · SHIMI · Municipality of Dioulatiédougou
|
||||
|
||||
ABOUT JOOL INTERNATIONAL
|
||||
Agricultural intelligence built for Africa.
|
||||
JooL builds an agricultural infrastructure connecting artificial intelligence, satellite imagery, drones, georeferenced data, and field operations to help agricultural stakeholders see better, decide better, and act better at scale.
|
||||
African agriculture still suffers from a massive field visibility gap. Millions of farms operate without reliable, updated, and actionable data, slowing interventions, risk management, and access to financing.
|
||||
|
||||
OUR VISION
|
||||
Building Africa’s trusted agricultural intelligence infrastructure.
|
||||
We aim to transform how African agriculture is monitored, scored, financed, and operated at scale.
|
||||
Our ambition is to make every hectare more visible, every risk more measurable, and every decision more precise through an infrastructure combining AI, satellite intelligence, field data, and agricultural operations.
|
||||
|
||||
OUR MISSION
|
||||
Turning fragmented agricultural reality into actionable intelligence.
|
||||
JooL connects AI, satellite imagery, drones, georeferenced data, and field operations to help insurers, agro-industrials, cooperatives, institutions, and farmers:
|
||||
detect risks earlier,
|
||||
prioritize interventions more effectively,
|
||||
measure field impact,
|
||||
structure agricultural data,
|
||||
and make faster, more reliable, scalable decisions.
|
||||
|
||||
OUR VALUES
|
||||
Technology built around field execution, clarity, and impact.
|
||||
Integrity
|
||||
Reliable and transparent systems built on verifiable data.
|
||||
Clarity
|
||||
Turning complex agricultural data into understandable and actionable decisions.
|
||||
Excellence
|
||||
High execution standards across technology, analytics, and field operations.
|
||||
Field execution
|
||||
Connecting intelligence to real-world interventions.
|
||||
Useful impact
|
||||
Building tools that concretely improve agricultural performance.
|
||||
Built for Africa
|
||||
Solutions designed for African agricultural realities and scale.
|
||||
|
||||
CEO MESSAGE
|
||||
African agriculture does not lack potential. It lacks visibility.
|
||||
For decades, agricultural decisions across Africa have been made with limited reliable data, low field visibility, and tools rarely adapted to operational realities.
|
||||
This lack of visibility comes at a massive cost: diseases detected too late, poorly prioritized interventions, mispriced risks, and capital deployed with too much uncertainty.
|
||||
At JooL, we decided to build an infrastructure designed to change that.
|
||||
By collecting local data and connecting artificial intelligence, satellite imagery, drones, georeferenced information, and field operations, we help agricultural stakeholders better understand their plots, detect risks earlier, and make more precise decisions.
|
||||
But our ambition goes beyond technology.
|
||||
We aim to help build an African agriculture that is more visible, measurable, financeable, and scalable.
|
||||
Because agriculture becomes stronger when it is better understood, we are committed at JooL to revealing the blind spots of African agriculture and transforming field data into actionable decisions.
|
||||
Joseph-Olivier BILEY
|
||||
Co-Founder & CEO, JooL International
|
||||
KIRiQ AI · SATELLITE & AI
|
||||
Read the real condition of your fields.
|
||||
KIRiQ AI transforms satellite imagery into actionable agricultural intelligence to detect risks, monitor crop dynamics, estimate yield impact, and guide field decisions at scale.
|
||||
|
||||
What KIRiQ AI unlocks for you
|
||||
Continuous field intelligence, built for decision-making.
|
||||
Advanced stress detection
|
||||
Detect water, nutrient, and vegetation stress earlier — before the impact becomes visible in the field.
|
||||
Better-targeted interventions
|
||||
Prioritize the plots that require immediate action and focus resources where field impact is most critical.
|
||||
Multi-plot visibility
|
||||
Compare agricultural blocks, track changes over time, and manage operations through a unified portfolio view.
|
||||
Yield forecasting
|
||||
Anticipate production potential plot by plot through continuous monitoring of vegetation dynamics.
|
||||
Instant agronomic reports
|
||||
Generate readable summaries for field teams, managers, cooperatives, insurers, and partners.
|
||||
API & workflow integrations
|
||||
Connect KIRiQ AI to your existing systems to streamline data flows and enrich operational workflows.
|
||||
|
||||
How KIRiQ AI works
|
||||
An intelligence pipeline designed for African agriculture.
|
||||
01 — Plot import or drawing
|
||||
Import your files or draw plots directly on the platform to launch the analysis.
|
||||
02 — Recent satellite acquisition
|
||||
KIRiQ AI retrieves the latest available satellite data to monitor vegetation conditions as close to real time as possible.
|
||||
03 — AI-powered biophysical analysis
|
||||
KIRiQ AI analyzes chlorophyll activity, biomass, humidity, and canopy structure to detect anomalies visible in the signal.
|
||||
04 — Field intelligence delivery
|
||||
Results are delivered as maps, indicators, risk levels, and priority zones to support agronomic analysis, field verification, and operational decisions.
|
||||
|
||||
Pricing
|
||||
Pricing designed for field realities.
|
||||
On-demand satellite diagnostics
|
||||
One-time diagnostics for plantations and agricultural portfolios.
|
||||
Starting at 900 FCFA / ha
|
||||
Starting at $1.5 / ha
|
||||
|
||||
Portfolio monitoring
|
||||
Recurring monitoring for agro-industrials, insurers, financial institutions, and agricultural programs.
|
||||
Starting at 11,000 FCFA / ha / year
|
||||
Starting at $18 / ha / year
|
||||
|
||||
Agricultural risk scoring
|
||||
Scoring infrastructure for insurance, agricultural financing, and portfolio risk assessment.
|
||||
Starting at 24,000 FCFA / farmer score
|
||||
Starting at $40 / farmer score
|
||||
|
||||
Enterprise Intelligence
|
||||
Advanced analytics, portfolio intelligence, APIs, and custom integrations for enterprise clients.
|
||||
Custom pricing
|
||||
|
||||
Move from reactive agriculture to data-driven operations.
|
||||
Primary CTA
|
||||
Request a demo
|
||||
Secondary CTA
|
||||
Talk to our team
|
||||
|
||||
JOOL MONITOR · DRONE & HIGH-RESOLUTION MAPPING
|
||||
See your land in high resolution.
|
||||
JooL Monitor transforms drone flights into detailed maps, precise measurements, and field-ready reports to analyze surfaces, count plants, detect anomalies, and monitor plot evolution over time.
|
||||
|
||||
What JooL Monitor unlocks on the ground
|
||||
Precise, measurable, and actionable field intelligence.
|
||||
Smart counting
|
||||
Automatically detect, count, and locate plants to visualize missing trees, densities, and irregularities plot by plot.
|
||||
High-definition orthomosaics
|
||||
Access ultra-detailed aerial maps that are measurable, accurate, and ready for operational use.
|
||||
3D terrain models
|
||||
Reconstruct terrain relief, canopy structure, and vegetation volumes for deeper agricultural analysis.
|
||||
Visual audit & compliance
|
||||
Compare real field conditions against declared data, identify discrepancies, and document sensitive areas with visual proof.
|
||||
Time-based monitoring
|
||||
Compare multiple drone missions to measure crop evolution, detect losses, and monitor changes over time.
|
||||
Ready-to-use exports
|
||||
Download deliverables in formats compatible with GIS systems, reporting workflows, and operational tools.
|
||||
|
||||
How JooL Monitor works
|
||||
From drone flight to operational deliverable.
|
||||
01 — Mission planning
|
||||
Each flight is prepared according to your plots, operational goals, and field constraints.
|
||||
02 — High-precision acquisition
|
||||
The drone captures full-area coverage to ensure reliable, consistent, and detailed field visibility.
|
||||
03 — Intelligent data processing
|
||||
Images are stitched, modeled, and transformed into operational cartographic deliverables.
|
||||
04 — Fast analysis & delivery
|
||||
Receive maps, indicators, and reports ready for operational and technical teams.
|
||||
|
||||
Pricing
|
||||
Pricing built for field operations.
|
||||
On-demand drone mapping
|
||||
Drone flights and cartographic deliverables for plantations, audits, and field missions.
|
||||
Starting at 10,000 FCFA / ha
|
||||
Starting at $17 / ha
|
||||
|
||||
Counting & plot analysis
|
||||
Smart counting, density analysis, and anomaly detection across agricultural plots.
|
||||
Pricing based on surface & complexity
|
||||
|
||||
Multi-site & industrial missions
|
||||
Drone deployments for agro-industrials, institutions, infrastructure projects, and large agricultural portfolios.
|
||||
Custom pricing
|
||||
|
||||
GIS exports & advanced deliverables
|
||||
HD orthomosaics, 3D models, GIS layers, and enterprise-ready outputs.
|
||||
Available depending on project needs
|
||||
|
||||
Move from field observation to measurable land intelligence.
|
||||
Primary CTA
|
||||
Schedule a flight
|
||||
Secondary CTA
|
||||
Talk to our team
|
||||
|
||||
JOOL ID · AGRICULTURAL IDENTITY
|
||||
Give every farmer and every plot a clear identity.
|
||||
JooL ID structures essential agricultural data — farmers, plots, crops, surfaces, cooperatives, and verification statuses — into a reliable, traceable, and scalable infrastructure.
|
||||
|
||||
What JooL ID unlocks for you
|
||||
A trusted agricultural database built for field operations.
|
||||
Reliable farmer profiles
|
||||
Centralize complete and verified farmer records for field operations, audits, agricultural programs, and partners.
|
||||
Readable plot intelligence
|
||||
Link each farmer to plots, crops, and surfaces through a clear and structured geographic view.
|
||||
Unified cooperative management
|
||||
Monitor members, certifications, programs, and operations through a centralized infrastructure designed for decision-making.
|
||||
Simplified compliance & traceability
|
||||
Prepare audits, certifications, and traceability requirements more efficiently through better-structured data.
|
||||
Mobile-first, offline-ready
|
||||
Collect field data without connectivity and automatically sync once network access is restored.
|
||||
APIs & enterprise integrations
|
||||
Connect JooL ID to ERP systems, operational tools, and existing workflows through an open architecture.
|
||||
|
||||
How JooL ID deploys
|
||||
From field collection to operational agricultural infrastructure.
|
||||
01 — Smart data import
|
||||
Import existing files and structure your JooL ID database without starting from scratch.
|
||||
02 — Field team onboarding
|
||||
Teams quickly adopt the platform through a simple and operational workflow.
|
||||
03 — Field collection & verification
|
||||
Farmer and plot data are collected, geolocated, and verified directly in the field.
|
||||
04 — Operational-ready infrastructure
|
||||
Within weeks, your organization gains access to a reliable and operational agricultural database ready for audits, reporting, and monitoring.
|
||||
|
||||
Pricing
|
||||
Pricing designed for agricultural structuring.
|
||||
Farmer georeferencing
|
||||
Farmer identification and agricultural plot mapping.
|
||||
Starting at 1,000 FCFA / farmer
|
||||
Starting at $1.7 / farmer
|
||||
|
||||
Agricultural database structuring
|
||||
Creation and organization of farmer, plot, and cooperative databases.
|
||||
Pricing based on scale & scope
|
||||
|
||||
Institutional deployments
|
||||
Deployments for cooperatives, agro-industrials, public institutions, and agricultural programs.
|
||||
Custom pricing
|
||||
|
||||
APIs & enterprise integrations
|
||||
Connections to financing systems, insurance tools, ERP systems, and operational software.
|
||||
Available depending on project needs
|
||||
|
||||
Turn fragmented data into operational agricultural infrastructure.
|
||||
Primary CTA
|
||||
Structure my agricultural database
|
||||
Secondary CTA
|
||||
Talk to our team
|
||||
|
||||
MON AGRO BY JOOL · FIELD OPERATIONS & AGRONOMIC SUPPORT
|
||||
Turn recommendations into field execution.
|
||||
Mon Agro by JooL connects JooL diagnostics to a network of agronomists, technicians, and field operators to support farmers, execute interventions, and monitor plots with precision.
|
||||
|
||||
What Mon Agro unlocks on the ground
|
||||
An operational force built for agricultural execution.
|
||||
Targeted interventions
|
||||
Deploy the right actions in the right places using alerts, recommendations, and priority levels generated by KIRiQ AI.
|
||||
Farmer support
|
||||
Support producers through agronomic recommendations, field visits, and operational action plans adapted to field realities.
|
||||
Field team coordination
|
||||
Assign missions, monitor interventions, and manage operations through a centralized operational view.
|
||||
Field verification & reporting
|
||||
Document interventions with photos, observations, and geolocated field data synchronized directly into your workflows.
|
||||
Continuous plot monitoring
|
||||
Track crop evolution over time and measure the real impact of field interventions.
|
||||
Large-scale deployment
|
||||
Activate a network of agronomists and technicians capable of operating across multiple agricultural regions simultaneously.
|
||||
|
||||
How Mon Agro works
|
||||
From recommendation to field execution.
|
||||
01 — Detection & prioritization
|
||||
Risks, anomalies, and priority zones are identified through KIRiQ AI and JooL intelligence tools.
|
||||
02 — Mission assignment
|
||||
Tasks and interventions are assigned to available agronomists, technicians, or field operators.
|
||||
03 — Field intervention & collection
|
||||
Teams intervene directly on plots, apply recommendations, and document completed actions.
|
||||
04 — Operational monitoring & reporting
|
||||
Field data flows back into the platform to monitor progress, measure impact, and coordinate operations.
|
||||
|
||||
Pricing
|
||||
Pricing designed for field operations.
|
||||
Agronomic intervention
|
||||
Field visits, agronomic diagnostics, and producer support.
|
||||
Starting at 25,000 FCFA / intervention
|
||||
Starting at $42 / intervention
|
||||
|
||||
Drone spraying operations
|
||||
Precision drone spraying for phytosanitary treatments, nutritional applications, and targeted agricultural interventions.
|
||||
Starting at 10,000 FCFA / ha
|
||||
Starting at $17 / ha
|
||||
|
||||
Recurring operational support
|
||||
Continuous field support for plantations, cooperatives, and agricultural programs.
|
||||
Pricing based on frequency & scope
|
||||
|
||||
Multi-site deployments
|
||||
Coordination of large-scale agricultural operations and field teams.
|
||||
Custom pricing
|
||||
|
||||
Operational reporting & supervision
|
||||
Intervention tracking, dashboards, and centralized operational reporting.
|
||||
Available depending on project needs
|
||||
|
||||
Connect agricultural intelligence to field execution.
|
||||
Primary CTA
|
||||
Deploy Mon Agro
|
||||
Secondary CTA
|
||||
Talk to our team
|
||||
|
||||
Reference in New Issue
Block a user