commit 3dbacc94d356b6d8f97e0781585c156a7bfe4d04 Author: Cheick Oumar D Date: Sun May 17 17:11:54 2026 +0200 feat: add new project and single page layouts - Created a new layout for projects with sections for hero, projects, roadmap, selection criteria, and a call to action. - Added a single page layout for individual project details, including a hero section and content area. - Introduced a brand highlight partial to emphasize "TheAfriForge" in text. - Implemented an icon partial for reusable SVG icons across the site. - Developed a site header and footer with navigation and legal links, adapting for language variations. - Enhanced the index layout with sections for hero, stats, pillars, projects, and members. - Added a development script to load environment variables and run Hugo with optional arguments. diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 0000000..6ce6d7a --- /dev/null +++ b/.dockerignore @@ -0,0 +1,9 @@ +.git +.gitignore +.env +.env.* +!.env.example +.hugo_build.lock +public +resources/_gen +node_modules diff --git a/.env.example b/.env.example new file mode 100644 index 0000000..81ff7a0 --- /dev/null +++ b/.env.example @@ -0,0 +1,12 @@ +# Membership form endpoint (provider URL) +HUGO_MEMBERSHIP_FORM_ACTION=https://your-form-provider-endpoint + +# Formbricks SDK (recommended for this project) +HUGO_FORMBRICKS_API_HOST=https://form.theafriforge.org +HUGO_FORMBRICKS_ENV_ID=cmp9q6jb6000anz01waq5fprk +HUGO_FORMBRICKS_EVENT=membership_form_submitted +HUGO_FORMBRICKS_SDK_URL=https://form.theafriforge.org/js/formbricks.umd.cjs + +# Optional success redirect path (language-aware in templates) +# Examples: /devenir-membre or /become-member +HUGO_MEMBERSHIP_FORM_SUCCESS_PATH=/become-member diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..d4b2111 --- /dev/null +++ b/.gitignore @@ -0,0 +1,20 @@ +# Hugo build output and caches +public/ +resources/ +.hugo_build.lock + +# Node dependencies and logs +node_modules/ +npm-debug.log* +yarn-debug.log* +yarn-error.log* +pnpm-debug.log* + +# Environment files +.env + +# OS and editor files +.DS_Store +Thumbs.db +.idea/ +.vscode/ diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..97a7de7 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,28 @@ +FROM klakegg/hugo:0.128.0-ext-alpine AS builder + +WORKDIR /src +COPY . . + +# Build-time env vars used by Hugo templates. +ARG HUGO_MEMBERSHIP_FORM_ACTION="" +ARG HUGO_MEMBERSHIP_FORM_SUCCESS_PATH="" +ARG HUGO_FORMBRICKS_API_HOST="" +ARG HUGO_FORMBRICKS_ENV_ID="" +ARG HUGO_FORMBRICKS_EVENT="" +ARG HUGO_FORMBRICKS_SDK_URL="" + +ENV HUGO_MEMBERSHIP_FORM_ACTION=$HUGO_MEMBERSHIP_FORM_ACTION +ENV HUGO_MEMBERSHIP_FORM_SUCCESS_PATH=$HUGO_MEMBERSHIP_FORM_SUCCESS_PATH +ENV HUGO_FORMBRICKS_API_HOST=$HUGO_FORMBRICKS_API_HOST +ENV HUGO_FORMBRICKS_ENV_ID=$HUGO_FORMBRICKS_ENV_ID +ENV HUGO_FORMBRICKS_EVENT=$HUGO_FORMBRICKS_EVENT +ENV HUGO_FORMBRICKS_SDK_URL=$HUGO_FORMBRICKS_SDK_URL + +RUN hugo --config ./hugo.toml --environment production --minify + +FROM nginx:1.27-alpine + +COPY --from=builder /src/public /usr/share/nginx/html + +EXPOSE 80 +CMD ["nginx", "-g", "daemon off;"] diff --git a/README.md b/README.md new file mode 100644 index 0000000..9d41c8f --- /dev/null +++ b/README.md @@ -0,0 +1,187 @@ +# TheAfriForge - Guide Local et Production + +Ce projet est un site statique Hugo multilingue : +- Francais par defaut sur / +- Anglais sur /en/ + +## 1) Prerequis + +Installe les outils suivants : +- Hugo Extended (recommande: version recente) +- Git + +Verification rapide : + +```bash +hugo version +git --version +``` + +## 2) Lancer le site en local + +Depuis le dossier du projet : + +```bash +cd /home/choudi/Bureau/Projets/Open-Ivoire/Clients/TheAfricaForge +hugo server --config ./hugo.toml -D +``` + +Ensuite ouvre : +- http://localhost:1313/ +- http://localhost:1313/en/ + +Notes : +- L'option -D permet d'afficher aussi les contenus draft. +- Si tu ne veux pas les drafts, retire -D. + +## 3) Erreur frequente: hugo server exit code 255 + +Si le serveur ne demarre pas et retourne 255, verifie : + +1. Un processus Hugo deja lance + +```bash +pkill -f "hugo server" || true +``` + +2. Presence du lock file dans le dossier projet + +```bash +rm -f .hugo_build.lock +``` + +3. Relance ensuite le serveur + +```bash +hugo server --config ./hugo.toml -D +``` + +## 4) Build de production + +Genere les fichiers statiques optimises dans public/ : + +```bash +hugo --config ./hugo.toml --environment production --minify +``` + +Le dossier de sortie a deployer est : +- public/ + +## 5) Tester la build de production en local + +Option A (Python, simple) : + +```bash +python3 -m http.server 8080 --directory public +``` + +Option B (Node) : + +```bash +npx serve public +``` + +Puis ouvre : +- http://localhost:8080/ (Python) +- URL affichee par serve (Node) + +## 6) Deploiement en production + +### Option 1 - VPS + Nginx (recommande pour controle complet) + +1. Build local : + +```bash +hugo --config ./hugo.toml --environment production --minify +``` + +2. Copier public/ vers le serveur : + +```bash +rsync -avz --delete public/ user@ton-serveur:/var/www/theafriforge/ +``` + +3. Config Nginx minimale : + +```nginx +server { + listen 80; + server_name theafriforge.org www.theafriforge.org; + + root /var/www/theafriforge; + index index.html; + + location / { + try_files $uri $uri/ =404; + } +} +``` + +4. Activer HTTPS via Certbot (recommande). + +### Option 2 - Netlify (ultra rapide) + +Build command : + +```bash +hugo --config ./hugo.toml --environment production --minify +``` + +Publish directory : +- public + +Important : +- Selectionne Hugo Extended dans les settings de build si necessaire. + +### Option 3 - Cloudflare Pages + +Build command : + +```bash +hugo --config ./hugo.toml --environment production --minify +``` + +Build output directory : +- public + +### Option 4 - Vercel (site statique) + +Framework preset : +- Hugo + +Build command : + +```bash +hugo --config ./hugo.toml --environment production --minify +``` + +Output directory : +- public + +## 7) Workflow recommande + +1. Developpement local avec hugo server +2. Verification FR/EN sur / et /en/ +3. Build production avec minify +4. Test rapide du dossier public/ +5. Deploiement sur hebergeur cible + +## 8) Commandes utiles + +Build standard : + +```bash +hugo --config ./hugo.toml --minify +``` + +Nettoyage cache Hugo (si comportement etrange) : + +```bash +rm -rf resources/_gen +``` + +Forcer un autre port local : + +```bash +hugo server --config ./hugo.toml -D --port 1314 +``` diff --git a/content/en/_index.md b/content/en/_index.md new file mode 100644 index 0000000..88df2cd --- /dev/null +++ b/content/en/_index.md @@ -0,0 +1,71 @@ +--- +title: "Home" +hero: + kicker: "African digital infrastructure" + titleLine1: "Free and sovereign" + titleLine2: "infrastructure" + titleLine3: "for Africa." + subtitle: "TheAfriForge aligns public institutions, academia and industry to secure local control over critical digital systems." + ctaManifesto: "Read the Manifesto" + ctaProjects: "See projects" + +whyJoin: + title: "Why join us" + intro: "Access opportunities around African digital sovereignty with committed partners and world-class infrastructure." + cards: + - title: "Sovereignty" + icon: "🔐" + text: "Full control over your data, infrastructure and critical systems. No external dependency." + - title: "Resilience" + icon: "💪" + text: "Decentralized, interoperable systems designed to withstand shocks. Robust African infrastructure." + - title: "Growth" + icon: "📈" + text: "Access to a growing African market. Ongoing business and innovation opportunities." + - title: "Community" + icon: "👥" + text: "A continental network of innovators, experts and public stakeholders committed to digital transformation." + +pillars: + title: "Three founding pillars" + items: + - title: "Autonomy" + text: "Strengthen Africa's capacity to build, maintain and govern essential software components." + - title: "Infrastructure" + text: "Connect public and private platforms into resilient, interoperable and trusted services." + - title: "Neutrality" + text: "Promote open, transparent and public-interest governance across all shared systems." + +projects: + title: "Strategic projects" + intro: "Initiatives in production, incubation and research for African digital sovereignty." + tag: "Open Source Programs" + items: + - name: "GitForge.africa" + status: "Production" + text: "Sovereign code forge hosting strategic African projects in production." + cta: "Access" + - name: "AfriRegistry" + status: "Incubation" + text: "Federated registry of open standards, services and software artifacts currently in incubation." + cta: "View" + - name: "AIForge" + status: "Research" + text: "Research initiative for an open and responsible AI platform tailored to African realities." + cta: "Learn more" + +members: + title: "Join the movement" + subtitle: "Join African stakeholders committed to digital sovereignty. Together, we are building tomorrow's infrastructure." + categories: + - label: "Universities & Schools" + title: "Contribute to digital commons" + text: "Join technical groups, research labs and certification-driven training tracks." + cta: "Learn more" + link: "become-member" + - label: "Datacenters & Operators" + title: "Federate continental infrastructure" + text: "Co-design hosting, security and interconnection standards for critical services." + cta: "Learn more" + link: "become-member" +--- diff --git a/content/en/become-member.md b/content/en/become-member.md new file mode 100644 index 0000000..9920152 --- /dev/null +++ b/content/en/become-member.md @@ -0,0 +1,143 @@ +--- +title: "Become a member" +description: "Join TheAfriForge to contribute to African digital sovereignty through concrete programmes and open governance." +layout: "join" + +value: + title: "Why become a member" + intro: "Joining TheAfriForge means contributing to critical infrastructure, open source commons, and governance standards for the continent." + items: + - icon: "network" + title: "Continental impact" + text: "Contribute to strategic digital services reusable across countries and institutions." + - icon: "shield" + title: "Security and resilience" + text: "Help build a stronger and safer software supply chain." + - icon: "academic" + title: "Capability building" + text: "Access a collaborative ecosystem for training, documentation, and technical exchange." + +membership: + title: "Member profiles" + intro: "We welcome technical, institutional, and operational contributions." + items: + - title: "Technical contributor" + text: "Engineering teams, security experts, and open source maintainers." + expectations: + - "Contribute to priority software components" + - "Join technical and security reviews" + - "Share quality and documentation practices" + - title: "Infrastructure partner" + text: "Datacenters, operators, hosting providers, and regional cloud actors." + expectations: + - "Co-design sovereign hosting standards" + - "Provide technical or federation capacity" + - "Contribute to availability and recovery objectives" + - title: "Institutional partner" + text: "Universities, public agencies, companies, and impact actors." + expectations: + - "Support platform adoption" + - "Contribute to governance orientation" + - "Fund or support strategic programmes" + +process: + title: "Membership process" + steps: + - title: "Submission" + text: "You submit the form with your profile, objectives, and contribution proposal." + delay: "Immediate" + - title: "Qualification" + text: "Our team reviews your request and checks alignment with TheAfriForge priorities." + delay: "Within 48h" + - title: "Scoping call" + text: "A 30-minute call clarifies expectations, deliverables, and collaboration model." + delay: "Within 7 days" + - title: "Decision and onboarding" + text: "You receive the decision, participation charter, and onboarding plan." + delay: "Within 10 days" + +form: + title: "Membership application" + intro: "This form is sent to the TheAfriForge membership team." + action: "https://formsubmit.co/membership@theafriforge.org" + subject: "New membership application - TheAfriForge" + labels: + organization: "Organization (optional)" + actorType: "Actor type" + firstName: "First name" + lastName: "Last name" + profession: "Profession / role" + email: "Professional email" + phone: "Phone number" + country: "Country" + contribution: "Proposed contribution" + placeholders: + organization: "Your organization name (if applicable)" + actorType: "Select your type" + firstName: "Example: Cheick Oumar" + lastName: "Example: Diaby" + profession: "Example: Cloud engineer / Student / CTO" + email: "name@organization.org" + phone: "+225..." + country: "Select your country" + contribution: "Describe what you can contribute" + countries: + - "Algeria" + - "Angola" + - "Benin" + - "Botswana" + - "Burkina Faso" + - "Burundi" + - "Cameroon" + - "Cape Verde" + - "Comoros" + - "Congo" + - "Cote d'Ivoire" + - "Djibouti" + - "Egypt" + - "Ethiopia" + - "Gabon" + - "Gambia" + - "Ghana" + - "Guinea" + - "Kenya" + - "Liberia" + - "Madagascar" + - "Mali" + - "Morocco" + - "Mauritius" + - "Mauritania" + - "Mozambique" + - "Namibia" + - "Niger" + - "Nigeria" + - "Uganda" + - "DR Congo" + - "Rwanda" + - "Senegal" + - "Sierra Leone" + - "Somalia" + - "Sudan" + - "Tanzania" + - "Chad" + - "Togo" + - "Tunisia" + - "Zambia" + - "Zimbabwe" + - "Other" + actorTypes: + - "Individual contributor" + - "University / School" + - "Private company" + - "Public agency / Institution" + - "Datacenter / Operator" + - "Open source community" + - "Other" + consentText: "I agree that my information may be processed to evaluate my application in line with the" + privacyLinkLabel: "privacy policy" + submit: "Submit my application" + successTitle: "Application sent!" + successText: "Thank you for your interest. We will get back to you shortly." + errorText: "An error occurred. Please try again or contact us directly." + sending: "Sending…" +--- diff --git a/content/en/governance.md b/content/en/governance.md new file mode 100644 index 0000000..6bf08f3 --- /dev/null +++ b/content/en/governance.md @@ -0,0 +1,91 @@ +--- +title: "Governance" +description: "Open, traceable, and multi-stakeholder governance that ensures technical decisions serve Africa's long-term collective interest." +layout: "governance" + +hero: + metrics: + - value: "3" + label: "Permanent bodies" + - value: "100%" + label: "Documented decisions" + - value: "2/year" + label: "Governance reviews" + +principles: + title: "Governance principles" + intro: "Our governance model balances fast execution, institutional accountability, and public transparency." + items: + - icon: "balance" + title: "Neutrality" + text: "No single actor can capture the foundation's strategic direction." + - icon: "lock" + title: "Accountability" + text: "Every decision is attributed, justified, and auditable." + - icon: "globe" + title: "Representation" + text: "Governance includes institutions, industry, academia, and technical communities." + - icon: "leaf" + title: "Durability" + text: "Choices prioritize service continuity and long-term viability." + +bodies: + title: "Our governing bodies" + intro: "TheAfriForge relies on three complementary bodies to arbitrate, execute, and verify." + items: + - icon: "flag" + title: "Strategic council" + text: "Defines vision, validates annual priorities, and safeguards the public interest." + missions: + - "Approve the annual roadmap" + - "Arbitrate structural investments" + - "Assess sovereignty alignment" + - icon: "network" + title: "Technical committee" + text: "Leads architecture, security, and interoperability standards across platforms." + missions: + - "Validate technical standards" + - "Track service-level indicators" + - "Coordinate security reviews" + - icon: "chart" + title: "Audit and compliance unit" + text: "Controls traceability, process quality, and publication of evidence." + missions: + - "Publish quarterly indicators" + - "Verify decision compliance" + - "Trigger independent audits" + +decisions: + title: "Decision cycle" + intro: "Every structural decision follows a shared cycle to ensure clarity, consultation, and execution discipline." + steps: + - title: "Qualification" + text: "The topic is formalized with goals, risks, options, and expected impact." + - title: "Consultation" + text: "Relevant stakeholders review the proposal and provide traceable feedback." + - title: "Arbitration" + text: "The competent body decides with written rationale and implementation conditions." + - title: "Publication" + text: "The decision is published with date, owners, tracking indicators, and review date." + - title: "Evaluation" + text: "An outcome review measures real impact and enables adjustment when needed." + +transparency: + title: "Transparency commitments" + intro: "Trust is built through evidence that is accessible, regular, and comparable over time." + items: + - title: "Decision journal" + text: "Publication of a timestamped register for strategic and technical decisions." + - title: "Public indicators" + text: "Availability of performance, security, and reliability indicators." + - title: "Open reviews" + text: "Periodic review sessions with ecosystem members." + - title: "External audit" + text: "Regular independent assessment of governance and compliance practices." + +call: + title: "Contribute to governance" + text: "Universities, institutions, companies, and technical communities can propose contributions to the charter and decision processes." + cta: "Join the governance framework" + link: "become-member" +--- diff --git a/content/en/legal-notice.md b/content/en/legal-notice.md new file mode 100644 index 0000000..d085d12 --- /dev/null +++ b/content/en/legal-notice.md @@ -0,0 +1,81 @@ +--- +title: "Legal Notice" +description: "Legal and publishing information for TheAfriForge website." +--- + +## Website publisher + +TheAfriForge website is published by the TheAfriForge initiative, an African foundation for open-source software and digital sovereignty. + +- Project name: TheAfriForge +- Purpose: development and governance of open digital commons in Africa +- Editorial contact: contact@theafriforge.org +- Legal contact: legal@theafriforge.org + +## Publishing management + +Publishing management is provided by the TheAfriForge coordination team. + +## Administrative status + +TheAfriForge operates as a non-profit public-interest initiative. + +Additional administrative details (legal form, registration identifiers, registered office) are provided upon legitimate request via legal@theafriforge.org. + +## Hosting + +The website is hosted on technical infrastructure operated on behalf of TheAfriForge. + +- Technical contact: infra@theafriforge.org + +## Service availability + +TheAfriForge applies reasonable measures to maintain website availability 24/7. + +Temporary interruptions may occur for maintenance, security updates, technical incidents, or external causes. + +## Intellectual property + +Unless otherwise stated, website content (texts, visual assets, trademarks, and logos) is protected under applicable laws. + +Open-source projects referenced on this website remain distributed under their respective licenses. + +Any full or partial reproduction, representation, or adaptation of proprietary content without prior written authorization is prohibited. + +## Terms of use + +Users must use the website lawfully and fairly, without harming service security, integrity, or availability. + +The following are prohibited: + +- mass extraction of content without authorization +- attempts to intrude or disrupt services +- fraudulent use of forms or communication channels + +## Liability + +TheAfriForge uses reasonable efforts to ensure the accuracy of published information. However, errors or omissions may occur. + +Use of information published on this website is under the sole responsibility of the user. + +Within the limits of applicable law, TheAfriForge shall not be liable for indirect damages resulting from access to or use of the website. + +## External links + +The website may include links to third-party resources. TheAfriForge is not responsible for external websites content. + +## Personal data + +Personal data processing is described in the website Privacy Policy. + +For data-related requests: privacy@theafriforge.org + +## Applicable law and dispute resolution + +This legal notice is interpreted under the law applicable to the operating entity and relevant international legal frameworks. + +In case of dispute, an amicable resolution process is encouraged before litigation. + +## Update + +Last update: 17 May 2026. diff --git a/content/en/manifesto.md b/content/en/manifesto.md new file mode 100644 index 0000000..a6686c3 --- /dev/null +++ b/content/en/manifesto.md @@ -0,0 +1,111 @@ +--- +title: "Manifesto" +description: "TheAfriForge is the African foundation for free software and digital sovereignty. This manifesto sets out our vision, our principles, and our collective commitment." +layout: "manifeste" + +preamble: + quote: "Africa is not behind in talent. It is behind in control." + text: "Every day, African teams build critical services for our governments, banks, hospitals, universities, and businesses. Yet much of this software heritage is still hosted, tooled, and governed outside our jurisdictions. This dependency is not neutral: it exposes our ecosystems to risks of censorship, access disruption, value extraction, and operational fragility." + conviction: "A continent that does not control its digital infrastructure controls neither its economic future, nor its security, nor its capacity for innovation. TheAfriForge exists to change that." + +conviction: + title: "Our conviction" + intro: "Digital sovereignty is not a slogan. It is a concrete capability we build brick by brick." + items: + - icon: "server" + text: "Host our code and data on reliable, close, and audited infrastructure" + - icon: "shield" + text: "Govern our collaboration tools according to our values and needs" + - icon: "globe" + text: "Produce open source commons that remain in the service of the public interest" + - icon: "bolt" + text: "Ensure service continuity, even in the event of geopolitical or technical shocks" + +pillars: + title: "What TheAfriForge builds" + intro: "A non-profit foundation structured around three strategic pillars." + items: + - number: "01" + icon: "network" + title: "Federated and resilient infrastructure" + text: "We interconnect local capacities — data centers, universities, technical partners — to offer robust, performant, and distributed services, without depending on a single actor outside the continent." + - number: "02" + icon: "code" + title: "Open digital commons" + text: "We host and structure strategic open source projects that can be adopted by institutions, businesses, and communities, under free licences and transparent governance." + - number: "03" + icon: "balance" + title: "Neutral and transparent governance" + text: "We operate with clear, public, and auditable rules, so that technical and institutional decisions serve the long term, not particular interests." + +principles: + title: "Our non-negotiable principles" + items: + - icon: "flag" + title: "Sovereignty first" + text: "Critical assets remain under African control, in compliance with our legal frameworks." + - icon: "unlock" + title: "Openness and interoperability" + text: "No proprietary lock-in. Open standards and portability are baseline requirements." + - icon: "lock" + title: "Security by design" + text: "Encryption in transit and at rest, rigorous access management, defense in depth, and auditability." + - icon: "zap" + title: "Local performance" + text: "Reduce latency, international transit costs, and single points of failure." + - icon: "balance" + title: "Institutional neutrality" + text: "The foundation must not be captured by any single actor, public or private." + - icon: "leaf" + title: "Social responsibility" + text: "Build useful, lean, and sustainable infrastructure adapted to the realities of the continent." + - icon: "academic" + title: "Skills transmission" + text: "Train, document, and equip the next generations of engineers and maintainers." + +commitments: + title: "Our measurable commitments" + intro: "TheAfriForge commits to publishing verifiable public indicators." + quote: "Sovereignty is rarely proclaimed; it is measured constantly." + items: + - "Availability and resilience of critical services" + - "Recovery time objectives in the event of an incident" + - "Number of projects hosted and actively maintained" + - "Adoption level by African institutions and businesses" + - "Training programmes and community contributions" + +vision: + title: "Our ecosystem vision" + intro: "TheAfriForge is not a single platform. It is a trust framework capable of hosting an evolving portfolio of strategic projects, with a shared objective." + objective: "Increase the continent's collective autonomy in the global digital economy." + items: + - icon: "git" + title: "Collaborative software forge" + text: "GitForge.africa — Git repositories, issue tracking, CI/CD hosted on the continent" + - icon: "package" + title: "Regional registries and mirrors" + text: "AfriRegistry — local distribution of NPM, Python, Docker packages" + - icon: "shield" + title: "Software supply chain security" + text: "AIForge — security tools, compliance and sovereign code analysis" + - icon: "chart" + title: "Compliance and observability" + text: "Governance, audit, and monitoring services for institutions" + +governance: + title: "Governance and method" + quote: "Trust is not decreed. It is built through proof." + items: + - "A public, collectively revisable charter" + - "Multi-stakeholder governance: academia, industry, public bodies, technical community" + - "Decisions that are traced, documented, and accountable" + - "Regular technical and organisational audits" + - "A published roadmap reviewed periodically" + +coalition: + title: "A call for coalition" + text: "We call on universities, research centers, businesses, data centers, operators, governments, impact investors, and African open source communities to join TheAfriForge." + statement: "Our ambition is not to copy existing platforms. Our ambition is to build an African strategic capability — open, reliable, and durable." + closing: "This manifesto is a starting point. The work is collective. The time to act is now." + cta: "Join TheAfriForge" +--- diff --git a/content/en/privacy-policy.md b/content/en/privacy-policy.md new file mode 100644 index 0000000..110a577 --- /dev/null +++ b/content/en/privacy-policy.md @@ -0,0 +1,126 @@ +--- +title: "Privacy Policy" +description: "Policy for personal data processing on TheAfriForge website." +--- + +## Principle + +TheAfriForge is committed to protecting personal data of visitors, contributors, and partners using this website. + +This policy explains what data may be processed, why, for how long, and what rights you have. + +## Data controller + +The data controller is the TheAfriForge initiative. + +- General contact: contact@theafriforge.org +- Privacy contact: privacy@theafriforge.org +- Legal contact: legal@theafriforge.org + +## Data we may process + +Depending on your interactions, we may process: + +- contact information voluntarily submitted (name, email, organization, message) +- minimal technical browsing data (server logs, IP address, timestamp, requested page) +- information required to secure and operate the website + +TheAfriForge does not intentionally collect sensitive personal data unless required by law or explicitly justified. + +## Purposes + +Data is processed to: + +- answer contact and partnership requests +- ensure website security, availability, and integrity +- support continuous improvement of TheAfriForge services +- comply with applicable legal and regulatory obligations + +## Legal basis + +Processing is based on: + +- your consent when you voluntarily submit information +- TheAfriForge legitimate interest in securing and operating the website +- compliance with applicable legal obligations + +Where processing is based on consent, you may withdraw consent at any time without retroactive effect. + +## Retention + +Data is kept for a period proportionate to each purpose, then deleted or anonymized. + +Indicative retention rules: + +- contact requests: up to 24 months after last meaningful interaction +- technical logs: up to 12 months unless security or legal constraints require more +- compliance traces: according to applicable legal obligations + +## Recipients + +Data is accessible only to authorized TheAfriForge teams and technical service providers strictly necessary to operate the website. + +No commercial sale of personal data is performed. + +## Processors and transfers + +TheAfriForge may rely on technical processors (hosting, monitoring, anti-abuse, messaging). + +If data is transferred outside your legal region, TheAfriForge implements appropriate safeguards (contractual clauses, additional technical measures, data minimization). + +## Cookies + +The website mainly uses technical cookies required for proper operation. + +If audience measurement cookies are enabled, they are used proportionately and in line with applicable requirements. + +You may configure your browser to block cookies. Blocking strictly necessary cookies may degrade website functionality. + +## Your rights + +You may request: + +- access to your data +- correction of your data +- deletion of your data, where applicable +- restriction or objection to certain processing activities +- data portability, where applicable +- post-mortem data handling instructions, where provided by applicable law + +To exercise your rights: privacy@theafriforge.org + +We may request reasonable proof of identity to prevent fraudulent requests. + +## Response timelines + +TheAfriForge handles requests within a reasonable timeframe and in line with applicable legal requirements. + +In complex situations, timelines may be extended with prior notice. + +## Security + +TheAfriForge implements reasonable technical and organizational measures to protect data against unauthorized access, alteration, or loss. + +Measures include access control, technical logging, privilege limitation, security monitoring, and recovery procedures. + +## Incident notification + +In case of a personal data breach likely to create significant risk, TheAfriForge follows notification duties required by applicable law. + +## Minors + +The website is not intended to intentionally collect data from minors without appropriate legal safeguards. + +If you believe a minor has provided data inappropriately, contact privacy@theafriforge.org. + +## Contact + +For any privacy-related question: privacy@theafriforge.org + +For legal requests: legal@theafriforge.org + +## Complaint + +If you believe your rights are not respected, you may first contact TheAfriForge for amicable resolution, then refer to the competent data protection authority in your jurisdiction. + +Last update: 17 May 2026. diff --git a/content/en/projects.md b/content/en/projects.md new file mode 100644 index 0000000..d37d953 --- /dev/null +++ b/content/en/projects.md @@ -0,0 +1,83 @@ +--- +title: "Our Projects" +description: "A portfolio of strategic open source programmes designed to build practical, measurable, and durable African digital sovereignty." +layout: "projects" + +hero: + metrics: + - value: "03" + label: "Active programmes" + - value: "12" + label: "Target technical partners" + - value: "24 months" + label: "Deployment horizon" + +portfolio: + tag: "Portfolio" + title: "Initiatives across production, incubation, and research" + intro: "Each programme addresses a critical need: sovereign collaboration, reliable dependency distribution, and software supply chain security for Africa." + impactLabel: "Expected impact" + stackLabel: "Technical base" + items: + - name: "GitForge.africa" + status: "Production" + icon: "git" + text: "Sovereign code forge to host repositories, issue tracking, CI/CD pipelines, and code reviews on continental infrastructure." + impact: "Lower service disruption risk from external platform dependencies for critical projects." + stack: "Git, CI/CD, IAM, observability" + cta: "View roadmap" + link: "#" + - name: "AfriRegistry" + status: "Incubation" + icon: "package" + text: "Regional registry to distribute npm, PyPI, and container images with local mirrors and trust policies." + impact: "Reduced latency, higher availability, and stronger control over software artifacts." + stack: "Registry federation, cache, signatures, policy engine" + cta: "Track incubation" + link: "#" + - name: "AIForge Secure" + status: "Research" + icon: "shield" + text: "R&D programme for code analysis, compliance, and software supply chain hardening in sovereign environments." + impact: "Faster audits and stronger trust for public institutions and private operators." + stack: "SBOM, SAST, provenance, dashboards" + cta: "Explore research" + link: "#" + +roadmap: + title: "Roadmap 2026-2027" + intro: "We execute in waves: core hardening, regional federation, then service industrialisation." + items: + - period: "Q3 2026" + title: "Core stack hardening" + text: "Strengthen architecture, backups, and incident recovery procedures." + - period: "Q4 2026" + title: "Multi-site federation" + text: "Connect regional nodes and align shared governance standards." + - period: "Q1 2027" + title: "Partner expansion" + text: "Scale access for institutions, universities, and businesses through a unified onboarding framework." + +selection: + title: "How we select projects" + intro: "TheAfriForge supports initiatives that serve the public interest and strengthen African digital autonomy." + items: + - icon: "flag" + title: "Sovereignty value" + text: "The project must reduce a critical structural dependency." + - icon: "network" + title: "Ecosystem impact" + text: "The project must be reusable by multiple actors across the continent." + - icon: "lock" + title: "Security maturity" + text: "The project must integrate security and auditability by design." + - icon: "academic" + title: "Knowledge transfer" + text: "The project must enable local skills development and open documentation." + +call: + title: "Do you lead a strategic project?" + text: "Share your initiative with TheAfriForge to assess support in hosting, governance, and technical acceleration." + cta: "Submit a project" + link: "become-member" +--- diff --git a/content/fr/_index.md b/content/fr/_index.md new file mode 100644 index 0000000..93ff39d --- /dev/null +++ b/content/fr/_index.md @@ -0,0 +1,71 @@ +--- +title: "Accueil" +hero: + kicker: "Infrastructure numérique africaine" + titleLine1: "L'infrastructure libre" + titleLine2: "et souveraine" + titleLine3: "de l'Afrique." + subtitle: "TheAfriForge n'est pas une offre de plus. C'est un projet continental pour maîtriser nos technologies critiques, héberger nos communs numériques chez nous et décider, en Afrique, de notre destin numérique." + ctaManifesto: "Lire le Manifeste" + ctaProjects: "Voir les projets" + +whyJoin: + title: "Pourquoi nous rejoindre" + intro: "Rejoindre TheAfriForge, c'est prendre part à une stratégie de souveraineté: bâtir des capacités locales durables et réduire notre exposition aux dépendances technologiques extérieures." + cards: + - title: "Souveraineté" + icon: "🔐" + text: "Gouvernance africaine des données, des plateformes et des services essentiels, pour faire de l'autonomie une réalité opérationnelle." + - title: "Résilience" + icon: "💪" + text: "Des architectures interopérables et distribuées, conçues pour encaisser les chocs géopolitiques, économiques et techniques." + - title: "Croissance" + icon: "📈" + text: "Création de valeur locale, emplois qualifiés et montée en compétence des écosystèmes africains sur des fondations maîtrisées." + - title: "Communauté" + icon: "👥" + text: "Une alliance continentale d'innovateurs, d'institutions et d'opérateurs mobilisés autour d'un cap commun de souveraineté." + +pillars: + title: "Trois piliers fondateurs" + items: + - title: "Autonomie" + text: "Renforcer la capacité africaine à produire, maintenir et gouverner ses briques logicielles essentielles." + - title: "Infrastructure" + text: "Connecter les plateformes publiques et privées en services résilients, interopérables et de confiance." + - title: "Neutralité" + text: "Promouvoir une gouvernance ouverte, transparente et d'intérêt public pour tous les systèmes partagés." + +projects: + title: "Projets stratégiques" + intro: "Des briques concrètes en production, incubation et recherche pour construire une indépendance technologique durable à l'échelle du continent." + tag: "Programmes Open Source" + items: + - name: "GitForge.africa" + status: "Production" + text: "Forge de code souveraine hébergeant les projets stratégiques africains en production." + cta: "Accéder" + - name: "AfriRegistry" + status: "Incubation" + text: "Registre fédéré des standards ouverts, services et artefacts logiciels du continent." + cta: "Voir" + - name: "AIForge" + status: "Recherche" + text: "Initiative de recherche pour une plateforme IA ouverte et responsable, adaptée aux réalités africaines." + cta: "En savoir +" + +members: + title: "Rejoindre le mouvement" + subtitle: "Universités, entreprises, États et opérateurs: unissons nos capacités pour faire émerger une puissance numérique africaine souveraine et pérenne." + categories: + - label: "Universités & Écoles" + title: "Contribuer aux communs numériques" + text: "Participez aux groupes techniques, aux laboratoires de recherche et aux parcours de formation certifiants." + cta: "En savoir plus" + link: "devenir-membre" + - label: "Datacenters & Opérateurs" + title: "Fédérer l'infrastructure continentale" + text: "Co-concevez les standards d'hébergement, sécurité et interconnexion pour les services critiques." + cta: "En savoir plus" + link: "devenir-membre" +--- diff --git a/content/fr/devenir-membre.md b/content/fr/devenir-membre.md new file mode 100644 index 0000000..986500a --- /dev/null +++ b/content/fr/devenir-membre.md @@ -0,0 +1,143 @@ +--- +title: "Devenir membre" +description: "Rejoignez TheAfriForge pour contribuer a la souverainete numerique africaine a travers des projets concrets et une gouvernance ouverte." +layout: "join" + +value: + title: "Pourquoi devenir membre" + intro: "Rejoindre TheAfriForge, c'est agir sur des infrastructures critiques, des communs open source et des standards de gouvernance pour le continent." + items: + - icon: "network" + title: "Impact continental" + text: "Contribuez a des services numeriques strategiques reutilisables par plusieurs pays et institutions." + - icon: "shield" + title: "Securite et resilience" + text: "Participez a la construction d'une chaine logicielle plus sure et plus robuste." + - icon: "academic" + title: "Montee en competences" + text: "Accedez a un ecosysteme de formation, de documentation et de collaboration technique." + +membership: + title: "Profils de membres" + intro: "Nous accueillons des contributions techniques, institutionnelles et operationnelles." + items: + - title: "Contributeur technique" + text: "Equipes engineering, experts securite, mainteneurs open source." + expectations: + - "Contribuer aux briques logicielles prioritaires" + - "Participer aux revues techniques et securite" + - "Partager des pratiques de qualite et de documentation" + - title: "Partenaire infrastructure" + text: "Datacenters, operateurs, hebergeurs et fournisseurs cloud regionaux." + expectations: + - "Co-construire les standards d'hebergement souverain" + - "Fournir des capacites techniques ou de federation" + - "Contribuer aux objectifs de disponibilite et de reprise" + - title: "Partenaire institutionnel" + text: "Universites, administrations, entreprises, acteurs de l'impact." + expectations: + - "Soutenir l'adoption des plateformes" + - "Contribuer aux orientations de gouvernance" + - "Financer ou accompagner des programmes strategiques" + +process: + title: "Processus d'adhesion" + steps: + - title: "Soumission" + text: "Vous completez le formulaire avec votre profil, vos objectifs et votre proposition de contribution." + delay: "Immediate" + - title: "Qualification" + text: "Notre equipe examine votre dossier et verifie l'alignement avec les priorites TheAfriForge." + delay: "Sous 48h" + - title: "Entretien de cadrage" + text: "Un appel de 30 minutes permet de clarifier les attentes, livrables et modalites de collaboration." + delay: "Sous 7 jours" + - title: "Decision et onboarding" + text: "Vous recevez la decision, la charte de participation et le plan d'integration." + delay: "Sous 10 jours" + +form: + title: "Demande d'adhesion" + intro: "Ce formulaire est envoye a l'equipe membership TheAfriForge." + action: "https://formsubmit.co/membership@theafriforge.org" + subject: "Nouvelle demande d'adhesion - TheAfriForge" + labels: + organization: "Organisation (optionnel)" + actorType: "Type d'acteur" + firstName: "Prénom" + lastName: "Nom" + profession: "Profession / fonction" + email: "Email professionnel" + phone: "Numero de telephone" + country: "Pays" + contribution: "Contribution proposee" + placeholders: + organization: "Nom de votre organisation (si applicable)" + actorType: "Selectionnez votre type" + firstName: "Ex: Cheick Oumar" + lastName: "Ex: Diaby" + profession: "Ex: Ingenieure cloud / Etudiant / CTO" + email: "nom@organisation.org" + phone: "+225..." + country: "Selectionnez votre pays" + contribution: "Decrivez ce que vous apportez concretement" + countries: + - "Algerie" + - "Angola" + - "Benin" + - "Botswana" + - "Burkina Faso" + - "Burundi" + - "Cameroun" + - "Cap-Vert" + - "Comores" + - "Congo" + - "Cote d'Ivoire" + - "Djibouti" + - "Egypte" + - "Ethiopie" + - "Gabon" + - "Gambie" + - "Ghana" + - "Guinee" + - "Kenya" + - "Liberia" + - "Madagascar" + - "Mali" + - "Maroc" + - "Maurice" + - "Mauritanie" + - "Mozambique" + - "Namibie" + - "Niger" + - "Nigeria" + - "Ouganda" + - "RDC" + - "Rwanda" + - "Senegal" + - "Sierra Leone" + - "Somalie" + - "Soudan" + - "Tanzanie" + - "Tchad" + - "Togo" + - "Tunisie" + - "Zambie" + - "Zimbabwe" + - "Autre" + actorTypes: + - "Contributeur individuel" + - "Universite / Ecole" + - "Entreprise privee" + - "Administration / Institution publique" + - "Datacenter / Operateur" + - "Communaute open source" + - "Autre" + consentText: "J'accepte que mes informations soient traitees pour l'evaluation de ma demande conformement a la" + privacyLinkLabel: "politique de confidentialite" + submit: "Envoyer ma candidature" + successTitle: "Candidature envoyée !" + successText: "Merci pour votre intérêt. Nous reviendrons vers vous prochainement." + errorText: "Une erreur est survenue. Veuillez réessayer ou nous contacter directement." + sending: "Envoi en cours…" +--- diff --git a/content/fr/gouvernance.md b/content/fr/gouvernance.md new file mode 100644 index 0000000..467b151 --- /dev/null +++ b/content/fr/gouvernance.md @@ -0,0 +1,91 @@ +--- +title: "Gouvernance" +description: "Une gouvernance ouverte, tracee et multi-acteurs pour garantir que les decisions techniques servent l'interet collectif africain sur le long terme." +layout: "governance" + +hero: + metrics: + - value: "3" + label: "Instances permanentes" + - value: "100%" + label: "Decisions documentees" + - value: "2/an" + label: "Revues de gouvernance" + +principles: + title: "Principes de gouvernance" + intro: "Notre gouvernance garantit l'equilibre entre execution rapide, responsabilite institutionnelle et transparence publique." + items: + - icon: "balance" + title: "Neutralite" + text: "Aucun acteur unique ne peut capturer la direction strategique de la fondation." + - icon: "lock" + title: "Responsabilite" + text: "Chaque decision est attribuee, justifiee et rendue auditable." + - icon: "globe" + title: "Representation" + text: "La gouvernance integre institutions, industrie, academie et communaute technique." + - icon: "leaf" + title: "Durabilite" + text: "Les choix privilegient la continuite de service et la viabilite sur le long terme." + +bodies: + title: "Nos instances" + intro: "TheAfriForge s'appuie sur trois instances complementaires pour arbitrer, executer et controler." + items: + - icon: "flag" + title: "Conseil strategique" + text: "Definit la vision, valide les priorites annuelles et protege l'interet general." + missions: + - "Approuver la feuille de route annuelle" + - "Arbitrer les investissements structurants" + - "Evaluer l'alignement souverainete" + - icon: "network" + title: "Comite technique" + text: "Pilote l'architecture, la securite et les standards d'interoperabilite des plateformes." + missions: + - "Valider les standards techniques" + - "Suivre les niveaux de service" + - "Coordonner les revues de securite" + - icon: "chart" + title: "Cellule audit et conformite" + text: "Controle la tracabilite, la qualite des process et la publication des preuves." + missions: + - "Publier les indicateurs trimestriels" + - "Verifier la conformite des decisions" + - "Declencher des audits independants" + +decisions: + title: "Cycle de decision" + intro: "Toute decision structurante suit un cycle commun afin de garantir clarte, consultation et execution." + steps: + - title: "Qualification" + text: "Le sujet est formalise avec objectifs, risques, options et impacts attendus." + - title: "Consultation" + text: "Les parties prenantes concernes examinent la proposition et produisent des retours traces." + - title: "Arbitrage" + text: "L'instance competente tranche avec motivation ecrite et conditions d'application." + - title: "Publication" + text: "La decision est publiee avec date, responsables, indicateurs de suivi et date de revue." + - title: "Evaluation" + text: "Un bilan mesure l'effet reel et permet un ajustement si necessaire." + +transparency: + title: "Nos engagements de transparence" + intro: "La confiance se construit avec des preuves accessibles, regulieres et comparables dans le temps." + items: + - title: "Journal des decisions" + text: "Publication d'un registre horodate des decisions strategiques et techniques." + - title: "Indicateurs publics" + text: "Mise a disposition d'indicateurs de performance, securite et disponibilite." + - title: "Revues ouvertes" + text: "Organisation de points de revue periodiques avec les membres de l'ecosysteme." + - title: "Audit externe" + text: "Evaluation independante reguliere des pratiques de gouvernance et de conformite." + +call: + title: "Contribuer a la gouvernance" + text: "Universites, institutions, entreprises et communautes techniques peuvent proposer des contributions a la charte et aux processus de decision." + cta: "Rejoindre le cadre de gouvernance" + link: "devenir-membre" +--- diff --git a/content/fr/manifeste.md b/content/fr/manifeste.md new file mode 100644 index 0000000..5e6b1db --- /dev/null +++ b/content/fr/manifeste.md @@ -0,0 +1,215 @@ +--- +title: "Manifeste" +description: "TheAfriForge est la fondation africaine du logiciel libre et de la souveraineté numérique. Ce manifeste expose notre vision, nos principes et notre engagement collectif." +layout: "manifeste" + +preamble: + quote: "L'Afrique n'est pas en retard de talent. Elle est en retard de contrôle." + text: "Chaque jour, des équipes africaines construisent des services critiques pour nos administrations, nos banques, nos hôpitaux, nos universités et nos entreprises. Pourtant, une grande partie de ce patrimoine logiciel est encore hébergée, outillée et gouvernée hors de nos juridictions. Cette dépendance n'est pas neutre : elle expose nos écosystèmes à des risques de censure, de rupture d'accès, de captation de valeur et de fragilité opérationnelle." + conviction: "Un continent qui ne maîtrise pas ses infrastructures numériques ne maîtrise ni son avenir économique, ni sa sécurité, ni sa capacité d'innovation. TheAfriForge existe pour changer cela." + +conviction: + title: "Notre conviction" + intro: "La souveraineté numérique n'est pas un slogan. C'est une capacité concrète que nous construisons pierre par pierre." + items: + - icon: "server" + text: "Héberger nos codes et données sur des infrastructures fiables, proches et auditées" + - icon: "shield" + text: "Gouverner nos outils de collaboration selon nos valeurs et nos besoins" + - icon: "globe" + text: "Produire des communs open source qui restent au service de l'intérêt général" + - icon: "bolt" + text: "Assurer la continuité de service, même en cas de choc géopolitique ou technique" + +pillars: + title: "Ce que TheAfriForge construit" + intro: "Une fondation à but non lucratif structurée autour de trois piliers stratégiques." + items: + - number: "01" + icon: "network" + title: "Infrastructure fédérée et résiliente" + text: "Nous interconnectons des capacités locales — datacenters, universités, partenaires techniques — pour offrir des services robustes, performants et distribués, sans dépendre d'un acteur unique hors du continent." + - number: "02" + icon: "code" + title: "Communs numériques ouverts" + text: "Nous hébergeons et structurons des projets open source stratégiques qui peuvent être adoptés par les institutions, les entreprises et les communautés, sous licence libre et gouvernance transparente." + - number: "03" + icon: "balance" + title: "Gouvernance neutre et transparente" + text: "Nous opérons avec des règles claires, publiques et auditables, afin que les décisions techniques et institutionnelles servent le long terme, pas des intérêts particuliers." + +principles: + title: "Nos principes non négociables" + items: + - icon: "flag" + title: "Souveraineté d'abord" + text: "Les actifs critiques restent sous contrôle africain, dans le respect de nos cadres juridiques." + - icon: "unlock" + title: "Ouverture et interopérabilité" + text: "Aucun verrou propriétaire. Les standards ouverts et la portabilité sont des exigences de base." + - icon: "lock" + title: "Sécurité par conception" + text: "Chiffrement en transit et au repos, gestion rigoureuse des accès, défense en profondeur et auditabilité." + - icon: "zap" + title: "Performance locale" + text: "Réduire la latence, les coûts de transit international et les points uniques de défaillance." + - icon: "balance" + title: "Neutralité institutionnelle" + text: "La fondation ne doit pas être capturée par un acteur unique, public ou privé." + - icon: "leaf" + title: "Responsabilité sociale" + text: "Construire une infrastructure utile, sobre et durable, adaptée aux réalités du continent." + - icon: "academic" + title: "Transmission des compétences" + text: "Former, documenter et outiller les nouvelles générations d'ingénieurs et de mainteneurs." + +commitments: + title: "Nos engagements mesurables" + intro: "TheAfriForge s'engage à publier des indicateurs publics vérifiables." + quote: "La souveraineté se proclame peu ; elle se mesure beaucoup." + items: + - "Disponibilité et résilience des services critiques" + - "Délais de reprise en cas d'incident" + - "Nombre de projets hébergés et maintenus activement" + - "Niveau d'adoption par les institutions et entreprises africaines" + - "Programmes de formation et contribution des communautés" + +vision: + title: "Notre vision écosystémique" + intro: "TheAfriForge n'est pas une plateforme unique. C'est un cadre de confiance capable d'accueillir un portefeuille évolutif de projets stratégiques, avec un objectif commun." + objective: "Augmenter l'autonomie collective du continent dans l'économie numérique mondiale." + items: + - icon: "git" + title: "Forge logicielle collaborative" + text: "GitForge.africa — dépôts Git, tickets, CI/CD hébergés sur le continent" + - icon: "package" + title: "Registres et miroirs régionaux" + text: "AfriRegistry — distribution locale des paquets NPM, Python, Docker" + - icon: "shield" + title: "Sécurisation de la chaîne logicielle" + text: "AIForge — outils de sécurité, conformité et analyse de code souverain" + - icon: "chart" + title: "Conformité et observabilité" + text: "Services de gouvernance, d'audit et de monitoring pour les institutions" + +governance: + title: "Gouvernance et méthode" + quote: "La confiance ne se décrète pas. Elle se construit par la preuve." + items: + - "Une charte publique et révisable collectivement" + - "Une gouvernance multi-acteurs : académie, industrie, collectivités, communauté technique" + - "Des décisions tracées, documentées et opposables" + - "Des audits techniques et organisationnels réguliers" + - "Une feuille de route publiée et revue périodiquement" + +coalition: + title: "Appel à coalition" + text: "Nous appelons les universités, centres de recherche, entreprises, datacenters, opérateurs, administrations, investisseurs d'impact et communautés open source africaines à rejoindre TheAfriForge." + statement: "Notre ambition n'est pas de copier des plateformes existantes. Notre ambition est de bâtir une capacité stratégique africaine, ouverte, fiable et durable." + closing: "Ce manifeste est un point de départ. Le chantier est collectif. Le moment d'agir est maintenant." + cta: "Rejoindre TheAfriForge" +--- + +## Préambule + +L'Afrique n'est pas en retard de talent. Elle est en retard de contrôle. + +Chaque jour, des équipes africaines construisent des services critiques pour nos administrations, nos banques, nos hôpitaux, nos universités et nos entreprises. Pourtant, une grande partie de ce patrimoine logiciel est encore hébergée, outillée et gouvernée hors de nos juridictions. + +Cette dépendance n'est pas neutre. Elle expose nos écosystèmes à des risques de censure, de rupture d'accès, de captation de valeur, d'extraterritorialité juridique et de fragilité opérationnelle. + +> **TheAfriForge existe pour changer cela.** Nous affirmons qu'un continent qui ne maîtrise pas ses infrastructures numériques ne maîtrise ni son avenir économique, ni sa sécurité, ni sa capacité d'innovation. + +## Notre conviction + +La souveraineté numérique n'est pas un slogan. C'est une capacité concrète : + +- héberger nos codes et données sur des infrastructures fiables, proches et auditées +- gouverner nos outils de collaboration selon nos valeurs et nos besoins +- produire des communs open source qui restent au service de l'intérêt général +- assurer la continuité de service, même en cas de choc géopolitique ou technique + +## Ce que TheAfriForge construit + +TheAfriForge est une fondation à but non lucratif qui fédérera un écosystème africain de production logicielle autour de trois piliers. + +### Infrastructure fédérée et résiliente + +Nous interconnectons des capacités locales — datacenters, universités, partenaires techniques — pour offrir des services robustes, performants et distribués, sans dépendre d'un acteur unique hors du continent. + +### Communs numériques ouverts + +Nous hébergeons et structurons des projets open source stratégiques qui peuvent être adoptés par les institutions, les entreprises et les communautés, sous licence libre et gouvernance transparente. + +### Gouvernance neutre et transparente + +Nous opérons avec des règles claires, publiques et auditables, afin que les décisions techniques et institutionnelles servent le long terme, pas des intérêts particuliers. + +## Nos principes non négociables + +### Souveraineté d'abord +Les actifs critiques doivent rester sous contrôle africain, dans le respect de nos cadres juridiques. + +### Ouverture et interopérabilité +Aucun verrou propriétaire. Les standards ouverts et la portabilité sont des exigences de base. + +### Sécurité par conception +Chiffrement en transit et au repos, gestion rigoureuse des accès, défense en profondeur et auditabilité systématique. + +### Performance locale +Réduire la latence, les coûts de transit international et les points uniques de défaillance. + +### Neutralité institutionnelle +La fondation ne doit pas être capturée par un acteur unique, public ou privé. + +### Responsabilité sociale et environnementale +Construire une infrastructure utile, sobre et durable, adaptée aux réalités du continent. + +### Transmission des compétences +Former, documenter et outiller les nouvelles générations d'ingénieurs et de mainteneurs. + +## Nos engagements mesurables + +TheAfriForge s'engage à publier des objectifs et des indicateurs publics, notamment : + +- disponibilité des services critiques +- délais de reprise en cas d'incident +- nombre de projets hébergés et maintenus activement +- niveau d'adoption par les institutions et entreprises africaines +- programmes de formation et contribution des communautés + +> La souveraineté se proclame peu ; elle se mesure beaucoup. + +## Notre vision écosystémique + +TheAfriForge n'est pas une plateforme unique. C'est un cadre de confiance capable d'accueillir un portefeuille évolutif de projets stratégiques : + +- forge logicielle collaborative +- registres et miroirs régionaux de dépendances +- outils de sécurisation de la chaîne logicielle +- services de conformité, de gouvernance et d'observabilité + +Chaque projet doit contribuer à un objectif commun : **augmenter l'autonomie collective du continent dans l'économie numérique mondiale.** + +## Gouvernance et méthode + +Notre méthode repose sur : + +- une charte publique +- une gouvernance multi-acteurs (académie, industrie, collectivités, communauté technique) +- des décisions tracées +- des audits techniques et organisationnels réguliers +- une feuille de route publiée et revue périodiquement + +La confiance ne se décrète pas. Elle se construit par la preuve. + +## Appel à coalition + +Nous appelons les universités, centres de recherche, entreprises, datacenters, opérateurs, administrations, investisseurs d'impact et communautés open source africaines à rejoindre TheAfriForge. + +Notre ambition n'est pas de copier des plateformes existantes. Notre ambition est de **bâtir une capacité stratégique africaine, ouverte, fiable et durable.** + +--- + +*Ce manifeste est un point de départ. Le chantier est collectif. Le moment d'agir est maintenant.* + diff --git a/content/fr/mentions-legales.md b/content/fr/mentions-legales.md new file mode 100644 index 0000000..e830241 --- /dev/null +++ b/content/fr/mentions-legales.md @@ -0,0 +1,81 @@ +--- +title: "Mentions legales" +description: "Informations legales et de publication du site TheAfriForge." +--- + +## Editeur du site + +Le site TheAfriForge est edite par l'initiative TheAfriForge, fondation africaine du logiciel libre et de la souverainete numerique. + +- Nom du projet : TheAfriForge +- Objet : developpement et gouvernance de communs numeriques open source en Afrique +- Contact editorial : contact@theafriforge.org +- Contact legal : legal@theafriforge.org + +## Direction de la publication + +La direction de la publication est assuree par l'equipe de coordination TheAfriForge. + +## Statut et informations administratives + +TheAfriForge opere comme une initiative a but non lucratif orientee interet general. + +Les informations administratives complementaires (forme juridique, identifiants, siege social) sont communiquees sur demande legitime via legal@theafriforge.org. + +## Hebergement + +Le site est heberge sur une infrastructure technique administree pour le compte de TheAfriForge. + +- Contact technique : infra@theafriforge.org + +## Accessibilite du service + +TheAfriForge met en oeuvre des moyens raisonnables pour assurer l'accessibilite du site 24h/24 et 7j/7. + +Des interruptions peuvent intervenir pour maintenance, mise a jour de securite, incidents techniques ou causes externes. + +## Propriete intellectuelle + +Les contenus du site (textes, elements graphiques, marques et logos), sauf mention contraire, sont proteges par les lois applicables. + +Les contenus open source references sur le site demeurent distribues selon leurs licences respectives. + +Toute reproduction, representation ou adaptation totale ou partielle des contenus proprietaires sans autorisation ecrite prealable est interdite. + +## Conditions d'usage + +L'utilisateur s'engage a utiliser le site de maniere loyale, legale et sans porter atteinte a la securite, l'integrite ou la disponibilite des services. + +Sont notamment interdits : + +- l'extraction massive de contenus sans autorisation +- les tentatives d'intrusion ou de perturbation des services +- l'usage frauduleux des formulaires ou canaux de contact + +## Responsabilite + +TheAfriForge met en oeuvre des moyens raisonnables pour garantir l'exactitude des informations publiees. Toutefois, des erreurs ou omissions peuvent subsister. + +L'utilisation des informations presentes sur ce site se fait sous la seule responsabilite de l'utilisateur. + +TheAfriForge ne peut etre tenu responsable des dommages indirects lies a l'acces ou a l'usage du site, dans les limites prevues par les lois applicables. + +## Liens externes + +Le site peut contenir des liens vers des ressources tierces. TheAfriForge n'est pas responsable du contenu de ces sites externes. + +## Protection des donnees personnelles + +Le traitement des donnees personnelles est detaille dans la Politique de confidentialite du site. + +Pour toute demande relative a vos donnees : privacy@theafriforge.org + +## Droit applicable et juridiction + +Les presentes mentions sont interpretees conformement au droit applicable au lieu d'etablissement de l'entite operatrice et, le cas echeant, aux regles internationales applicables. + +En cas de litige, une resolution amiable est privilegiee avant toute procedure contentieuse. + +## Mise a jour + +Derniere mise a jour : 17 mai 2026. diff --git a/content/fr/politique-confidentialite.md b/content/fr/politique-confidentialite.md new file mode 100644 index 0000000..d12f369 --- /dev/null +++ b/content/fr/politique-confidentialite.md @@ -0,0 +1,126 @@ +--- +title: "Politique de confidentialite" +description: "Politique de traitement des donnees personnelles sur TheAfriForge." +--- + +## Principe + +TheAfriForge s'engage a proteger les donnees personnelles des visiteurs, contributeurs et partenaires du site. + +Cette politique explique quelles donnees sont traitees, pourquoi, pendant combien de temps, et quels sont vos droits. + +## Responsable de traitement + +Le responsable de traitement est l'initiative TheAfriForge. + +- Contact general : contact@theafriforge.org +- Contact confidentialite : privacy@theafriforge.org +- Contact legal : legal@theafriforge.org + +## Donnees traitees + +Selon vos interactions, nous pouvons traiter les categories suivantes : + +- informations de contact transmises volontairement (nom, email, organisation, message) +- donnees techniques minimales de navigation (logs serveur, adresse IP, date et heure, page demandee) +- informations necessaires a la securisation et au fonctionnement du site + +TheAfriForge ne collecte pas volontairement de donnees sensibles, sauf obligation legale expresse ou demande explicite justifiee. + +## Finalites + +Ces donnees sont traitees pour : + +- repondre aux demandes de contact et de partenariat +- assurer la securite, la disponibilite et l'integrite du site +- piloter l'amelioration continue des services de TheAfriForge +- respecter les obligations legales, reglementaires et de conformite applicables + +## Base de traitement + +Les traitements reposent sur : + +- votre consentement lorsque vous soumettez volontairement des informations +- l'interet legitime de TheAfriForge pour la securite et le bon fonctionnement du site +- le respect des obligations legales applicables + +Lorsque le traitement repose sur votre consentement, vous pouvez le retirer a tout moment sans effet retroactif. + +## Duree de conservation + +Les donnees sont conservees pour une duree proportionnee a leur finalite, puis supprimees ou anonymisees. + +Regles indicatives : + +- demandes de contact : jusqu'a 24 mois apres le dernier echange utile +- journaux techniques : jusqu'a 12 mois, sauf exigence de securite ou d'enquete +- traces de conformite : duree imposee par les obligations legales applicables + +## Destinataires + +Les donnees sont accessibles uniquement aux equipes habilitees de TheAfriForge et a ses prestataires techniques strictement necessaires a l'operation du site. + +Aucune cession commerciale de donnees personnelles n'est realisee. + +## Sous-traitants et transferts + +TheAfriForge peut recourir a des sous-traitants techniques (hebergement, supervision, anti-abus, messagerie). + +En cas de transfert hors de votre zone juridique, TheAfriForge met en oeuvre des garanties appropriees (clauses contractuelles, mesures techniques complementaires, minimisation des donnees). + +## Cookies + +Le site utilise principalement des cookies techniques necessaires au fonctionnement. + +Si des cookies de mesure d'audience sont actives, ils sont utilises de maniere proportionnee et dans le respect des exigences applicables. + +Vous pouvez configurer votre navigateur pour bloquer certains cookies. Le refus des cookies strictement necessaires peut toutefois degrader le fonctionnement du site. + +## Vos droits + +Vous pouvez demander : + +- l'acces a vos donnees +- la rectification de vos donnees +- l'effacement de vos donnees, lorsque applicable +- la limitation ou l'opposition a certains traitements +- la portabilite de vos donnees, lorsque applicable +- la definition de directives sur le sort de vos donnees apres deces, lorsque le droit applicable le prevoit + +Pour exercer vos droits : privacy@theafriforge.org + +Nous pouvons demander un justificatif raisonnable d'identite pour prevenir les demandes frauduleuses. + +## Delais de reponse + +TheAfriForge traite les demandes dans un delai raisonnable et conforme aux exigences legales applicables. + +En cas de complexite particuliere, le delai peut etre prolonge avec information prealable. + +## Securite + +TheAfriForge met en place des mesures techniques et organisationnelles raisonnables pour proteger les donnees contre l'acces non autorise, l'alteration ou la perte. + +Ces mesures incluent notamment le controle d'acces, la journalisation technique, la limitation des privileges, la surveillance de securite et les procedures de reprise. + +## Notification d'incident + +En cas de violation de donnees susceptible d'engendrer un risque significatif, TheAfriForge applique les obligations de notification prevues par les textes applicables. + +## Mineurs + +Le site n'est pas destine a collecter intentionnellement des donnees de mineurs sans encadrement legal approprie. + +Si vous pensez qu'un mineur nous a transmis des donnees de maniere inappropriee, contactez privacy@theafriforge.org. + +## Contact + +Pour toute question relative a la confidentialite : privacy@theafriforge.org + +Pour toute demande legale : legal@theafriforge.org + +## Reclamation + +Si vous estimez que vos droits ne sont pas respectes, vous pouvez contacter TheAfriForge pour resolution amiable, puis saisir l'autorite competente de protection des donnees selon votre pays. + +Derniere mise a jour : 17 mai 2026. diff --git a/content/fr/projets.md b/content/fr/projets.md new file mode 100644 index 0000000..5d996c0 --- /dev/null +++ b/content/fr/projets.md @@ -0,0 +1,83 @@ +--- +title: "Nos Projets" +description: "Un portefeuille de projets open source stratégiques pour construire une souveraineté numérique africaine concrète, mesurable et durable." +layout: "projects" + +hero: + metrics: + - value: "03" + label: "Programmes actifs" + - value: "12" + label: "Partenaires techniques ciblés" + - value: "24 mois" + label: "Horizon de déploiement" + +portfolio: + tag: "Portefeuille" + title: "Initiatives en production, incubation et recherche" + intro: "Chaque projet répond a un besoin critique: collaboration souveraine, distribution fiable des dependances, et securisation de la chaine logicielle africaine." + impactLabel: "Impact attendu" + stackLabel: "Socle technique" + items: + - name: "GitForge.africa" + status: "Production" + icon: "git" + text: "Forge de code souveraine pour heberger depots, tickets, pipelines CI/CD et revue de code sur infrastructure continentale." + impact: "Reduction des risques d'arret de service sur des plateformes externes pour les projets critiques." + stack: "Git, CI/CD, IAM, observabilite" + cta: "Voir la feuille de route" + link: "#" + - name: "AfriRegistry" + status: "Incubation" + icon: "package" + text: "Registre regional pour distribuer npm, PyPI et images conteneurs avec miroirs locaux et politiques de confiance." + impact: "Baisse de latence, meilleure disponibilite et meilleure maitrise des artefacts logiciels." + stack: "Registry federation, cache, signatures, policy engine" + cta: "Suivre l'incubation" + link: "#" + - name: "AIForge Secure" + status: "Recherche" + icon: "shield" + text: "Programme R&D pour l'analyse de code, la conformite et la securisation de la chaine logicielle dans des environnements souverains." + impact: "Acceleration des audits et renforcement de la confiance pour les institutions publiques et privees." + stack: "SBOM, SAST, provenance, tableaux de bord" + cta: "Explorer la recherche" + link: "#" + +roadmap: + title: "Roadmap 2026-2027" + intro: "Nous operons par vagues: stabilisation des fondamentaux, extension regionale, puis industrialisation des services." + items: + - period: "T3 2026" + title: "Stabilisation des briques coeur" + text: "Durcir l'architecture, les sauvegardes et les procedures de reprise sur incident." + - period: "T4 2026" + title: "Federation multi-sites" + text: "Connecter plusieurs noeuds regionaux et harmoniser les standards de gouvernance." + - period: "T1 2027" + title: "Ouverture partenaires" + text: "Elargir l'acces aux institutions, universites et entreprises via un cadre d'onboarding unifie." + +selection: + title: "Comment nous selectionnons un projet" + intro: "TheAfriForge soutient les initiatives qui servent l'interet general et renforcent l'autonomie numerique africaine." + items: + - icon: "flag" + title: "Valeur souveraine" + text: "Le projet doit reduire une dependance structurelle critique." + - icon: "network" + title: "Impact ecosystemique" + text: "Le projet doit etre reutilisable par plusieurs acteurs du continent." + - icon: "lock" + title: "Maturite securite" + text: "Le projet doit integrer la securite et l'auditabilite des la conception." + - icon: "academic" + title: "Transmission" + text: "Le projet doit favoriser la montee en competence locale et la documentation ouverte." + +call: + title: "Vous portez un projet strategique ?" + text: "Partagez votre initiative avec TheAfriForge pour evaluer un accompagnement en hebergement, gouvernance et acceleration technique." + cta: "Soumettre un projet" + link: "devenir-membre" +--- diff --git a/hugo.toml b/hugo.toml new file mode 100644 index 0000000..4ab6c54 --- /dev/null +++ b/hugo.toml @@ -0,0 +1,74 @@ +baseURL = "https://theafriforge.org/" +title = "TheAfriForge" +defaultContentLanguage = "fr" +defaultContentLanguageInSubdir = true +enableRobotsTXT = true +disableKinds = ["taxonomy", "term"] +disableAliases = true + +[params] + organization = "TheAfriForge" + gitforgeUrl = "https://gitforge.africa" + repositoryUrl = "https://github.com/theafriforge" + # Membership form configuration (fallback values). + # Priority used in templates: + # 1) HUGO_MEMBERSHIP_FORM_ACTION / HUGO_MEMBERSHIP_FORM_SUCCESS_PATH + # 2) params.membershipFormAction / params.membershipFormSuccessPath (below) + # 3) page front matter defaults + membershipFormAction = "" + membershipFormSuccessPath = "" + +[languages] + [languages.fr] + languageName = "Français" + languageCode = "fr-FR" + weight = 1 + contentDir = "content/fr" + title = "TheAfriForge" + + [[languages.fr.menu.main]] + name = "Accueil" + pageRef = "/" + weight = 10 + + [[languages.fr.menu.main]] + name = "Manifeste" + pageRef = "/manifeste" + weight = 20 + + [[languages.fr.menu.main]] + name = "Nos Projets" + pageRef = "/projets" + weight = 30 + + [[languages.fr.menu.main]] + name = "Gouvernance" + pageRef = "/gouvernance" + weight = 40 + + [languages.en] + languageName = "English" + languageCode = "en-US" + weight = 2 + contentDir = "content/en" + title = "TheAfriForge" + + [[languages.en.menu.main]] + name = "Home" + pageRef = "/" + weight = 10 + + [[languages.en.menu.main]] + name = "Manifesto" + pageRef = "/manifesto" + weight = 20 + + [[languages.en.menu.main]] + name = "Our Projects" + pageRef = "/projects" + weight = 30 + + [[languages.en.menu.main]] + name = "Governance" + pageRef = "/governance" + weight = 40 diff --git a/i18n/en.toml b/i18n/en.toml new file mode 100644 index 0000000..d5d84b7 --- /dev/null +++ b/i18n/en.toml @@ -0,0 +1,37 @@ +[siteDescription] +other = "African foundation for open-source software and digital sovereignty." + +[gitforgeCta] +other = "Access GitForge" + +[headerCtaMembers] +other = "Become a Member" + +[themeModeLight] +other = "Day" + +[themeModeDark] +other = "Night" + +[themeToggleAria] +other = "Toggle theme" + +[themeSetLightAria] +other = "Enable day mode" + +[themeSetDarkAria] +other = "Enable night mode" + + + +[footerTagline] +other = "Foundation for open-source software and digital sovereignty in Africa." + +[footerLegal] +other = "Legal Notice" + +[footerPrivacy] +other = "Privacy Policy" + +[footerGovernance] +other = "Governance Charter" diff --git a/i18n/fr.toml b/i18n/fr.toml new file mode 100644 index 0000000..ee24b19 --- /dev/null +++ b/i18n/fr.toml @@ -0,0 +1,37 @@ +[siteDescription] +other = "Fondation africaine du logiciel libre et de la souveraineté numerique." + +[gitforgeCta] +other = "Acceder a GitForge" + +[headerCtaMembers] +other = "Devenir Membre" + +[themeModeLight] +other = "Jour" + +[themeModeDark] +other = "Nuit" + +[themeToggleAria] +other = "Basculer le theme" + +[themeSetLightAria] +other = "Activer le mode jour" + +[themeSetDarkAria] +other = "Activer le mode nuit" + + + +[footerTagline] +other = "Fondation du logiciel libre et de la souverainete numerique en Afrique." + +[footerLegal] +other = "Mentions legales" + +[footerPrivacy] +other = "Politique de confidentialite" + +[footerGovernance] +other = "Charte de gouvernance" diff --git a/layouts/_default/_markup/render-heading.html b/layouts/_default/_markup/render-heading.html new file mode 100644 index 0000000..ba7f7a6 --- /dev/null +++ b/layouts/_default/_markup/render-heading.html @@ -0,0 +1,16 @@ +{{ if eq .Level 2 }} +
+
+
+

{{ .Text | safeHTML }}

+
+
+
+{{ else if eq .Level 3 }} +

+ + {{ .Text | safeHTML }} +

+{{ else }} +{{ .Text | safeHTML }} +{{ end }} diff --git a/layouts/_default/baseof.html b/layouts/_default/baseof.html new file mode 100644 index 0000000..e3f1740 --- /dev/null +++ b/layouts/_default/baseof.html @@ -0,0 +1,37 @@ + + + + + + {{ if .IsHome }}{{ .Site.Title }}{{ else }}{{ .Title }} | {{ .Site.Title }}{{ end }} + + + + + + + + + + {{ partial "site-header.html" . }} + +
+ {{ block "main" . }}{{ end }} +
+ + {{ partial "site-footer.html" . }} + + + diff --git a/layouts/_default/governance.html b/layouts/_default/governance.html new file mode 100644 index 0000000..ba24961 --- /dev/null +++ b/layouts/_default/governance.html @@ -0,0 +1,128 @@ +{{ define "main" }} + +{{ $p := .Params }} + + +
+
+
+ + + TheAfriForge + +

{{ .Title }}

+ {{ with $p.description }} +

{{ . }}

+ {{ end }} +
+ {{ range $p.hero.metrics }} +
+

{{ .value }}

+

{{ .label }}

+
+ {{ end }} +
+
+
+ + +
+
+

{{ $p.principles.title }}

+

{{ $p.principles.intro }}

+ +
+ {{ range $p.principles.items }} +
+ + {{ partial "icon.html" .icon }} + +

{{ .title }}

+

{{ .text }}

+
+ {{ end }} +
+
+
+ + +
+
+

{{ $p.bodies.title }}

+

{{ $p.bodies.intro }}

+ +
+ {{ range $p.bodies.items }} +
+
+ + {{ partial "icon.html" .icon }} + +

{{ .title }}

+
+

{{ .text }}

+
    + {{ range .missions }} +
  • + + {{ . }} +
  • + {{ end }} +
+
+ {{ end }} +
+
+
+ + +
+
+

{{ $p.decisions.title }}

+

{{ $p.decisions.intro }}

+ +
+ {{ range $index, $item := $p.decisions.steps }} +
+
+ {{ add $index 1 }} +
+

{{ .title }}

+

{{ .text }}

+
+
+
+ {{ end }} +
+
+
+ + +
+
+

{{ $p.transparency.title }}

+

{{ $p.transparency.intro }}

+ +
+ {{ range $p.transparency.items }} +
+

{{ .title }}

+

{{ .text }}

+
+ {{ end }} +
+
+
+ + +
+
+

{{ $p.call.title }}

+

{{ $p.call.text }}

+ + {{ $p.call.cta }} + +
+
+ +{{ end }} \ No newline at end of file diff --git a/layouts/_default/join.html b/layouts/_default/join.html new file mode 100644 index 0000000..e528b9d --- /dev/null +++ b/layouts/_default/join.html @@ -0,0 +1,312 @@ +{{ define "main" }} + +{{ $p := .Params }} +{{ $privacyPath := cond (eq .Site.Language.Lang "fr") "politique-confidentialite" "privacy-policy" }} +{{ $formAction := or (getenv "HUGO_MEMBERSHIP_FORM_ACTION") .Site.Params.membershipFormAction $p.form.action }} +{{ $defaultSuccessPath := cond (eq .Site.Language.Lang "fr") "devenir-membre" "become-member" }} +{{ $successPath := or (getenv "HUGO_MEMBERSHIP_FORM_SUCCESS_PATH") .Site.Params.membershipFormSuccessPath $defaultSuccessPath }} +{{ $formbricksHost := getenv "HUGO_FORMBRICKS_API_HOST" }} +{{ $formbricksEnv := getenv "HUGO_FORMBRICKS_ENV_ID" }} +{{ $formbricksEvent := or (getenv "HUGO_FORMBRICKS_EVENT") "membership_form_submitted" }} +{{ $formbricksSdkURL := or (getenv "HUGO_FORMBRICKS_SDK_URL") "https://form.theafriforge.com/js/formbricks.umd.cjs" }} + +
+
+
+ + + TheAfriForge + +

{{ .Title }}

+ {{ with $p.description }} +

{{ . }}

+ {{ end }} +
+
+ +
+
+

{{ $p.value.title }}

+

{{ $p.value.intro }}

+
+ {{ range $p.value.items }} +
+ + {{ partial "icon.html" .icon }} + +

{{ .title }}

+

{{ .text }}

+
+ {{ end }} +
+
+
+ +
+
+

{{ $p.membership.title }}

+

{{ $p.membership.intro }}

+
+ {{ range $p.membership.items }} +
+

{{ .title }}

+

{{ .text }}

+
    + {{ range .expectations }} +
  • + + {{ . }} +
  • + {{ end }} +
+
+ {{ end }} +
+
+
+ +
+
+

{{ $p.process.title }}

+
+ {{ range $index, $item := $p.process.steps }} +
+
+ {{ add $index 1 }} +
+

{{ .title }}

+

{{ .text }}

+ {{ with .delay }} +

{{ . }}

+ {{ end }} +
+
+
+ {{ end }} +
+
+
+ +
+
+

{{ $p.form.title }}

+

{{ $p.form.intro }}

+ + + + + +
+ + + + + + + + + + + + + + + + + + + + + + +
+ +
+
+
+
+ + + +{{ end }} diff --git a/layouts/_default/manifeste.html b/layouts/_default/manifeste.html new file mode 100644 index 0000000..798cc90 --- /dev/null +++ b/layouts/_default/manifeste.html @@ -0,0 +1,191 @@ +{{ define "main" }} + +{{ $p := .Params }} +{{ $joinPath := cond (eq .Site.Language.Lang "fr") "devenir-membre" "become-member" }} + + +
+
+
+ + + TheAfriForge + +

{{ .Title }}

+ {{ with .Description }} +

{{ . }}

+ {{ end }} +
+
+ + +
+
+
+ +

{{ $p.preamble.quote }}

+
+
+

{{ $p.preamble.text }}

+
+

{{ partial "brand-highlight.html" $p.preamble.conviction }}

+
+
+
+
+ + +
+
+
+

{{ $p.conviction.title }}

+

{{ $p.conviction.intro }}

+
+
+ {{ range $p.conviction.items }} +
+
+ {{ partial "icon.html" .icon }} +
+

{{ .text }}

+
+ {{ end }} +
+
+
+ + +
+
+
+

{{ $p.pillars.title }}

+

{{ $p.pillars.intro }}

+
+
+ {{ range $p.pillars.items }} +
+
+
+ {{ partial "icon.html" .icon }} +
+ {{ .number }} +
+

{{ .title }}

+

{{ .text }}

+
+ {{ end }} +
+
+
+ + +
+
+
+

{{ $p.principles.title }}

+
+
+ {{ range $p.principles.items }} +
+
+ {{ partial "icon.html" .icon }} +
+

{{ .title }}

+

{{ .text }}

+
+ {{ end }} +
+
+
+ + +
+
+
+
+

{{ $p.commitments.title }}

+

{{ $p.commitments.intro }}

+
    + {{ range $p.commitments.items }} +
  • + + + + {{ . }} +
  • + {{ end }} +
+
+
+
+ +

{{ $p.commitments.quote }}

+
+
+
+
+
+ + +
+
+
+

{{ $p.vision.title }}

+

{{ partial "brand-highlight.html" $p.vision.intro }}

+

→ {{ $p.vision.objective }}

+
+
+ {{ range $p.vision.items }} +
+
+ {{ partial "icon.html" .icon }} +
+
+

{{ .title }}

+

{{ .text }}

+
+
+ {{ end }} +
+
+
+ + +
+
+
+
+

{{ $p.governance.title }}

+
    + {{ range $p.governance.items }} +
  • + + + + {{ . }} +
  • + {{ end }} +
+
+
+

« {{ $p.governance.quote }} »

+
+
+
+
+ + +
+
+

{{ $p.coalition.title }}

+

{{ $p.coalition.text }}

+

{{ partial "brand-highlight.html" $p.coalition.statement }}

+ + {{ $p.coalition.cta }} + + +

{{ $p.coalition.closing }}

+
+
+ +{{ end }} diff --git a/layouts/_default/projects.html b/layouts/_default/projects.html new file mode 100644 index 0000000..01ed6fb --- /dev/null +++ b/layouts/_default/projects.html @@ -0,0 +1,122 @@ +{{ define "main" }} + +{{ $p := .Params }} + + +
+
+
+ + + TheAfriForge + +

{{ .Title }}

+ {{ with $p.description }} +

{{ . }}

+ {{ end }} +
+ {{ range $p.hero.metrics }} +
+

{{ .value }}

+

{{ .label }}

+
+ {{ end }} +
+
+
+ + +
+
+
+
+

{{ $p.portfolio.tag }}

+

{{ $p.portfolio.title }}

+
+

{{ $p.portfolio.intro }}

+
+ +
+ {{ range $p.portfolio.items }} + {{ $status := lower .status }} + {{ $statusClass := "bg-slate-100 text-slate-700" }} + {{ if eq $status "production" }} + {{ $statusClass = "bg-green-100 text-green-800" }} + {{ else if eq $status "incubation" }} + {{ $statusClass = "bg-amber-100 text-amber-800" }} + {{ else if eq $status "research" }} + {{ $statusClass = "bg-sky-100 text-sky-800" }} + {{ else if eq $status "recherche" }} + {{ $statusClass = "bg-sky-100 text-sky-800" }} + {{ end }} +
+
+ {{ .status }} + + {{ partial "icon.html" .icon }} + +
+

{{ .name }}

+

{{ .text }}

+

{{ $p.portfolio.impactLabel }}: {{ .impact }}

+

{{ $p.portfolio.stackLabel }}: {{ .stack }}

+ + {{ .cta }} + + +
+ {{ end }} +
+
+
+ + +
+
+

{{ $p.roadmap.title }}

+

{{ $p.roadmap.intro }}

+ +
+ {{ range $p.roadmap.items }} +
+

{{ .period }}

+

{{ .title }}

+

{{ .text }}

+
+ {{ end }} +
+
+
+ + +
+
+

{{ $p.selection.title }}

+

{{ $p.selection.intro }}

+ +
+ {{ range $p.selection.items }} +
+ + {{ partial "icon.html" .icon }} + +

{{ .title }}

+

{{ .text }}

+
+ {{ end }} +
+
+
+ + +
+
+

{{ $p.call.title }}

+

{{ $p.call.text }}

+ + {{ $p.call.cta }} + +
+
+ +{{ end }} \ No newline at end of file diff --git a/layouts/_default/single.html b/layouts/_default/single.html new file mode 100644 index 0000000..6960996 --- /dev/null +++ b/layouts/_default/single.html @@ -0,0 +1,31 @@ +{{ define "main" }} + + +
+
+

TheAfriForge — {{ .Site.Language.LanguageName }}

+

{{ .Title }}

+ {{ with .Description }} +

{{ . }}

+ {{ end }} +
+
+ + +
+
+
+ {{ partial "brand-highlight.html" (printf "%s" .Content) }} +
+
+
+ +{{ end }} diff --git a/layouts/index.html b/layouts/index.html new file mode 100644 index 0000000..f91f5f1 --- /dev/null +++ b/layouts/index.html @@ -0,0 +1,118 @@ +{{ define "main" }} + + {{ $manifestoPath := cond (eq .Site.Language.Lang "fr") "manifeste" "manifesto" }} + {{ $projectsPath := cond (eq .Site.Language.Lang "fr") "projets" "projects" }} + {{ $joinPath := cond (eq .Site.Language.Lang "fr") "devenir-membre" "become-member" }} + + +
+
+

{{ .Params.hero.kicker }}

+

+ {{ .Params.hero.titleLine1 }}
{{ .Params.hero.titleLine2 }}
{{ .Params.hero.titleLine3 }} +

+

+ {{ partial "brand-highlight.html" .Params.hero.subtitle }} +

+ +
+
+ + +
+ + +
+
+

{{ .Params.whyJoin.title }}

+

{{ partial "brand-highlight.html" .Params.whyJoin.intro }}

+ +
+ {{ range .Params.whyJoin.cards }} +
+
{{ .icon }}
+

{{ .title }}

+

{{ partial "brand-highlight.html" .text }}

+
+ {{ end }} +
+
+
+ + +
+ + +
+
+

{{ .Params.pillars.title }}

+
+ {{ range $index, $item := .Params.pillars.items }} + {{ $bgColorClass := cond (eq $index 0) "bg-green-50" (cond (eq $index 1) "bg-green-100" "bg-green-200") }} + {{ $borderColorClass := cond (eq $index 0) "border-green-600" (cond (eq $index 1) "border-green-700" "border-green-800") }} + {{ $textColorClass := cond (eq $index 0) "text-green-600" (cond (eq $index 1) "text-green-700" "text-green-800") }} +
+
{{ add $index 1 }}
+

{{ $item.title }}

+

{{ $item.text }}

+
+ {{ end }} +
+
+
+ + +
+
+

{{ .Params.projects.title }}

+

{{ partial "brand-highlight.html" .Params.projects.intro }}

+ +
+ {{ range .Params.projects.items }} + {{ $statusColor := cond (eq .status "Production") "bg-green-200 text-green-900" (cond (eq .status "Incubation") "bg-amber-200 text-amber-900" "bg-slate-200 text-slate-800") }} +
+
+ {{ .status }} +

{{ .name }}

+

{{ partial "brand-highlight.html" .text }}

+
+ + {{ .cta }} → + +
+ {{ end }} +
+
+
+ + +
+
+

{{ .Params.members.title }}

+

{{ partial "brand-highlight.html" .Params.members.subtitle }}

+ +
+ {{ range .Params.members.categories }} +
+

{{ .label }}

+

{{ .title }}

+

{{ partial "brand-highlight.html" .text }}

+ + {{ .cta }} + + +
+ {{ end }} +
+
+
+ +{{ end }} diff --git a/layouts/partials/brand-highlight.html b/layouts/partials/brand-highlight.html new file mode 100644 index 0000000..30f0f28 --- /dev/null +++ b/layouts/partials/brand-highlight.html @@ -0,0 +1,3 @@ +{{- $text := . -}} +{{- $highlight := "TheAfriForge" -}} +{{- replace $text "TheAfriForge" $highlight | safeHTML -}} diff --git a/layouts/partials/icon.html b/layouts/partials/icon.html new file mode 100644 index 0000000..b2cda10 --- /dev/null +++ b/layouts/partials/icon.html @@ -0,0 +1,34 @@ +{{ $name := . }} +{{ if eq $name "server" }} + +{{ else if eq $name "shield" }} + +{{ else if eq $name "globe" }} + +{{ else if eq $name "bolt" }} + +{{ else if eq $name "network" }} + +{{ else if eq $name "code" }} + +{{ else if eq $name "balance" }} + +{{ else if eq $name "flag" }} + +{{ else if eq $name "unlock" }} + +{{ else if eq $name "lock" }} + +{{ else if eq $name "zap" }} + +{{ else if eq $name "leaf" }} + +{{ else if eq $name "academic" }} + +{{ else if eq $name "git" }} + +{{ else if eq $name "package" }} + +{{ else if eq $name "chart" }} + +{{ end }} diff --git a/layouts/partials/site-footer.html b/layouts/partials/site-footer.html new file mode 100644 index 0000000..722966b --- /dev/null +++ b/layouts/partials/site-footer.html @@ -0,0 +1,16 @@ + diff --git a/layouts/partials/site-header.html b/layouts/partials/site-header.html new file mode 100644 index 0000000..b13190f --- /dev/null +++ b/layouts/partials/site-header.html @@ -0,0 +1,106 @@ +
+ {{ $joinPath := cond (eq .Site.Language.Lang "fr") "devenir-membre" "become-member" }} + {{ $menuLabel := cond (eq .Site.Language.Lang "fr") "Menu" "Menu" }} +
+
+ + + AF + TheAfriForge + + + + + + +
+ + + + + + +
+ + {{ .Site.Language.Lang | upper }} + + +
+ {{ range .Site.Languages }} + {{ $isCurrent := eq $.Site.Language.Lang .Lang }} + {{ $targetSite := index (where $.Sites "Language.Lang" .Lang) 0 }} + {{ $langURL := "/" }} + {{ if and $targetSite $.Page (not $.IsHome) }} + {{ $translation := index (where $.Page.AllTranslations "Language.Lang" .Lang) 0 }} + {{ if $translation }} + {{ $langURL = $translation.RelPermalink }} + {{ else }} + {{ $langURL = $targetSite.Home.RelPermalink }} + {{ end }} + {{ else if $targetSite }} + {{ $langURL = $targetSite.Home.RelPermalink }} + {{ end }} + {{ if $isCurrent }} +
✓ {{ .LanguageName }}
+ {{ else }} + {{ .LanguageName }} + {{ end }} + {{ end }} +
+
+ + +
+ + {{ $menuLabel }} + + +
+ + + + {{ i18n "headerCtaMembers" }} + +
+
+
+
+
+
diff --git a/scripts/dev.sh b/scripts/dev.sh new file mode 100644 index 0000000..7b0caf5 --- /dev/null +++ b/scripts/dev.sh @@ -0,0 +1,12 @@ +#!/bin/sh +# Load .env variables and run hugo with optional args +# Usage: ./scripts/dev.sh [hugo args...] +# Example: ./scripts/dev.sh serve --port 1313 + +if [ -f .env ]; then + set -a + . ./.env + set +a +fi + +hugo --config ./hugo.toml "$@"