fork of Mastopod
A Mastodon-compatible app that saves all data on your Pod and made for local neighborhood.
Built on the ActivityPods framework.
- Docker and Docker Compose
- Node.js and Yarn
- Make
-
Start the Core Services
make start
This command starts the following services via Docker:
- Fuseki (Database)
- Redis (Cache)
- Mailcatcher (Email testing)
- Arena (Queue management)
- ActivityPods backend and frontend servers
-
Start the Development Servers
Open two terminal windows and run:
# Terminal 1: Start the frontend development server cd frontend yarn run dev # Terminal 2: Start the backend development server cd backend yarn run dev
The application should now be accessible at:
- Frontend: http://localhost:4004
- Backend: http://localhost:3004
- Mailcatcher UI: http://localhost:1080
- Arena UI: http://localhost:4567
- Fuseki UI: http://localhost:3030
- Redis UI: http://localhost:8001
- podprovider backend: http://localhost:3000
- podprovider frontend: http://localhost:5000
To stop all services:
make stop
make start
Starts the activitypods provider using a docker-compose file. This includes the activitypods backend and frontend server, the fuseki db, mailcatcher, redis, and arena.
make stop
Stops and removes all containers for the activitypods provider.
make config
Prints the config with the .env
-file-provided environment variables filled.
make logs-activitypods
Prints the activitypods provider logs.
make attach-activitypods
Attaches to the moleculer repl of the activitypods backend.
make build-prod
Builds the activitypods provider images for production. In addition to the dev images, this includes a traefik reverse proxy.
make start-prod
Starts the activitypods provider containers for production.
make stop-prod
Stops and removes running activitypods provider containers.
make config-prod
Prints the config with the .env
-file-provided environment variables filled.
make attach-backend-prod
Attaches to the moleculer repl of the activitypods backend.
This project is funded through the NGI0 Entrust Fund, a fund established by NLnet with financial support from the European Commission's Next Generation Internet program, under the aegis of DG Communications Networks, Content and Technology under grant agreement No 101069594. Learn more on the NLnet project page.
The app includes time-based note expiration with the following capabilities:
-
Time-Limited Notes
- Optional expiration date for notes
- Automatic note deletion after expiration
- Configurable duration
-
Technical Implementation
{ "@context": "https://www.w3.org/ns/activitystreams", "type": "Note", "content": "This is a temporary note", "endTime": "2024-03-20T15:30:00Z" }
The app includes geolocation-based note sharing with the following capabilities:
-
Location-Based Notes
- Automatic location detection from user profile (vcard:hasGeo)
- Configurable visibility radius (default: 10km)
- Location-based visibility filtering
-
Technical Implementation
{ "@context": [ "https://www.w3.org/ns/activitystreams", { "geo": "http://www.w3.org/2003/01/geo/wgs84_pos#", "radius": { "@id": "as:radius", "@type": "xsd:float" } } ], "type": "Note", "location": { "type": "Place", "name": "Author's location", "latitude": 48.8566, "longitude": 2.3522 }, "radius": 10.0, "audience": { "type": "Place", "name": "Broadcast zone", "radius": 10.0, "units": "km" } }