grants/BOTTLENECK_ANALYSIS.md
gdegelas a05331128b Atlas Green Morocco — grant strategy platform
- Full grant strategy framework for renewable energy & green hydrogen
- AI-powered grant studio, partner outreach, financial modeling
- Umami analytics with data-performance tracking
- Live Degelas metrics connected to solar.degelas.be
- Trilingual (EN/FR/AR) with i18n support
- Dockerized with Nginx frontend + Express API proxy
2026-06-01 09:44:03 +00:00

8.2 KiB

Atlas Green — Bottleneck Analysis & Next Major Enhancement Shift

Where the platform currently is, what's limiting it, and the next 10x jump


Current Platform Architecture (What we have)

Layer Component Status Capability
Strategy Macro, Position, Opportunities, Zones, Markets Complete Deep, bilingual, interactive
Execution Playbook, Deployment Phases, Optimizer Complete 8-phase roadmap, location matching
Grants 23 programs, 7 countries, per-market filters Complete Full eligibility, process, strategy
AI Studio Grant Studio, Reviewer, Outreach, Financial Complete 4-language output, steering configs
Workspace Company cockpit, RWA opportunity report, readiness score Complete Pre-filled with Degelas → RWA reality
Vault localStorage persistence, auto-save, preview, download Complete Markdown export, CRUD operations
i18n English + Darija, all sections + data files Complete Type-safe parity enforced

BOTTLENECK #1 (Critical): FounderProfile is a Hardcoded Constant

The problem: Every AI tool uses OUR_PROFILE — a single, hardcoded TypeScript constant in src/components/StudioSection.tsx:

const OUR_PROFILE: FounderProfile = {
  businessModel: "Energy Software / AI → Real-World Assets",
  product: "Degelas solar production forecasting (150+ sites, 25 countries)...",
  ...
};

This means:

  • The AI always generates output for one specific company (Degelas → RWA)
  • There is no way to switch profiles for different projects, subsidiaries, or client scenarios
  • If you want to test "what if I pivot to water desalination?" — you can't
  • The workspace "company snapshot" is read-only display; it doesn't feed into the AI

Impact: This is the single biggest limitation. The platform works for us but cannot work for anyone else. Every grant application, financial model, and outreach kit assumes the same company context.

The fix: Replace OUR_PROFILE with a persisted, editable Workspace Profile stored in localStorage (extending the Vault pattern). The AI Studio reads from the workspace, not from a hardcoded constant. The workspace becomes the "source of truth" — and users can create multiple profiles (e.g., "Degelas RWA", "Degelas EU Expansion", "Desalination Pilot").


BOTTLENECK #2 (High): No Project-Level Structuring

The problem: The Vault stores documents, but there is no concept of a "Project." A project would group:

  • One company profile
  • Multiple generated documents (grants, outreach, financial models)
  • A target zone
  • A grant stack
  • A phase/stage

Without projects, the vault becomes a flat list of unrelated documents. There's no way to say "show me everything related to our Dakhla hydrogen project."

The fix: Add a lightweight "Project" wrapper around the Vault. A project is:

Project {
  id: string;
  name: string;
  companyProfile: FounderProfile;  // the workspace profile
  zone?: string;
  grantStack: string[];
  documents: VaultDoc[];
  createdAt: string;
}

This enables: "Create a project, fill its profile once, generate all documents in context, see the full project at a glance."


BOTTLENECK #3 (High): The Vault is Browser-Only (localStorage)

The problem:

  • Documents are lost if the browser cache is cleared
  • No sharing or collaboration
  • No backup
  • No cross-device access
  • The vault cannot grow beyond a few dozen MB

The fix (phased):

  • Phase A: Add JSON export/import for the entire vault (one-click backup/restore)
  • Phase B: Add a simple backend (Supabase, PlanetScale, or a small Node API) for cloud persistence
  • Phase C: Add project sharing via URL (read-only public links)

BOTTLENECK #4 (Medium): The AI Output is "Fire and Forget"

The problem: When the AI generates a grant application, the output is displayed, saved to the vault, and that's it. There's no:

  • Version history (regenerate → lose old version)
  • Comparison mode (side-by-side diff of two generations)
  • Iterative refinement (send the AI's own output back to the AI for a second pass)
  • Feedback loop (rate the quality, improve future generations)

The fix:

  • Add versioning to the Vault (each generation creates a new version, not overwrite)
  • Add a "Refine" button that sends the current output + a refinement instruction back to the AI
  • Add a "Compare" view that shows two versions side-by-side with highlighted diffs

BOTTLENECK #5 (Medium): No French Language Layer

The problem: Morocco's official business language is French. The platform has English and Darija, but:

  • Government forms are in French
  • Bank correspondence is in French
  • OCP, ONEE, Masen, and IRESEN use French for official documents
  • EU/Morocco grant paperwork requires French

The Outreach AI can generate French output, but the platform UI itself is not in French.

The fix: Add a French (fr) locale to the i18n layer. This is a significant effort (the Darija translation took hundreds of keys), but it's the highest-ROI language for actual business operations.


BOTTLENECK #6 (Medium): The Degelas Connection is Narrative, Not Live

The problem: The platform references Degelas data (150+ sites, 25 countries) as static text. It's compelling narrative but not live data. If Degelas has APIs or internal dashboards, none of that surfaces in the platform.

The fix:

  • Add a Degelas data hook (if APIs exist) — live site count, forecast accuracy, CO₂ avoided
  • Alternatively, add a lightweight "metrics" admin panel where you can update these numbers without changing code

The Next Major Enhancement Shift: From "Our Tool" to "A Platform"

The current bottleneck analysis points to a single architectural shift:

Move from a hardcoded single-company cockpit to a multi-project, profile-driven platform.

The shift in concrete terms

Current State Target State
OUR_PROFILE is a hardcoded constant Workspace Profile is a persisted, editable entity
The Vault is a flat document list The Vault is organized into Projects
The platform works for one company The platform works for any company
localStorage is the only persistence JSON export/import + optional cloud backend
Generated documents are version 1.0 only Version history + refinement + comparison
Two languages (EN, Darija) Three languages (EN, Darija, French)
Degelas data is static text Degelas data is (optionally) live or admin-editable

Week 1-2: Profile-Driven Platform (Bottleneck Fix #1)

  1. Create WorkspaceProfile persistence layer (extends Vault pattern)
  2. Replace OUR_PROFILE with a workspace profile read from localStorage
  3. Add a "Workspace Settings" panel to edit the profile (name, model, product, team, etc.)
  4. The AI Studio reads from the active profile
  5. Workspace section renders the active profile dynamically

Week 2-3: Projects Layer (Bottleneck Fix #2)

  1. Create Project type and persistence
  2. A project wraps a profile + documents + zone + grant stack
  3. The Vault filters by active project
  4. "New Project" / "Switch Project" UI in the workspace header

Week 3-4: French Language Layer (Bottleneck Fix #5)

  1. Create src/i18n/fr.ts with all keys
  2. Update I18nProvider to support fr
  3. Add French toggle to the nav
  4. AI output language defaults to UI language

Phase 2 (Beyond 4 weeks)

  • Vault versioning + refinement + comparison
  • Cloud backend (optional)
  • Live Degelas data hooks (optional)
  • Multi-user collaboration (optional)

Summary

The single biggest bottleneck: The platform is hardcoded to one company. Fixing this with a persisted, editable Workspace Profile instantly makes the entire AI Studio, Vault, and readiness report work for any company or project scenario.

The 10x unlock: When you can create a project profile, generate a full stack of documents against it, audit them, refine them, and export them — all in a few clicks, in any language — you've built something that no other green-energy advisory platform offers. You've built the operating system for green-energy market entry.