# Agora Development Plan: December 2025 This document outlines the key goals and progress for the Agora project in December 2025. ## 1. The Signup Story: Self-Service Onboarding **Goal:** Allow users to join the Agora (add their digital garden) immediately via the web interface, removing the need for manual email processing. ### Status (as of 2025-12-14) * [x] **Bridge API (`agora-bridge`):** * Updated `POST /sources` to trigger an immediate synchronous `git clone`. * This ensures the user's content is available on disk immediately after signup. * [x] **Server UI (`agora-server`):** * Added a "Join / Add Garden" form to the Settings Overlay (`overlay.html`). * Replaced the static "email us" instructions with an interactive form. * [x] **Client Logic:** * Implemented form handling in `settings.ts` to submit data via `fetch`. * [x] **Server Proxy:** * Created `POST /api/join` endpoint in `agora.py` to proxy requests to the Bridge API. ### Next Steps / Refinements * [ ] **Asynchronous Processing:** Move the `git clone` in Bridge to a background task (Celery/RQ) to prevent timeouts on large repos. * [ ] **Persistent Sync:** Ensure `pull.py` picks up the new source for future updates (currently requires Bridge restart). * [ ] **Identity Verification:** Implement a mechanism to verify ownership of the repo or identity (e.g., placing a file in the repo, or OAuth). * [ ] **Feedback Loop:** Show real-time progress of the clone operation in the UI. ## 2. Hosted Gardens & Forgejo Integration **Goal:** Provide a "Host me" option for users who don't have a Git repository. We will provision a new garden for them on a federated Forgejo instance (`git.anagora.org` or similar). ### Status (as of 2025-12-22) * [x] **Infrastructure:** * Deployed **Forgejo** using **Coop Cloud** (Abra). * Configured federation (ActivityPub/ForgeFed) for repositories. * Set up public visibility defaults. * [x] **Server UI (`agora-server`):** * Updated Join overlay to include a "Host a garden for me" toggle. * Collects email/username for account provisioning. * [x] **Bridge Logic (`agora-bridge`):** * Implemented `ForgejoClient` in `api/forgejo.py`. * Created `/api/provision` endpoint to create users/repos on Forgejo. * Returns the new clone URL to the server and auto-adds it to `sources.yaml`. ### Next Steps * [ ] **Editing Experience:** Improve the web-based editing flow. Currently users must use the basic Forgejo web editor or clone the repo locally. We should integrate a richer Markdown editor directly into the Agora or provide better guidance. ## 3. Fediverse Integration: An Active Commons **Goal:** Make `anagora.org` a full Fediverse participant. Users should be able to follow Agora users/nodes and receive updates when new content is published. ### Current State * `agora-server/app/federation.py` contains initial ActivityPub logic (WebFinger, Actor generation). * Basic `Inbox` and `Outbox` routes exist. ### Planned Work * [ ] **Follower Management:** * Implement `Inbox` handling for `Follow` activities. (Partially done in `user_inbox`) * Store followers in SQLite (`followers` table). (Done) * Implement `Accept` activity response. (Done in `user_inbox` via `send_accept` thread) * [x] **Content Broadcasting (Outbox):** * Implemented `federate_latest_loop` background thread. * Polls `git_utils.get_latest_changes_per_repo()` every 5 minutes (10s in debug). * Broadcasts `Create` activities for new subnodes to followers. * Handles images gracefully (links instead of binary dumps). * Tracks federation state in `federated_subnodes` table. * [x] **Star Federation:** * When a user stars a node in Agora, publish a `Like` activity. * Implemented `federate_create` to broadcast `Like` to `@agora` followers. ## 4. General Improvements * [x] **Executable Subnodes:** * Fixed `subprocess` timeouts to prevent server hangs (moved to Python native timeout + `select` for output limiting). * Implemented 256KB output limit to prevent OOM. * Refactored execution logic into `util.py`. * [x] **UI Polish:** * Refined Subnode headers (pushed vs normal). * Cleaned up Footer layout (custard emoji placement, arrow prefixes). * Improved CSS for user links. * [x] **Configuration:** * Updated `API_BASE` in `DevelopmentConfig` to use public URL, fixing browser security warnings. --- *Created by Gemini & Flancian, 2025-12-14.*