# 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). ### Planned Work * [ ] **Infrastructure:** * Deploy **Forgejo** using **Coop Cloud** (Abra). * Configure federation (ActivityPub/ForgeFed) for repositories. * [ ] **Server UI (`agora-server`):** * Update Join overlay to include a "Host a garden for me" toggle. * Collect email/username for account provisioning. * [ ] **Bridge Logic (`agora-bridge`):** * Implement a Forgejo API client. * Create a new endpoint (e.g., `/api/provision_garden`) to creating users/repos on Forgejo. * Return the new clone URL to the server and auto-add it to `sources.yaml`. ## 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.*