1
0
Fork
You've already forked no-beef
1
This a recipe app for the Fediverse https://recipes.bovine.social/
  • Python 71.9%
  • TypeScript 13.3%
  • Jinja 5.4%
  • Gherkin 4.6%
  • CSS 2.5%
  • Other 2.3%
Helge a32bf7d8e6
Some checks failed
ci/woodpecker/pr/test Pipeline was successful
ci/woodpecker/push/reuse Pipeline failed
ci/woodpecker/push/test Pipeline was successful
Add check for reuse compliance
Only run reuse on main repo as it is the one the reuse api checks
See #6 
2026年01月01日 09:39:13 +01:00
.woodpecker Add check for reuse compliance 2026年01月01日 09:39:13 +01:00
features Add licenses to missing files 2025年12月15日 16:43:10 +01:00
js Add space after liked by; update display recipe 2026年01月01日 09:06:35 +01:00
LICENSES Add licenses folder 2025年12月15日 16:43:36 +01:00
no_beef Most reuse information 2025年12月15日 16:37:48 +01:00
resources Add licenses to missing files 2025年12月15日 16:43:10 +01:00
.gitignore Most reuse information 2025年12月15日 16:37:48 +01:00
CHANGES.md Add space after liked by; update display recipe 2026年01月01日 09:06:35 +01:00
docker-compose.yml Most reuse information 2025年12月15日 16:37:48 +01:00
fediverse-features.toml Most reuse information 2025年12月15日 16:37:48 +01:00
pyproject.toml Most reuse information 2025年12月15日 16:37:48 +01:00
README.md Adjust repo to not contain external schema 2025年12月15日 16:36:22 +01:00
uv.lock Most reuse information 2025年12月15日 16:37:48 +01:00
uv.lock.license Most reuse information 2025年12月15日 16:37:48 +01:00

no-beef

This is a cattle_grid providing recipe functionality. Code for a rudimentary frontend is available at no-beef-web.

no-beef can be understood as a proof of concept of what one can implement with the tech stack described below. By replacing the recipe specific components with another domain, one can create a Fediverse platform for it.

Technology stack

no-beef is build on top of many other projects. Here is a list

Specifications

  • cooklang, used as Format for the recipes

Backend

no-beef contains code related to recipes. The Fediverse interactions are managed by

Frontend

Used components for the frontend

The display is done through a mix of preact and jinja2.

Publishing recipes

Currently publishing is done by calling the publish_recipe method with the content

{
 "actor": "http://local.test/actor/id",
 "recipe": "Crack the @eggs{3} into a #blender, then add the @plain flour{125%g},\n@milk{250%ml} and @sea salt{1%pinch}, and blitz until smooth."
}

The meaning of method is explained for example in Cattle Drive Protocol.

Recipes are then serialized as ActivityPub objects as follows

{
 "@context": "https://www.w3.org/ns/activitystreams",
 "id": "http://local.test/recipes/objs/019b0991-bf02-7f38-ae61-c7b40b069ea1",
 "type": "Note",
 "attributedTo": "http://local.test/actor/id",
 "to": [
 "https://www.w3.org/ns/activitystreams#Public"
 ],
 "cc": [
 "http://local.test/actor/id/followers"
 ],
 "published": "2025年12月10日T19:35:12Z",
 "content": "Crack the @eggs{3} into a #blender, then add the @plain flour{125%g},<br>@milk{250%ml} and @sea salt{1%pinch}, and blitz until smooth.",
 "url": [
 {
 "href": "http://local.test/recipes/019b0991-bf02-7f38-ae61-c7b40b069ea1",
 "mediaType": "text/html",
 "type": "Link"
 }
 ],
 "source": {
 "content": "Crack the @eggs{3} into a #blender, then add the @plain flour{125%g},\n@milk{250%ml} and @sea salt{1%pinch}, and blitz until smooth.",
 "mediaType": "text/cooklang"
 }
}

Development

Run

docker compose up

The app will be available at http://localhost:2990/recipes/

Run pytest

Download schema

curl https://schemas.funfedi.dev/assets/activity-pub-object.schema.json \
 -o ./resources/schemas/activity-pub-object.schema.json

and run tests

uv run pytest

Run JS build hook

uv run hatch build --hooks-only -t wheel

Feature testing

docker compose up --wait
docker compose run --name runner --rm cattle-grid-app ./test_shell.sh
behave