From 258b822a278f5f23876940adbd18ef7cffd4f5da Mon Sep 17 00:00:00 2001 From: Levente Orban Date: Thu, 6 Nov 2025 23:32:59 +0100 Subject: [PATCH] feat: add federation to README.md --- README.md | 74 +++++++++++++++--- docs/federation_example.png | Bin 0 -> 63116 bytes src/lib/fetchFederatedEvents.ts | 4 +- .../api/{ => federation}/events/+server.ts | 0 src/routes/api/federation/info/+server.ts | 6 +- 5 files changed, 72 insertions(+), 12 deletions(-) create mode 100644 docs/federation_example.png rename src/routes/api/{ => federation}/events/+server.ts (100%) diff --git a/README.md b/README.md index 51ddc5d..0d92a41 100644 --- a/README.md +++ b/README.md @@ -14,17 +14,25 @@ Like the cactus, great events bloom under any condition when managed with care. #### What is it? -A mobile-first event RSVP platform that lets you create events, share unique URLs, and collect RSVPs without any registration required. +A mobile-first event RSVP platform that lets you create events, share unique URLs, and collect RSVPs without any registration required. With built-in federation, discover and share events across a decentralized network of instances. ### ✨ Features -- **🎯 Instant Event Creation** - Create events in seconds with our streamlined form. No accounts, no waiting, just pure efficiency. -- **πŸ”— One-Click Sharing** - Each event gets a unique, memorable URL. Share instantly via any platform or messaging app. -- **πŸ” All-in-One Clarity** - No more scrolling through endless chats and reactions. See everyone's availability and responses neatly in one place. -- **πŸ“… iCal Integration** - One-tap add-to-calendar via ICS/webcal links. Works with Apple Calendar, Google Calendar, and Outlook, with automatic time zone handling. -- **πŸ‘€ No Hassle, No Sign-Ups** - Skip registrations and endless forms. Unlike other event platforms, you create and share instantly β€” no accounts, no barriers. -- **πŸ›‘οΈ Smart Limits** - Choose between unlimited RSVPs or set a limited capacity. Perfect for any event size. -- **✨ Effortless Simplicity** - Designed to be instantly clear and easy. No learning curve β€” just open, create, and go. +**🎯 Instant Event Creation** - Create events in seconds with our streamlined form. No accounts, no waiting, just pure efficiency. + +**πŸ”— One-Click Sharing** - Each event gets a unique, memorable URL. Share instantly via any platform or messaging app. + +**🌐 Federation** - Connect with other Cactoide instances to discover events across the network. Share your public events and creating a decentralized event discovery network. + +**πŸ” All-in-One Clarity** - No more scrolling through endless chats and reactions. See everyone's availability and responses neatly in one place. + +**πŸ“… iCal Integration** - One-tap add-to-calendar via ICS/webcal links. Works with Apple Calendar, Google Calendar, and Outlook, with automatic time zone handling. + +**πŸ‘€ No Hassle, No Sign-Ups** - Skip registrations and endless forms. Unlike other event platforms, you create and share instantly β€” no accounts, no barriers. + +**πŸ›‘οΈ Smart Limits** - Choose between unlimited RSVPs or set a limited capacity. Perfect for any event size. + +**✨ Effortless Simplicity** - Designed to be instantly clear and easy. No learning curve β€” just open, create, and go. ### Quick Start @@ -55,6 +63,55 @@ Your app will be available at `http://localhost:5173`. You can use the Makefile Use the `database/seed.sql` if you want to populate your database with dummy data. +### Federation + +Cactoide supports federation, allowing multiple instances to share and discover public events across the network. This enables users to discover events from other Cactoide instances, creating a decentralized event discovery network. + +

+ Federation Example +

+ +#### How Federation Works + +Federation is managed through the `federation.config.js` file, which contains: + +- **Instance name**: The display name for your instance +- **Instance list**: An array of federated instance URLs + +```javascript +const config = { + name: 'Cactoide Genesis', + instances: [{ url: 'cactoide.org' }, { url: 'cactoide.dalev.hu' }] +}; +``` + +#### Opting In to Federation + +To enable federation on your instance, you need to: + +1. **Set the environment variable**: Add `FEDERATION_INSTANCE=true` to your `.env` file. This enables the federation API endpoints on your instance. + +2. **Configure your instance name**: Update the `name` field in your `federation.config.js` file to set your instance's display name. + +3. **Expose required endpoints**: Your instance will automatically expose: + - `/api/federation/events` - Returns all public events from your instance + - `/api/federation/info` - Returns your instance name and public events count + +#### Adding Your Instance to the Global Federation + +To add your instance to the global federation list (so other instances can discover your events): + +1. Fork the [Cactoide repository](https://github.com/polaroi8d/cactoide) +2. Add your instance URL to the `instances` array in `federation.config.js`: + ```javascript + instances: [{ url: 'your-instance.com' }]; + ``` +3. Open a pull request to the main repository + +Once merged, your instance will appear in the federation network, and other instances will be able to discover and display your public events. + +You can view all registered federated instances in the main repository: `federation.config.js` file. + ### Options #### 1. Landing page option @@ -90,7 +147,6 @@ It isn’t backed by a big company. Development depends on the support and gener You can support in a few ways: -- Send a one-time donation via [paypal.me/zenoazurben](paypal.me/zenoazurben) - Reach me directly: leventeorb[@]gmail.com If you enjoy using Cactoide, or if your business depends on it, please consider sponsoring its development. Your support keeps the project alive, improves it for everyone, and helps create educational content like blog posts and videos for the whole Cactoide community. diff --git a/docs/federation_example.png b/docs/federation_example.png new file mode 100644 index 0000000000000000000000000000000000000000..7511041db12dd7bc0681283ce68ae2232c4503ee GIT binary patch literal 63116 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 { */ async function fetchEventsFromInstance(instanceUrl: string): Promise { try { - // Ensure URL has protocol and append /api/events + // Ensure URL has protocol and append /api/federation/events - const apiUrl = `http://${instanceUrl}/api/events`; + const apiUrl = `http://${instanceUrl}/api/federation/events`; logger.debug({ apiUrl }, 'Fetching events from federated instance'); diff --git a/src/routes/api/events/+server.ts b/src/routes/api/federation/events/+server.ts similarity index 100% rename from src/routes/api/events/+server.ts rename to src/routes/api/federation/events/+server.ts diff --git a/src/routes/api/federation/info/+server.ts b/src/routes/api/federation/info/+server.ts index 4fd054a..13519a6 100644 --- a/src/routes/api/federation/info/+server.ts +++ b/src/routes/api/federation/info/+server.ts @@ -6,8 +6,13 @@ import { eq, count } from 'drizzle-orm'; import { logger } from '$lib/logger'; import federationConfig from '../../../../../federation.config.js'; +import { FEDERATION_INSTANCE } from '$env/static/private'; + export const GET: RequestHandler = async () => { try { + if (!FEDERATION_INSTANCE) { + return json({ error: 'Federation API is not enabled on this instance' }, { status: 403 }); + } // Count public events const publicEventsCount = await database .select({ count: count() }) @@ -31,4 +36,3 @@ export const GET: RequestHandler = async () => { ); } }; -