1
0
Fork 0
forked from Fediversity/meta

Compare commits

...
Sign in to create a new pull request.

85 commits
main ... main

Author SHA1 Message Date
Kiara Grouwstra
1c617dce0c
add ssh strategy 2025-04-01 09:45:31 +02:00
6b965debaf Merge branch 'main' of git.fediversity.eu:Fediversity/meta 2025-03-31 14:23:29 +02:00
baddefdf3b Add communication strategy developed by Laurens
Afaict there is no source document and only this pdf
2025-03-31 14:22:45 +02:00
d4daf8879a Update meeting-notes/2025-03-31 demo rehearsel.md
Fixed time
2025-03-31 14:19:45 +02:00
9b950763b8 Add meeting-notes/2025-03-31 demo rehearsel.md
Notes made during the demo rehearsel
2025-03-31 14:19:23 +02:00
ae0ca796de Add meeting-notes/2025-03-31 standup notes.md
Standup notes
2025-03-31 13:55:05 +02:00
Kiara Grouwstra
edcd80e87f
add meeting notes: visual design meeting w/ slik 2025-03-31 12:11:09 +02:00
ee90fedbf2 Updated notes based on feedback 2025-03-31 11:33:51 +02:00
Valentin Gagarin
f77db3058b compile notes on design discussions concerning data model handling 2025-03-28 01:56:58 +01:00
4279f6eba6 Add meeting-notes/2025-03-27 standup notes.md
standup notes
2025-03-27 09:59:41 +01:00
dc8082cdcf Add meeting-notes/2025-03-19 standup notes.md
standup notes
2025-03-27 08:57:50 +01:00
d89fb38d88 Add meeting-notes/2025-03-20 standup notes.md
standup notes
2025-03-27 08:56:09 +01:00
7a90dad1dc Add meeting-notes/2025-03-24 standup notes.md
standup notes
2025-03-27 08:53:48 +01:00
cf7479165a Update meeting-notes/2025-03-26-demo-notes.md
fix layout
2025-03-27 08:51:31 +01:00
3bfbd9eece Add meeting-notes/2025-03-26-demo-notes.md
Demo notes
2025-03-27 08:51:14 +01:00
1bfc05f8de Add meeting-notes/2025-03-26 standup notes.md
standup notes
2025-03-27 08:48:58 +01:00
Kiara Grouwstra
b5fe19f862
fix file name 2025-03-25 14:18:52 +01:00
Kiara Grouwstra
f18d23d6ec
add meeting notes: visual design 2025-03-25 12:19:23 +01:00
f56524299e that should be better 2025-03-25 09:50:00 +01:00
ce8e540928 Delete 2025-03-25 standup notes.md 2025-03-25 09:49:33 +01:00
59bd52eba8 standup notes 2025-03-25 2025-03-25 09:46:36 +01:00
23e8643980 Add meeting-notes/2025-03-17 standup notes.md
Standup notes
2025-03-18 19:59:00 +01:00
25e6cb6fa0 Add meeting-notes/2025-03-13 standup notes.md
Standup notes
2025-03-18 19:50:49 +01:00
e47fdb5d09 Add meeting-notes/2025-03-18 standup notes.md
Standup notes
2025-03-18 19:48:40 +01:00
Kiara Grouwstra
9f25fd986d
add minutes from design meeting 2025-03-12 13:55:26 +01:00
029c55e743 Add meeting-notes/2025-03-12 standup notes.md
Stand up notes
2025-03-12 09:37:17 +01:00
c53a8d46ee Add meeting-notes/2025-03-11 standup notes.md
Standup notes
2025-03-11 09:40:32 +01:00
5a16f56c2e Add meeting-notes/2025-03-10 standup notes.md
Standup notes
2025-03-11 09:28:57 +01:00
e12f8224a6 Add meeting-notes/2025-03-07 standup notes.md
Standup notes
2025-03-07 10:56:46 +01:00
cbe290628e Add meeting-notes/2025-03-06 standup notes.md
Catching up with standup notes
2025-03-07 10:43:08 +01:00
d4fae12375 Add meeting-notes/2025-03-05 standup notes.md
Catching up with standup notes
2025-03-07 10:41:06 +01:00
Gheorghe Aurel Pacurar
167b2df825 Merge remote-tracking branch 'origin/main' 2025-03-05 16:53:09 +02:00
Gheorghe Aurel Pacurar
c7431ed63d Merge remote-tracking branch 'origin/main' 2025-03-05 16:47:11 +02:00
9d829c5d3f Merge pull request 'add note on nixops priorities' () from progress-indicator-note into main
Reviewed-on: 
Reviewed-by: Valentin Gagarin <valentin.gagarin@tweag.io>
2025-03-05 15:44:20 +01:00
Gheorghe Aurel Pacurar
5263958f0e Merge remote-tracking branch 'origin/main' 2025-03-05 11:24:36 +02:00
Gheorghe Aurel Pacurar
393119cc7d Merge remote-tracking branch 'origin/main' 2025-03-05 11:23:13 +02:00
Gheorghe Aurel Pacurar
32675afc4a Adding the documents in the D2.1 and D2.2 deliverables folder. 2025-03-05 11:20:52 +02:00
d4e7b959a7 Add meeting-notes/2025-03-04 standup notes.md
Standup notes
2025-03-04 12:46:24 +01:00
Kiara Grouwstra
68178405a8
restructure the meeting notes to consistently start with the ISO date format, as it facilitates using computer sorestructure meeting notes to consistently start with ISO date format
facilitates using computer sorting to obtain a chronological order,
which makes it easier to find things.

note i also deleted a minutes file for a date that we had two copies for
in the repo.
2025-03-04 10:23:19 +01:00
Kiara Grouwstra
2c9369eaf3
add note on nixops priorities 2025-03-04 09:39:00 +01:00
Kiara Grouwstra
3d0fcb801e
add progress indicator architecture meeting notes 2025-03-03 10:45:44 +01:00
fbc0e5f445 Add meeting-notes/2025-03-03 standup notes.md
Standup notes
2025-03-03 09:47:50 +01:00
Gheorghe Aurel Pacurar
cd1fc1cf6b Introduced the Table of Content and updated the plan with the Nix consultancy activity. 2025-03-03 09:54:09 +02:00
Gheorghe Aurel Pacurar
20283b4492 Uploaded the DSU document for the 2025-02-27. 2025-02-27 10:46:08 +02:00
Kiara Grouwstra
2a4f516b7c
add architecture discussion 2025-02-26 2025-02-26 11:07:20 +01:00
84d9fac803 add notes on architecture discussion 2025-02-26 11:01:58 +01:00
Gheorghe Aurel Pacurar
19b7ff6c5d Uploaded the meeting notes of today's DSU. 2025-02-26 10:45:33 +02:00
Gheorghe Aurel Pacurar
3bc0325a0e Chnage the DSU meeting .pdf file with the .md file. 2025-02-26 09:45:20 +02:00
680c11b64b Add meeting-notes/2025-02-24 standup notes.md
Standup notes 2025-02-24
2025-02-25 16:46:51 +01:00
Gheorghe Aurel Pacurar
f4eb914d6e Added DSU meeting notes for 2025-02-25 2025-02-25 10:43:27 +02:00
Gheorghe Aurel Pacurar
a00963fc80 Merge remote-tracking branch 'origin/main' 2025-02-25 04:22:58 +02:00
Gheorghe Aurel Pacurar
0078f3f372 Last EPics, User Stories, tasks and the initial project plan for the MVP April 2025 2025-02-25 04:21:21 +02:00
8f9e3528e7 Upload the MVP planning document for the Tweag, a Modus Create company, Team.
Added the planning of the MVP for April 2025 as a table and Gantt Chart.
2025-02-24 08:30:58 +01:00
fd3d840538 Add meeting-notes/2025-02-21 standup notes.md
Standup notes
2025-02-21 09:42:22 +01:00
22f2cabe1e Add meeting-notes/2025-02-20 standup notes.md
Standup notes
2025-02-21 09:28:54 +01:00
7c31a32ff9 we don't need no .DS_store files in our repo! 2025-02-20 16:16:56 +01:00
7483cb20b3 we don't need no .DS_store files in our repo! 2025-02-20 16:15:46 +01:00
fd9d9ae4a2 V1 2025-02-20 12:21:20 +01:00
66a26894e3 Updated the presentation. This is our v1 2025-02-20 11:55:05 +01:00
fa1cd42de6 Add meeting-notes/2025-02-19 standup notes.md
Standup notes
2025-02-19 23:36:04 +01:00
2092d32fad Add meeting-notes/2025-02-18 standup notes.md
Standup notes from feb 18th
2025-02-19 23:34:12 +01:00
1f2e1ad274 Merge branch 'main' of git.fediversity.eu:Fediversity/meta 2025-02-18 16:00:35 +01:00
311f93c946 Fediversity Presentation version 1
Cleaned up & added notes to the slides for the presenter
2025-02-18 15:59:11 +01:00
Gheorghe Aurel Pacurar
96a062f521 Create one document to replace two already created. Add comments from OID - Kiara. 2025-02-18 13:11:30 +02:00
Gheorghe Aurel Pacurar
6b5f5ac331 Composed one document from the initial two files and add the comments of Kiara. 2025-02-18 13:10:23 +02:00
dc6918c6bc Add meeting-notes/2025-02-17 standup notes.md
Standup notes
2025-02-17 09:45:41 +01:00
Gheorghe Aurel Pacurar
4ef3af8fea Update the name of the file to include the date of creation 2025-02-17 08:54:17 +02:00
Gheorghe Aurel Pacurar
89ec4e23db Merge remote-tracking branch 'origin/main' 2025-02-17 08:50:14 +02:00
Gheorghe Aurel Pacurar
1feebac6f3 Upload the Epics & User Stories document 2025-02-17 08:49:29 +02:00
81bec1e829 Clean up & adding presentation assets 2025-02-16 14:07:06 +01:00
0006758ab7 WIP: Presentation is almost finished & add link to investements doc 2025-02-15 12:52:39 +01:00
Gheorghe Aurel Pacurar
b389860aa7 Merge remote-tracking branch 'origin/main' 2025-02-15 12:31:03 +02:00
Gheorghe Aurel Pacurar
1f230c71e2 Uploaded the Tweag's team Epics Definitions to be validated before creating the associated User Stories. 2025-02-15 12:21:45 +02:00
7ed0dcdf7c Add meeting-notes/2025-02-14 standup notes.md
Standup notes
2025-02-14 09:43:46 +01:00
Ronny Lam
3835c8d542 added mvp dev meeting notes 2025-02-14 09:18:25 +01:00
Ronny Lam
ca13d9fcb5 added meeting notes 2025-02-14 09:13:42 +01:00
0621032cc2 Add meeting-notes/2025-02-12 standup notes.md
Standup notes
2025-02-12 23:30:26 +01:00
8249d2b5bd Update meeting-notes/2025-02-12-mvp-dev-meeting.md
Added time
2025-02-12 23:23:01 +01:00
727246fce4 Add meeting-notes/2025-02-12-mvp-dev-meeting.md
Notes of the dev meeting for the MVP
2025-02-12 14:26:19 +01:00
416d5a92de
typo (transferred) 2025-02-12 09:31:16 +01:00
7053032756 Add meeting-notes/2025-02-11 standup notes.md
standup notes
2025-02-12 09:21:54 +01:00
7f3842ca57 Add meeting-notes/2025-02-10 standup notes.md
Standup notes
2025-02-12 09:20:31 +01:00
Kiara Grouwstra
9a24f91976
add draft requirements on the migration data model for NLNet 2025-02-11 13:22:11 +01:00
Kiara Grouwstra
346c3add5a
architecture-docs/on-flakes.md: add some initial notes 2025-02-11 13:22:11 +01:00
Gheorghe Aurel Pacurar
e4beab3fb5 Added the documentation main folder, subfolders and first artifact for the WP5: Introduction to each delivered document - to be used for deliverables as introduction. 2025-02-10 16:18:59 +02:00
92 changed files with 13682 additions and 28 deletions
.DS_Store2024-11-25 standup notes.md
Documentation
Fediverse-investments-an-estimation.md
MarCom
architecture-docs
meeting-notes
2024-01-10 Weekly Meeting Notes.txt2024-05-16 Meeting Notes.pdf2024-05-23 Meeting Notes.pdf2024-06-18 Project Status Meeting Notes.pdf2024-06-20 Notes fediversity.md2024-07-02 Tech session.md2024-07-13 - Meeting Notes.pdf2024-09 Nordunet conferentie samenvatting.md2024-09-03 Notes fediversity meeting NLnet - OID.md2024-11-07 Weekly Meeting Notes.pdf2024-12-12 DSU meeting notes.md2025-01-30 nixos_deploy_session.md2025-02-10 standup notes.md2025-02-11 standup notes.md2025-02-12 standup notes.md2025-02-12-mvp-dev-meeting.md2025-02-13 standup notes.md2025-02-13-mvp-dev-meeting.md2025-02-13T10_43_50.795Z_Presentation_Fediversity.png2025-02-13T10_43_58.845Z_Presentation_Fediversity.png2025-02-14 standup notes.md2025-02-17 standup notes.md2025-02-18 standup notes.md2025-02-19 standup notes.md2025-02-20 standup notes.md2025-02-21 standup notes.md2025-02-24 standup notes.md2025-02-25 standup notes.md2025-02-26 standup notes.md2025-02-26 version drift.md2025-02-26-architecture-discussion.md2025-02-27 meeting notes.md2025-03-03 standup notes.md2025-03-03-progress-indicator-meeting.md2025-03-04 standup notes.md2025-03-05 standup notes.md2025-03-06 standup notes.md2025-03-07 standup notes.md2025-03-10 standup notes.md2025-03-11 standup notes.md2025-03-12 standup notes.md2025-03-13 standup notes.md2025-03-17 standup notes.md2025-03-18 standup notes.md2025-03-19 standup notes.md2025-03-20 standup notes.md2025-03-24 standup notes.md2025-03-25 standup notes.md2025-03-25-visual-design-meeting.md2025-03-26 standup notes.md2025-03-26-demo-notes.md2025-03-27 standup notes.md2025-03-27_backend-model-conversion.md2025-03-31 demo rehearsel.md2025-03-31 standup notes.md2025-03-31-design-meeting.md
planning

BIN
.DS_Store vendored Normal file

Binary file not shown.

View file

@ -1,28 +0,0 @@
Attendees: Gheorghe, Richard, Valentin, Ronny, Nicolas, Björn
Not attending: Koen & Robert (travelling), Kevin (day off)
* Bjorn set up some data structures in the internal Wiki
* Valentin:
* Met Eli from Thymis & Johannes from Clan. Discussed the three system architectures with them.
* NixOps took some time for them to make it click. Now I know a bit better what we can learn from them, and if and on what we can collaborate. Overlap might be rather small with those projects.
* We need to think about how to convey the power of NixOps in such a way that people understand this properly -- it's at a very high level of abstraction (essentially an IO monad for the Nix language), while people typically think in terms of their concrete use cases.
* That gap requires some storytelling and didactic techniques to bridge.
* Will work on a report & publish it on the website to communicate
* Valentin & Bjorn will have a chat tomorrow after standup
* Gheorghe:
* Shared the UML info last Friday
* Will work on the financials & get the numbers
* Diagram code wants to add a PR
* Update the numbers
* Nicolas:
* Wiki e-mail: we need to have a secrets management solution.
* No test for PeerTube yet. So I started working on it. Probably finished today
* Ronny:
* Will have a look at Gheorghe's PR.
* Richard:
* Will ask Kevin about his work & check if I can help out
* Looking for stuff to work on
* Nicholas opened up the wiki registration so each team member can create their own account today.
* Nicholas: Make Forgejo send out notifications (Nicholas will do this).

View file

@ -81,6 +81,8 @@ It seems there has not yet formed consensus on what exactly are the attributes w
* https://socialhub.activitypub.rocks/t/fep-f1d5-nodeinfo-in-fediverse-software/1190
* https://codeberg.org/fediverse
https://hachyderm.io/@esk/113793277371908181

File diff suppressed because it is too large Load diff

File diff suppressed because one or more lines are too long

After

(image error) Size: 14 KiB

File diff suppressed because one or more lines are too long

After

(image error) Size: 8.1 KiB

View file

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" data-name="Layer 1" width="729" height="658" viewBox="0 0 729 658" xmlns:xlink="http://www.w3.org/1999/xlink"><rect y="93" width="298" height="168" fill="#ff6e00"/><path d="M535.31443,392.74227h-300v-170h300Zm-298-2h296v-166h-296Z" transform="translate(-215.31443 -146.74227)" fill="#3f3d56"/><rect x="409" y="17" width="298" height="168" fill="#f2f2f2"/><path d="M944.31443,316.74227h-300v-170h300Zm-298-2h296v-166h-296Z" transform="translate(-215.31443 -146.74227)" fill="#3f3d56"/><path d="M727.42861,804.74227h-381a1,1,0,1,1,0-2h381a1,1,0,1,1,0,2Z" transform="translate(-215.31443 -146.74227)" fill="#ccc"/><path d="M584.94579,568.47455A12.38034,12.38034,0,0,1,600.06091,556.989l16.372-23.07272,16.44782,6.5295-23.57812,32.25841a12.44744,12.44744,0,0,1-24.35686-4.22968Z" transform="translate(-215.31443 -146.74227)" fill="#a0616a"/><path d="M602.90561,548.632l29.109-48.95706L620.155,468.04947l16.15228-43.07395.59568.25555c.39058.16734,9.56836,4.26281,10.92858,18.92951l18.56189,58.33693-49.53915,64.26717Z" transform="translate(-215.31443 -146.74227)" fill="#3f3d56"/><path d="M444.813,368.65055a12.3803,12.3803,0,0,1,10.28248,15.9579l21.73782,18.10693-7.78163,15.89375-30.33887-26.00164a12.44745,12.44745,0,0,1,6.1002-23.95694Z" transform="translate(-215.31443 -146.74227)" fill="#a0616a"/><path d="M463.2075,388.09077l46.55991,32.807,32.44778-9.37889,41.69617,19.43425-.30084.57414c-.197.37647-4.98984,9.21014-19.7178,9.43231l-59.59745,13.99592-60.2446-54.35977Z" transform="translate(-215.31443 -146.74227)" fill="#3f3d56"/><polygon points="333.089 640.297 316.903 640.297 309.202 577.863 333.092 577.864 333.089 640.297" fill="#a0616a"/><path d="M300.57258,635.67157h35.985a0,0,0,0,1,0,0v19.655a0,0,0,0,1,0,0H285.68572a0,0,0,0,1,0,0v-4.76818A14.88686,14.88686,0,0,1,300.57258,635.67157Z" fill="#2f2e41"/><polygon points="397.784 640.297 381.597 640.297 373.897 577.863 397.786 577.864 397.784 640.297" fill="#a0616a"/><path d="M365.26694,635.67157h35.985a0,0,0,0,1,0,0v19.655a0,0,0,0,1,0,0H350.38008a0,0,0,0,1,0,0v-4.76818A14.88686,14.88686,0,0,1,365.26694,635.67157Z" fill="#2f2e41"/><polygon points="403.54 412.407 402.22 504.828 400.9 626.295 371.853 623.654 357.33 455.977 338.846 623.654 308.859 623.654 305.839 454.657 316.401 417.688 403.54 412.407" fill="#2f2e41"/><path d="M528.82027,564.99455l-4.425-.19151L544.949,451.57579l-8.41566-34.22331a7.48958,7.48958,0,0,1,4.6419-8.79869l15.14186-5.6777,5.34935-14.71141,42.20641,4.548L604.91075,404.21c4.57364,1.46685,42.23691,14.01,39.63821,28.30213-2.56488,14.10666-17.70915,58.48857-18.47822,60.73778l-2.65217,63.64914-.32624.16311c-.39269.19635-29.48413,14.50056-61.08849,14.49815C550.87438,571.55973,539.42684,569.78477,528.82027,564.99455Z" transform="translate(-215.31443 -146.74227)" fill="#3f3d56"/><circle cx="581.11565" cy="350.49552" r="30.38881" transform="translate(-220.48051 545.53717) rotate(-61.33681)" fill="#a0616a"/><path d="M605.73047,379.91276c-5.79138,6.16906-16.54677,2.85737-17.30139-5.57045a10.18165,10.18165,0,0,1,.01281-1.96632c.38963-3.73316,2.54637-7.12242,2.02975-11.06411a5.80213,5.80213,0,0,0-1.06186-2.71612c-4.615-6.17988-15.44834,2.7641-19.80382-2.83036-2.67068-3.43039.46868-8.83137-1.58076-12.66542-2.70493-5.06032-10.71679-2.56405-15.74108-5.33533-5.59013-3.08338-5.25578-11.66024-1.576-16.87713,4.48768-6.36221,12.356-9.75708,20.12633-10.24635s15.48707,1.61122,22.74136,4.4383c8.24232,3.21213,16.41577,7.65133,21.488,14.89884,6.16835,8.81374,6.762,20.663,3.67705,30.969C616.86429,367.21654,610.45975,374.87506,605.73047,379.91276Z" transform="translate(-215.31443 -146.74227)" fill="#2f2e41"/></svg>

After

(image error) Size: 3.6 KiB

File diff suppressed because one or more lines are too long

After

(image error) Size: 26 KiB

View file

@ -0,0 +1 @@
<svg xmlns="http://www.w3.org/2000/svg" data-name="Layer 1" width="649.67538" height="516.23162" viewBox="0 0 649.67538 516.23162" xmlns:xlink="http://www.w3.org/1999/xlink"><path d="M759.79588,701.91485c-8.99256-7.59865-14.45479-19.60227-13.02232-31.28789s10.30472-22.42829,21.81332-24.90978,24.62761,4.38768,28.12315,15.62987c1.92376-21.6745,4.14055-44.25714,15.66409-62.715,10.43429-16.71314,28.50667-28.672,48.09305-30.81147s40.20832,5.941,52.42363,21.40027,15.20618,37.93388,6.6509,55.68241c-6.30238,13.07474-17.91359,22.80511-30.07923,30.72128a194.12948,194.12948,0,0,1-132.77224,29.04621" transform="translate(-275.16231 -191.88419)" fill="#f2f2f2"/><path d="M893.52217,574.20948a317.62446,317.62446,0,0,0-44.26411,43.95415,318.55051,318.55051,0,0,0-49.85571,83.314c-.89774,2.19991,2.67454,3.15752,3.56229.98208a316.7584,316.7584,0,0,1,93.16976-125.638c1.8443-1.5018-.78314-4.10164-2.61223-2.61223Z" transform="translate(-275.16231 -191.88419)" fill="#fff"/><path d="M434,707.11581H383a6.50745,6.50745,0,0,1-6.5-6.5v-106a6.50745,6.50745,0,0,1,6.5-6.5h51a6.50745,6.50745,0,0,1,6.5,6.5v106A6.50745,6.50745,0,0,1,434,707.11581Z" transform="translate(-275.16231 -191.88419)" fill="#ff6e00"/><path d="M555.00008,708.11581h-51a7.50836,7.50836,0,0,1-7.5-7.5v-206a7.50836,7.50836,0,0,1,7.5-7.5h51a7.50836,7.50836,0,0,1,7.5,7.5v206A7.50836,7.50836,0,0,1,555.00008,708.11581Zm-51-219a5.50623,5.50623,0,0,0-5.5,5.5v206a5.50622,5.50622,0,0,0,5.5,5.5h51a5.50622,5.50622,0,0,0,5.5-5.5v-206a5.50622,5.50622,0,0,0-5.5-5.5Z" transform="translate(-275.16231 -191.88419)" fill="#3f3d56"/><path d="M676.00008,708.11581h-51a7.50836,7.50836,0,0,1-7.5-7.5v-337a7.50836,7.50836,0,0,1,7.5-7.5h51a7.50836,7.50836,0,0,1,7.5,7.5v337A7.50836,7.50836,0,0,1,676.00008,708.11581Zm-51-350a5.50623,5.50623,0,0,0-5.5,5.5v337a5.50622,5.50622,0,0,0,5.5,5.5h51a5.50622,5.50622,0,0,0,5.5-5.5v-337a5.50622,5.50622,0,0,0-5.5-5.5Z" transform="translate(-275.16231 -191.88419)" fill="#3f3d56"/><path d="M798.12948,707.61581h-51a6.50753,6.50753,0,0,1-6.5-6.5v-475a6.50753,6.50753,0,0,1,6.5-6.5h51a6.50753,6.50753,0,0,1,6.5,6.5v475A6.50753,6.50753,0,0,1,798.12948,707.61581Z" transform="translate(-275.16231 -191.88419)" fill="#ff6e00"/><path d="M480.94169,414.24247a10.05581,10.05581,0,0,0-10.48188-11.30867L452.6832,370.32469l-4,14,12.17889,29.88574a10.11027,10.11027,0,0,0,20.0796.032Z" transform="translate(-275.16231 -191.88419)" fill="#a0616a"/><polygon points="68.816 351.113 78.717 358.342 111.312 323.589 96.698 312.92 68.816 351.113" fill="#a0616a"/><path d="M335.82708,548.54689H374.3578a0,0,0,0,1,0,0v14.88687a0,0,0,0,1,0,0H350.71393a14.88686,14.88686,0,0,1-14.88686-14.88686v0A0,0,0,0,1,335.82708,548.54689Z" transform="translate(38.89227 1022.53744) rotate(-143.86855)" fill="#2f2e41"/><polygon points="121.201 389.377 133.461 389.376 139.293 342.088 121.199 342.089 121.201 389.377" fill="#a0616a"/><path d="M393.73673,577.75756h38.53073a0,0,0,0,1,0,0v14.88687a0,0,0,0,1,0,0H408.62359a14.88686,14.88686,0,0,1-14.88686-14.88686v0A0,0,0,0,1,393.73673,577.75756Z" transform="translate(550.8686 978.49895) rotate(179.99738)" fill="#2f2e41"/><path d="M433.1832,396.82469s6,58-9,98l-11,76h-19l2-90-7-80S403.1832,364.82469,433.1832,396.82469Z" transform="translate(-275.16231 -191.88419)" fill="#2f2e41"/><polygon points="93.021 208.94 113.021 277.94 74.021 339.94 93.521 356.44 138.021 286.94 125.021 201.94 93.021 208.94" fill="#2f2e41"/><circle cx="144.02483" cy="29.6531" r="24.56103" fill="#a0616a"/><path d="M398.6832,255.32469s15-10,32,12l4.5,138.5s-13-18-40-1-33-2-33-2S343.1832,259.82469,398.6832,255.32469Z" transform="translate(-275.16231 -191.88419)" fill="#ccc"/><path d="M429.47327,266.9755h0a17.50586,17.50586,0,0,1,16.53679,16.56026l3.1731,60.28892,21,57-12,10-39-68-7.98473-55.89313A17.50587,17.50587,0,0,1,429.47327,266.9755Z" transform="translate(-275.16231 -191.88419)" fill="#ccc"/><path d="M401.14009,239.96055c4.01526,4.27712,11.47215,1.98106,11.99535-3.86208a7.05905,7.05905,0,0,0-.00889-1.36328c-.27013-2.58827-1.76543-4.9381-1.40725-7.67094a4.02264,4.02264,0,0,1,.7362-1.88313c3.19965-4.28461,10.71059,1.9164,13.73032-1.96233,1.85163-2.37835-.32494-6.12294,1.096-8.78115,1.87537-3.5084,7.43013-1.7777,10.91355-3.69907,3.87574-2.13777,3.64392-8.08425,1.09265-11.7012-3.11139-4.411-8.56664-6.76475-13.95392-7.104s-10.73745,1.11709-15.767,3.07715c-5.71454,2.227-11.38133,5.3048-14.898,10.32961-4.27662,6.11072-4.68817,14.326-2.54936,21.47132C393.42083,231.15805,397.8612,236.46783,401.14009,239.96055Z" transform="translate(-275.16231 -191.88419)" fill="#2f2e41"/><path d="M923.647,707.69147H276.353a1.19069,1.19069,0,0,1,0-2.38137H923.647a1.19069,1.19069,0,0,1,0,2.38137Z" transform="translate(-275.16231 -191.88419)" fill="#3f3d56"/></svg>

After

(image error) Size: 4.6 KiB

File diff suppressed because one or more lines are too long

After

(image error) Size: 6.8 KiB

File diff suppressed because one or more lines are too long

After

(image error) Size: 7.8 KiB

File diff suppressed because one or more lines are too long

After

(image error) Size: 8.3 KiB

View file

Before

(image error) Size: 74 KiB

After

(image error) Size: 74 KiB

View file

@ -0,0 +1,842 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="176.56766mm"
height="174.6866mm"
viewBox="0 0 176.56766 174.6866"
version="1.1"
id="svg5"
inkscape:version="1.1.2 (0a00cf5339, 2022-02-04)"
sodipodi:docname="federated-inkscape.svg"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<sodipodi:namedview
id="namedview7"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:document-units="mm"
showgrid="false"
inkscape:zoom="0.79196829"
inkscape:cx="628.81305"
inkscape:cy="520.22285"
inkscape:window-width="2556"
inkscape:window-height="1391"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:current-layer="g61145">
<inkscape:grid
type="xygrid"
id="grid58243"
originx="-60.216167"
originy="-17.656703" />
</sodipodi:namedview>
<defs
id="defs2">
<marker
style="overflow:visible"
id="Arrow1Mend"
refX="0"
refY="0"
orient="auto"
inkscape:stockid="Arrow1Mend"
inkscape:isstock="true">
<path
transform="matrix(-0.4,0,0,-0.4,-4,0)"
style="fill:context-stroke;fill-rule:evenodd;stroke:context-stroke;stroke-width:1pt"
d="M 0,0 5,-5 -12.5,0 5,5 Z"
id="path36654" />
</marker>
<marker
style="overflow:visible"
id="Arrow1Mstart"
refX="0"
refY="0"
orient="auto"
inkscape:stockid="Arrow1Mstart"
inkscape:isstock="true">
<path
transform="matrix(0.4,0,0,0.4,4,0)"
style="fill:context-stroke;fill-rule:evenodd;stroke:context-stroke;stroke-width:1pt"
d="M 0,0 5,-5 -12.5,0 5,5 Z"
id="path36651" />
</marker>
<marker
style="overflow:visible"
id="Arrow1Lend"
refX="0"
refY="0"
orient="auto"
inkscape:stockid="Arrow1Lend"
inkscape:isstock="true">
<path
transform="matrix(-0.8,0,0,-0.8,-10,0)"
style="fill:context-stroke;fill-rule:evenodd;stroke:context-stroke;stroke-width:1pt"
d="M 0,0 5,-5 -12.5,0 5,5 Z"
id="path36648" />
</marker>
<marker
style="overflow:visible"
id="marker37471"
refX="0"
refY="0"
orient="auto"
inkscape:stockid="Tail"
inkscape:isstock="true">
<g
transform="scale(-1.2)"
id="g37469">
<path
style="fill:none;fill-rule:evenodd;stroke:context-stroke;stroke-width:0.8;stroke-linecap:round"
d="M -3.8048674,-3.9585227 0.54352094,0"
id="path37457" />
<path
style="fill:none;fill-rule:evenodd;stroke:context-stroke;stroke-width:0.8;stroke-linecap:round"
d="M -1.2866832,-3.9585227 3.0617053,0"
id="path37459" />
<path
style="fill:none;fill-rule:evenodd;stroke:context-stroke;stroke-width:0.8;stroke-linecap:round"
d="M 1.3053582,-3.9585227 5.6537466,0"
id="path37461" />
<path
style="fill:none;fill-rule:evenodd;stroke:context-stroke;stroke-width:0.8;stroke-linecap:round"
d="M -3.8048674,4.1775838 0.54352094,0.21974226"
id="path37463" />
<path
style="fill:none;fill-rule:evenodd;stroke:context-stroke;stroke-width:0.8;stroke-linecap:round"
d="M -1.2866832,4.1775838 3.0617053,0.21974226"
id="path37465" />
<path
style="fill:none;fill-rule:evenodd;stroke:context-stroke;stroke-width:0.8;stroke-linecap:round"
d="M 1.3053582,4.1775838 5.6537466,0.21974226"
id="path37467" />
</g>
</marker>
<marker
style="overflow:visible"
id="Arrow1Lstart"
refX="0"
refY="0"
orient="auto"
inkscape:stockid="Arrow1Lstart"
inkscape:isstock="true">
<path
transform="matrix(0.8,0,0,0.8,10,0)"
style="fill:context-stroke;fill-rule:evenodd;stroke:context-stroke;stroke-width:1pt"
d="M 0,0 5,-5 -12.5,0 5,5 Z"
id="path36645" />
</marker>
<marker
style="overflow:visible"
id="Tail"
refX="0"
refY="0"
orient="auto"
inkscape:stockid="Tail"
inkscape:isstock="true">
<g
transform="scale(-1.2)"
id="g36693">
<path
style="fill:none;fill-rule:evenodd;stroke:context-stroke;stroke-width:0.8;stroke-linecap:round"
d="M -3.8048674,-3.9585227 0.54352094,0"
id="path36681" />
<path
style="fill:none;fill-rule:evenodd;stroke:context-stroke;stroke-width:0.8;stroke-linecap:round"
d="M -1.2866832,-3.9585227 3.0617053,0"
id="path36683" />
<path
style="fill:none;fill-rule:evenodd;stroke:context-stroke;stroke-width:0.8;stroke-linecap:round"
d="M 1.3053582,-3.9585227 5.6537466,0"
id="path36685" />
<path
style="fill:none;fill-rule:evenodd;stroke:context-stroke;stroke-width:0.8;stroke-linecap:round"
d="M -3.8048674,4.1775838 0.54352094,0.21974226"
id="path36687" />
<path
style="fill:none;fill-rule:evenodd;stroke:context-stroke;stroke-width:0.8;stroke-linecap:round"
d="M -1.2866832,4.1775838 3.0617053,0.21974226"
id="path36689" />
<path
style="fill:none;fill-rule:evenodd;stroke:context-stroke;stroke-width:0.8;stroke-linecap:round"
d="M 1.3053582,4.1775838 5.6537466,0.21974226"
id="path36691" />
</g>
</marker>
<inkscape:perspective
sodipodi:type="inkscape:persp3d"
inkscape:vp_x="0 : 243.373 : 1"
inkscape:vp_y="0 : 1000 : 0"
inkscape:vp_z="840.54822 : 243.373 : 1"
inkscape:persp3d-origin="420.27411 : 121.47753 : 1"
id="perspective71" />
<clipPath
clipPathUnits="userSpaceOnUse"
id="clipPath36447">
<g
inkscape:label="Clip"
id="use36449">
<path
style="fill:#ff6e00;fill-opacity:1;stroke:none;stroke-width:4.70399;stop-color:#000000"
id="path58906"
sodipodi:type="arc"
sodipodi:cx="98.605453"
sodipodi:cy="129.24454"
sodipodi:rx="14.370799"
sodipodi:ry="14.370799"
sodipodi:start="0.52359878"
sodipodi:end="0.50870414"
sodipodi:open="true"
sodipodi:arc-type="arc"
d="m 111.05093,136.42994 a 14.370799,14.370799 0 0 1 -19.584484,5.28674 14.370799,14.370799 0 0 1 -5.359636,-19.56466 14.370799,14.370799 0 0 1 19.54457,-5.43245 14.370799,14.370799 0 0 1 5.50519,19.52421" />
<text
xml:space="preserve"
style="font-size:3.175px;line-height:1.25;font-family:Manrope;-inkscape-font-specification:Manrope;fill:#222222;fill-opacity:1;stroke-width:0.264583"
x="87.123085"
y="130.00655"
id="text58910"><tspan
sodipodi:role="line"
id="tspan58908"
style="font-size:3.175px;fill:#222222;fill-opacity:1;stroke-width:0.264583"
x="87.123085"
y="130.00655">my.peertube.eu</tspan></text>
</g>
</clipPath>
<clipPath
clipPathUnits="userSpaceOnUse"
id="clipPath36458">
<g
inkscape:label="Clip"
id="use36460">
<path
style="fill:#ff6e00;fill-opacity:1;stroke:none;stroke-width:4.70399;stop-color:#000000"
id="path58914"
sodipodi:type="arc"
sodipodi:cx="41.126167"
sodipodi:cy="119.63312"
sodipodi:rx="14.370799"
sodipodi:ry="14.370799"
sodipodi:start="0.52359878"
sodipodi:end="0.50870414"
sodipodi:open="true"
sodipodi:arc-type="arc"
d="m 53.571644,126.81852 a 14.370799,14.370799 0 0 1 -19.584484,5.28674 14.370799,14.370799 0 0 1 -5.359636,-19.56466 14.370799,14.370799 0 0 1 19.544569,-5.43245 14.370799,14.370799 0 0 1 5.505191,19.52421" />
<text
xml:space="preserve"
style="font-size:3.175px;line-height:1.25;font-family:Manrope;-inkscape-font-specification:Manrope;stroke-width:0.264583"
x="29.643806"
y="120.39513"
id="text58918"><tspan
sodipodi:role="line"
id="tspan58916"
style="font-size:3.175px;fill:#222222;fill-opacity:1;stroke-width:0.264583"
x="29.643806"
y="120.39513">my.pixelfed.eu</tspan></text>
</g>
</clipPath>
</defs>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(-60.216167,-17.656702)">
<g
id="g61145"
transform="translate(4.4240417,2.0728321)">
<path
style="fill:#2541b2;fill-opacity:1;stroke:none;stroke-width:11.1625;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;stop-color:#000000"
id="path59396"
sodipodi:type="arc"
sodipodi:cx="93.037262"
sodipodi:cy="153.02533"
sodipodi:rx="37.245136"
sodipodi:ry="37.245136"
sodipodi:start="0.52359878"
sodipodi:end="0.50870414"
sodipodi:open="true"
sodipodi:arc-type="arc"
d="m 125.2925,171.6479 a 37.245136,37.245136 0 0 1 -50.75757,13.70178 37.245136,37.245136 0 0 1 -13.890695,-50.70619 37.245136,37.245136 0 0 1 50.654115,-14.07941 37.245136,37.245136 0 0 1 14.26793,50.60134" />
<path
style="fill:#ff6e00;fill-opacity:1;stroke:none;stroke-width:9.15155;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;stop-color:#000000"
id="path58590-9-1"
sodipodi:type="arc"
sodipodi:cx="69.10688"
sodipodi:cy="166.76422"
sodipodi:rx="6.1949"
sodipodi:ry="6.1949"
sodipodi:start="0.52359878"
sodipodi:end="0.50870414"
sodipodi:open="true"
sodipodi:arc-type="arc"
d="m 74.471821,169.86167 a 6.1949,6.1949 0 0 1 -8.442392,2.27899 6.1949,6.1949 0 0 1 -2.310408,-8.43385 6.1949,6.1949 0 0 1 8.425186,-2.3418 6.1949,6.1949 0 0 1 2.373153,8.41641" />
<path
style="fill:none;fill-rule:evenodd;stroke:#ff6e00;stroke-width:0.75;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.5, 3;stroke-dashoffset:0;stroke-opacity:1"
d="M 110.77281,166.76422 H 75.301665"
id="path58820"
inkscape:connector-type="polyline"
inkscape:connector-curvature="0"
inkscape:connection-start="#path58590-9"
inkscape:connection-end="#path58590-9-1" />
<path
style="fill:none;fill-rule:evenodd;stroke:#ff6e00;stroke-width:0.75;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.5, 3;stroke-dashoffset:0;stroke-opacity:1"
d="m 89.646977,134.87837 -17.185324,26.678"
id="path58822"
inkscape:connector-type="polyline"
inkscape:connector-curvature="0"
inkscape:connection-start="#path58590"
inkscape:connection-end="#path58590-9-1" />
<path
style="fill:none;fill-rule:evenodd;stroke:#ff6e00;stroke-width:0.75;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.5, 3;stroke-dashoffset:0;stroke-opacity:1"
d="m 96.36351,134.87382 17.24234,26.68714"
id="path58824"
inkscape:connector-type="polyline"
inkscape:connector-curvature="0"
inkscape:connection-start="#path58590"
inkscape:connection-end="#path58590-9" />
<path
style="fill:#2541b2;fill-opacity:1;stroke:none;stroke-width:11.1625;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;stop-color:#000000"
id="path59396-7"
sodipodi:type="arc"
sodipodi:cx="195.11465"
sodipodi:cy="152.98441"
sodipodi:rx="37.245136"
sodipodi:ry="37.245136"
sodipodi:start="0.52359878"
sodipodi:end="0.50870414"
sodipodi:open="true"
sodipodi:arc-type="arc"
d="m 227.36989,171.60697 a 37.245136,37.245136 0 0 1 -50.75757,13.70179 37.245136,37.245136 0 0 1 -13.89069,-50.70619 37.245136,37.245136 0 0 1 50.65412,-14.07941 37.245136,37.245136 0 0 1 14.26793,50.60134" />
<path
style="fill:#ff6e00;fill-opacity:1;stroke:none;stroke-width:9.15155;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;stop-color:#000000"
id="path58590-9-6"
sodipodi:type="arc"
sodipodi:cx="219.04503"
sodipodi:cy="166.72331"
sodipodi:rx="6.1949"
sodipodi:ry="6.1949"
sodipodi:start="0.52359878"
sodipodi:end="0.50870414"
sodipodi:open="true"
sodipodi:arc-type="arc"
d="m 224.40997,169.82076 a 6.1949,6.1949 0 0 1 -8.44239,2.27899 6.1949,6.1949 0 0 1 -2.31041,-8.43385 6.1949,6.1949 0 0 1 8.42519,-2.34179 6.1949,6.1949 0 0 1 2.37315,8.4164" />
<path
style="fill:none;fill-rule:evenodd;stroke:#ff6e00;stroke-width:0.75;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.5, 3;stroke-dashoffset:0;stroke-opacity:1"
d="M 212.85019,166.72331 H 177.37905"
id="path58820-6"
inkscape:connector-type="polyline"
inkscape:connector-curvature="0"
inkscape:connection-start="#path58590-9-6"
inkscape:connection-end="#path58590-9-1-0" />
<path
style="fill:none;fill-rule:evenodd;stroke:#ff6e00;stroke-width:0.75;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.5, 3;stroke-dashoffset:0;stroke-opacity:1"
d="m 191.72437,134.83745 -17.18533,26.67801"
id="path58822-2"
inkscape:connector-type="polyline"
inkscape:connector-curvature="0"
inkscape:connection-start="#path58590-93"
inkscape:connection-end="#path58590-9-1-0" />
<path
style="fill:none;fill-rule:evenodd;stroke:#ff6e00;stroke-width:0.75;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.5, 3;stroke-dashoffset:0;stroke-opacity:1"
d="m 198.4409,134.8329 17.24234,26.68715"
id="path58824-6"
inkscape:connector-type="polyline"
inkscape:connector-curvature="0"
inkscape:connection-start="#path58590-93"
inkscape:connection-end="#path58590-9-6" />
<path
style="opacity:1;fill:#2541b2;fill-opacity:1;stroke:none;stroke-width:11.1625;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;stop-color:#000000"
id="path59396-8"
sodipodi:type="arc"
sodipodi:cx="144.07596"
sodipodi:cy="52.829006"
sodipodi:rx="37.245136"
sodipodi:ry="37.245136"
sodipodi:start="0.52359878"
sodipodi:end="0.50870414"
sodipodi:open="true"
sodipodi:arc-type="arc"
d="m 176.33119,71.451574 a 37.245136,37.245136 0 0 1 -50.75756,13.701787 37.245136,37.245136 0 0 1 -13.8907,-50.706194 37.245136,37.245136 0 0 1 50.65412,-14.07941 37.245136,37.245136 0 0 1 14.26793,50.601339" />
<path
style="fill:#ff6e00;fill-opacity:1;stroke:none;stroke-width:9.15155;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;stop-color:#000000"
id="path58590-92"
sodipodi:type="arc"
sodipodi:cx="144.04042"
sodipodi:cy="29.474239"
sodipodi:rx="6.1949"
sodipodi:ry="6.1949"
sodipodi:start="0.52359878"
sodipodi:end="0.50870414"
sodipodi:open="true"
sodipodi:arc-type="arc"
d="m 149.40536,32.571689 a 6.1949,6.1949 0 0 1 -8.44239,2.278988 6.1949,6.1949 0 0 1 -2.31041,-8.433848 6.1949,6.1949 0 0 1 8.42519,-2.341797 6.1949,6.1949 0 0 1 2.37315,8.416408" />
<path
style="fill:none;fill-rule:evenodd;stroke:#ff6e00;stroke-width:0.75;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.5, 3;stroke-dashoffset:0;stroke-opacity:1"
d="M 161.81149,66.567909 H 126.34036"
id="path58820-3"
inkscape:connector-type="polyline"
inkscape:connector-curvature="0"
inkscape:connection-start="#path58590-9-0"
inkscape:connection-end="#path58590-9-1-2" />
<path
style="fill:none;fill-rule:evenodd;stroke:#ff6e00;stroke-width:0.75;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.5, 3;stroke-dashoffset:0;stroke-opacity:1"
d="M 140.68567,34.682051 123.50035,61.360058"
id="path58822-7"
inkscape:connector-type="polyline"
inkscape:connector-curvature="0"
inkscape:connection-start="#path58590-92"
inkscape:connection-end="#path58590-9-1-2" />
<path
style="fill:none;fill-rule:evenodd;stroke:#ff6e00;stroke-width:0.75;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.5, 3;stroke-dashoffset:0;stroke-opacity:1"
d="m 147.40221,34.677502 17.24233,26.68714"
id="path58824-5"
inkscape:connector-type="polyline"
inkscape:connector-curvature="0"
inkscape:connection-start="#path58590-92"
inkscape:connection-end="#path58590-9-0" />
<path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="M 95.44958,123.97991 117.69772,72.258569"
id="path60835"
inkscape:connector-type="polyline"
inkscape:connector-curvature="0"
inkscape:connection-start="#path58590"
inkscape:connection-end="#path58590-9-1-2" />
<path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="M 97.742036,125.68246 163.26602,70.556018"
id="path60837"
inkscape:connector-type="polyline"
inkscape:connector-curvature="0"
inkscape:connection-start="#path58590"
inkscape:connection-end="#path58590-9-0" />
<path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="M 95.813494,124.15065 141.22861,34.994238"
id="path60839"
inkscape:connector-type="polyline"
inkscape:connector-curvature="0"
inkscape:connection-start="#path58590"
inkscape:connection-end="#path58590-92" />
<path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="M 192.6353,123.93715 170.45011,72.260302"
id="path60841"
inkscape:connector-type="polyline"
inkscape:connector-curvature="0"
inkscape:connection-start="#path58590-93"
inkscape:connection-end="#path58590-9-0" />
<path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="M 192.26643,124.11019 146.85314,34.993764"
id="path60843"
inkscape:connector-type="polyline"
inkscape:connector-curvature="0"
inkscape:connection-start="#path58590-93"
inkscape:connection-end="#path58590-92" />
<path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="M 190.33932,125.64078 124.88529,70.556708"
id="path60845"
inkscape:connector-type="polyline"
inkscape:connector-curvature="0"
inkscape:connection-start="#path58590-93"
inkscape:connection-end="#path58590-9-1-2" />
<path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="M 71.91865,161.24431 117.33376,72.087907"
id="path60847"
inkscape:connector-type="polyline"
inkscape:connector-curvature="0"
inkscape:connection-start="#path58590-9-1"
inkscape:connection-end="#path58590-9-1-2" />
<path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="M 72.074779,161.32656 141.07256,34.911822"
id="path60849"
inkscape:connector-type="polyline"
inkscape:connector-curvature="0"
inkscape:connection-start="#path58590-9-1"
inkscape:connection-end="#path58590-92" />
<path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="M 73.458652,162.35539 163.65455,70.976761"
id="path60851"
inkscape:connector-type="polyline"
inkscape:connector-curvature="0"
inkscape:connection-start="#path58590-9-1"
inkscape:connection-end="#path58590-9-0" />
<path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 117.16403,160.57253 2.78516,-87.812885"
id="path60853"
inkscape:connector-type="polyline"
inkscape:connector-curvature="0"
inkscape:connection-start="#path58590-9"
inkscape:connection-end="#path58590-9-1-2" />
<path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="M 119.77941,161.24431 165.19452,72.087907"
id="path60855"
inkscape:connector-type="polyline"
inkscape:connector-curvature="0"
inkscape:connection-start="#path58590-9"
inkscape:connection-end="#path58590-9-0" />
<path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="M 118.16616,160.68639 142.84193,35.551984"
id="path60857"
inkscape:connector-type="polyline"
inkscape:connector-curvature="0"
inkscape:connection-start="#path58590-9"
inkscape:connection-end="#path58590-92" />
<path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 170.9878,160.53164 -2.785,-87.771971"
id="path60859"
inkscape:connector-type="polyline"
inkscape:connector-curvature="0"
inkscape:connection-start="#path58590-9-1-0"
inkscape:connection-end="#path58590-9-0" />
<path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="M 168.37158,161.20387 122.9583,72.087434"
id="path60861"
inkscape:connector-type="polyline"
inkscape:connector-curvature="0"
inkscape:connection-start="#path58590-9-1-0"
inkscape:connection-end="#path58590-9-1-2" />
<path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="M 169.98239,160.64619 145.24229,35.55132"
id="path60863"
inkscape:connector-type="polyline"
inkscape:connector-curvature="0"
inkscape:connection-start="#path58590-9-1-0"
inkscape:connection-end="#path58590-92" />
<path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="M 216.23235,161.20387 170.81905,72.087434"
id="path60865"
inkscape:connector-type="polyline"
inkscape:connector-curvature="0"
inkscape:connection-start="#path58590-9-6"
inkscape:connection-end="#path58590-9-0" />
<path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="M 214.69238,162.31539 124.49828,70.975886"
id="path60867"
inkscape:connector-type="polyline"
inkscape:connector-curvature="0"
inkscape:connection-start="#path58590-9-6"
inkscape:connection-end="#path58590-9-1-2" />
<path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="M 216.07432,161.28728 147.01113,34.910269"
id="path60869"
inkscape:connector-type="polyline"
inkscape:connector-curvature="0"
inkscape:connection-start="#path58590-9-6"
inkscape:connection-end="#path58590-92" />
<path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 99.196511,129.66808 89.687779,-0.036"
id="path60871"
inkscape:connector-type="polyline"
inkscape:connector-curvature="0"
inkscape:connection-start="#path58590"
inkscape:connection-end="#path58590-93" />
<path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 98.599665,132.32357 66.986565,31.74669"
id="path60873"
inkscape:connector-type="polyline"
inkscape:connector-curvature="0"
inkscape:connection-start="#path58590"
inkscape:connection-end="#path58590-9-1-0" />
<path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="M 98.945067,131.41772 213.10168,164.97616"
id="path60875"
inkscape:connector-type="polyline"
inkscape:connector-curvature="0"
inkscape:connection-start="#path58590"
inkscape:connection-end="#path58590-9-6" />
<path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 123.16243,166.75955 41.82702,-0.0316"
id="path60877"
inkscape:connector-type="polyline"
inkscape:connector-curvature="0"
inkscape:connection-start="#path58590-9"
inkscape:connection-end="#path58590-9-1-0" />
<path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="M 122.56241,164.10444 189.48438,132.2894"
id="path60879"
inkscape:connector-type="polyline"
inkscape:connector-curvature="0"
inkscape:connection-start="#path58590-9"
inkscape:connection-end="#path58590-93" />
<path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 123.16243,166.76174 89.68777,-0.0359"
id="path60881"
inkscape:connector-type="polyline"
inkscape:connector-curvature="0"
inkscape:connection-start="#path58590-9"
inkscape:connection-end="#path58590-9-6" />
<path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 75.301667,166.76174 89.687773,-0.0359"
id="path60883"
inkscape:connector-type="polyline"
inkscape:connector-curvature="0"
inkscape:connection-start="#path58590-9-1"
inkscape:connection-end="#path58590-9-1-0" />
<path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="M 75.301666,166.76253 212.8502,166.725"
id="path60885"
inkscape:connector-type="polyline"
inkscape:connector-curvature="0"
inkscape:connection-start="#path58590-9-1"
inkscape:connection-end="#path58590-9-6" />
<path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="M 75.048966,165.01259 189.13713,131.38124"
id="path60887"
inkscape:connector-type="polyline"
inkscape:connector-curvature="0"
inkscape:connection-start="#path58590-9-1"
inkscape:connection-end="#path58590-93" />
<path
style="fill:#ff6e00;fill-opacity:1;stroke:none;stroke-width:9.15155;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;stop-color:#000000"
id="path58590-9-0"
sodipodi:type="arc"
sodipodi:cx="168.00633"
sodipodi:cy="66.567909"
sodipodi:rx="6.1949"
sodipodi:ry="6.1949"
sodipodi:start="0.52359878"
sodipodi:end="0.50870414"
sodipodi:open="true"
sodipodi:arc-type="arc"
d="m 173.37127,69.665359 a 6.1949,6.1949 0 0 1 -8.44239,2.278988 6.1949,6.1949 0 0 1 -2.31041,-8.433848 6.1949,6.1949 0 0 1 8.42519,-2.341797 6.1949,6.1949 0 0 1 2.37315,8.416408" />
<path
style="fill:#ff6e00;fill-opacity:1;stroke:none;stroke-width:9.15155;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;stop-color:#000000"
id="path58590-9-1-2"
sodipodi:type="arc"
sodipodi:cx="120.14558"
sodipodi:cy="66.567909"
sodipodi:rx="6.1949"
sodipodi:ry="6.1949"
sodipodi:start="0.52359878"
sodipodi:end="0.50870414"
sodipodi:open="true"
sodipodi:arc-type="arc"
d="m 125.51052,69.665359 a 6.1949,6.1949 0 0 1 -8.44239,2.278988 6.1949,6.1949 0 0 1 -2.31041,-8.433848 6.1949,6.1949 0 0 1 8.42518,-2.341797 6.1949,6.1949 0 0 1 2.37316,8.416408" />
<path
style="fill:#ff6e00;fill-opacity:1;stroke:none;stroke-width:9.15155;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;stop-color:#000000"
id="path58590-93"
sodipodi:type="arc"
sodipodi:cx="195.07912"
sodipodi:cy="129.62964"
sodipodi:rx="6.1949"
sodipodi:ry="6.1949"
sodipodi:start="0.52359878"
sodipodi:end="0.50870414"
sodipodi:open="true"
sodipodi:arc-type="arc"
d="m 200.44406,132.72709 a 6.1949,6.1949 0 0 1 -8.44239,2.27899 6.1949,6.1949 0 0 1 -2.31041,-8.43385 6.1949,6.1949 0 0 1 8.42518,-2.3418 6.1949,6.1949 0 0 1 2.37316,8.41641" />
<path
style="fill:#ff6e00;fill-opacity:1;stroke:none;stroke-width:9.15155;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;stop-color:#000000"
id="path58590-9-1-0"
sodipodi:type="arc"
sodipodi:cx="171.18427"
sodipodi:cy="166.72331"
sodipodi:rx="6.1949"
sodipodi:ry="6.1949"
sodipodi:start="0.52359878"
sodipodi:end="0.50870414"
sodipodi:open="true"
sodipodi:arc-type="arc"
d="m 176.54921,169.82076 a 6.1949,6.1949 0 0 1 -8.4424,2.27899 6.1949,6.1949 0 0 1 -2.3104,-8.43385 6.1949,6.1949 0 0 1 8.42518,-2.34179 6.1949,6.1949 0 0 1 2.37315,8.4164" />
<path
style="fill:#ff6e00;fill-opacity:1;stroke:none;stroke-width:9.15155;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;stop-color:#000000"
id="path58590-9"
sodipodi:type="arc"
sodipodi:cx="116.96764"
sodipodi:cy="166.76422"
sodipodi:rx="6.1949"
sodipodi:ry="6.1949"
sodipodi:start="0.52359878"
sodipodi:end="0.50870414"
sodipodi:open="true"
sodipodi:arc-type="arc"
d="m 122.33258,169.86167 a 6.1949,6.1949 0 0 1 -8.44239,2.27899 6.1949,6.1949 0 0 1 -2.31041,-8.43385 6.1949,6.1949 0 0 1 8.42519,-2.3418 6.1949,6.1949 0 0 1 2.37315,8.41641" />
<path
style="fill:#ff6e00;fill-opacity:1;stroke:none;stroke-width:9.15155;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;stop-color:#000000"
id="path58590"
sodipodi:type="arc"
sodipodi:cx="93.001724"
sodipodi:cy="129.67056"
sodipodi:rx="6.1949"
sodipodi:ry="6.1949"
sodipodi:start="0.52359878"
sodipodi:end="0.50870414"
sodipodi:open="true"
sodipodi:arc-type="arc"
d="m 98.366665,132.76801 a 6.1949,6.1949 0 0 1 -8.442392,2.27899 6.1949,6.1949 0 0 1 -2.310408,-8.43385 6.1949,6.1949 0 0 1 8.425186,-2.34179 6.1949,6.1949 0 0 1 2.373153,8.4164" />
<text
xml:space="preserve"
style="font-size:5.82083px;line-height:1.25;font-family:Manrope;-inkscape-font-specification:Manrope;stroke-width:0.264583"
x="141.18677"
y="31.569738"
id="text75117"><tspan
sodipodi:role="line"
id="tspan75115"
style="font-style:normal;font-variant:normal;font-weight:600;font-stretch:normal;font-size:5.82083px;font-family:Manrope;-inkscape-font-specification:'Manrope Semi-Bold';fill:#222222;fill-opacity:1;stroke-width:0.264583"
x="141.18677"
y="31.569738">A1</tspan></text>
<text
xml:space="preserve"
style="font-size:5.82083px;line-height:1.25;font-family:Manrope;-inkscape-font-specification:Manrope;stroke-width:0.264583"
x="117.2439"
y="68.663406"
id="text75117-9"><tspan
sodipodi:role="line"
id="tspan75115-2"
style="font-style:normal;font-variant:normal;font-weight:600;font-stretch:normal;font-size:5.82083px;font-family:Manrope;-inkscape-font-specification:'Manrope Semi-Bold';fill:#222222;fill-opacity:1;stroke-width:0.264583"
x="117.2439"
y="68.663406">B1</tspan></text>
<text
xml:space="preserve"
style="font-size:5.82083px;line-height:1.25;font-family:Manrope;-inkscape-font-specification:Manrope;stroke-width:0.264583"
x="164.91402"
y="68.663406"
id="text75117-2"><tspan
sodipodi:role="line"
id="tspan75115-8"
style="font-style:normal;font-variant:normal;font-weight:600;font-stretch:normal;font-size:5.82083px;font-family:Manrope;-inkscape-font-specification:'Manrope Semi-Bold';fill:#222222;fill-opacity:1;stroke-width:0.264583"
x="164.91402"
y="68.663406">C1</tspan></text>
<text
xml:space="preserve"
style="font-size:5.82083px;line-height:1.25;font-family:Manrope;-inkscape-font-specification:Manrope;stroke-width:0.264583"
x="215.34152"
y="168.81882"
id="text75117-2-3"><tspan
sodipodi:role="line"
id="tspan75115-8-1"
style="font-style:normal;font-variant:normal;font-weight:600;font-stretch:normal;font-size:5.82083px;font-family:Manrope;-inkscape-font-specification:'Manrope Semi-Bold';fill:#222222;fill-opacity:1;stroke-width:0.264583"
x="215.34152"
y="168.81882">C3</tspan></text>
<text
xml:space="preserve"
style="font-size:5.82083px;line-height:1.25;font-family:Manrope;-inkscape-font-specification:Manrope;stroke-width:0.264583"
x="89.464119"
y="131.80972"
id="text75117-97"><tspan
sodipodi:role="line"
id="tspan75115-3"
style="font-style:normal;font-variant:normal;font-weight:600;font-stretch:normal;font-size:5.82083px;font-family:Manrope;-inkscape-font-specification:'Manrope Semi-Bold';fill:#222222;fill-opacity:1;stroke-width:0.264583"
x="89.464119"
y="131.80972">A2</tspan></text>
<text
xml:space="preserve"
style="font-size:5.82083px;line-height:1.25;font-family:Manrope;-inkscape-font-specification:Manrope;stroke-width:0.264583"
x="65.521255"
y="168.90338"
id="text75117-9-6"><tspan
sodipodi:role="line"
id="tspan75115-2-1"
style="font-style:normal;font-variant:normal;font-weight:600;font-stretch:normal;font-size:5.82083px;font-family:Manrope;-inkscape-font-specification:'Manrope Semi-Bold';fill:#222222;fill-opacity:1;stroke-width:0.264583"
x="65.521255"
y="168.90338">B2</tspan></text>
<text
xml:space="preserve"
style="font-size:5.82083px;line-height:1.25;font-family:Manrope;-inkscape-font-specification:Manrope;stroke-width:0.264583"
x="113.19138"
y="168.85973"
id="text75117-2-2"><tspan
sodipodi:role="line"
id="tspan75115-8-9"
style="font-style:normal;font-variant:normal;font-weight:600;font-stretch:normal;font-size:5.82083px;font-family:Manrope;-inkscape-font-specification:'Manrope Semi-Bold';fill:#222222;fill-opacity:1;stroke-width:0.264583"
x="113.19138"
y="168.85973">C2</tspan></text>
<text
xml:space="preserve"
style="font-size:5.82083px;line-height:1.25;font-family:Manrope;-inkscape-font-specification:Manrope;stroke-width:0.264583"
x="167.6714"
y="168.77953"
id="text75117-9-7"><tspan
sodipodi:role="line"
id="tspan75115-2-8"
style="font-style:normal;font-variant:normal;font-weight:600;font-stretch:normal;font-size:5.82083px;font-family:Manrope;-inkscape-font-specification:'Manrope Semi-Bold';fill:#222222;fill-opacity:1;stroke-width:0.264583"
x="167.6714"
y="168.77953">B3</tspan></text>
<text
xml:space="preserve"
style="font-size:5.82083px;line-height:1.25;font-family:Manrope;-inkscape-font-specification:Manrope;stroke-width:0.264583"
x="191.61427"
y="131.68585"
id="text75117-4"><tspan
sodipodi:role="line"
id="tspan75115-5"
style="font-style:normal;font-variant:normal;font-weight:600;font-stretch:normal;font-size:5.82083px;font-family:Manrope;-inkscape-font-specification:'Manrope Semi-Bold';fill:#222222;fill-opacity:1;stroke-width:0.264583"
x="191.61427"
y="131.68585">A3</tspan></text>
<text
xml:space="preserve"
style="font-size:4.23333px;line-height:1.25;font-family:Manrope;-inkscape-font-specification:Manrope;stroke-width:0.264583"
x="129.53557"
y="21.968952"
id="text151203"><tspan
sodipodi:role="line"
id="tspan151201"
style="font-style:normal;font-variant:normal;font-weight:600;font-stretch:normal;font-size:4.23333px;font-family:Manrope;-inkscape-font-specification:'Manrope Semi-Bold';fill:#efedef;fill-opacity:1;stroke-width:0.264583"
x="129.53557"
y="21.968952">My Fediversity</tspan></text>
<text
xml:space="preserve"
style="font-size:4.23333px;line-height:1.25;font-family:Manrope;-inkscape-font-specification:Manrope;stroke-width:0.264583"
x="179.18785"
y="185.09686"
id="text151203-0"><tspan
sodipodi:role="line"
id="tspan151201-3"
style="font-style:normal;font-variant:normal;font-weight:600;font-stretch:normal;font-size:4.23333px;font-family:Manrope;-inkscape-font-specification:'Manrope Semi-Bold';fill:#efedef;fill-opacity:1;stroke-width:0.264583"
x="179.18785"
y="185.09686">Your Fediversity</tspan></text>
<text
xml:space="preserve"
style="font-size:4.23333px;line-height:1.25;font-family:Manrope;-inkscape-font-specification:Manrope;stroke-width:0.264583"
x="76.365395"
y="185.09686"
id="text151203-0-6"><tspan
sodipodi:role="line"
id="tspan151201-3-1"
style="font-style:normal;font-variant:normal;font-weight:600;font-stretch:normal;font-size:4.23333px;font-family:Manrope;-inkscape-font-specification:'Manrope Semi-Bold';fill:#efedef;fill-opacity:1;stroke-width:0.264583"
x="76.365395"
y="185.09686">Their Fediversity</tspan></text>
<text
xml:space="preserve"
style="font-size:10.5833px;line-height:1.25;font-family:Manrope;-inkscape-font-specification:Manrope;stroke-width:0.264583"
x="240.13141"
y="47.2188"
id="text171688"><tspan
sodipodi:role="line"
id="tspan171686"
style="stroke-width:0.264583"
x="240.13141"
y="47.2188" /></text>
</g>
</g>
</svg>

After

(image error) Size: 40 KiB

View file

@ -0,0 +1,505 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="176.56766mm"
height="174.6866mm"
viewBox="0 0 176.56766 174.6866"
version="1.1"
id="svg5"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<defs
id="defs2">
<marker
style="overflow:visible"
id="Arrow1Mend"
refX="0"
refY="0"
orient="auto">
<path
transform="matrix(-0.4,0,0,-0.4,-4,0)"
style="fill:context-stroke;fill-rule:evenodd;stroke:context-stroke;stroke-width:1pt"
d="M 0,0 5,-5 -12.5,0 5,5 Z"
id="path36654" />
</marker>
<marker
style="overflow:visible"
id="Arrow1Mstart"
refX="0"
refY="0"
orient="auto">
<path
transform="matrix(0.4,0,0,0.4,4,0)"
style="fill:context-stroke;fill-rule:evenodd;stroke:context-stroke;stroke-width:1pt"
d="M 0,0 5,-5 -12.5,0 5,5 Z"
id="path36651" />
</marker>
<marker
style="overflow:visible"
id="Arrow1Lend"
refX="0"
refY="0"
orient="auto">
<path
transform="matrix(-0.8,0,0,-0.8,-10,0)"
style="fill:context-stroke;fill-rule:evenodd;stroke:context-stroke;stroke-width:1pt"
d="M 0,0 5,-5 -12.5,0 5,5 Z"
id="path36648" />
</marker>
<marker
style="overflow:visible"
id="marker37471"
refX="0"
refY="0"
orient="auto">
<g
transform="scale(-1.2)"
id="g37469">
<path
style="fill:none;fill-rule:evenodd;stroke:context-stroke;stroke-width:0.8;stroke-linecap:round"
d="M -3.8048674,-3.9585227 0.54352094,0"
id="path37457" />
<path
style="fill:none;fill-rule:evenodd;stroke:context-stroke;stroke-width:0.8;stroke-linecap:round"
d="M -1.2866832,-3.9585227 3.0617053,0"
id="path37459" />
<path
style="fill:none;fill-rule:evenodd;stroke:context-stroke;stroke-width:0.8;stroke-linecap:round"
d="M 1.3053582,-3.9585227 5.6537466,0"
id="path37461" />
<path
style="fill:none;fill-rule:evenodd;stroke:context-stroke;stroke-width:0.8;stroke-linecap:round"
d="M -3.8048674,4.1775838 0.54352094,0.21974226"
id="path37463" />
<path
style="fill:none;fill-rule:evenodd;stroke:context-stroke;stroke-width:0.8;stroke-linecap:round"
d="M -1.2866832,4.1775838 3.0617053,0.21974226"
id="path37465" />
<path
style="fill:none;fill-rule:evenodd;stroke:context-stroke;stroke-width:0.8;stroke-linecap:round"
d="M 1.3053582,4.1775838 5.6537466,0.21974226"
id="path37467" />
</g>
</marker>
<marker
style="overflow:visible"
id="Arrow1Lstart"
refX="0"
refY="0"
orient="auto">
<path
transform="matrix(0.8,0,0,0.8,10,0)"
style="fill:context-stroke;fill-rule:evenodd;stroke:context-stroke;stroke-width:1pt"
d="M 0,0 5,-5 -12.5,0 5,5 Z"
id="path36645" />
</marker>
<marker
style="overflow:visible"
id="Tail"
refX="0"
refY="0"
orient="auto">
<g
transform="scale(-1.2)"
id="g36693">
<path
style="fill:none;fill-rule:evenodd;stroke:context-stroke;stroke-width:0.8;stroke-linecap:round"
d="M -3.8048674,-3.9585227 0.54352094,0"
id="path36681" />
<path
style="fill:none;fill-rule:evenodd;stroke:context-stroke;stroke-width:0.8;stroke-linecap:round"
d="M -1.2866832,-3.9585227 3.0617053,0"
id="path36683" />
<path
style="fill:none;fill-rule:evenodd;stroke:context-stroke;stroke-width:0.8;stroke-linecap:round"
d="M 1.3053582,-3.9585227 5.6537466,0"
id="path36685" />
<path
style="fill:none;fill-rule:evenodd;stroke:context-stroke;stroke-width:0.8;stroke-linecap:round"
d="M -3.8048674,4.1775838 0.54352094,0.21974226"
id="path36687" />
<path
style="fill:none;fill-rule:evenodd;stroke:context-stroke;stroke-width:0.8;stroke-linecap:round"
d="M -1.2866832,4.1775838 3.0617053,0.21974226"
id="path36689" />
<path
style="fill:none;fill-rule:evenodd;stroke:context-stroke;stroke-width:0.8;stroke-linecap:round"
d="M 1.3053582,4.1775838 5.6537466,0.21974226"
id="path36691" />
</g>
</marker>
<clipPath
clipPathUnits="userSpaceOnUse"
id="clipPath36447">
<g
id="use36449">
<path
style="fill:#ff6e00;fill-opacity:1;stroke:none;stroke-width:4.70399;stop-color:#000000"
id="path58906"
d="m 111.05093,136.42994 a 14.370799,14.370799 0 0 1 -19.584484,5.28674 14.370799,14.370799 0 0 1 -5.359636,-19.56466 14.370799,14.370799 0 0 1 19.54457,-5.43245 14.370799,14.370799 0 0 1 5.50519,19.52421" />
<text
xml:space="preserve"
style="font-size:3.175px;line-height:1.25;font-family:Manrope;-inkscape-font-specification:Manrope;fill:#222222;fill-opacity:1;stroke-width:0.264583"
x="87.123085"
y="130.00655"
id="text58910"><tspan
id="tspan58908"
style="font-size:3.175px;fill:#222222;fill-opacity:1;stroke-width:0.264583"
x="87.123085"
y="130.00655">my.peertube.eu</tspan></text>
</g>
</clipPath>
<clipPath
clipPathUnits="userSpaceOnUse"
id="clipPath36458">
<g
id="use36460">
<path
style="fill:#ff6e00;fill-opacity:1;stroke:none;stroke-width:4.70399;stop-color:#000000"
id="path58914"
d="m 53.571644,126.81852 a 14.370799,14.370799 0 0 1 -19.584484,5.28674 14.370799,14.370799 0 0 1 -5.359636,-19.56466 14.370799,14.370799 0 0 1 19.544569,-5.43245 14.370799,14.370799 0 0 1 5.505191,19.52421" />
<text
xml:space="preserve"
style="font-size:3.175px;line-height:1.25;font-family:Manrope;-inkscape-font-specification:Manrope;stroke-width:0.264583"
x="29.643806"
y="120.39513"
id="text58918"><tspan
id="tspan58916"
style="font-size:3.175px;fill:#222222;fill-opacity:1;stroke-width:0.264583"
x="29.643806"
y="120.39513">my.pixelfed.eu</tspan></text>
</g>
</clipPath>
</defs>
<g
id="layer1"
transform="translate(-60.216167,-17.656702)">
<g
id="g61145"
transform="translate(4.4240417,2.0728321)">
<path
style="fill:#2541b2;fill-opacity:1;stroke:none;stroke-width:11.1625;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;stop-color:#000000"
id="path59396"
d="m 125.2925,171.6479 a 37.245136,37.245136 0 0 1 -50.75757,13.70178 37.245136,37.245136 0 0 1 -13.890695,-50.70619 37.245136,37.245136 0 0 1 50.654115,-14.07941 37.245136,37.245136 0 0 1 14.26793,50.60134" />
<path
style="fill:#ff6e00;fill-opacity:1;stroke:none;stroke-width:9.15155;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;stop-color:#000000"
id="path58590-9-1"
d="m 74.471821,169.86167 a 6.1949,6.1949 0 0 1 -8.442392,2.27899 6.1949,6.1949 0 0 1 -2.310408,-8.43385 6.1949,6.1949 0 0 1 8.425186,-2.3418 6.1949,6.1949 0 0 1 2.373153,8.41641" />
<path
style="fill:none;fill-rule:evenodd;stroke:#ff6e00;stroke-width:0.75;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.5, 3;stroke-dashoffset:0;stroke-opacity:1"
d="M 110.77281,166.76422 H 75.301665"
id="path58820" />
<path
style="fill:none;fill-rule:evenodd;stroke:#ff6e00;stroke-width:0.75;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.5, 3;stroke-dashoffset:0;stroke-opacity:1"
d="m 89.646977,134.87837 -17.185324,26.678"
id="path58822" />
<path
style="fill:none;fill-rule:evenodd;stroke:#ff6e00;stroke-width:0.75;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.5, 3;stroke-dashoffset:0;stroke-opacity:1"
d="m 96.36351,134.87382 17.24234,26.68714"
id="path58824" />
<path
style="fill:#2541b2;fill-opacity:1;stroke:none;stroke-width:11.1625;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;stop-color:#000000"
id="path59396-7"
d="m 227.36989,171.60697 a 37.245136,37.245136 0 0 1 -50.75757,13.70179 37.245136,37.245136 0 0 1 -13.89069,-50.70619 37.245136,37.245136 0 0 1 50.65412,-14.07941 37.245136,37.245136 0 0 1 14.26793,50.60134" />
<path
style="fill:#ff6e00;fill-opacity:1;stroke:none;stroke-width:9.15155;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;stop-color:#000000"
id="path58590-9-6"
d="m 224.40997,169.82076 a 6.1949,6.1949 0 0 1 -8.44239,2.27899 6.1949,6.1949 0 0 1 -2.31041,-8.43385 6.1949,6.1949 0 0 1 8.42519,-2.34179 6.1949,6.1949 0 0 1 2.37315,8.4164" />
<path
style="fill:none;fill-rule:evenodd;stroke:#ff6e00;stroke-width:0.75;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.5, 3;stroke-dashoffset:0;stroke-opacity:1"
d="M 212.85019,166.72331 H 177.37905"
id="path58820-6" />
<path
style="fill:none;fill-rule:evenodd;stroke:#ff6e00;stroke-width:0.75;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.5, 3;stroke-dashoffset:0;stroke-opacity:1"
d="m 191.72437,134.83745 -17.18533,26.67801"
id="path58822-2" />
<path
style="fill:none;fill-rule:evenodd;stroke:#ff6e00;stroke-width:0.75;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.5, 3;stroke-dashoffset:0;stroke-opacity:1"
d="m 198.4409,134.8329 17.24234,26.68715"
id="path58824-6" />
<path
style="opacity:1;fill:#2541b2;fill-opacity:1;stroke:none;stroke-width:11.1625;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;stop-color:#000000"
id="path59396-8"
d="m 176.33119,71.451574 a 37.245136,37.245136 0 0 1 -50.75756,13.701787 37.245136,37.245136 0 0 1 -13.8907,-50.706194 37.245136,37.245136 0 0 1 50.65412,-14.07941 37.245136,37.245136 0 0 1 14.26793,50.601339" />
<path
style="fill:#ff6e00;fill-opacity:1;stroke:none;stroke-width:9.15155;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;stop-color:#000000"
id="path58590-92"
d="m 149.40536,32.571689 a 6.1949,6.1949 0 0 1 -8.44239,2.278988 6.1949,6.1949 0 0 1 -2.31041,-8.433848 6.1949,6.1949 0 0 1 8.42519,-2.341797 6.1949,6.1949 0 0 1 2.37315,8.416408" />
<path
style="fill:none;fill-rule:evenodd;stroke:#ff6e00;stroke-width:0.75;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.5, 3;stroke-dashoffset:0;stroke-opacity:1"
d="M 161.81149,66.567909 H 126.34036"
id="path58820-3" />
<path
style="fill:none;fill-rule:evenodd;stroke:#ff6e00;stroke-width:0.75;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.5, 3;stroke-dashoffset:0;stroke-opacity:1"
d="M 140.68567,34.682051 123.50035,61.360058"
id="path58822-7" />
<path
style="fill:none;fill-rule:evenodd;stroke:#ff6e00;stroke-width:0.75;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:1.5, 3;stroke-dashoffset:0;stroke-opacity:1"
d="m 147.40221,34.677502 17.24233,26.68714"
id="path58824-5" />
<path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="M 95.44958,123.97991 117.69772,72.258569"
id="path60835" />
<path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="M 97.742036,125.68246 163.26602,70.556018"
id="path60837" />
<path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="M 95.813494,124.15065 141.22861,34.994238"
id="path60839" />
<path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="M 192.6353,123.93715 170.45011,72.260302"
id="path60841" />
<path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="M 192.26643,124.11019 146.85314,34.993764"
id="path60843" />
<path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="M 190.33932,125.64078 124.88529,70.556708"
id="path60845" />
<path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="M 71.91865,161.24431 117.33376,72.087907"
id="path60847" />
<path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="M 72.074779,161.32656 141.07256,34.911822"
id="path60849" />
<path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="M 73.458652,162.35539 163.65455,70.976761"
id="path60851" />
<path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 117.16403,160.57253 2.78516,-87.812885"
id="path60853" />
<path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="M 119.77941,161.24431 165.19452,72.087907"
id="path60855" />
<path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="M 118.16616,160.68639 142.84193,35.551984"
id="path60857" />
<path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 170.9878,160.53164 -2.785,-87.771971"
id="path60859" />
<path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="M 168.37158,161.20387 122.9583,72.087434"
id="path60861" />
<path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="M 169.98239,160.64619 145.24229,35.55132"
id="path60863" />
<path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="M 216.23235,161.20387 170.81905,72.087434"
id="path60865" />
<path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="M 214.69238,162.31539 124.49828,70.975886"
id="path60867" />
<path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="M 216.07432,161.28728 147.01113,34.910269"
id="path60869" />
<path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 99.196511,129.66808 89.687779,-0.036"
id="path60871" />
<path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 98.599665,132.32357 66.986565,31.74669"
id="path60873" />
<path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="M 98.945067,131.41772 213.10168,164.97616"
id="path60875" />
<path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 123.16243,166.75955 41.82702,-0.0316"
id="path60877" />
<path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="M 122.56241,164.10444 189.48438,132.2894"
id="path60879" />
<path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 123.16243,166.76174 89.68777,-0.0359"
id="path60881" />
<path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="m 75.301667,166.76174 89.687773,-0.0359"
id="path60883" />
<path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="M 75.301666,166.76253 212.8502,166.725"
id="path60885" />
<path
style="fill:none;fill-rule:evenodd;stroke:#000000;stroke-width:0.264583px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
d="M 75.048966,165.01259 189.13713,131.38124"
id="path60887" />
<path
style="fill:#ff6e00;fill-opacity:1;stroke:none;stroke-width:9.15155;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;stop-color:#000000"
id="path58590-9-0"
d="m 173.37127,69.665359 a 6.1949,6.1949 0 0 1 -8.44239,2.278988 6.1949,6.1949 0 0 1 -2.31041,-8.433848 6.1949,6.1949 0 0 1 8.42519,-2.341797 6.1949,6.1949 0 0 1 2.37315,8.416408" />
<path
style="fill:#ff6e00;fill-opacity:1;stroke:none;stroke-width:9.15155;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;stop-color:#000000"
id="path58590-9-1-2"
d="m 125.51052,69.665359 a 6.1949,6.1949 0 0 1 -8.44239,2.278988 6.1949,6.1949 0 0 1 -2.31041,-8.433848 6.1949,6.1949 0 0 1 8.42518,-2.341797 6.1949,6.1949 0 0 1 2.37316,8.416408" />
<path
style="fill:#ff6e00;fill-opacity:1;stroke:none;stroke-width:9.15155;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;stop-color:#000000"
id="path58590-93"
d="m 200.44406,132.72709 a 6.1949,6.1949 0 0 1 -8.44239,2.27899 6.1949,6.1949 0 0 1 -2.31041,-8.43385 6.1949,6.1949 0 0 1 8.42518,-2.3418 6.1949,6.1949 0 0 1 2.37316,8.41641" />
<path
style="fill:#ff6e00;fill-opacity:1;stroke:none;stroke-width:9.15155;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;stop-color:#000000"
id="path58590-9-1-0"
d="m 176.54921,169.82076 a 6.1949,6.1949 0 0 1 -8.4424,2.27899 6.1949,6.1949 0 0 1 -2.3104,-8.43385 6.1949,6.1949 0 0 1 8.42518,-2.34179 6.1949,6.1949 0 0 1 2.37315,8.4164" />
<path
style="fill:#ff6e00;fill-opacity:1;stroke:none;stroke-width:9.15155;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;stop-color:#000000"
id="path58590-9"
d="m 122.33258,169.86167 a 6.1949,6.1949 0 0 1 -8.44239,2.27899 6.1949,6.1949 0 0 1 -2.31041,-8.43385 6.1949,6.1949 0 0 1 8.42519,-2.3418 6.1949,6.1949 0 0 1 2.37315,8.41641" />
<path
style="fill:#ff6e00;fill-opacity:1;stroke:none;stroke-width:9.15155;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1;stop-color:#000000"
id="path58590"
d="m 98.366665,132.76801 a 6.1949,6.1949 0 0 1 -8.442392,2.27899 6.1949,6.1949 0 0 1 -2.310408,-8.43385 6.1949,6.1949 0 0 1 8.425186,-2.34179 6.1949,6.1949 0 0 1 2.373153,8.4164" />
<text
xml:space="preserve"
style="font-size:5.82083px;line-height:1.25;font-family:Manrope;-inkscape-font-specification:Manrope;stroke-width:0.264583"
x="141.18677"
y="31.569738"
id="text75117"><tspan
id="tspan75115"
style="font-style:normal;font-variant:normal;font-weight:600;font-stretch:normal;font-size:5.82083px;font-family:Manrope;-inkscape-font-specification:'Manrope Semi-Bold';fill:#222222;fill-opacity:1;stroke-width:0.264583"
x="141.18677"
y="31.569738">A1</tspan></text>
<text
xml:space="preserve"
style="font-size:5.82083px;line-height:1.25;font-family:Manrope;-inkscape-font-specification:Manrope;stroke-width:0.264583"
x="117.2439"
y="68.663406"
id="text75117-9"><tspan
id="tspan75115-2"
style="font-style:normal;font-variant:normal;font-weight:600;font-stretch:normal;font-size:5.82083px;font-family:Manrope;-inkscape-font-specification:'Manrope Semi-Bold';fill:#222222;fill-opacity:1;stroke-width:0.264583"
x="117.2439"
y="68.663406">B1</tspan></text>
<text
xml:space="preserve"
style="font-size:5.82083px;line-height:1.25;font-family:Manrope;-inkscape-font-specification:Manrope;stroke-width:0.264583"
x="164.91402"
y="68.663406"
id="text75117-2"><tspan
id="tspan75115-8"
style="font-style:normal;font-variant:normal;font-weight:600;font-stretch:normal;font-size:5.82083px;font-family:Manrope;-inkscape-font-specification:'Manrope Semi-Bold';fill:#222222;fill-opacity:1;stroke-width:0.264583"
x="164.91402"
y="68.663406">C1</tspan></text>
<text
xml:space="preserve"
style="font-size:5.82083px;line-height:1.25;font-family:Manrope;-inkscape-font-specification:Manrope;stroke-width:0.264583"
x="215.34152"
y="168.81882"
id="text75117-2-3"><tspan
id="tspan75115-8-1"
style="font-style:normal;font-variant:normal;font-weight:600;font-stretch:normal;font-size:5.82083px;font-family:Manrope;-inkscape-font-specification:'Manrope Semi-Bold';fill:#222222;fill-opacity:1;stroke-width:0.264583"
x="215.34152"
y="168.81882">C3</tspan></text>
<text
xml:space="preserve"
style="font-size:5.82083px;line-height:1.25;font-family:Manrope;-inkscape-font-specification:Manrope;stroke-width:0.264583"
x="89.464119"
y="131.80972"
id="text75117-97"><tspan
id="tspan75115-3"
style="font-style:normal;font-variant:normal;font-weight:600;font-stretch:normal;font-size:5.82083px;font-family:Manrope;-inkscape-font-specification:'Manrope Semi-Bold';fill:#222222;fill-opacity:1;stroke-width:0.264583"
x="89.464119"
y="131.80972">A2</tspan></text>
<text
xml:space="preserve"
style="font-size:5.82083px;line-height:1.25;font-family:Manrope;-inkscape-font-specification:Manrope;stroke-width:0.264583"
x="65.521255"
y="168.90338"
id="text75117-9-6"><tspan
id="tspan75115-2-1"
style="font-style:normal;font-variant:normal;font-weight:600;font-stretch:normal;font-size:5.82083px;font-family:Manrope;-inkscape-font-specification:'Manrope Semi-Bold';fill:#222222;fill-opacity:1;stroke-width:0.264583"
x="65.521255"
y="168.90338">B2</tspan></text>
<text
xml:space="preserve"
style="font-size:5.82083px;line-height:1.25;font-family:Manrope;-inkscape-font-specification:Manrope;stroke-width:0.264583"
x="113.19138"
y="168.85973"
id="text75117-2-2"><tspan
id="tspan75115-8-9"
style="font-style:normal;font-variant:normal;font-weight:600;font-stretch:normal;font-size:5.82083px;font-family:Manrope;-inkscape-font-specification:'Manrope Semi-Bold';fill:#222222;fill-opacity:1;stroke-width:0.264583"
x="113.19138"
y="168.85973">C2</tspan></text>
<text
xml:space="preserve"
style="font-size:5.82083px;line-height:1.25;font-family:Manrope;-inkscape-font-specification:Manrope;stroke-width:0.264583"
x="167.6714"
y="168.77953"
id="text75117-9-7"><tspan
id="tspan75115-2-8"
style="font-style:normal;font-variant:normal;font-weight:600;font-stretch:normal;font-size:5.82083px;font-family:Manrope;-inkscape-font-specification:'Manrope Semi-Bold';fill:#222222;fill-opacity:1;stroke-width:0.264583"
x="167.6714"
y="168.77953">B3</tspan></text>
<text
xml:space="preserve"
style="font-size:5.82083px;line-height:1.25;font-family:Manrope;-inkscape-font-specification:Manrope;stroke-width:0.264583"
x="191.61427"
y="131.68585"
id="text75117-4"><tspan
id="tspan75115-5"
style="font-style:normal;font-variant:normal;font-weight:600;font-stretch:normal;font-size:5.82083px;font-family:Manrope;-inkscape-font-specification:'Manrope Semi-Bold';fill:#222222;fill-opacity:1;stroke-width:0.264583"
x="191.61427"
y="131.68585">A3</tspan></text>
<text
xml:space="preserve"
style="font-size:4.23333px;line-height:1.25;font-family:Manrope;-inkscape-font-specification:Manrope;stroke-width:0.264583"
x="129.53557"
y="21.968952"
id="text151203"><tspan
id="tspan151201"
style="font-style:normal;font-variant:normal;font-weight:600;font-stretch:normal;font-size:4.23333px;font-family:Manrope;-inkscape-font-specification:'Manrope Semi-Bold';fill:#efedef;fill-opacity:1;stroke-width:0.264583"
x="129.53557"
y="21.968952">My Fediversity</tspan></text>
<text
xml:space="preserve"
style="font-size:4.23333px;line-height:1.25;font-family:Manrope;-inkscape-font-specification:Manrope;stroke-width:0.264583"
x="179.18785"
y="185.09686"
id="text151203-0"><tspan
id="tspan151201-3"
style="font-style:normal;font-variant:normal;font-weight:600;font-stretch:normal;font-size:4.23333px;font-family:Manrope;-inkscape-font-specification:'Manrope Semi-Bold';fill:#efedef;fill-opacity:1;stroke-width:0.264583"
x="179.18785"
y="185.09686">Your Fediversity</tspan></text>
<text
xml:space="preserve"
style="font-size:4.23333px;line-height:1.25;font-family:Manrope;-inkscape-font-specification:Manrope;stroke-width:0.264583"
x="76.365395"
y="185.09686"
id="text151203-0-6"><tspan
id="tspan151201-3-1"
style="font-style:normal;font-variant:normal;font-weight:600;font-stretch:normal;font-size:4.23333px;font-family:Manrope;-inkscape-font-specification:'Manrope Semi-Bold';fill:#efedef;fill-opacity:1;stroke-width:0.264583"
x="76.365395"
y="185.09686">Their Fediversity</tspan></text>
<text
xml:space="preserve"
style="font-size:10.5833px;line-height:1.25;font-family:Manrope;-inkscape-font-specification:Manrope;stroke-width:0.264583"
x="240.13141"
y="47.2188"
id="text171688"><tspan
id="tspan171686"
style="stroke-width:0.264583"
x="240.13141"
y="47.2188" /></text>
</g>
</g>
</svg>

After

(image error) Size: 27 KiB

Binary file not shown.

After

(image error) Size: 9.4 KiB

Binary file not shown.

After

(image error) Size: 12 KiB

View file

@ -0,0 +1,212 @@
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
width="310.41714mm"
height="181.78426mm"
viewBox="0 0 310.41714 181.78426"
version="1.1"
id="svg5"
inkscape:version="1.1.2 (0a00cf5339, 2022-02-04)"
sodipodi:docname="target-audiences.svg"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns="http://www.w3.org/2000/svg"
xmlns:svg="http://www.w3.org/2000/svg">
<sodipodi:namedview
id="namedview7"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageshadow="2"
inkscape:pageopacity="0.0"
inkscape:pagecheckerboard="0"
inkscape:document-units="mm"
showgrid="false"
inkscape:zoom="1.087256"
inkscape:cx="746.83421"
inkscape:cy="541.73072"
inkscape:window-width="2556"
inkscape:window-height="1391"
inkscape:window-x="0"
inkscape:window-y="0"
inkscape:window-maximized="1"
inkscape:current-layer="layer1" />
<defs
id="defs2">
<marker
style="overflow:visible"
id="Arrow1Lstart"
refX="0"
refY="0"
orient="auto"
inkscape:stockid="Arrow1Lstart"
inkscape:isstock="true">
<path
transform="matrix(0.8,0,0,0.8,10,0)"
style="fill:context-stroke;fill-rule:evenodd;stroke:context-stroke;stroke-width:1pt"
d="M 0,0 5,-5 -12.5,0 5,5 Z"
id="path50199" />
</marker>
<marker
style="overflow:visible"
id="marker50471"
refX="0"
refY="0"
orient="auto"
inkscape:stockid="Arrow1Lend"
inkscape:isstock="true">
<path
transform="matrix(-0.8,0,0,-0.8,-10,0)"
style="fill:context-stroke;fill-rule:evenodd;stroke:context-stroke;stroke-width:1pt"
d="M 0,0 5,-5 -12.5,0 5,5 Z"
id="path50469" />
</marker>
<marker
style="overflow:visible"
id="Arrow1Lend"
refX="0"
refY="0"
orient="auto"
inkscape:stockid="Arrow1Lend"
inkscape:isstock="true">
<path
transform="matrix(-0.8,0,0,-0.8,-10,0)"
style="fill:context-stroke;fill-rule:evenodd;stroke:context-stroke;stroke-width:1pt"
d="M 0,0 5,-5 -12.5,0 5,5 Z"
id="path50202" />
</marker>
</defs>
<g
inkscape:label="Layer 1"
inkscape:groupmode="layer"
id="layer1"
transform="translate(39.534213,-39.833809)">
<g
id="g1060">
<path
style="fill:#2541b2;fill-opacity:1;stroke-width:3.77953;stop-color:#000000"
id="path846"
sodipodi:type="arc"
sodipodi:cx="105.30602"
sodipodi:cy="130.72594"
sodipodi:rx="90.892128"
sodipodi:ry="90.892128"
sodipodi:start="0.52359878"
sodipodi:end="0.50870414"
sodipodi:open="true"
sodipodi:arc-type="arc"
d="M 184.02091,176.172 A 90.892128,90.892128 0 0 1 60.15338,209.60951 90.892128,90.892128 0 0 1 26.254866,85.867342 90.892128,90.892128 0 0 1 149.86995,51.50829 90.892128,90.892128 0 0 1 184.68906,174.99457" />
<path
style="fill:#ff6e00;fill-opacity:1;stroke-width:4.84651;stop-color:#000000"
id="path846-6"
sodipodi:type="arc"
sodipodi:cx="105.30602"
sodipodi:cy="130.72594"
sodipodi:rx="70.881783"
sodipodi:ry="70.881783"
sodipodi:start="0.52359878"
sodipodi:end="0.50870414"
sodipodi:open="true"
sodipodi:arc-type="arc"
d="M 166.69145,166.16683 A 70.881783,70.881783 0 0 1 70.093955,192.24291 70.881783,70.881783 0 0 1 43.658364,95.743181 70.881783,70.881783 0 0 1 140.05898,68.948442 70.881783,70.881783 0 0 1 167.2125,165.24862" />
<path
style="fill:#efedef;fill-opacity:1;stroke-width:6.53412;stop-color:#000000"
id="path846-6-7"
sodipodi:type="arc"
sodipodi:cx="105.30602"
sodipodi:cy="130.72594"
sodipodi:rx="52.574703"
sodipodi:ry="52.574703"
sodipodi:start="0.52359878"
sodipodi:end="0.50870414"
sodipodi:open="true"
sodipodi:arc-type="arc"
d="M 150.83705,157.01329 A 52.574703,52.574703 0 0 1 79.188395,176.35453 52.574703,52.574703 0 0 1 59.580488,104.7784 52.574703,52.574703 0 0 1 131.08312,84.9041 a 52.574703,52.574703 0 0 1 20.14041,71.42813" />
</g>
<text
xml:space="preserve"
style="font-style:normal;font-weight:normal;font-size:10.5833px;line-height:1.25;font-family:sans-serif;fill:#222222;fill-opacity:1;stroke:none;stroke-width:0.264583"
x="77.416451"
y="130.43488"
id="text3315"><tspan
sodipodi:role="line"
id="tspan3313"
style="font-style:normal;font-variant:normal;font-weight:600;font-stretch:normal;font-family:Manrope;-inkscape-font-specification:'Manrope Semi-Bold';fill:#222222;fill-opacity:1;stroke-width:0.264583"
x="77.416451"
y="130.43488"
transform="translate(-1.140243)">Fediversity</tspan></text>
<g
id="path9760-3">
<path
style="color:#000000;fill:#ff6e00;-inkscape-stroke:none"
d="M -39.534213,135.33222 H 33.311962"
id="path65072" />
<path
style="color:#000000;fill:#ff6e00;-inkscape-stroke:none"
d="m -39.535156,134.83203 v 1 H 33.3125 v -1 z"
id="path65074" />
<g
id="g65062">
<g
id="path65064">
<path
style="color:#000000;fill:#ff6e00;fill-rule:evenodd;stroke-width:0.8pt;-inkscape-stroke:none"
d="m 23.311962,135.33222 -4,4 14,-4 -14,-4 z"
id="path65068" />
<path
style="color:#000000;fill:#ff6e00;fill-rule:evenodd;-inkscape-stroke:none"
d="m 17.478516,130.25391 5.080078,5.07812 -5.080078,5.07813 17.77539,-5.07813 z m 3.667968,2.1582 10.22461,2.91992 -10.228516,2.92383 2.923828,-2.92383 -0.376953,-0.37695 z"
id="path65070" />
</g>
</g>
</g>
<g
id="path9760-3-5">
<path
style="color:#000000;fill:#2541b2;-inkscape-stroke:none"
d="m 197.23252,135.25414 h 73.6504"
id="path65088" />
<path
style="color:#000000;fill:#2541b2;-inkscape-stroke:none"
d="m 197.23242,134.75391 v 1 h 73.65039 v -1 z"
id="path65090" />
<g
id="g65078">
<g
id="path65080">
<path
style="color:#000000;fill:#2541b2;fill-rule:evenodd;stroke-width:0.8pt;-inkscape-stroke:none"
d="m 207.23252,135.25414 4,-4 -14,4 14,4 z"
id="path65084" />
<path
style="color:#000000;fill:#2541b2;fill-rule:evenodd;-inkscape-stroke:none"
d="m 213.06445,130.17578 -17.77343,5.07813 17.77343,5.07812 -5.07812,-5.07812 z m -3.66601,2.1582 -2.91992,2.91993 0.37695,0.37695 2.54687,2.54687 -10.22851,-2.92382 z"
id="path65086" />
</g>
</g>
</g>
<text
xml:space="preserve"
style="font-size:10.5833px;line-height:1.25;font-family:Manrope;-inkscape-font-specification:Manrope;stroke-width:0.264583"
x="-40.275043"
y="130.43488"
id="text43515"><tspan
sodipodi:role="line"
id="tspan43513"
style="fill:#222222;fill-opacity:1;stroke-width:0.264583"
x="-40.275043"
y="130.43488">Providers</tspan></text>
<text
xml:space="preserve"
style="font-size:10.5833px;line-height:1.25;font-family:Manrope;-inkscape-font-specification:Manrope;stroke-width:0.264583"
x="242.98009"
y="130.38196"
id="text46525"><tspan
sodipodi:role="line"
id="tspan46523"
style="fill:#222222;fill-opacity:1;stroke-width:0.264583"
x="242.98009"
y="130.38196">Users</tspan></text>
</g>
</svg>

After

(image error) Size: 7.8 KiB

View file

@ -0,0 +1,76 @@
# fediversity design meeting 2025-03-12
present: slik (thijs, tiemon) + procolix (lois, kevin, kiara)
- thijs: what is the project called and who does what?
- thijs: how do you see front-end dev for this?
- kiara: we don't need you to do an implementation using some front-end framework - just the design will do.
- thijs: what will be the concrete deliverable then for the demo?
- kiara: if for fediforum we do not have the design implemented yet that is acceptable.
- thijs: maybe we will make it in time.
- tiemon: sounds ambitious.
- thijs: should we deliver code or would an interactive design do?
- kiara: an interactive design will do.
- kiara: could this handle animations too?
- tiemon: yes.
- thijs: could you explain some terminology here like fediverse, protagio, providers, panel?
- kevin: *explains*
- thijs: which applications will you do, and how do these get added?
- kiara: mastodon, pixelfed and peertube at least.
- kevin: *explains about fediversity sub-grants*
- thijs: who will select what applications get added then?
- kiara: formally the Open Internet Discourse Foundation.
- thijs: are there set criteria for this? are these political decisions?
- kiara: fediversity is open-source, tho as maintainers we will eventually need to make decisions take into account our capacity given the maintenance work involved.
- thijs: how might hosts, users, workspaces and accounts relate?
- kiara: we will offer SSO across applications.
- thijs: what if people say use this from both professional as well as other roles? can they then have workspaces representing their accounts at different hosts?
- kiara: i envision the web client as agnostic to orchestration capabilities, so a client application logged in to accounts at different hosts thru e.g. workspaces could technically be possible, tho i would not see this as significantly affecting our design currently.
- thijs: how about a host admin panel to e.g. restrict offered applications? or for hosts' accountants?
- kiara: hosts consist of sysadmins, so a config file may currently suffice for them as a user interface.
- kevin: hosts also already have their own client-facing front-ends.
- thijs: cli for now, so for the design focus on the operator panel? ok.
- thijs: *asking about terminology*
- *kevin + kiara explain*
- thijs: do you want to offer a federated UX?
- kevin: the deployed applications federate already.
- thijs: applications tend to offer support buttons. who is in charge of offering this support, operators, hosts or you?
- kiara: the operator, afaik.
- kevin: we might direct users to the application manuals.
- thijs: will fedipanel come with a knowledge base aimed at the operators?
- kiara: we could link to a static one deployed from our end.
- kevin: probably better to include this in the panel deployment.
- thijs: sure, let me know.
- thijs: we can show what we had so far in design program figma.
- tiemon: you can navigate and interact with the designs, and they can generate html as well.
- thijs: we like to work with job stories, so not just user stories like 'as a ...' but also including 'so that ...'.
- kiara: great, so do we.
- thijs: we can show some UIs we like for reference.
- thijs: you won't offer file management from the panel, right?
- kevin: correct.
- kiara: fyi our deployment is somewhat big-bang still, rather than say configure mastodon -> deploy -> configure pixelfed -> deploy - we can not yet enqueue such syncs.
- thijs: where can we find your application?
- kevin: the code is at <https://git.fediversity.eu>, but we also have a recent demo video.
- tiemon: we saw that one, yeah.
- thijs: here is a wireframe so we can align on the chrome (= UI parts that are always there).
- kiara: we do not yet have workspaces, but multiple deployments per user could become an option.
- thijs: how about an admin interface to manage users?
- kiara: we will have to go thru hosts' SSO because of billing.
- kevin: yes this will go thru LDAP.
- thijs: how about showing stats about e.g. numbers of mastodon users?
- kiara: applications should already handle stuff specific to them, so we don't plan to do this.
- thijs: how about application settings (generic vs application-specific)?
- kiara: generic ones will apply to say configure VM resources or sub-domains, tho otherwise most should be application-specific.
- thijs: no auto-scaling?
- kiara: not for now.
- thijs: how about a billing interface?
- kevin: hosts would use their existing ones.
- tiemon: how is pricing determined then?
- kiara: hosts may set this based on the usage info we will provide.
- thijs:
- font: manrope?
- kiara: looks pretty.
- icon sets, selected by open-source / pretty / ...:
- [iconoir](https://iconoir.com/)?
- [phosphor](https://phosphoricons.com/)?
- kevin+lois+kiara: this one looks prettier.

View file

@ -0,0 +1,87 @@
# ssh access strategy
some notes on our current status, challenges and ways to address these
## questions
- [x] which keys do we accept on which users on which machines (infra/test)?
- [x] when deploying (by nixops/tf, machines infra/test, separate/local/deployed), which user and key do we pass?
## background
<!-- - manual setup kevin -->
<!-- - `nixos-24.05-minimal-x86_64.iso` -->
<!-- - `users.users.procolix.openssh.authorizedKeys.keys` (procolix SSH jump nodes) -->
- manual setup @niols
- sync machines' `/etc/ssh/ssh_host_ed25519_key.pub` to:
- `infra/test-machines/testxx/ssh_host_ed25519_key` (test machines)
- `keys/systems/fedixxx.pub` (infra)
## challenges
- TF messing up non-root SSH access (`/etc/ssh/authorized_keys.d` absent)
- TF not having a clear SSH strategy for production
- machine key? how to select the right user/key? how does nixops handle this?
- testing the panel locally not having a clear SSH strategy with password-protected SSH keys
## strategy
### which keys to accept on which users on which machines
- fedixxx/test0x
<!-- - procolix -->
<!-- - procolix jump nodes -->
- root
- fediversity team's individual keys
- personal
- personal (protected)
- test0x: a passwordless wheel account (personal accounts? root too?) should allow also an unprotected ssh key (personal?)
### how to use SSH on deployment
[^temp]: for now, as per the scope of #274
[^sensitive]: must be password-protected
[^agent]: thru ssh agent
[^inaccessible]: fails to handle password protection
[^propagate]: with password propagated, somehow
[^hardcoded]: hard-coded
[^explicit]: password can be passed explicitly
[^either]: unprotected, or if protected by passing it explicitly
#### user
|-|-|-|
| context | current | desired[^temp] |
| nixops infra | root | root |
| nixops local | root | root |
| protected? nixops panel local | root | root |
| nixops panel deployed | root | root |
<!-- | tf infra | root | root | -->
| tf local | personal[^hardcoded] | root |
| protected? tf panel local | personal[^hardcoded] | root |
| tf panel deployed | personal[^hardcoded] | root |
#### key
|-|-|-|
| context | current | desired |
| nixops infra | personal[^agent] | (protected) personal key |
| nixops local | personal[^agent] | personal |
| nixops panel local | personal[^agent] [^inaccessible] | (unprotected) personal key |
| nixops panel deployed | machine key[^agent] | machine key |
<!-- | tf infra | n/a | (protected) personal key [^propagate] | -->
| tf local | personal[^agent] [^explicit] | personal[^either] |
| tf panel local | personal[^agent] [^explicit] | personal[^either] |
| tf panel deployed | machine key[^agent] | machine key |
## solutions
- [x] fix ssh user in #274
- [ ] fix ssh access on test03
- [?] mimic strategy used with nixops for TF for ssh access from panel (deployed)
- [ ] allow access by machine key? or.. how did nixops have access?
- [ ] use/allow separate unprotected SSH key for test0x VMs (#272)
- [ ] ensure whitelisted keys for infra are protected
- [ ] work out way to use password-protected ssh keys in TF for infra? e.g.:
- delegate to ssh agent
- pass explicitly

View file

@ -0,0 +1,126 @@
# migration data model requirements
To transfer between two providers, the target provider must be able to import the sending provider's versions. (e.g.: a deployment may have latest fediversity, latest pixelfed, but previous mastadon) Thus, for each "realease" of the data model, it needs to be versioned, and applications/APIs also are versioned.
* (May need a way to show on the front-end which versions are in place, and which migrations are supported. However, for application versions which are completely controlled by the installation and setup, this is "solved".)
for release version 0, focus on known current needs
* to be expanded later as each new application is added and can be transferred between providers
* review migration guides for the known apps with an eye to odd/unusual details that influence design choices (task for Niols? others?)
Specifically, this suggests scoping to migrating:
- managed infrastructure (rather than managed applications)
- between servers owned by procolix
- same proxmox version
- NixOS VMs set up by us so we can guarantee identical application versions
- hosting limited to a single application (to start)
First, a bit of an inventory (list without much structure now, later will create structured form/schema with e.g. many-to-many links, useful for the migration code):
* clearly mark items that will not be in the first migration as eventually or speculative
* or reamove them if they would be too far in the future
* later we understand what is useful for migration code, we can extract and transform in to a format suitable as data model documentation
Hosting Provider provides:
* proxmox, git
* hardware
* filesystem storage
* DNS automation hooks?
* central/shared garage storage or only hardware+diskspace for the garage VMs to create storage?
* with central: more efficient but less isolated
FooUniversity (Operator)
* invoice info
* is all info expected to be transferred from provider A to provider B?
* May not want to transfer e.g. bank details, because they are already set up at B
* May also depend on regulation (which information are you allowed to hand out?)
* Admins:
* credentials
* persistent identifiers
* mappings between them (also need to travel across providers)
* e.g. if we can't change content URLs, we may need to create (and from then on carry around) a redirects mapping
* those mappings are likely application-specific, but they all belong to the same type class
* domain(s)
* what is needed for DNS management?
* users
* display name
* email(s)
* login id
* oauth2 (eventually)
* 2fa
* password
* passkeys (eventually)
* LDAP? (eventually?)
* all applications
* sub domain ( social.example.org vs example.org/social )
* info for proxmox setup such as to provision VMs (to reproduce proxmox )
* mem
* cpus
* storage mounts
* IPs likely not the same in the target network
* storage
* filesystem
* very well specified per application
* blob storage config (garage, s3-like)
* index
* Can we make it a requirement that Garage is behind a predictable URL, eg. `<application>.garage.<customer domain>`? As opposed to something vendor-specific, eg. `pixelfed-university.garage.procolix.com/<customer domain>/<application>`
* may need to rewrite URLs to blobs automatically, depending on the underlying URL scheme, which may be per setup or application
* limits? per application? per user? where are these used/set/enforced?
* TODO: what does e.g. borgmatic need to back up storage?
* out of scope?: focus on actual state, disregarding reconstructable stuff
* SQL database
* dump/snapshot
* TODO: what does e.g. borgmatic need to back up databases?
* application specifics
* postfix? (is email in version 0?)
* pixelfed
* where is blob storage
* in the specific case of Pixelfed, if blob storage changed URL, we might need to rewrite the pictures URLs in the database (try to avoid this)
* redis (in the case of pixelfed, it is not just a cache)
* misc config: theme, name of instance, email of sysadmin
* database
* on-disk files
* Daniel Supernault is currently making it so evertying can be stored remotely in a garage or sql database
* users (login id) (in database? in redis?)
* user preferences/settings
* peertube
* mastodon
* matrix? (is it in version 0?)
* logos
Other considerations:
- Put a boundary for what is
- operator-configurable
- needs to get fixed, but at the implementation level
- what can be configured dynamically per environment
- Most importantly we need to preserve persistent identifiers
- When transforming the data-model code to a deliverable version of the data model as part of the technical architecture document, documenting user-data storage and with respects fot security and GDPR
See also:
- possible overlap/inspiration: Stalw.art [configuration docs](https://stalw.art/docs/server/general)
## MVP scoping ideas
User story 1: New customer
When a new customer goes to the Fediversity website we want to show that user what Fediversity is all about and what it can give to the customer. This points the customer to a signup form where they can enter all the details that are needed to get it working. Here they can also decide what applications to use (at first no more than three). Details can be, the user/admin login, name, address, bank details, domain, other users, and applications. Than when the customer hits the install/provision/go button everything starts to install automagically. After which the customer is presented with (some) url's to login to.
User story 2: Take out / move to other instance
At any time a customer may wish to change service providers. They can easily go to an admin screen where they can get their configuration and data packaged for transfer. This packaged data can be provided to a new service provider where they will be up-and-running again easily, with minimal downtime.
proposed MVP scope:
- block storage
- blob storage (garage)
- physical servers
- proxmox vm management
- nixops service
- nixops scripts
- 1 to 3 applications packaged in Nix (Mastodon, Peertube, Pixelfed)
- frontend / website
- working dns, can be external, but automated
- takeout area
- import area
- 2 Fediversity environments to transfer between
- demonstration of User story 1
- demonstration of User story 2

View file

@ -0,0 +1,45 @@
# Use more principled dependency management than flakes
As per [nix.dev](https://nix.dev/concepts/flakes#should-i-use-flakes-in-my-project):
> Flakes emphasize reproducible artifacts and convenience for their consumers, while classic Nix tools center around composable building blocks and customisation options for developers.
We have currently used nix flakes to:
- manage project dependencies
- specify:
Parts of our project that touch upon flakes:
- our dependency management
- how we interface with dependencies
- how we (might) expose packages at upstream repositories, to facilitate e.g. `nix run`
- the interface we expose (to users + nixops4)
- architectures
- formatter
- checks
- pre-commit hooks
- development shell
- configuration for nixos / nixops
While its RFC was [drafted](https://github.com/NixOS/rfcs/pull/49) and implemented by Nix creator Eelco Dolstra thru Tweag (which is now divided on flakes) on behalf of Target (which we no longer have indication still uses nix), its aim to address various topics at once - as per their [introduction](https://www.tweag.io/blog/2020-05-25-flakes/#what-problems-do-flakes-solve) including composability, reproducibility, offering a consistent UI, and discoverability - appears to have yielded mixed results, flying in the face of the Unix philosophy, and drawing criticism from various prominent community members, including:
- [samueldr](https://samuel.dionne-riel.com/blog/2023/09/06/flakes-is-an-experiment-that-did-too-much-at-once.html) (author of NixOS Mobile): trying too many things at once (Unix philosophy)
- [jade](https://jade.fyi/blog/flakes-arent-real/) (Lix core member): locking dependencies of subprojects
<!-- - [fricklerhandwerk](https://nix.dev/concepts/flakes#why-are-flakes-controversial) (Tweag, head of documentation): no parameterization, defying Unix philosophy -->
- [raitobezarius](https://discourse.nixos.org/t/nix-flakes-is-an-experiment-that-did-too-much-at-once/32707/3) (board observer, Lix core member): technical issues
- [infinisil](https://discourse.nixos.org/t/experimental-does-not-mean-unstable-detsyss-perspective-on-nix-flakes/32703/2) (constitutional assembly): dependency explosion, no support to pass arguments, eagerly copying flake directories to the store, bad UX
- [sandro](https://discourse.nixos.org/t/introducing-flakehub/32044/31) (one of the biggest contributors to nixpkgs): making semantic versioning part of commercial project Flakehub rather than of Nix itself
- [alyssais](https://github.com/NixOS/rfcs/pull/49#pullrequestreview-262606855) (authored Spectrum OS): inability to patch flakes
- [tazjin](https://news.ycombinator.com/item?id=40060403) (thru TVL co-authored Tvix): complexity
- [jtojnar](https://discourse.nixos.org/t/why-are-flakes-still-experimental/29317/12): not awaiting RFC process
- [piegames](https://discourse.nixos.org/t/introducing-flakehub/32044/52) (formerly member of the moderation team, further [contributed 25 commits to dependency management alternative `npins`](https://github.com/andir/npins/commits?author=piegamesde)): integration into Nix core
- [solene](https://discourse.nixos.org/t/introducing-flakehub/32044/24): commercial interests
<!-- - [open letter](https://save-nix-together.org/): undermining community processes by declaring flakes stable -->
Alternatives:
- dependency management: potentially better done using `npins`, which makes this more explicit, whereas flakes offer performance improvements when interacting with a large Nix package repository like Nixpkgs
- how we interface with dependencies: mostly can be done without flakes, which may in fact help prevent pulling in recursive dependencies we do not use
- how we (might) expose packages at upstream repositories, to facilitate e.g. `nix run`: no good alternatives for `nix run` exist [currently](https://github.com/NixOS/nix/pull/4702#issuecomment-2233787312), aside from it seeming preferable to defer deviating from the norm here to community RFCs
- the interface we expose: flakes ignore unstaged files, cache at the cost of eagerly copying flake directories to the store, don't support passing arguments, make it harder to evaluate just part of a project

View file

@ -0,0 +1,43 @@
**Date and Time:** 2025-02-10 09:30
**Attendees**
**Present:** Björn, Hans, Kevin, Kiara, Koen, Richard, Ronny, Gheorghe
**Absent:** Valentin (known), Robert(known), Lois (known)
Roadmap
https://wiki.fediversity.eu/wiki/Roadmap
Question: Demo deliverable 1?
https://git.fediversity.eu/Fediversity/Fediversity/milestone/42
Question: Deliverable 2
Deadline: Friday 21 Feb
Demo: Monday 24 Feb
* Kiara
* Had a meeting with Eric on the data model
* Writing an article on flakes
* Limesurvery testing
* Richard
* No blockers
* Open for new tasks
* Hans
* No blockers
* Matrix playbook is almost ready
* Kevin
* Will mostly work on Procolix stuff
* Not available today
* Ronny
* Would like to work on the MVP with Björn
* Gheorghe
* No blockers
* Will work on internal artefacts
* Will share a new approach in a day or 3 towards this project
* Koen
* Worked on PeerTube server
* No blockers
* Will work on other project today
* Tomorrow is the presentation by students working on a project 'how to promote' loops. Will take Lois & Daphne to participate
* We're missing people this morning at the latest moment, which is a bit worrying giving the schedule.
* Bjorn:
* Team, please pair with Valentin to align on how to realize our MVP in time.

View file

@ -0,0 +1,51 @@
**Present:** Eric, Hans, Kevin, Lois, Koen, Ronny, Kiara, Valentin, Nicolas, Gheorghe, Bjorn
* Eric
* reviewed data model requirements with Kiara and Gheorghe
* current emphasis on what is needed for MVP, with an eye to what is needed transfer between hosting providers
* living doc, must evolve with code releases
* idealy extracted from code
* not a checkbox exercise
* Hans
* No updates
* Hit some roadblocks with the Matrix setup
* Will deliver a full Matrix server today
* Need to work on the documentation
* Kevin
* no updates
* heared from Niols he broke the forgejo-ci again will see if can fix it today from home
* Lois
* No updates yet
* Will work with Valentin; available till lunch than other obligations
* Koen
* no blockers
* meeting with Hogeschool Rotterdam this afternoon
* discussed stand-up attendance with Richard
* Ronny
* Discussion with Georghe and Bjorn about the MVP, PM and reporting. Reporting will be lighter than Georghe expected.
* Kiara
* yesterday read up on priorities/decisions
* today
* will try to get a sense of user stories needed for demo in April
* may also meet with Bjorn/Valentin on this
* no blockers
* Valentin
* Checked in with Kiara yesterday
* Reveiwed new documentation written by Nicolas
* Planned to continue pairing with Lois today
* Available for questions/discussion/reviews
* Nicolas
* no blockers
* updated to latest NixOps4 (with the change from 1 repo 2 branches to 2 repos)
* broke the CI machine as promised, unclear what caused this, will investigate with Kevin
* wrote some documentation
* Gheorghe
* Yesterday meet Bjorn & Ronny in a fantastic meeting. Start helping on WP5.
* Today I'll have an internal very important meeting. COntinue to help WP5.
* No Blockers.
* Bjorn
* Worked on the Fediversity presentation
* Had a chat with Gheorghe, Ronny & Koen on the planning / roadmap
* Will work on the presentation a bit, but I also have other obligations today
* Will not be available on Thursday
* No blockers

View file

@ -0,0 +1,50 @@
**Standup 2025-02-12 @09:30**
**Present:** Björn, Koen, Eric, Valentin, Gheorghe, Kevin, Lois, Nicholas, Ronny, Hans, Kiara
* Valentin
* Paired with Kiara and Lois to break down issues from user stories -- very fruitful, increased clarity a lot
* Reviewed the issues created by Kiara
* Internal meetings
* Took a look at Robert's exit code PR
* Today: Continue pairing with Lois on the Django setup
* Need to discuss timining/resource planning, should meet with Bjorn and whoever else has to be involved
* Eric
* brainstorm for MVP scope ideas
* Kevin
* rebooted the forgejo-ci into the previous nix config so nicolas could access it again after he broke it
* Koen
* attended presentation of HogeSchool Rotterdam team (recorded, needs montage)
* Remy sent ajusted processing document to EDPS.
* Lois
* Worked with Kiara and Valentin on creating usersstories
* Visited de Hogeschool
* Nicolas
* Would like to know which issue to pickup
* No blockers
* CI/CD: every change makes it break. Need Kevin
* Ronny
* Had a meeting with Eric in which we described a propasal for the MVP and at least two presentable user stories.
* Talked with Bjorn about the divergence in what the MVP is and that we need to point all the noses in the same direction.
* Gheorghe
* No blocker
* Yesterday: Internal meetings and exchanged some documents with Eric
* Today: Continue with internal meetings and continue helping WP5
* Hans
* No updates, every thing solved reveals new things to be solved.
* Matrix server for fediversity.eu should be ready today.
* Kiara
* Yesterday worked on fleshing out stories
* Today will work on:
* catch up w/ @robert for orchestrator stories
* get clarity on ownership boundaries with hosts together with @koen
* BLOCKER?: capacity planning
* Robert
* Added exit code handling
* Solved wiki access with Niols earlier
* Apologies for MIA yesterday, will enter availability
* Bjorn
* Did not work on Fediversity presentation
* Had a chat with Kiara
* Had a chat with Ronny
* Today available till 14:00

View file

@ -0,0 +1,91 @@
**MVP Dev Meeting 2025-02-12 @10:00**
**Present:** Björn, Eric, Valentin, Gheorghe, Kevin, Lois, Ronny, Kiara
## TODO
* @Bjorn/@RonnyAsk Robert & Nicolas about current state of affairs of the components below on and below NixOPS4 since there might be more available than we think
* DNS is unclear. **Update** Spoke with Koen about this. There is a redundant DNS available for development. More info soon.
* @Bjorn: Need to create a List of definitions / glossary
* @Bjorn/@Ronny: Adjust names (Nix => Fediversity)
## User stories discussion
Operator: the person who is managing the system / users. Need to define more clearly.
* **Panel incl. API / Central database**
* Team working on this: Lois, Kevin, Kiara (tech lead)
* Python app (Django)
* Independent from NixOS for now (will package this later)
* Note from Valentin: This will be extremely brittle, and we will aquire notable tech debt that needs to be resolved in order to make it reusable by different providers
* First prove the idea, than make it better. We have to be aware of the risk, but we also need to accept some risks.
* **NixOps4 <--> Central Database**
* Team working on this: Kiara (glue code) (Robert NixOps4)
* Glue code talking JSON with NixOps and whatever we specify as an API with NixPanel
* Can be written in any language
* **NixOps4**
* Robert is responsible for this part
* **Identity Management**
* Out of scope for the MVP
* Use the Django included options for now
* **Central services (Help needed from Procolix)**
* **DNS (Hans?)**
* Blocker: DNS is a great unknown
* Need an API to create DNS entries
* Kevin: Currently using PowerDNS, which has an API
* Bjorn: Can we use that for the MVP or will that mess with production?
* Kevin: Hans would be the person to ask
* Ronny: Koen said it might be easy to spin up another instance for PowerDNS. Development DNS setup is a requirement.
* **Email (Hans?)**
* Need to have a development setup
* Storage
* is it working? (Niols?)
* can it talk to the orchestrator? (Robert)
* Garage is working (not supposed to be deployed automatically; is a given just like DNS/Email/Hardware/Virtualisation Provider (Proxmox))
* **Virtualisation**
* Creating VM's in Proxmox is out of scope for the MVP.
* Assumption: VM's with NixOS (+ their root SSH keys) are existing already for the Hello World
* Need to have enough VM's available (help from ProcoliX) & these need to be provisioned manually
* NixOps just sends the config and let's NixOS do its thing
* Package a Fediverse service (Mastodon/PeerTube/Pixelfed) this is what Nicolas has been working on.
## Next meeting
### Thursday 13-02-2025 @10:00 (directly after standup )
**Goal:** Refinement of the issues already in Forgejo based on this meeting we had today.
* Ronny will lead this (Bjorn is unavailable Thursday 13th )
* Participation from Robert & Nicolas is mandatory. Without them we need to reschedule.
## Important dates
* We will have a demo (~30min) & refinement session (~1.5hrs) of these issues every 2 wks to guide us towards the completion of the MVP after our regular standup so around 10:00.
* Deliverable 2
* Deadline: 2025-02-21
* Demo deliverable: 2025-02-24
* Refinement for deliverable 3: 2024-02-24
* Deliverable 3
* Deadline: 2025-03-07
* Demo deliverable: 2025-03-10
* Refinement for deliverable 4: 2024-03-10
* Deliverable 4
* Deadline: 2025-03-21
* Demo deliverable: 2025-03-24
* Refinement for deliverable 4.5: 2024-03-24
* Deliverable 4.5 smaller focussed on _"Crossing the t's & dotting the i's"_
* Deadline: 2025-03-28
* Demo deliverable: 2025-03-31
* MPV Presentation & demo 1-2 April @FediForum.
* Exact time TBD.
* Presenter TBD.

View file

@ -0,0 +1,36 @@
**Standup 2025-02-13 @09:30**
**Present:** Eric, Valentin, Gheorghe, Kevin, Lois, Nicholas, Ronny, Hans, Kiara
Absent: Koen (known), Bjorn (known)
* Ronny
* Good meeting yesterday about the MVP
* Valentin
* Participated in MVP planning yesterday
* Added a glossary, Nicolas reviewed
* Pushed a Django on NixOS setup (800 LOC as promised) so we can start with reproducibility quickly
* Georghe
* No blockers
* Yesterday: At Tweag, a Modus Create company, I performed specific internal project management activities.
* Today At Tweag, a Modus Create company, I performed specific internal project management activities.
* Eric
* No blockers
* MVP meeting yesterday and todaygit
* no other fediversity work planned for today
* Kiara
* Yesterday talked to @roberth about todo, worked on the data model
* Today will continue on data model, talk to @niols about todo
* Kevin
* No blockers
* helped nicolas with troubleshooting the ci machine its working now may needs some tweaking to make it faster
* so probaly be working tuning the ci machine
* Lois
* No blockers
* Had a meeting about the upcoming MVP
* Nicolas
* No blockers
* Got a configuration working for the test CI machine - successfully ran a CI run, about twice faster as with the previous CI machine (a tweaked VM)
* Documentation of services - will open a PR today.
* Robert
* Discussed NixOps related work with Kiara

View file

@ -0,0 +1,7 @@
**MVP dev meeting 2025-02-13 @10:00**
**Present:** Eric, Valentin, Gheorghe, Kevin, Lois, Nicholas, Ronny, Hans, Kiara
![Image 1](Presentatie_Fediversity_2025-02-13T10_43_50.795Z.png)
![Image 2](Presentatie_Fediversity_2025-02-13T10_43_58.845Z.png)

Binary file not shown.

After

(image error) Size: 276 KiB

Binary file not shown.

After

(image error) Size: 258 KiB

View file

@ -0,0 +1,21 @@
**Standup** 2025-02-14 @09:30
**Present:** Björn, Ronny, Robert, Gheorghe
Happy Valentin's day!
Thank your free software developers & maintainers https://fsfe.org/news/nl/nl-202502.en.html#ilovefs
* Ronny
* Meeting was excellent
* Notes are now uploaded
* Spoke with Bjorn & Koen in the afternoon
* Bjorn
* Yesterday had other obligations, but spoke with Ronny & Koen in the afternoon
* Today will look at the notes from yesterday
* Maybe finish up the presentation
* Gheorghe
* No blockers
* Yesterday: Excelent meeting with all colleagues
* Today: Start to identify the epics and create the user stories with the collagues. Gherkin will be used for testing
* Robert
* Made small PRs to nixops4-nixos for ssh.user, sudo.enable, SSH options
* No blockers

View file

@ -0,0 +1,35 @@
**Standup 2025-02-17 @09:30**
**Present:** Björn, Kevin, Kiara, Gheorghe, Koen, Ronny, Robert, Valentin, Nicolas
* Bjorn
* Almost done with Fediversity presentation. Worked on this yesterday. Hope to finish this today.
* Would like to discuss the presentation later this week
* Will be less available today & Tuesday
* Kevin
* No blockers
* nothing to report since friday.
* will probaly be looking on getting a good grasp on django today
* Gheorghe
* No blockers.
* Friday and Saturday worked with the Tweag, a a Modus Create company, team members, to create the Epics for the first MVPrototype.
* Today I updated the document with the User Stories and the Gherkin tests for it.
* Kiara
* Thursday worked on getting devs up to speed, creating/estimating issues
* today will work on panel, meeting Nicolas, maybe data model
* Koen
* attended HackerHotel (good place to show our product in 2026)
* subgrants may help in the 'uniforming' area (differences between apache/nginx/caddy)
* Ronny
* No blockers, nothing to report since Friday.
* Robert
* No updates
* Will not work on Fediversity today
* Valentin
* Uploaded Django scaffold code last Thursday
* Will be available for answering questions, reviewing issues and code, and pair programming
* Will be less available today, but fully available tomorrow.
* Nicolas
* No blockers
* Worked for the Epics with Gheorghe; Multimachines working to;
* Today we'll work for the User Stories details. Meeting with Kiara maybe today.

View file

@ -0,0 +1,39 @@
**Standup** 2025-02-18 @09:30
**Present:** Björn, Kiara, Eric, Lois, Kevin, Hans, Gheorghe, Robert, Valentin, Ronny
* Kiara
* yesterday worked on panel auth/form
* today will work on deploying the panel
* Eric
* no blockers
* available
* Gheorghe
* No blockers
* Worked on episc and US; internal meetings; internal PM activities
* Will work on the epics, user stories, and internal project managemet activities.
* Bjorn
* Did not work on Fediversity
* Met Arnout yesterday (Netxtcloud packager)
* Today: will finish presentation
* Q: Monday next week a demo & refinement session is planned. Is everybody aware of this & knows what to work on?
* Kevin
* Had a small discussion with niols about the how services are separated for the pixelfed.com instance. Will have to see i can write some documantion for that so he van nixify it.
* Will meet up with Valentin, Loïs en Kiara to work on django and the fedi panel
* Loïs
* Did not work on Fediversity
* Wil meet-up with Valentin, Kevin and Kiara after stand-up to discuss the FediPanel.
* Hans
* No updates, still working on making the playbook production-ready
* starting on the DNS-infra this week
* Valentin
* Reviewed some front-end code, user stories, and task breakdowns yesterday; discussed procedure with Kiara
* Available for pair programming and reviews today
* Nicolas:
* No blockers
* Worked on episc and US; internal meetings; internal activities
* Will work on the epics, user stories activities.
* Robert
* No updates
* Available today
* Ronny
* No updates. no blockers

View file

@ -0,0 +1,44 @@
**Standup:** 2025-02-19 @09:30
**Present:** Bjorn, Kiara, Koen, Eric, Kevin, Gheorghe, Lois, Ronny, Nicolas, Valentin, Robert
**Absent:** Hans (known)
**Updates:**
* Kiara
* Yesterday: paired on panel, worked on panel deployment
* Today: will continue on panel deployment
* Gheorghe
* No blockers;
* Yesterday: Epics, User Stories, internal specific PM activities;
* Today: Epics, User Stories, internal specific PM activities;
* Eric
* no blockers
* no fediversity work planned today
* available
* Koen
* planning: presentation meeting
* Bjorn
* Yesterday: finished presentation
* Today: discuss the presentation with Koen & Ronny
* Planned: reading docs & issues
* Kevin
* Worked with Loïs, Kiara and Valentin on the django fedipanel for the first mvp
* this morning I have some other stuff today i believe we're gonna continue working on the django this afternoon
* Lois
* Paired with Kevin, Valentin and Kiara to work on the first user story.
* Planned to meet in the afternoon to continue working on the fedipanel.
* Valentin
* Pair-programming on 1st user-story
* User story is done, closing ticket is blocked on deployment of the app
* Will add a test; to show how tests are written
* Will continue reviewing the backend user stories for Nicolas after that
* Ronny
* Had a chat with Eric about progress
* No blockers
* Robert
* No updates
* Will be working on NixOps4
* Nicholas
* No blockers
* Bit confused about the VM's in Proxmox.
* Would like to know which VM's & IP addresses can be used freely without destroying other people's work

View file

@ -0,0 +1,40 @@
**Standup** 2025-02-20 @09:30
**Present:** Gheorghe, Valentin, Björn, Ronny, Kiara, Nicholas, Eric, Koen, Lois
**Absent:** Robert (excused)
**Status:**
* Gheorghe:
* No blockers;
* Yesterday: Worked on the Epics, User Stories, Tasks and Sub-Tasks, estimations for the first MVP (Prototype), Internal project management tasks
* Today: Will work on the Epics, User Stories, Tasks and Sub-Tasks, estimations for the first MVP (Prototype), Internal project management tasks
* Eric:
* no blockers
* available
* Kiara
* no blockers
* Yesterday: paired on panel data persistence with Kevin/Lois + discussed deployment with Nicolas
* Today: will continue on both
* Valentin:
* Finished the test for the first user story
* Refined Tweag's user stories for the MVP with Nicolas
* Side channel architectural discussions with Kiara
* Reviewed new code by Lois and Kevin
* Will continue refining user stories with Nicolas after the standup
* Bjorn
* Yesterday: no fediversity
* Today: discuss presentation with Koen & Ronny
* Next week: availability limited (added to wiki): only Monday.
* Kevin
* worked with Loïs and kiara on the first user story
* Koen
* no updates, will talk about Fediversity at the AngryNerds podcast this evening.
* Lois
* Worked with Kevin and Kiara on the first user story
* Ronny
* The best ice-breaker for the meeting! Thank you, Ronny!
* Nicholas
* Block-ish: would like to send out an email for testing.
* Kevin will help out with an email address
* Will meet with Kiara & Valentin again
* Need to clean out WIP branches a bit

View file

@ -0,0 +1,30 @@
**Standup:** 2025-02-21 @09:30
**Present:** Bjorn, Gheorghe, Hans, Ronny, Bjorn, Robert, Kevin
**Absent:** Valentin (known), Nicolas (excused), Kiara (known), Lois(know), Koen(known), Eric (known)
**Status:**
* Gheorghe
* No blockers
* Yesterday: MVP Tweag, a Modus Create company, initial project plan + internal specific project management activities
* Today: MVP Tweag, a Modus Create company, initial project plan + internal specific project management activities
* Bjorn
* Had a discussion with Koen & Ronny: Presentation v1 is done
* Contacted the partners
* Looking forward to the demo Monday
* Not working on Fediversity today
* Ronny
* Discussed the presentation with Bjorn and Koen
* Discussed planning with Eric
* Niols (via Matrix)
* Will skip the stand-up today. No blockers. Kevin got me email access, I need to try. Met with Valentin and Kiara to refine our April MVP user stories
* Hans
* Didn't work on Fedi yesterday
* Making progress in automatically installing Matrix servers.
* Robert
* Entered availability
* No blockers
* Kevin
* worked on the first user story with kiara and loïs. its finished as far as we believe the pr needs a review. Will add @Valentin and @Nicholas to notify them
* got a request from internaly to document the proxmox so im continuing that

View file

@ -0,0 +1,44 @@
**Standup 2025-02-24 @09:30**
**Attendees**
**Present:** Björn, Gheorghe, Valentin, Ronny, Robert, Valentin, Kiara, Eric, Kevin, Nicolas
**Absent:** Hans (known), Lois (known), Koen (known)
Agenda for this morning
- Standup
- Short break
- Demo
- Short break
- Upcoming sprint planning
Standup details
* Gheorghe
* No blockers.
* Last week: Finished the document for the MVP in April 2025, and added the initial project plan and its Gannt in the document.
* Tommorow: Specific project DSU's activities and internal PM activities.
* Valentin
* Paired with Nicolas on refining and estimating user stories for the MVP
* Eric
* low availability today
* wish to participate in discussions involving data model needs
* Björn
* Friday: only fediveristy meeting; do we want to keep standups on Friday?
* Today: In the morning Fediversity, afternoon other obligations
* Rest of the week holidays
* Looking forward to the demo :)
* Kiara
* last day worked on stories w/ tweag, getting devs unblocked
* today will work on user stories, maybe data model
* Ronny
* Friday we had a very light standup.
* No blockers, no updates.
* Looking forward to the demo.
* Kevin
* worked on writing some documantation off the proxmox setup
* Robert
* No updates
* Nicolas
* No blockers
* Worked with Valentin for the MVP tasks and estimations. Meet with Kiara.
* Participate to all meetings today and work following the initial pp.

View file

@ -0,0 +1,39 @@
**Date**: 25.02.2025
**Time**: 10.25 EET
**Absents:** Bjorn(excused)
**Presents:** Gheorghe, Ronny, Eric, Kiara, Lois, Nicolas, Robert, Koen, Kevin, Valentin
**Project status:**
• Gheorghe:
o No blockers;
o Yesterday: Internal PM activities;
o Today: Moderate the DSU and internal PM activities;
• Eric
o No blockers
o No updates
• Kiara
o Yesterday, I worked on stories, panel deployment
o Today, continuing on panel deployment
• Ronny
o Discussion with Bjorn about Kanban board usage
o No blockers
• Kevin
o I didn´t do much for the FeDiversity yesterday besides the demo and sprint planning meeting
o will continue working on the panel today with Loïs and Kiara
• Koen
o No blockers
o Aiming to have Slik ready to start work on design and UX this week (for the MVP)
• Lois
o No updates
o will continue working on the panel today with Kevin and Kiara today
• Nicolas
o finalized consolidating `deployment/` into `infra/` directory, with machine definitions now containing their hardware part as well (ready to migrate to a NixOps4 Proxmox provider when there is one)
o will work today on creating a full deployment from a simple one-or-two-field JSON file
o if I have more time, I will work on e-mail support. was unblocked by Kevin, but I haven't made use of that yet
• Robert
o No updates
• Valentin
o No updates

View file

@ -0,0 +1,30 @@
**Present:** Hans, kiara, Gheorghe
**Absent:** Koen, Bjorn, Robert (all excused)
**Project status updates:**
* **Kiara**
* yesterday, I worked on panel deployment, discussed breaking changes with Valentin
* today, we will continue on these
* **Hans**
* Been ill
* Working on a one-shot installation
* **Eric**
* no blockers
* available
* **Loïs**
* No blockers
* Working on Fedipanel
* Continue working on Fedipanel with Kevin today
* **Gheorghe**
* No blockers
* Yesterday: DSU and Internal PM activities
* Today: DSU and internal PM activities
* **Valentin**
* Discussion with Kiara raised some architectural questions I would like to elaborate on with Robert and Nicolas as well
* Essentially, it revolves around where to place code so we don't have to tear everything apart in a couple of weeks
* I also had some internal meetings
* **Niols**
* Finalized moving hardware information into machine descriptions and discontinuing the old `deployment/` directory.
* (Working) A proof of concept piece of work is needed to consume a small JSON file and produce a NixOps4 deployment.

View file

@ -0,0 +1,13 @@
Managing version drift
Attendees: Nicolas, Kiara, Valentin
Problem: if we want to allow users control over when to update, would this not mean we may not tightly couple our Django data model with the underlying versions of module options (the "type" equivalent, where actual configurations are "values")?
- decouple the types in the deployed Fediversity code from past versions using json-schema?
- would we need to store the json-schema? yes
- would we need to store a way to display each json schema even if already have a way to visualize forms from json schema? if we want to explain schema changes requiring user decisions (if not also just communicating option addition/removal) then yes
- is diffing json good enough for presentation? likely not. have we not lost too much structure? yes. we'd need to be able annotate the difference between schemas, which are essentially another form of migrations, except not at the ORM schema level
- most of the time we'll only need to diff subsequent versions, but if we're good we'll make those mappings transitive
- what about users wanting to update applications at different times?
- for now let's keep this out of scope

View file

@ -0,0 +1,13 @@
# Architecture discussion 2025-02-26
Attendees: Nicolas, Kiara, Valentin
Problem: if we want to allow users control over when to update, would this not mean we may not tightly couple our django with the underlying versions of module options (the "type" equivalent, where actual configurations are "values")?
- decouple using json-schema?
- would we need to store the json-schema? yes
- would we need to store a way to display each json schema even if already have a way to visualize forms from json schema? if we want to explain schema changes requiring user decisions (if not also just communicating option addition/removal) then yes
- is diffing json good enough for presentation? have we not lost too much structure? likely not; we'd need to be able annotate the difference between schemas, which are essentially fancy migrations
- most of the time we'll only need to diff subsequent versions, but if we're good we'll make those mappings transitive
- what about users wanting to update applications at different times?
- for now let's keep this out of scope

View file

@ -0,0 +1,44 @@
**Standup meeting**
**Date:** 2025-02-27
**Present:** **Ronny**, **Gheorghe**, **Kiara**, **Eric**, **Valentin**, **Robert**, **Lois**, **Koen**
**Absent:** **Nicolas** (excused)
**Status update:**:
**Gheorghe**
- No blocker
- Yesterday: DSU and internal PM activities
- Today: DSU and internal PM activities
**Eric**
- No blockers
**Ronny**
- No blockers
- Yesterday: no Fediversity
**Kiara**
- No blockers
- Yesterday: deployed fedipanel, discussed decoupling deployment structure from fedipanel w/ @niols/@fricklerhandwerk
- Today: work on triggering orchestration from fedipanel, guide slik on design
**Valentin**
- Resolved the immediate blocker about version drift thanks to Kiara and Nicolas
- Didn't get to writing any code
**Lois**
- Worked on Fedipanel: separation of configuration form with Kevin
- No blockers
- Today: continue working on Fedipanel
**Robert**
- Yesterday: no Fedi/NixOps
- Today: state support in NixOps
- No blockers
**Koen**
- Have UX / UI designers for 200h in March (Timo and Thijs)
- No blockers

View file

@ -0,0 +1,29 @@
**Standup:** 2025-03-03 @09:30
**Present:** Bjorn, Kiara, Gheorghe, Kevin, Robert, Valentin, Ronny
**Absent:** Nicholas (known), Hans (known)
* Bjorn
* Today: Read up on the notes & issues. Other obligations
* Tomorrow: Fediversity
* Kiara
* Past day: had an architectural discussion, worked on panel deployment, triggering nixops from the panel
* Today: will continue on triggering nixops from the panel
* Koen
* No blockers
* No updates
* State of Hans
* Kevin
* No updates. Will see what I Missed last weeks since thursday.
* Gheorghe
* No blocker
* Last week: Updated the project plan for the MVP in April+internal PM activities
* Today: internal PM activities
* Robert
* No updates
* Ronny
* No blockers
* No updates
* Valentin
* Did code reviews and caught up with discussion on Forgejo
* Available to help finishing the two open user stories
* Need to discuss with Robert the next integration points with NixOps4

View file

@ -0,0 +1,47 @@
# Sync with Robert on NixOps4 dependencies for the MVP
The current idea is to control Terraform from NixOps4 at the resource provider level and handle data flow in NixOps4
While we could interface with Terraform as a whole and let it handle its own dataflow, we'd be programming three components, and the idea was to reduce the number of components we need to take care of
Another option would be integrating terranix, but that's an entire different user story
Arguably we can implement all the variability for an otherwise fixed set of resources (such as secrets, DNS, ...) with what we have already
Nested deployments are only required if we have CLI-first use cases that operate directly on expressions
For demo purposes until further notice, our parameters are a constant as far as NixOps4 is concerned, and its internal data dependencies can be resolved e.g. in the front end's data model
More important for now is having TF provider wrappers for common use cases, because that is where the application value lives
- kiara: i'm not sure i see TF wrapping as as important as nested deployment, fallback way if we need a TF step seems embed/use TF itself
On progress indication: NixOps4 is using the tracing library underneath, which offers separate events and spans (with start and end)
Adding JSON output is a quick fix
The CLI progress indicator already uses this infrastructure
There's no interface for providers yet, because so far the assumption is that they're short-lived
Having that would be nice, but note that it would require substantial changes to NixOS build/activation logging
Most of the value can already be provided by the NixOps4 core, given it knows which resource providers need to be run and which are done
Could be follow OpenTelemetry in a creative way so NixOps4 doesn't have to own the schema
Long term providers could talk via API servers using some IDL such as capnproto
Conclusion: We will drop JSON into the nixops invocation for the MVP and use the basic JSON logging infrastructure for progress indication
Mid term we'll want Terraform provider wrappers to do the resource provisioning
We can continue discussing long-term architecture decisions (such as protocols, concurrency, scheduling) independent of near-term milestones
Expression demonstrating the infinite recursion that would be resolved using [nested deployments](https://git.fediversity.eu/Fediversity/Fediversity/issues/170):
```nix
resources = { config = { ... }; }
// optionalAttrs (f resources.config) { vm = g resources; }
```

View file

@ -0,0 +1,35 @@
**Standup:** 2025-03-04 @09:30
**Present:** Bjorn, George, Ronny, Kevin, Lois, Valentin, Kiara, Robert
**Absent:** Nicholas (known), Hans (known), Koen (known)
* Bjorn
* Yesterday: no Fediversity.
* Today: Catch up
* Ronny
* Yesterday no Fediversity
* no blockers no updates
* Gheorghe
* No blockers
* Yesterday: Internal specific PM activities
* Today: Internal specific PM activities
* Eric
* No blockers
* No updates
* Kiara
* Yesterday: Form PR. Unblock front & backend so triggering with NixOps will work.
* Today: continue with this
* Loïs
* No blockers
* No updates
* will continue work with Kevin and Kiara on the django
* Kevin
* No updates
* will continue work with lois and kiara on the django
* Valentin
* Clarified things we need from NixOps4 for the MVP and mid/long term with Robert and Kiara
* Summary: a bit of JSON logging for now, but eventually we'll serve OpenTelemetry in the Panel for capturing fine-grained progress indication
* Hacked out a sketch for managing versioned configuration schemas
* Code reviews
* Robert
* Worked on OpenTelemetry logging
* No blockers

View file

@ -0,0 +1,29 @@
**Standup:** 2025-03-05 @09:30
**Present:** Bjorn, Eric, Gheorghe, Koen, Lois, Valentin, Kevin
**Absent:** Nicholas (known), Hans (known), Ronny (known), Kiara (Nix gathering)
* Bjorn
* Yesterday: other obligations :(
* Today:
* Q: How is the work on deliverable 3 going? Demo on Monday 10th...
* Eric
* No blockers, no updates
* Gheorghe
* No blockers
* Testerday: Internal PM activities
* Today: Internal PM activities
* Loïs
* Looked at Kiara's feedback for fedipanel
* No blockers
* Koen
* Spoke with Thijs and Timo and Kiara
* I would like a general 'how to check an application' before sending it to NixPkgs discussion (not now).
* Remy (EU thing)
* Valentin
* Pingponged code with Kiara yesterday, should merge basic handling versioned configurations today
* Available for consultation and code review
* Kevin
* worked on the django yesterday resolving some comments from valentin in our pr
* schedule for today is pretty full so probaly wont get much done for fediverse
* Robert
* No updates

View file

@ -0,0 +1,37 @@
**Standup:** 2025-03-06 @09:30
**Present:** Bjorn, Eric, Gheorghe, Koen, Lois, Ronny, Valentin
**Absent:** Nicholas (known), Hans (known), Kiara (known)
* Gheorghe
* No blockers
* Yesterday: Internal PM activities + starting the central document for the Tweag back-end Nix creation.
* Today: Internal PM activities + continuing the central document for the Tweag back-end Nix creation.
* Koen
* no blockers
* no updates
* Valentin
* Discussed steps for demo preparation with Bjorn, Kevin, Lois
* Continued tying up the data models in the backend
* Reviewed the deliverables document Gheorghe prepared
* Reviewed Robert's "modular services" PR
* https://github.com/NixOS/nixpkgs/pull/372170/
* Bjorn
* Yesterday: spoke with Ronny, Valentin & with Kevin & Lois about the demo
* Today: will speak with Koen.
* TODO: will remove the old board
* Loïs
* Blockers: Needing a review on pr 141
* Worked on MVP 2 preperation
* Worked with Valentin and Kevin on versioned configurations
* Today: Prepare further for demo 2
* Eric
* no blockers
* available
* Kevin
* blocked on needing a review on the pr 141
* Yesterday, met with loïs and Valentin to look at versioned configurations
* also had a meeting with loïs, valentin and Bjorn for the mvp 2 next tuesday
* This morning had a discusion with Loïs to prepare for the next demo
* Ronny
* Had a chat with Bjorn about structure
* Preparing the partnermeeting on Friday

View file

@ -0,0 +1,15 @@
**Standup:** 2025-03-07 @09:30
**Present:** Bjorn, Gheorghe
* Gheorghe
* No blockers.
* Yesterday: Internal project meetings and actions. Meet Erik and discussed more details about the documentation.
* Today: Internal project meetings and actions.
* Bjorn
* Yesterday:
* chat with Koen
* cleanup Meta repo
* Today:
* partner status meetup
* add daily standup notes to repo

View file

@ -0,0 +1,26 @@
**Standup:** 2025-03-10 @09:30
**Present:** Björn, Hans, Gheorghe, Ronny, Robert
**Absent:** Koen (known), Kevin (known) Lois (known), Valetin (known), Nicolas (known)
* Björn
* Friday:
* Partners meeting
* Standup (no more on Friday)
* Today
* Chat with Kiara?
* Mail partners
* Gheorghe
* No blockers
* Friday: Internal PM activities
* Today: Internal PM activities
* Hans (welcome back!)
* planning to work on other projects than Fediversity
* Robert
* Did some prep work for improving flakes integration
* Will not attend most standups until 27th (see wiki)
* Will be available at Matrix for questions
* Ronny
* No blockers
* No updates
* Need to reschedule partnermeeting
* Looking forward to demo tomorrow

View file

@ -0,0 +1,32 @@
**Standup:** 2025-03-11 @09:30
**Present:** Bjorn, Kevin, Koen, Kiara, Gheorghe, Lois, Eric, Ronny
**Absent:** Hans (known), Valentin(known), Nicolas(known)
* Bjorn
* Yesterday: partners mail
* Today:
* Demo
* Going through planning
* Chat with Kiara
* Koen
* fighting windmills (nix and debian). Start with learning the app on the OS it supports, than look at things like Nix.
* Kevin
* no updates:
* today: doing the demo with lois en kiara
* Kiara
* Past days: Planet Nix
* Today: continue triggering orchestration from panel, get back up to speed, maybe discuss roadmap
* Gheorghe
* No blockers
* Yesterday: Internal PM activities
* Today: Internal PM activities
* Loïs
* Today: Demo 2, discuss whats next
* Past days: prepared for demo 2
* Eric
* No blockers, available
* Ronny
* No blockers
* Looking forward to demo
* Robert
* no updates and now traveling listening in but noisy environment

View file

@ -0,0 +1,19 @@
Standup: 2025-03-12 @09:30
Present: Björn, Kiara, Eric, Kevin, Lois
Absent: Koen (known), Gheorghe(known), Nicolas(known), Robert(known), Valentin(known), Ronny(known)
Updates:
* Kiara:
* Yesterday: paired on nixops from django with Lois
* Today: ^
* Bjorn
* Yesterday: Demo & meetings
* Today: going through work packages / deliverables & other obligations
* Eric
* available
* Loïs
* Yesterday: Demo 2, made a connection between panel and Nixops
* Continue working on the panel today
* Kevin
* Yesterday: Demo 2 & after discussion
* small talk a with koen about my availability

View file

@ -0,0 +1,25 @@
**Standup:** 2025-03-13 @09:30
**Present:** Bjorn, Lois, Kevin, Eric, Valentin, Kiara, Ronny
**Absent:** Hans (known), Nicolas(known), Koen(known)
* Loïs
* Yesterday: worked on deploying something with the fedipanel with Kiara, but we are having some nix issues.
* Meeting with Thijs and Tiemon about the fedipanel design
* Updated Kanban bord
* Today: meet with Kiara, Kevin and Valentin?
* Bjorn
* Yesterday: Other obligations
* Today: Other obligations
* Eric
* no updates, available
* Kevin
* Yesterday had a meeting with kiara, loïs and thijs and tiemon from slik about the design of the fedi panel
* followed along a small bit with what kiara and loïs where doing
* today: will work with loïs and kiara on de the panel
* around 12:00 i will leave with koen to leiden again
* Kiara
* Yesterday: design meet, trigger nixops from django (#246) w/ lois
* Today: continue on trigger nixops from django
* Valentin
* No updates
* Has some time to pair with the devs today

View file

@ -0,0 +1,20 @@
_Notes re-created as I was not fast enough to download them before the session was ended_
**Standup:** 2025-03-17 @09:30
* Kevin
* Thursday: troubleshooted the forgejo with eric after an reboot the notifications work again
* Friday: no updates
* Today: give valentin dns access. moslty will do procolix stuff but try to do some small fedi stuff inbetween
* Valentin
* At ocean sprint this week
* Thursday: Discussed code review items with Kiara, studied deployment code to clarify next steps, went through new issues Kiara opened
* Kiara
* Past day: work on triggering orchestration from the panel w/ @lois
* Today: continue on this
* Björn
* Friday: partners meeting, talk with Koen.
* Today: other obligations
* Ronny
* Partners meeting
* Today: other stuff

View file

@ -0,0 +1,26 @@
**Standup:** 2025-03-18 @09:30
**Present:** Bjorn, Eric, Lois, Kevin, Ronny, Valentin, Kiara
**Absent:** Koen(known), Robert(known), Gheorghe(known), Nicolas(known), Hans(known)
_Note: please do *not* press 'end meeting for all'_ 😉
* Björn
* Yesterday: only standup
* Today: worksession with Ronny updating the deliverables
* Loïs
* Thursday: worked with Kiara on deploying Fedipanel
* Today: continue working on the fedi panel with Kevin
* Valentin
* Talked with Robert about the SSH issues encountered while trying to deploy, pushed half of a workaround
* Kiara
* Yesterday: locally orchestrate from panel
* Today: deploy panel able to orchestrate
* Kevin
* Yesterday spend a few hours going through all the work i have for procolix and planning them so I have more time now this week to fully work on fediverse from today to thursday
* So today i will be working on the on the panel with Loïs again
* Eric
* helped kevin to get forgejo notifications working again
* available
* Ronny
* Yesterday: standup
* Today: worksession with Bjorn updating deliverables

View file

@ -0,0 +1,31 @@
**Standup:** 2025-03-19 @09:30
**Present:** Eric, Lois, Kevin, Ronny, Koen, Kiara
**Absent:** Gheorghe (known), Nicholas(known)
**Updates**
* Eric
* available
* Lois
* Yesterday: worked on the progess indicatorwith kevin
* Today: Continue working on the progress indicator
* Kevin
* Yesterday: worked with loïs on the progress indicator
* Today
* morning bit busy with other stuff have to take my cat to the vet for vacination
* the rest of the day will continue with kiara en lois on the indicator and the panel
* Ronny
* Worked with Bjorn on the deliverables.
* Had a conversation with Eric about outreach
* Had an internal NLnet converation about the project
* Koen
* No blockers
* today: level with Kiara and Lois and Kevin (afternoon)
* Valentin
* Fixed panel deployment code, now accessible under https://demo.fediversity.eu
* Reviewed Kiara's code
* Kiara
* Yesterday: distilled pr for local deploy button, continue on getting it to work in production
* Today: continue on deploy button in production
* Björn
* Yesterday: worked on deliverables with Ronny & spoke with Koen. Tried to get some work done on the communication strategy
* Today: other obligations

View file

@ -0,0 +1,24 @@
**Standup:** 2025-03-20 @09:30
**Present:** Bjorn, Eric, Lois, Kevin,Valentin, Kiara, Koen
**Absent:** Ronny (known), Gheorghe (known), Hans(known), Nicholas(known)
* Kevin
* Yesterday: worked with Loïs and kiara to get a pogress spinner working in the panel
* Today: work on the feedback and see whats next
* Kiara
* Yesterday: work on orchestration from panel online
* Today: work on orchestration from panel online
* Lois
* Yesterday: got the progress indicator to work
* Today: work on some of the feedback from Kiara gave for the progress indicator
* Valentin
* Reviewed the deployment triggering PR
* Followed up with async questions
* Conversations at Ocean Sprint on all sorts of rather mid-to-long-term topics (architecture ideas for building UI on top of NixOS modules, approaches to solve systemic issues in the Nix ecosystem)
* Koen
* 2 candidates in 'sight'
* Eric
* available
* Bjorn
* Yesterday: Standup, no communication strategy.
* Today: Announcement on website of participation at Fediforum. Other obligations

View file

@ -0,0 +1,43 @@
**Standup:** 2025-03-24 @09:30
**Present:** Bjorn, Kevin, Ronny, Robert, Kiara, Koen, Gheorghe, Nicholas, Valentin
* Ronny
* Friday partnermeeting
* Today, uploading deliverables
* Kiara
* Past day(s): live deployment (weekends: by TF)
* Today: tbd?
* Koen
* Lois, Kevin and Kiara are all coming to Fediforum.
* Lois will do the demo and will be supported by Kevin and Kiara
* Looking to hire one or two more senior people
* Pixelfed 'not waiting for Daniel'
* Kevin
* Thursday: Something came up for procolix so i had to quickly help with that
* Friday: procolix day
* Today: on order of koen work on Pixelfed.com and plan the rest of my week
* Valentin
* Last week: fixed deployment and small scale productivity issues, code reviews and tactical implementation discussions with Kiara in between Ocean Sprint activities
* Had a very productive MVP milestone 3 planning meeting with Kiara, Lois, Kevin last Thursday
* This week: will continue with code reviews and catching up with Nicolas
* Bjorn
* Friday: partner meeting
* This week:
* Today: Other obligations
* Tuesday: Other obligations; Who will take over DSU?
* Wednesday: demo & Fediversity & continue with deliverables (communication strategy)
* Thursday: half a day Fediversity & continue with deliverables (communication strategy)
* Friday: project partners meeting
* Gheorghe
* No blocker
* Last week: Internal PM activities
* Today: Internal PM activities
* Robert
* Completed OceanSprint: good vibes between Nix implementers. Glad to have contributed to that after rough year. Community can heal.
* Merged Kiara's fix
* Made some progress on resource state
* Aeolus: modeling state transitions in NixOS by Ma27
* Nicolas (sorry :p)
* back from holiday
* will spend the day catching up

View file

@ -0,0 +1,35 @@
**Standup:**
**Present:** Bjorn, Kevin, Ronny, Robert, Kiara, Koen, Gheorghe, Nicholas
**Absent:** Robert, Valentin, Bjorn (excused)
Status:
* Loïs
* Thursday: Worked on the progress indicator with Kiara
* Today: Meeting with Slik with Kevin and Kiara
* Nicolas
* lots of catching up after holiday
* Working on integration test (potentially with Selenium) at least trying to run NixOps
* Kevin
* Worked on the pixelfed.com instance waiting for daniel for s3 storage connection details
* did some planning on my tickets have allot of procolix but i probably alteast have half today for fediverse
* Gheorghe
* No blockers
* Yesterday: Internal PM
* Today: Internal PM
* Kiara
* Yesterday: deploy button, debugging versioning for MVP
* Today: deploy button, design meeting
* Ronny
* No blockers
* Yesterday reporting and recording podcast
* Today deliverables
* Koen
* was interviewed by Fedivariety
* will try to 'push' Daniel to give stuff faster
* 16 and 17 april are 'go'
* remark about design meetings
* Eric
* no blockers,
* hopeful to meet with Ronny today for Fediversity visibility
* available

View file

@ -0,0 +1,40 @@
# Fediversity design meeting 2025-05-25
Present: {thijs,timon}@slik, {lois,kevin,kiara}@procolix
- timon: *demonstrates design*
- timon: i already selected some relevant icons, selected colors for dark/light themes together with one accent color, a kind of professional blue. for branding the application we could either offer a pre-set selection of colors, or a color picker.
- thijs: we can also display recent releases, e.g. to show newly released versions of mastodon.
- kiara: it isn't obvious we can always update deployed applications automatically, as deployments involve user-selected options that may be non-trivial to migrate, potentially requiring new user choices - tho it may also be desirable to just give users more agency in choosing when to update applications, sooner or later.
- thijs: maybe we could let users select updating policies separately by application.
- kiara: in the future, perhaps.
- thijs: will you write update posts, or the hosts?
- kiara: maybe we could just link to the application developers' release notes, but on the other two... eventually both, maybe?
- thijs: as for billing, does it make sense to show a 'used disk' meter with an upgrade button?
- kiara: capacity such as disk space may in part be bound to deployed applications, tho for other parts like immutable storage we may be able to just meter actual usage, rather than requiring space be reserved upfront.
- thijs: maybe you could also offer hosts different options for the billing.
- timon: i made a help button including an FAQ, knowledge base and support. for the search field, would we like context-sensitive or general search results?
- kiara: eventually context-sensitive as well, altho we haven't really gotten to the point of thinking about search so far.
- timon: i also added an 'install app' button (maybe just app-specific install buttons), and notifications categorized like releases / changelog.
- thijs: so the notifications can be categorized this way.
- timon: the install button i imagined to be at the host level, so they can choose whether to install and offer an application to their operators.
- kiara: the target audience of this web interface are the operators, as hosts already had the skills to install these applications.
- thijs: hosts could instead use a config file to enable/disable certain applications.
- timon: ok, then this button can be removed.
- timon: what applications might you offer down the road?
- kiara: *mentions some open-source and fediverse applications*
- timon: how about number of applications?
- kiara: operators could have multiple deployments, each of which could have different applications deployed.
- timon: should we incorporate this into the design using a workspace switcher?
- kiara: maybe, although i could imagine views where deployed applications might be grouped by such a deployment as well.
- thijs: i think you could prevent various concerns by letting users focus on a single workspace at a time for now, in case these say pertain to different clients of theirs.
- timon: we also made a mock-up for an application detail page, e.g. a mastodon one with some general description, potential user actions, maybe update/action history logs.
- timon: the mock-up for the install view shows different steps, some sample toggles.
- kiara: so far the designs have focused on a desktop setting, had you already considered responsiveness for e.g. mobile displays?
- thijs: we will eventually work on a mobile setting as well, yeah, but the desktop case is easier to present, if not probably our first use-case here.
- thijs: maybe koen will have some feedback as well.
- lois: could you maybe send him the design already?
- thijs: in fact, it can be found [at this link](https://www.figma.com/proto/AZbFAac2Xjxs3q1H3orXzO/Fedi-Design-system?page-id=97%3A1682&node-id=104-1754).
- kiara: *mentions challenges wrt visualizing diffs in configurations / options*
- TODO@procolix: offer example options for e.g. mastodon.
- lois: i'll send an invite for the meeting with koen.

View file

@ -0,0 +1,36 @@
**Standup:** 2025-03-26 @09:30
**Present:** Bjorn, Gheorghe Lois, Kevin, Hans
**Absent:** Koen (known), Ronny (known), Nicolas(known)
* Gheorghe
* No blockers
* Yesterday: Internal PM activities
* Today: Internal PM activities
* Hans
* No updates
* Working on non-Fediversity stuff for bit
* Loïs
* Yesterday: demo preperations, fixing the merge conflicts so that pr 259 can be merged into main.
* Today: demo
* Kevin
* Yesterdat prepared for the mvp with loïs en kiara. did some final changes to the pr hoping it can me merged into main before the demo
* still waiting on de s3 details from daniel for the pixelfed
* today: demo
* Kiara
* Yesterday: demo env button, test Mastodon to make user and toot
* Today: demo env button
* Björn
* Yesterday: other obligations
* Today: working a bit on deliverables
* Valentin
* Monday:
* Synced with Nicolas, sketched next steps for the Nix backend
* Started with a simple JSON Schema -> module options conveter, read up on Clan's module options -> JSON Schema converter
* Code reviews; deployment from panel not possible (reasons pointed out by Kiara in the issue tracker)
* Internal meeting
* Robert
* No updates
* Eric
* No updates

View file

@ -0,0 +1,26 @@
**DEMO:** 2025-03-26 @09:30
**Present:** Bjorn, Gheorghe Loïs, Kevin, Hans, Eric, Kiara, Koen, Ronny, Valentin, Nicolas, Hans, Robert
**Demoed behavior**
* logged into the panel
* selected services to deploy, saved configuration
* clicked deploy button (observed NixOps4 working in the console)
* accessed pixelfed.fediversity.net and logged in with hard-coded user
* accessed mastodon.fediversity.net
* (un-deployed mastodon, still there; not part of the planned demo features)
**Demo notes (todo/actions/preperations)**
* Bjorn: from-scratch deployment takes a while (~400s), would need to talk a bit during the demo and explain what's happening at Fediforum
* Koen: in the final version we may want to display some install-tainment in the web view (in addition to the progress indicator), e.g. what one can do with the various services
* Progress indicator ideas (cherries on top)
* Count down from estimated time it will take
* Maybe show the progress log from CLI (advanced option?)
* Valentin: Should deploy to <service>.<user>.fediversity.eu (for a hard-coded username for now)
* And display the URLs in the panel (#264)
* Bjorn: Should log payloads sent to NixOps4 so we can explain a bit more of the inner workings
* Gheorghe: We may want imperative changes to service state or use a Staging Server as alternative for any special situation.
* Valentin: This would be purely a UX design issue mapping UI operations to the full-system declaration; the backend will still be declarative. We may need to consider performance/scheduling issues though, Kiara had opened issues regarding that
* Bjorn: For the demo on 1-2 April: would be great if we can also remove a service.
* Nicolas: Currently if we disable a service, NixOps4 is not informed of the existence of this resource and doesn't do anything about it; will rewire the deployment code today to fix that
* Eventually we'll need more state than enabled/disabled, e.g. diagnostics mode where a service keeps running but isn't exposed via DNS
* Nicolas: This would need to manipulate something different than the actual machine on which the service runs, such as the load balancer; this is currently not mapped out in the architecture so it would be a topic for later

View file

@ -0,0 +1,31 @@
**Standup:** 2025-03-27 @09:30
**Present:** Bjorn, Gheorghe, Eric, Hans, Nicolas, Ronny, Kiara, Kevin, Loïs
**Absent:** Koen(known), Valentin(known)
* Björn
* Yesterday: mostly preparing for Fediforum. Did everyone saw the mail?
* Today: Not much Fediversity
* Gheorghe
* No blockers
* Yesterday: Internal PM activities
* Today: Internal PM activities
* Kiara
* Yesterday: deploy from prod
* Today: deploy from prod
* Kevin
* yesterday: demo and after discussion found going very well
* today: got assigned multiple tasks from koen that suddenly have to be finished so no fediverse work for me
* Eric
* available
* Hans
* No updates or blockers
* Still working on non-Fedi stuff
* Nicolas
* worked on disabling machine configurations - PR today
* worked on integration NixOps deployment test (without FediPanel for now) - no blockers
* Ronny
* Ospology yesterday, where we also presented Fediversity a bit
* Lois
* Yesterday: Demo, Talked over the demo for Fediforum
* Today: Continue working on the panel to prepare for Fediforum

View file

@ -0,0 +1,96 @@
# Architecture notes on backend data model conversion
These aspects have been discussed ad hoc between Kiara, Nicolas, and Valentin over the past two weeks, and this is to keep a record of our considerations.
We previously left some scattered notes in [2025-02-26 architecture discussion](../meeting-notes/2025-02-26-architecture-discussion.md) (Nicolas, Kiara, Valentin), but had some ongoing ad hoc back and forth in the background.
## Problem space
- We'll have to deal with version drift eventually:
- Once a configuration is deployed and we update the Fediversity software (which will likely include a Nixpkgs update), the configurable options may be different.
- We're maintaining our own simplified configuration layer on top of regular NixOS, because our services need to be wired with Garage.
This means we have quite a lot of control over the shape of the interface, but not over the semantics since the underlying service may still change, however subtly.
- It's likely we'll mostly *add* information, but we may also remove configuration options, or change their structure or meaning.
- Under the assumption that we won't force-upgrade operators' deployments, we somehow need to display that difference between what's currently deployed and what can be configured and then deployed
- This is not a problem if the data type for the configuration didn't change, because then it's simply a difference in value
- If the options for configuration change, it's a difference in type
- We could also use the opportunity to display something like release notes inline with the configuration changes, where we could explain why something changed, right where we display the change in structure.
- A prototype for storing versioned configurations was implemented in the following commits:
- [e41f9c572](https://git.fediversity.eu/Fediversity/Fediversity/commit/e41f9c572a9e76f6c009a4fc407ed58d183684f8)
- [9dd92b4cc](https://git.fediversity.eu/Fediversity/Fediversity/commit/9dd92b4cc180e88ffc14a96ec979a90c84e1676f)
- [981ba011a](https://git.fediversity.eu/Fediversity/Fediversity/commit/981ba011abb4bdf9230048bda4e9af2a96be40cf)
The idea is very similar to Django migrations, but at the level of JSON fields:
- Keep Python data structures around as modules for each version; those are supposed to be never changed
- Remember the version stored as JSON using a regular database field
- Take the right version's module when parsing the JSON value from the database
- The display code (HTML template, form behavior, etc.) is stored together with the data model
Not implemented was an equivalent of Django's `FormView` but for Pydantic schemas, which would generate forms automatically and could be adjusted in detail to have control over presentation.
Since configurations can have nested data structures for services, each of which may progress in version at different paces, we could also store versions per service to avoid code duplication; this wasn't sketched in the prototype, merely noted in comments.
As opposed to Django database migrations, the difference between schemas would be determined from the code (like snapshots) rather than from the database state.
- These diffs could be computed automatically and then stored for manual adjustments
- This would keep around both snapshots and diffs, but the diffs need to encode semantics and presentation
- With the diffs ready, one may as well discard the snapshots, but we can expect the diffing code to be rather hard to read
- Django avoids the pile-up of snapshots by only ever caring about exactly one database state.
- We can't simply throw away old schemas since there may be an arbitrary number of versions deployed or configured by all operators
- We would need to determine which versions are still in use before garbage-collecting old schemas
- Working with these configuration schema migrations can be expected to require some discipline, likely more than with regular database migrations, since they also affect presentation of at least two different schemas at once
- We also considered simply not caring about the whole versioning problem, but Valentin insists it will bite us before long and that we should exercise dealing with it far before going live.
- Another aspect is state migrations between deployed versions for each service, which would need to be handled at the service layer.
- This is a well-known, rather hard problem, and has been [covered by academic research](https://upsilon.cc/~zack/talks/2017/2017-11-27-hdr.pdf)
- We won't go into this in the forseeable future, but eventually it needs to be properly solved at sufficient scale to avoid mounting maintenance burden
These changes were reverted in [08d109cc8](https://git.fediversity.eu/Fediversity/Fediversity/commit/08d109cc826c2979af104af0919c75143bd79616), unfortunately without noting the reason.
- Kiara had proposed using some Django equivalent of [react-jsonschema-form](https://rjsf-team.github.io/react-jsonschema-form/) to render the front-end automatically from the underlying data model
- Valentin is opposed to the idea on multiple grounds:
- Under the assumption that we want a rather lightweight front-end in terms of amount of JavaScript loaded and executed in the browser, most of the work would need to happen on the server
- This would require the conversion to forms to happen in Django
- Most likely we'd want to use [DRF form rendering](https://www.django-rest-framework.org/topics/html-and-forms/#rendering-forms) on top of Pydantic models for that
- We could generate the Pydantic models at build time with https://github.com/koxudaxi/datamodel-code-generator
- The devshell could even place the generated files next to the code, where can be inspected as needed
- There's https://github.com/georgebv/drf-pydantic for automatically generating serialisers
- At that point it's unclear what we need the JSON schema for, because we may as well work directly with Pydantic models
- With JSON schemas, we have no fine-grained control over presentation
- There still would need to be a layer for adjusting spatial arrangement (such as sequence of fields)
- That would need to be done for each schema version, and versioning will be part of our application logic
- Again, it seems like it would make more sense to manage that centrally, in one language and with one representation of the data model, and simply display the result at the Django interface (HTML forms augmented with htmx, optionally JSON+REST if needed)
- Another question is whether we would start with JSON schemas or merely use them to pass around information about types.
- Valentin argues: if the browser is not supposed to handle application logic, we never need to pass around type information
- The only place where we'd be forced to use JSON schemas is if we generated the front-end data model from our NixOS modules
- Arguments against a standalone client-side application:
- It duplicates application logic we already have, and costs effort we could spend on developing the application itself
- We don't expect to ever deliver anything else than the web front-end, and Django gives us JSON+REST essentially for free anyway
- Keeping separate application state in the browser is a can of worms we don't have the capacity or team experience to deal with on the current timeline, and dealing with it wouldn't help address our business problem
- We can get dynamism with htmx at much less mental overhead than a client-side application, a fraction of compute requirements in the browser, and none of the supply chain hassle
- Another can of worms is bridging the gap between the Nix backend and the (in this case Django) frontend
- Clan developers already spent time with the problem and wrote a [module options to JSON schema converter](https://clan.lol/blog/json-schema-converter/)
- The general issues is that the module system is substantially more expressive than JSON schemas
- The problem is not that we *need* that expressive power, but that avoiding it requires care
- Generating schemas requires taking particular care when writing front-facing modules
- Nicolas proposed using a safe subset of `lib.types`
- Valentin: We could go even further and write a type library explicitly compatible with [JSON schema validators](https://json-schema.org/draft/2020-12/json-schema-validation)
- Avoiding laziness (such as `mkIf`) would still be on implementers
- This can work but may be brittle due to leaving opportunities for human error
- It's likely to be the most pragmatic approach for the forseeable future, since JSON schemas provide a reasonable collection of common types
- Putting in a JSON-schema-safe layer would be ideal, and will likely benefit the Nix ecosystem a lot by unlocking independent experimentation with UIs, but may require a non-trivial time investment.
- We'd then store all versions of the option declarations so we can read them back in the front-end
- Alternatively we could only keep the generated Python classes and the presentation code, because that's the only thing we'll need later
- In trat case we should have Git hooks, CI checks, and possibly a check at startup to ensure the generated code corresponds to the module options
- There's some recent work in the direction of [diffing module options and values](https://oceansprint.org/reports/2025/#nixos-module-system-enhancements) which we may be able to leverage for at least partially auto-generating version diffs
- Alternatively we could take the opposite direction and parse JSON schemas into module options
- This is how the current prototype works, except we don't even have a module or schema but simply expect the data structure to have a certain shape
- That's just an interim hack, and placing a module type at the interface promises to ease error analysis in tests
- It has the advantage that invalid expressions cannot be constructed, avoiding future friction entirely
- We can live with rather simple type checking at the module layer since the front end would do good-enough input validation already
- The main disadvantage is that the dependency is flipped: we'd have to model our back-end business logic (service configuration interfaces) in what would then exist as part of the front-end code
- The coupling between our service layer and NixOS is rightfully tight, and having a media gap due to a different language will incur mental overhead and slow down iteration and testing.
- The build setup will also get rather confusing because we'd have to first invoke the front-end code to wire up the back-end with the front end...
- Conlusion for next steps:
- Generate JSON schemas from our front-facing NixOS modules
- Work towards a JSON schema type library for module options, gain practice with safe usage patterns
- Generate a Python data models from JSON schema, and work with forms from there

View file

@ -0,0 +1,31 @@
**Demo rehearsel:** 2025-03-31 @10:00
**Present:** Kiara, Koen, Ronny, Kevin, Gheorghe, Robert, Bjorn, Valentin, Nicolas, Hans
**Absent:** Eric (known)
__Agenda__
* Koen starts with presenting
* Kevin will present the demo
__Presentation & Demo notes__
* Financed by EC, not "being" from EC.
* I suggest to say Prototype and not Product for now.
* I thought we were going to use the coloured EU flag(@Ronnynote: Koen is using an older version of the pdf.../ auch, okay)
* We need a bit more 'what is the mvp about'/'what is the demo about'
* s/Hello world/Welcome
* First show that the apps are not deployed yet. Let people visit the urls themselves
* Can we make the split screen in demo wide, instead of long? (@kevinnote: yes but this was only normal sized monitor i have at the moment)
* Because of the elementary graphical interface, maybe a lower resolution of display will make the command text greater.
* When speak about the interface would be nice to have it visible on the screen.
* The argument for having ops done by professionals needs some polish => we are targeted at organisations (if you can run your own hardware, go!)
* Why skip slides? Will not skip.
* benefits providers: these are the benefits FOR providers
* Maybe don't switch between the presentation & demo. It's a bit distracting. (hans: I think that's a good thing, it breaks it up in different bits that makes it a bit more lively)
* I would suggest to add in the benefits and the other images also the Services offered to the Users to give the whole image of the prototype.
* The architecture diagram is an old one. The NixPanel is no more there.
* Nix is not an operating system ;..)
* roberth: One term keeps it simple and is good enough
* Nix is a system for building software more reproducibly
* The old NixPanel in the architecture is not mapped by the Django(Python) description.
* People can't write comments on Forgejo without an account, and there's no way to register
* Why not Develop & contribute Django (Python) in How to participate?
* Incantation -> Incarnation

View file

@ -0,0 +1,33 @@
**Standup:** 2025-03-31 @09:30
**Present:** Kiara, Koen, Ronny, Kevin, Gheorghe, Robert, Bjorn, Valentin, Nicolas
**Absent:** Hans (known), Eric (known)
* Kiara
* Past day(s): continue on deploy button online
* Today: investigate SSH strategy for above and to deal with password-protected SSH keys
* Koen
* now have some experience with pixelfed
* want to upgrade the pixelfed cluster this afternoon and bring it live this evening so we can announce it tomorrow before the conference
* Kevin
* Worked on the panel friday, it shows now if the deploy was a succes and which services have been deployed
* today can work more on the panel but dont know what yet will discuss with kiara
* Bjorn
* Friday: Partnermeeting
* Today: demo & prep for Fediforum
* Valentin
* Wrote up design discussion on configuration data model versioning and format conversion
* Internal meetings
* Nicolas
* Last week disabling the machine
* Working on reproducing the NixOps4 upstream deployment test
* Got stuck with providing DNS within the sandbox
* Robert: there's some code I can give you for that
* Gheorghe
* No blockers
* Friday: Internal PM activities
* Today: Internal PM activities
* Ronny
* Good partnermeeting on Friday
* Robert
* Finishing up flake input override support (needed for ad hoc testing, generally useful)
* Next: stateful resources

View file

@ -0,0 +1,47 @@
# Visual design meeting 2025-03-31
Present: {thijs,timon}@slik, {koen,kevin,kiara}@procolix
- thijs: updated the designs as per the last meeting, supporting workspaces, dark/light themes, (implied) usage graphs, future fediverse services, updated theme
- koen: maybe categorize services using tags, e.g. fediverse, productivity, chat, video, microblogging
- thijs: so allow filtering by this too?
- koen: yes
- kiara: i like the new design
- koen: KDE's designs looks pretty, maybe also look at that
- timon: *clicks mastodon install, leading to detail page*
- koen: maybe allow batch selecting to install, as in current barebones technical implementation
- koen: please add icons for more applications
- timon: *showing preview page for mastodon*
- koen: again, minimize needed clicks, e.g. using basic vs advanced install rather than 'install' vs 'manage', then allow users to maybe tweak after
- thijs: then just do 'install' vs 'manage' as you probably don't want non-basic installs, so people can tweak after
- koen: you should be able to just use them when installed, afterwards change 'install' button to like 'go to your instance'
- koen: i like the detail page's log view, may end up long tho, so maybe add a 'show more' ellsion
- timon: fleshed out the settings view, as well as a users list
- thijs: the users list is more an example of a CRUD page, as you mentioned wanting to do SSO/LDAP before
- koen: again, distinguish stuff everyone should see vs advanced settings we by default should not bother busy non-technical users with
- thijs: you have not configured a domain yet, so cannot deploy mastodon yet - we should probably nag people on mandatory settings they have yet to set, also show progress bar for this
- koen: start simple, then show everything when desired
- thijs: different ways to not scare people off, not sure scaring people with advanced settings is the way, you could instead just show optional settings
- koen: still sounds scary
- thijs: otherwise may not notice what you can do with it
- thijs: you may not know a user's role up-front
- koen: start as basic user
- thijs: sysadmins will feel confused tho
- koen: maybe ask in the onboarding / sign-up what role you want
- thijs: onboarding, what else?
- thijs: we made sure to use only open-source fonts and icons
- koen: i see some details we will not use: e.g. pricing plans ending in 99, pricing plans worded to sell rather than offer transparency (wording shown in design: 'perfect' without elaboration as to why), pricing that needs explaining so people can understand why they should not feel ripped off
- kiara: isn't usage much more fungible?
- koen: we should show those from the panel, but there are different ways to approach this as per an operator's business model
- thijs: maybe hosts should get to choose how to approach this
- koen: agree, companies will have limited resources and may prefer to not make things too granular, tho in larger set-ups one may need to be able to better justify how pricing scales
- thijs: do we always want granular pricing?
- koen: by default yes, if you don't want that, it's open-source so you can fork if you like
- thijs: thanks - what else should we change for tomorrow?
- koen: maybe add graphs over time on disk space and number of applications deployed
- kiara: actually whether the background looks grey or white-ish for me depends on which monitor i view it on
- thijs: ok let's make it a bit lighter still
- koen: maybe also add user settings like advanced/novice, allow scrolling thru the app list, add an icon as per fediversity.eu (NGI - fediversity)
- koen: from pic 'many branches of the fediverse' use: lemmy, bookwyrm, funkwhale, friendica, castopod, writefreely, matrix, owncast, peertube, forgejo, passbolt
- kiara: this image already shows potential tags too
- thijs: we'll try and add the configurable color themes too