summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorerdgeist <erdgeist@erdgeist.org>2026-06-30 19:15:22 +0200
committererdgeist <erdgeist@erdgeist.org>2026-06-30 19:22:24 +0200
commita7a6ad786eeb9f94f7882462bccbdd31e1bb4743 (patch)
treeecc0a17db462065b27270f7e593a8244e24c8846
parent31ca8e93efa860d73918b57ddddeaedf9917b22d (diff)
Phase 1: standalone events, external_url on nodes
- Migration: node_id nullable on events and occurrences, add title/description/is_primary to events, external_url to nodes - Existing events marked is_primary: true (were all 1:1 with nodes) - Node: has_one :event -> has_many :events - Event: belongs_to :node optional, validates title presence for standalone events, is_primary uniqueness scoped to node_id, display_title helper falling back through node title - Occurrence: belongs_to :node optional, summary falls back to event.display_title - nodes_helper: event_information uses events.first (interim; will be replaced in Phase 3 event UI) - Tests: fix node.event -> node.events.first in event_test
-rw-r--r--app/helpers/nodes_helper.rb11
-rw-r--r--app/models/event.rb29
-rw-r--r--app/models/node.rb2
-rw-r--r--app/models/occurrence.rb9
-rw-r--r--db/migrate/20260627233640_upgrade_events_and_nodes_for_standalone_events.rb27
-rw-r--r--db/seeds/chaostreffs.rb758
-rw-r--r--db/seeds/conflicts.txt9
-rw-r--r--db/seeds/erfas.rb470
-rw-r--r--test/models/event_test.rb8
9 files changed, 1295 insertions, 28 deletions
diff --git a/app/helpers/nodes_helper.rb b/app/helpers/nodes_helper.rb
index a054a2e..d88d12a 100644
--- a/app/helpers/nodes_helper.rb
+++ b/app/helpers/nodes_helper.rb
@@ -30,12 +30,13 @@ module NodesHelper
30 end 30 end
31 31
32 def event_information 32 def event_information
33 if @node.event 33 if @node.events.first
34 event = @node.events.first
34 safe_join([ 35 safe_join([
35 "#{@node.event.start_time.to_fs(:db)} - #{@node.event.end_time.to_fs(:db)} > ", 36 "#{event.start_time.to_fs(:db)} - #{event.end_time.to_fs(:db)} > ",
36 link_to('show', event_path(@node.event)), 37 link_to('show', event_path(event)),
37 ' ', 38 ' > ',
38 link_to('edit', edit_event_path(@node.event)) 39 link_to('edit', edit_event_path(event))
39 ]) 40 ])
40 else 41 else
41 safe_join([ 42 safe_join([
diff --git a/app/models/event.rb b/app/models/event.rb
index 94a22e3..26c79e4 100644
--- a/app/models/event.rb
+++ b/app/models/event.rb
@@ -1,22 +1,25 @@
1class Event < ApplicationRecord 1class Event < ApplicationRecord
2 2
3 # Associations 3 belongs_to :node, optional: true
4 4 has_many :occurrences
5 has_many :occurrences 5
6 belongs_to :node 6 validates :title, presence: true, unless: -> { node_id.present? }
7 7 validates :is_primary, uniqueness: { scope: :node_id,
8 # Callbacks 8 message: "only one primary event per node allowed" },
9 9 if: -> { is_primary? && node_id.present? }
10 after_save :generate_occurences 10
11 11 after_save :generate_occurences
12 # Instance Methods 12
13
14 def occurrences_in_range start_time, end_time 13 def occurrences_in_range start_time, end_time
15 self.occurrences.where( 14 self.occurrences.where(
16 "start_time > ? AND end_time < ?", 15 "start_time > ? AND end_time < ?",
17 start_time, end_time 16 start_time, end_time
18 ) 17 )
19 end 18 end
19
20 def display_title
21 title.presence || node&.head&.title || "Untitled event"
22 end
20 23
21 private 24 private
22 def generate_occurences 25 def generate_occurences
diff --git a/app/models/node.rb b/app/models/node.rb
index 92ecc12..ba94e2a 100644
--- a/app/models/node.rb
+++ b/app/models/node.rb
@@ -7,7 +7,7 @@ class Node < ApplicationRecord
7 belongs_to :head, :class_name => "Page", :foreign_key => :head_id, :dependent => :destroy, optional: true 7 belongs_to :head, :class_name => "Page", :foreign_key => :head_id, :dependent => :destroy, optional: true
8 belongs_to :draft, :class_name => "Page", :foreign_key => :draft_id, :dependent => :destroy, optional: true 8 belongs_to :draft, :class_name => "Page", :foreign_key => :draft_id, :dependent => :destroy, optional: true
9 has_many :permissions, :dependent => :destroy 9 has_many :permissions, :dependent => :destroy
10 has_one :event, :dependent => :destroy 10 has_many :events, :dependent => :destroy
11 belongs_to :lock_owner, :class_name => "User", :foreign_key => :locking_user_id, optional: true 11 belongs_to :lock_owner, :class_name => "User", :foreign_key => :locking_user_id, optional: true
12 12
13 # Callbacks 13 # Callbacks
diff --git a/app/models/occurrence.rb b/app/models/occurrence.rb
index 3baf447..143124f 100644
--- a/app/models/occurrence.rb
+++ b/app/models/occurrence.rb
@@ -1,13 +1,12 @@
1# TODO Make a gem out of the c wrapper
2require 'chaos_calendar' 1require 'chaos_calendar'
3 2
4class Occurrence < ApplicationRecord 3class Occurrence < ApplicationRecord
5 4
6 # Associations 5 # Associations
7 6
8 belongs_to :node 7 belongs_to :node, optional: true
9 belongs_to :event 8 belongs_to :event
10 9
11 # Class Methods 10 # Class Methods
12 11
13 def self.find_in_range start_time, end_time 12 def self.find_in_range start_time, end_time
@@ -64,7 +63,7 @@ class Occurrence < ApplicationRecord
64 # Instance Methods 63 # Instance Methods
65 64
66 def summary 65 def summary
67 node.head.title 66 node&.head&.title || event.display_title
68 end 67 end
69 68
70end 69end
diff --git a/db/migrate/20260627233640_upgrade_events_and_nodes_for_standalone_events.rb b/db/migrate/20260627233640_upgrade_events_and_nodes_for_standalone_events.rb
new file mode 100644
index 0000000..790a62b
--- /dev/null
+++ b/db/migrate/20260627233640_upgrade_events_and_nodes_for_standalone_events.rb
@@ -0,0 +1,27 @@
1class UpgradeEventsAndNodesForStandaloneEvents < ActiveRecord::Migration[8.1]
2 def up
3 # Events: make node optional, add missing fields
4 change_column_null :events, :node_id, true
5 add_column :events, :title, :string
6 add_column :events, :description, :text
7 add_column :events, :is_primary, :boolean, default: false, null: false
8
9 # Mark all existing events as primary (they were all 1:1 with nodes)
10 Event.where.not(node_id: nil).update_all(is_primary: true)
11
12 # Occurrences: make node optional
13 change_column_null :occurrences, :node_id, true
14
15 # Nodes: add external URL
16 add_column :nodes, :external_url, :string
17 end
18
19 def down
20 remove_column :nodes, :external_url
21 change_column_null :occurrences, :node_id, false
22 remove_column :events, :is_primary
23 remove_column :events, :description
24 remove_column :events, :title
25 change_column_null :events, :node_id, false
26 end
27end
diff --git a/db/seeds/chaostreffs.rb b/db/seeds/chaostreffs.rb
new file mode 100644
index 0000000..9712978
--- /dev/null
+++ b/db/seeds/chaostreffs.rb
@@ -0,0 +1,758 @@
1chaostreffs = [
2 {
3 slug: "chaostreff-aalen",
4 title_de: "Chaostreff Aalen",
5 title_en: nil,
6 description_de: "Wir sind ein Chaostreff und Hackspace in Aalen im Aaccellerator, Blezingerstraße 15, 73430 Aalen. Wir treffen uns regelmäßig jeden 3. Dienstag im Monat ab 18:30 Uhr. Für Treffen außerhalb von den Regelterminen verabreden wir uns spontan über <a href=\"https://matrix.to/#/#makerspace-aalen:famhahn.xyz\">Matrix</a>.",
7 description_en: nil,
8 external_url: "https://aalen.space/",
9 location: "Blezingerstraße 15, 73430 Aalen",
10 rrule: "FREQ=MONTHLY;BYDAY=3TU",
11 start_time: "18:30",
12 review: false
13 },
14 {
15 slug: "chaostreff-alzey",
16 title_de: "Chaostreff Alzey",
17 title_en: nil,
18 description_de: "An jedem ersten Sonntag des Monats trifft sich der Chaostreff Alzey um 15 Uhr im Juku Alzey. All creatures welcome!",
19 description_en: nil,
20 external_url: "https://chaostreff-alzey.de/",
21 location: "Juku Alzey",
22 rrule: "FREQ=MONTHLY;BYDAY=1SU",
23 start_time: "15:00",
24 review: false
25 },
26 {
27 slug: "chaostreff-amberg-sulzbach",
28 title_de: "Chaostreff Amberg-Sulzbach",
29 title_en: nil,
30 description_de: "Wir treffen uns monatlich in Amberg in lockerer Runde. Es wird keine Anmeldung benötigt. All Creatures Welcome! Ort und Zeit der Treffen findet ihr auf der Webseite des Chaostreffs.",
31 description_en: nil,
32 external_url: "https://amborg-sulzbyte.de/",
33 location: "Amberg",
34 rrule: "FREQ=MONTHLY",
35 start_time: nil,
36 review: false
37 },
38 {
39 slug: "chaostreff-amsterdam",
40 title_de: "Chaos Amsterdam",
41 title_en: "Chaos Amsterdam",
42 description_de: "Chaos Amsterdam meets on Thursdays every other week at 19:00 in a social space close to the city center. We can be found on <a href=\"https://webirc.hackint.org/#chaosamsterdam\">IRC in #chaosamsterdam</a> on the hackint network.",
43 description_en: "Chaos Amsterdam meets on Thursdays every other week at 19:00 in a social space close to the city center. We can be found on <a href=\"https://webirc.hackint.org/#chaosamsterdam\">IRC in #chaosamsterdam</a> on the hackint network.",
44 external_url: "https://chaos.amsterdam/",
45 location: "Amsterdam",
46 rrule: "FREQ=WEEKLY;INTERVAL=2;BYDAY=TH",
47 start_time: "19:00",
48 review: false
49 },
50 {
51 slug: "chaostreff-andernach",
52 title_de: "haxko e.V. Andernach",
53 title_en: nil,
54 description_de: "Der Hacker- und Makerspace Mayen-Koblenz (haxko e.V.) befindet sich in der ehemaligen Gastwirtschaft des Bahnhofs Andernach. Unsere Treffen finden in geraden Kalenderwochen freitags und in ungeraden samstags statt. Beginn immer ab 18 Uhr. Thematisch sind wir offen und durch die Location direkt am Bahnhof gut zu erreichen.",
55 description_en: nil,
56 external_url: "https://haxko.space",
57 location: "Bahnhof Andernach",
58 rrule: "FREQ=WEEKLY;BYDAY=FR",
59 start_time: "18:00",
60 review: false
61 },
62 {
63 slug: "chaostreff-augsburg",
64 title_de: "OpenLab Augsburg",
65 title_en: nil,
66 description_de: "Aus dem <a href=\"https://c3a.de\">Chaostreff Augsburg</a> entstanden ist das <a href=\"https://openlab-augsburg.de\">OpenLab</a> heute der Anlaufpunkt für alle die an nachhaltigem Handeln &amp; Herstellen, dem kreativem Umgang mit Technik, Datenschutz und digitaler Selbstbemächtigung interessiert sind. Jeden Donnerstag offen für Interessierte und jeden dritten Donnerstag auch mit Vortrag im bekannten Chaostreff-Stil.",
67 description_en: nil,
68 external_url: "https://openlab-augsburg.de",
69 location: "Augsburg",
70 rrule: "FREQ=WEEKLY;BYDAY=TH",
71 start_time: "19:00",
72 review: false
73 },
74 {
75 slug: "chaostreff-aschaffenburg",
76 title_de: "Makerspace Schaffenburg",
77 title_en: nil,
78 description_de: "Der Chaostreff im Makerspace Schaffenburg ist ein Zusammenschluss von technikbegeisterten Menschen, die zusammen in (A)schaffenburg einen Ort schaffen, der genau dies bietet: Platz und Werkzeug zum Arbeiten, motivierte Menschen mit Know-How, kreative Ideen und Inspiration. Kurz gesagt: Raum für alle, die etwas machen wollen – ein Makerspace! Zu finden sind wir in der Dorfstraße 1 in Aschaffenburg.",
79 description_en: nil,
80 external_url: "http://www.schaffenburg.org",
81 location: "Dorfstraße 1, Aschaffenburg",
82 rrule: nil,
83 start_time: nil,
84 review: false
85 },
86 {
87 slug: "chaostreff-backnang",
88 title_de: "Chaostreff Backnang",
89 title_en: nil,
90 description_de: "Wir treffen uns an jedem 3. Sonntag des Monats zum Erfahrungsaustausch und der gemeinsamen Umsetzung von Projekten sowie an jedem 1. Dienstag im Monat zum offenen Stammtisch im dasWohnzimmer (Willy-Brandt-Platz 2) in Backnang bei Stuttgart und freuen uns auf neue Gesichter. Strom, Freifunk sowie Getränke und Snacks der Bar (auch Mate) werden angeboten.",
91 description_en: nil,
92 external_url: "https://chaostreff-backnang.de/",
93 location: "Willy-Brandt-Platz 2, Backnang",
94 rrule: "FREQ=MONTHLY;BYDAY=3SU",
95 start_time: "18:00",
96 review: false
97 },
98 {
99 slug: "chaostreff-bayreuth",
100 title_de: "Imaginärraum Bayreuth",
101 title_en: nil,
102 description_de: "Der Imaginärraum ist ein junger Hackerspace, der sich jeden Montag um 19 Uhr in seinen Räumen in der Schulstraße 7 in Bayreuth trifft.",
103 description_en: nil,
104 external_url: "https://imaginaerraum.de/",
105 location: "Schulstraße 7, Bayreuth",
106 rrule: "FREQ=WEEKLY;BYDAY=MO",
107 start_time: "19:00",
108 review: false
109 },
110 {
111 slug: "chaostreff-bern",
112 title_de: "Chaostreff Bern",
113 title_en: nil,
114 description_de: "Der Chaostreff Bern trifft sich jeden Dienstag ab 19 Uhr im eigenen Hackerspace an der Zwyssigstrasse 45. Dort gibt es Strom, Internet, Mate und viel Platz zum Hacken.",
115 description_en: nil,
116 external_url: "https://www.chaostreffbern.ch/",
117 location: "Zwyssigstrasse 45, Bern",
118 rrule: "FREQ=WEEKLY;BYDAY=TU",
119 start_time: "19:00",
120 review: false
121 },
122 {
123 slug: "chaostreff-bielefeld",
124 title_de: "Hackerspace Bielefeld",
125 title_en: nil,
126 description_de: "Bielefeld gibt's gar nicht? Weiß man nicht. Gibt es denn einen Chaostreff? Auch das ist ungewiss, aber chaosnahe Leute treffen sich im <a href=\"http://hackerspace-bielefeld.de/\">Hackerspace Bielefeld</a>.",
127 description_en: nil,
128 external_url: "http://hackerspace-bielefeld.de/",
129 location: "Bielefeld",
130 rrule: nil,
131 start_time: nil,
132 review: false
133 },
134 {
135 slug: "chaostreff-bingen",
136 title_de: "/bin/hacken Bingen",
137 title_en: nil,
138 description_de: "Seit Anfang 2019 sind wir /bin/hacken, ein Hacker- &amp; Makerspace in Bingen am Rhein. Wir bieten wöchentliche Treffen und eine offene Werkstatt zum Mitgestalten oder einfach eigene Projekte verwirklichen!",
139 description_en: nil,
140 external_url: "https://binhacken.de/",
141 location: "Bingen am Rhein",
142 rrule: "FREQ=WEEKLY",
143 start_time: "19:00",
144 review: false
145 },
146 {
147 slug: "chaostreff-bochum",
148 title_de: "Das Labor Bochum",
149 title_en: nil,
150 description_de: "Das Labor, Hackspace und Chaostreff, ist in erster Linie ein Ort, an dem praktisch gearbeitet wird. Wir benutzen und entwickeln freie Software, löten, ätzen und programmieren Mikrocontroller, beschäftigen uns mit 3D-Druck, Freifunk, Amateurfunk, IT-Sicherheit, Arduinos, OSM oder Open Science. Wir haben den Anspruch, mit Technologie Neues und Sinnvolles zu erschaffen. Im Labor gibt es Vorträge, Workshops und Diskussionen zu den unterschiedlichsten Bereichen der Technik.",
151 description_en: nil,
152 external_url: "https://das-labor.org",
153 location: "Bochum",
154 rrule: nil,
155 start_time: nil,
156 review: false
157 },
158 {
159 slug: "chaostreff-bonn",
160 title_de: "Datenburg e.V. Bonn",
161 title_en: nil,
162 description_de: "Der Datenburg e.V. ist ein seit 2019 existierender Hackspace und Chaostreff in Bonn und seit Anfang 2024 ein eingetragener Verein. Wir beschäftigen uns mit Themen rund um Technik und Gesellschaft. Die Datenburg ist auch ein Ort, um an eigenen Projekten zu arbeiten und sich auszutauschen. Wir öffnen jeden Dienstag ab 20 Uhr unsere Tore für alle interessierten Wesen.",
163 description_en: nil,
164 external_url: "https://datenburg.org/",
165 location: "Bonn",
166 rrule: "FREQ=WEEKLY;BYDAY=TU",
167 start_time: "20:00",
168 review: false
169 },
170 {
171 slug: "chaostreff-budapest",
172 title_de: "H.A.C.K. Budapest",
173 title_en: "H.A.C.K. Budapest",
174 description_de: "Members of the Hungarian Autonomous Center for Knowledge (H.A.C.K.) usually meet on Tuesdays at 19:00 local time, but it's best to confirm beforehand on #hspbp at IRCnet. We're located in the middle of the city, and we have Mate, sticker exchange, Internet, and friendly hackers.",
175 description_en: "Members of the Hungarian Autonomous Center for Knowledge (H.A.C.K.) usually meet on Tuesdays at 19:00 local time, but it's best to confirm beforehand on #hspbp at IRCnet. We're located in the middle of the city, and we have Mate, sticker exchange, Internet, and friendly hackers.",
176 external_url: "https://hsbp.org/contact-us",
177 location: "Budapest",
178 rrule: "FREQ=WEEKLY;BYDAY=TU",
179 start_time: "19:00",
180 review: false
181 },
182 {
183 slug: "chaostreff-coburg",
184 title_de: "Hackzogtum Coburg",
185 title_en: nil,
186 description_de: "Coburgs Chaostreff/Hackspace ist das Hackzogtum Coburg. Bei uns stehen vor allem Spaß an der Technik und reger Austausch im Vordergrund. Wer vorbeischauen will, ist bei uns immer willkommen. Ihr findet uns physikalisch in der Heiligkreuzstr. 3 in 96450 Coburg. Die meisten Leute gleichzeitig treffen sich immer dienstags ab 20 Uhr.",
187 description_en: nil,
188 external_url: "https://hackzogtum-coburg.de",
189 location: "Heiligkreuzstr. 3, 96450 Coburg",
190 rrule: "FREQ=WEEKLY;BYDAY=TU",
191 start_time: "20:00",
192 review: false
193 },
194 {
195 slug: "chaostreff-cottbus",
196 title_de: "Chaostreff Cottbus",
197 title_en: nil,
198 description_de: "Der Treff für alle Chaos-Interessierten aus Cottbus und Umgebung. Angesiedelt am FabLab Cottbus (Walther-Pauer-Straße 7), treffen wir uns regelmäßig am letzten Mittwoch im Monat ab 18 Uhr und freuen uns auf neue Gesichter.",
199 description_en: nil,
200 external_url: "https://chaos-cb.de",
201 location: "Walther-Pauer-Straße 7, Cottbus",
202 rrule: "FREQ=MONTHLY;BYDAY=-1WE",
203 start_time: "18:00",
204 review: false
205 },
206 {
207 slug: "chaostreff-eisenach",
208 title_de: "WAK-Lab Eisenach",
209 title_en: nil,
210 description_de: "Das <a href=\"https://wak-lab.org\">WAK-Lab</a> ist ein Raum für Hacker, Bastler und technikinteressierte Menschen. Unsere Ziele sind der Aufbau einer offenen Werkstatt, um den Erwerb und das Teilen von technischem Wissen zu fördern. Kontakt über <a href=\"https://matrix.to/#/#wak-lab:im.kabi.tk\">Matrix</a> oder auf unserer Homepage.",
211 description_en: nil,
212 external_url: "https://wak-lab.org",
213 location: "Eisenach",
214 rrule: nil,
215 start_time: nil,
216 review: false
217 },
218 {
219 slug: "chaostreff-erfurt",
220 title_de: "Bytespeicher Erfurt",
221 title_en: nil,
222 description_de: "Der Hackspace Bytespeicher öffnet jeden Mittwoch zum Open Space und trifft sich ab 19 Uhr zum Chaostreff Erfurt in der Liebknechtstraße 8. Wir bieten mit Hackspace, Konferenzraum und Elektronikwerkstatt alle Möglichkeiten zum gemeinsamen Hacken, Lernen, Präsentieren und Experimentieren. Wir unterstützen außerdem Freifunk Erfurt und die Programmier-Initiative Kids@Digital.",
223 description_en: nil,
224 external_url: "https://www.bytespeicher.org/",
225 location: "Liebknechtstraße 8, Erfurt",
226 rrule: "FREQ=WEEKLY;BYDAY=WE",
227 start_time: "19:00",
228 review: false
229 },
230 {
231 slug: "chaostreff-giessen",
232 title_de: "Chaostreff Gießen",
233 title_en: nil,
234 description_de: "Lockerer Treff für alle Chaos-Interessierten aus dem Raum Gießen. Zur Zeit beherbergt uns am ersten Mittwoch des Monats das <a href=\"https://jhrings.de/\">Jhrings Wirtsstuben</a> (Ludwigstraße 10) ab 19 Uhr. An den anderen Mittwochen des Monats treffen wir uns in den Räumlichkeiten von <a href=\"https://mudbyte.de/\">Mudbytes</a>. Um Verwechslungen vorzubeugen, schaut bitte unter <a href=\"https://giessen.ccc.de\">giessen.ccc.de</a> nach dem aktuellen Stand.",
235 description_en: nil,
236 external_url: "https://giessen.ccc.de",
237 location: "Ludwigstraße 10, Gießen",
238 rrule: "FREQ=MONTHLY;BYDAY=1WE",
239 start_time: "19:00",
240 review: false
241 },
242 {
243 slug: "chaostreff-graz",
244 title_de: "RealRaum Graz",
245 title_en: nil,
246 description_de: "Grundsätzlich ist bei den Workshops und sonstigen Veranstaltungen immer jeder willkommen, der Lust hat, was Neues dazuzulernen oder selbst was dazu beizutragen, egal ob Mitglied oder nicht. Ziel ist es, einen chaotisch gemischten Haufen zu schaffen, der fähig ist, sich mit seinen Ideen gegenseitig zu inspirieren. Besonders sind alle willkommen, die bereits bei anderen Vereinen/Initiativen tätig sind (LUGG, STG, Spektral und ähnliches). Die Treffen finden im RealRaum statt.",
247 description_en: nil,
248 external_url: "https://realraum.at/",
249 location: "Graz",
250 rrule: nil,
251 start_time: nil,
252 review: false
253 },
254 {
255 slug: "chaostreff-goeppingen",
256 title_de: "Chaostreff Göppingen (SCHAFFEREI)",
257 title_en: nil,
258 description_de: "Spaß an der Technik haben, kreativ sein, Altes reparieren, Neues generieren, Wissen teilen – gemeinsam macht das Chaos Laune. Der Chaostreff Göppingen findet monatlich in der Göppinger SCHAFFEREI statt. Freifunk, Lötkolben und Mate sind vorhanden.",
259 description_en: nil,
260 external_url: "https://schafferei.org/chaos-treff/",
261 location: "Göppingen",
262 rrule: "FREQ=MONTHLY",
263 start_time: nil,
264 review: false
265 },
266 {
267 slug: "chaostreff-gunzenhausen",
268 title_de: "Chaostreff Gunzenhausen",
269 title_en: nil,
270 description_de: "Jeden Dienstag in einer ungeraden Kalenderwoche treffen wir uns ab 19 Uhr im <a href=\"https://fablab-altmuehlfranken.de\">FabLab in Gunzenhausen</a>. Gäste und Interessierte sind gerne willkommen!",
271 description_en: nil,
272 external_url: "https://chaostreff-gun.de/",
273 location: "FabLab Gunzenhausen",
274 rrule: "FREQ=WEEKLY;INTERVAL=2;BYDAY=TU",
275 start_time: "19:00",
276 review: false
277 },
278 {
279 slug: "chaostreff-halle",
280 title_de: "Chaostreff Halle (Saale)",
281 title_en: nil,
282 description_de: "Der Chaostreff trifft sich wöchentlich am Dienstag ab 19 Uhr im <a href=\"https://eigenbaukombinat.de\">Eigenbaukombinat</a> zum Hackerspacetreffen in der Landsberger Straße 3. Reden, tüfteln, hacken inklusive.",
283 description_en: nil,
284 external_url: "https://eigenbaukombinat.de",
285 location: "Landsberger Straße 3, Halle (Saale)",
286 rrule: "FREQ=WEEKLY;BYDAY=TU",
287 start_time: "19:00",
288 review: false
289 },
290 {
291 slug: "chaostreff-hamm",
292 title_de: "c3hamm",
293 title_en: nil,
294 description_de: "Wir, c3hamm, sind seit dem 5.5.2025 Verein. Bauen gerade am HHiC, ein Hackspace &amp; Repair-Cafe zum Mitnehmen im Container. Wir treffen uns regelmässig am 1ten Mittwoch im Monat im Rahmen des eStatischH (Energier-Stammtisch Hamm) VorOrt. Nicht selten treffen wir uns Sonntags zum VRunch inner Brille und erkunden SocialVR Räume, pflegen ein kleines cHaoS-Log: <a href=\"https://y.lab.nrw/c3h-logs\">y.lab.nrw/c3h-logs</a>.",
295 description_en: nil,
296 external_url: "https://chaos.social/@c3hamm",
297 location: "Hamm",
298 rrule: "FREQ=MONTHLY;BYDAY=1WE",
299 start_time: nil,
300 review: false
301 },
302 {
303 slug: "chaostreff-heidelberg",
304 title_de: "NoName e.V. Heidelberg",
305 title_en: nil,
306 description_de: "Wir sind der NoName e.V., ein lustiger zusammengewürfelter Haufen, der sich mindestens einmal pro Woche trifft. Jeder Technikinteressierte ist bei uns gerne gesehen. Der regelmäßige Treff am Donnerstag findet abwechselnd an verschiedenen Orten statt. Infos über spontane Treffen findet man im TWiCEiRC-Channel #chaos-hd.",
307 description_en: nil,
308 external_url: "https://www.noname-ev.de",
309 location: "Heidelberg",
310 rrule: "FREQ=WEEKLY;BYDAY=TH",
311 start_time: "19:00",
312 review: false
313 },
314 {
315 slug: "chaostreff-hildesheim",
316 title_de: "Freies Labor Hildesheim",
317 title_en: nil,
318 description_de: "Der Hackerspace „Freies Labor" ist ein Ort, an dem sich unterschiedliche Disziplinen treffen, kennenlernen und kooperieren. In unserem Labor wollen wir in gemütlicher Atmosphäre gemeinsam tüfteln, kochen, brauen und entdecken. Wir wollen unsere Fähigkeiten und unser Wissen miteinander teilen und stellen Werkstatt, Küche und gemütliche Räume zur Verfügung.",
319 description_en: nil,
320 external_url: "https://blog.freieslabor.org/",
321 location: "Hildesheim",
322 rrule: nil,
323 start_time: nil,
324 review: false
325 },
326 {
327 slug: "chaostreff-hilpoltstein",
328 title_de: "Chaostreff Hip Hilpoltstein",
329 title_en: nil,
330 description_de: "Jeden zweiten Dienstag (ungerade Kalenderwochen) trifft sich der Chaostreff Hip ab 18 Uhr zum gemeinsamen Tüfteln, Reden und Verkosten von Mate im Haus des Gastes (Maria-Dorothea-Straße 8). Interessierte Gäste sind immer herzlich willkommen.",
331 description_en: nil,
332 external_url: "https://chaos-hip.de/",
333 location: "Maria-Dorothea-Straße 8, Hilpoltstein",
334 rrule: "FREQ=WEEKLY;INTERVAL=2;BYDAY=TU",
335 start_time: "18:00",
336 review: false
337 },
338 {
339 slug: "chaostreff-hoher-flaeming",
340 title_de: "ge.hackt.es Hoher Fläming",
341 title_en: nil,
342 description_de: "In Brandenburg, mitten im Wald, gibt es <a href=\"https://ge.hackt.es/\">ge.hackt.es</a>! In unserem Hackspace im Hohen Fläming beschäftigen wir uns nicht ganz zufällig mit Digitalisierung im ländlichen Raum. Wir basteln außerdem Schönes mit Sensoren und bringen ein Repair-Café an den Start. Schreibt uns, wenn ihr den Weg durch den Wald zu uns finden wollt!",
343 description_en: nil,
344 external_url: "https://ge.hackt.es/",
345 location: "Hoher Fläming, Brandenburg",
346 rrule: nil,
347 start_time: nil,
348 review: false
349 },
350 {
351 slug: "chaostreff-ilmenau",
352 title_de: "ilmspace Ilmenau",
353 title_en: nil,
354 description_de: "Wir treffen uns regelmäßig jeden Mittwoch ab 19 Uhr zum <em>open space</em> und einmal im Monat zum Orgatreff. Der Space bietet Raum für alle Chaos-Interessierten aus Ilmenau und Umgebung. Wir helfen euch gern bei Reparaturen, beim Einstieg oder Umstieg in die Linuxwelt oder bei eigenen Projekten. Ihr seid herzlich eingeladen, aktiv unseren Space mitzugestalten. Kontakt via <a href=\"https://matrix.to/#/#SPACE:bau-ha.us\">Matrix</a>.",
355 description_en: nil,
356 external_url: "http://ilmspace.de/",
357 location: "Ilmenau",
358 rrule: "FREQ=WEEKLY;BYDAY=WE",
359 start_time: "19:00",
360 review: false
361 },
362 {
363 slug: "chaostreff-ingolstadt",
364 title_de: "bytewerk Ingolstadt",
365 title_en: nil,
366 description_de: "Am 10. April 2010 wurde in Ingolstadt das <a href=\"http://www.bytewerk.org/\">bytewerk</a> eröffnet, der Hackerspace des Ingolstädter Chaostreff, der aus dem <a href=\"http://www.bingo-ev.de/\">bingo e.V.</a> hervorgegangen ist.",
367 description_en: nil,
368 external_url: "http://www.bytewerk.org/",
369 location: "Ingolstadt",
370 rrule: nil,
371 start_time: nil,
372 review: false
373 },
374 {
375 slug: "chaostreff-innsbruck",
376 title_de: "IT-Syndikat Innsbruck",
377 title_en: nil,
378 description_de: "Das chaosnahe IT-Syndikat ist (mindestens) jeden Dienstag ab 19 Uhr für Besuch offen. Wo? Tschamlerstraße 3, über dem Weekender Club. Sollte unten ein Türsteher-NPC den Weg versperren, kommt man mit einem Verweis auf „die Künstler/Hacker" immer vorbei.",
379 description_en: nil,
380 external_url: "http://it-syndikat.org",
381 location: "Tschamlerstraße 3, Innsbruck",
382 rrule: "FREQ=WEEKLY;BYDAY=TU",
383 start_time: "19:00",
384 review: false
385 },
386 {
387 slug: "chaostreff-itzehoe",
388 title_de: "Computerclub Itzehoe e.V.",
389 title_en: nil,
390 description_de: "Der Itzehoer Chaostreff ist beim Computerclub Itzehoe e.V. angesiedelt und beschäftigt sich zwanglos mit unterschiedlichsten Hard- und Softwareprojekten. Treffen sind donnerstags ab 19 Uhr.",
391 description_en: nil,
392 external_url: "http://cciz.de/",
393 location: "Itzehoe",
394 rrule: "FREQ=WEEKLY;BYDAY=TH",
395 start_time: "19:00",
396 review: false
397 },
398 {
399 slug: "chaostreff-jena",
400 title_de: "Offener Chaostreff Jena (Krautspace)",
401 title_en: nil,
402 description_de: "Der Offene Chaostreff Jena trifft sich dienstags ab 20 Uhr im Krautspace in der Krautgasse 26.",
403 description_en: nil,
404 external_url: "https://kraut.space/",
405 location: "Krautgasse 26, Jena",
406 rrule: "FREQ=WEEKLY;BYDAY=TU",
407 start_time: "20:00",
408 review: false
409 },
410 {
411 slug: "chaostreff-kiel",
412 title_de: "Science Monday Kiel (Toppoint)",
413 title_en: nil,
414 description_de: "<em>Science Monday - Chaos and more</em> ist der lokale Chaostreff in Kiel. Seit dem ersten Chaostreffen in Kiel finden die Treffen montags ab 19 Uhr in den Räumen der Toppoint statt.",
415 description_en: nil,
416 external_url: "http://toppoint.de/",
417 location: "Kiel",
418 rrule: "FREQ=WEEKLY;BYDAY=MO",
419 start_time: "19:00",
420 review: false
421 },
422 {
423 slug: "chaostreff-klaus-vorarlberg",
424 title_de: "Open-Lab Klaus (Vorarlberg)",
425 title_en: nil,
426 description_de: "Wir treffen uns jeden Dienstag von 16-20 Uhr im <a href=\"https://open-lab.at/index.php/info/location\">Open-Lab</a> in Klaus, Vorarlberg. Ob jung, ob alt, es ist jewesen bei uns willkommen. Wir haben Internet, Werkzeuge, Lötkolben, 3D-Drucker, Sofas und noch einiges mehr zur Verfügung.",
427 description_en: nil,
428 external_url: "https://open-lab.at/",
429 location: "Klaus, Vorarlberg",
430 rrule: "FREQ=WEEKLY;BYDAY=TU",
431 start_time: "16:00",
432 review: false
433 },
434 {
435 slug: "chaostreff-konstanz",
436 title_de: "hacKNology e.V. Konstanz",
437 title_en: nil,
438 description_de: "Der Chaostreff Konstanz trifft sich jeden 2. Dienstag um 19 Uhr in den Räumlichkeiten des Hackerspace hacKNology e. V.",
439 description_en: nil,
440 external_url: "https://www.hacknology.de/",
441 location: "Konstanz",
442 rrule: "FREQ=MONTHLY;BYDAY=2TU",
443 start_time: "19:00",
444 review: false
445 },
446 {
447 slug: "chaostreff-landau",
448 title_de: "CTRL-Z Landau",
449 title_en: nil,
450 description_de: "<a href=\"https://ctrl-z.info/\">CTRL-Z</a> lädt an drei Dienstagen im Monat zum Open Space bis 23 Uhr ein. Als Teil des <a href=\"https://ztl.space/\">Zentrums für Technikkultur Landau e. V.</a> kann man uns auch bei den zahlreichen Workshops im ZTL treffen. Wir hoffen, ihr schaut mal bei uns vorbei, in der Klaus-Von-Klitzing-Str. 2, im schönen Landau in der Pfalz. Unser Zugang ist barrierefrei, all creatures welcome!",
451 description_en: nil,
452 external_url: "https://ctrl-z.info/",
453 location: "Klaus-Von-Klitzing-Str. 2, Landau",
454 rrule: "FREQ=WEEKLY;BYDAY=TU",
455 start_time: "19:00",
456 review: false
457 },
458 {
459 slug: "chaostreff-loerrach",
460 title_de: "technik.cafe Lörrach",
461 title_en: nil,
462 description_de: "Im technik.cafe Lörrach trifft sich monatlich der Chaostreff Lörrach. Dort wird gefachsimpelt, gebastelt, gelernt und ausgetauscht. Es gibt Werkzeug, Komponenten, Lötkolben, Hardware und Netzwerkzubehör zum Basteln, Testen und Reparieren. Betrieben wird das technik.cafe von Privatleuten aus Leidenschaft, es gibt keinen Verein, keine Mitgliedschaft, keine Gebühren.",
463 description_en: nil,
464 external_url: "https://technik.cafe/",
465 location: "Lörrach",
466 rrule: "FREQ=MONTHLY",
467 start_time: nil,
468 review: false
469 },
470 {
471 slug: "chaostreff-ludwigsburg",
472 title_de: "Chaostreff Ludwigsburg (DemoZ)",
473 title_en: nil,
474 description_de: "Der Chaostreff Ludwigsburg ist ein lockeres und offenes Zusammentreffen von Menschen, die sich dem CCC und der Hackerethik nahe fühlen. Wir treffen uns am letzten Donnerstag im Monat ab 18:00 Uhr im DemoZ in Ludwigsburg und ständig bei <a href=\"https://matrix.to/#/#chaostreff-lb:matrix.org\">Matrix</a>.",
475 description_en: nil,
476 external_url: "https://complb.de",
477 location: "DemoZ, Ludwigsburg",
478 rrule: "FREQ=MONTHLY;BYDAY=-1TH",
479 start_time: "18:00",
480 review: false
481 },
482 {
483 slug: "chaostreff-luxemburg",
484 title_de: "CCC Lëtzebuerg",
485 title_en: nil,
486 description_de: "Der Chaos Computer Club Lëtzebuerg trifft sich jeden Montag um 20 Uhr in der Hauptstadt Luxemburgs im Hackerspace ChaosStuff. Interessierte sind jederzeit herzlich willkommen, zu unseren Treffen zu kommen.",
487 description_en: nil,
488 external_url: "http://www.c3l.lu/",
489 location: "Luxemburg",
490 rrule: "FREQ=WEEKLY;BYDAY=MO",
491 start_time: "20:00",
492 review: false
493 },
494 {
495 slug: "chaostreff-marburg",
496 title_de: "Hackspace Marburg (hsmr)",
497 title_en: nil,
498 description_de: "Der Chaostreff Marburg findet jeden Montag ab 18:00 Uhr im <a href=\"https://hsmr.cc/\">Hackspace Marburg</a> statt. Aber auch sonst lohnt ein Besuch des [hsmr] immer. Erreichen könnt Ihr uns über die <a href=\"https://hsmr.cc/Infrastruktur/Mailinglisten\">Mailingliste</a> oder im IRC auf hackint #hsmr.",
499 description_en: nil,
500 external_url: "https://hsmr.cc/",
501 location: "Marburg",
502 rrule: "FREQ=WEEKLY;BYDAY=MO",
503 start_time: "18:00",
504 review: false
505 },
506 {
507 slug: "chaostreff-markdorf",
508 title_de: "Toolbox Bodensee e.V. Markdorf",
509 title_en: nil,
510 description_de: "Der Chaostreff Markdorf trifft sich regelmäßig im Hackerspace Toolbox Bodensee e. V. Alle galaktischen Wesen sind willkommen.",
511 description_en: nil,
512 external_url: "https://bodensee.space/chaostreff-markdorf",
513 location: "Markdorf",
514 rrule: nil,
515 start_time: nil,
516 review: false
517 },
518 {
519 slug: "chaostreff-muenster",
520 title_de: "warpzone Münster",
521 title_en: nil,
522 description_de: "Das Chaos in Münster trifft sich jeden Mittwoch ab 19 Uhr in der warpzone, 51.943374° N, 7.638241° E.",
523 description_en: nil,
524 external_url: "http://www.warpzone.ms/",
525 location: "Münster",
526 rrule: "FREQ=WEEKLY;BYDAY=WE",
527 start_time: "19:00",
528 review: false
529 },
530 {
531 slug: "chaostreff-neuss",
532 title_de: "fnordeingang e.V. Neuss",
533 title_en: nil,
534 description_de: "Der Chaostreff Neuss findet jeden Mittwoch ab 19 Uhr in den Räumen des fnordeingang e. V. statt. Jeder ist herzlich willkommen, es wird keine Anmeldung benötigt.",
535 description_en: nil,
536 external_url: "https://fnordeingang.de/chaostreff",
537 location: "Neuss",
538 rrule: "FREQ=WEEKLY;BYDAY=WE",
539 start_time: "19:00",
540 review: false
541 },
542 {
543 slug: "chaostreff-nuernberg",
544 title_de: "Chaostreff Nürnberg",
545 title_en: nil,
546 description_de: "Der Chaostreff Nürnberg trifft sich abwechselnd im Hackerspace K4CG und Nerdberg.",
547 description_en: nil,
548 external_url: "https://chaostreff-nuernberg.de",
549 location: "Nürnberg",
550 rrule: nil,
551 start_time: nil,
552 review: false
553 },
554 {
555 slug: "chaostreff-osnabrueck",
556 title_de: "Chaostreff Osnabrück",
557 title_en: nil,
558 description_de: "Der Chaostreff Osnabrück ist eine lockere Gruppe von Leuten mit Interesse in den Bereichen Sicherheit, Kryptographie, alternative Betriebssysteme, freie Software, Netzpolitik und vielen weiteren Themen. Interessierte sind jederzeit herzlich willkommen, zu unseren Treffen zu kommen.",
559 description_en: nil,
560 external_url: "https://chaostreff-osnabrueck.de/",
561 location: "Osnabrück",
562 rrule: nil,
563 start_time: nil,
564 review: false
565 },
566 {
567 slug: "chaostreff-potsdam",
568 title_de: "Chaostreff Potsdam (machBar)",
569 title_en: nil,
570 description_de: "Der Chaostreff Potsdam trifft sich jeden Mittwoch um 19 Uhr. Die Treffen finden in den Räumen des Hackerspace machBar im freiLand, Friedrich-Engels-Straße 22, Haus 5 statt. Alle galaktischen Lebensformen sind willkommen.",
571 description_en: nil,
572 external_url: "https://www.ccc-p.org/",
573 location: "Friedrich-Engels-Straße 22, Haus 5, Potsdam",
574 rrule: "FREQ=WEEKLY;BYDAY=WE",
575 start_time: "19:00",
576 review: false
577 },
578 {
579 slug: "chaostreff-rapperswil",
580 title_de: "Coredump Rapperswil-Jona",
581 title_en: nil,
582 description_de: "(Fast) jeden Montag treffen wir uns ab 20 Uhr im <a href=\"https://www.coredump.ch/der-hackerspace/\">Hackerspace Coredump</a> auf dem Vinora-Areal in Jona (Schweiz) zur wöchentlichen „Hacknight". Wie bei all unseren Events sind Gäste dabei herzlich willkommen. Mit Ferienpass-Kursen und regelmäßigen Rust-Meetups engagiert sich der Verein Coredump auch in der Kinder- und Erwachsenen-Bildung.",
583 description_en: nil,
584 external_url: "https://www.coredump.ch/",
585 location: "Vinora-Areal, Jona",
586 rrule: "FREQ=WEEKLY;BYDAY=MO",
587 start_time: "20:00",
588 review: false
589 },
590 {
591 slug: "chaostreff-recklinghausen",
592 title_de: "Chaostreff Recklinghausen (Hackerhütte)",
593 title_en: nil,
594 description_de: "Jeden Mittwoch trifft sich der Chaostreff Recklinghausen in der Hackerhütte, Westcharweg 101, 45659 Recklinghausen.",
595 description_en: nil,
596 external_url: "http://c3re.de",
597 location: "Westcharweg 101, 45659 Recklinghausen",
598 rrule: "FREQ=WEEKLY;BYDAY=WE",
599 start_time: "19:00",
600 review: false
601 },
602 {
603 slug: "chaostreff-regensburg",
604 title_de: "Binary Kitchen Regensburg",
605 title_en: nil,
606 description_de: "Regensburg hackt in der <a href=\"http://binary.kitchen\">Binary Kitchen</a>. Immer montags. Offen für alle.",
607 description_en: nil,
608 external_url: "http://binary.kitchen",
609 location: "Regensburg",
610 rrule: "FREQ=WEEKLY;BYDAY=MO",
611 start_time: "19:00",
612 review: false
613 },
614 {
615 slug: "chaostreff-rodgau",
616 title_de: "Chaostreff Rodgau",
617 title_en: nil,
618 description_de: "Wir haben Anfang 2025 einen Chaostreff Rodgau gegründet. Wir treffen uns einmal im Monat an unterschiedlichen Orten. Termin und Ort werden auf unserer Website bekanntgegeben.",
619 description_en: nil,
620 external_url: "https://chaostreff-rodgau.codeberg.page",
621 location: "Rodgau",
622 rrule: "FREQ=MONTHLY",
623 start_time: nil,
624 review: false
625 },
626 {
627 slug: "chaostreff-rotterdam",
628 title_de: "Chaostreff Rotterdam (Pixelbar)",
629 title_en: "Chaostreff Rotterdam (Pixelbar)",
630 description_de: "The Chaostreff of Rotterdam meets every Wednesdays around 20 Uhr at Pixelbar in the Keilewerf at the Vierhavensstraat 56 in Rotterdam close to RET / Metro station Marconiplein.",
631 description_en: "The Chaostreff of Rotterdam meets every Wednesdays around 20 Uhr at Pixelbar in the Keilewerf at the Vierhavensstraat 56 in Rotterdam close to RET / Metro station Marconiplein.",
632 external_url: "https://www.pixelbar.nl/contact/",
633 location: "Vierhavensstraat 56, Rotterdam",
634 rrule: "FREQ=WEEKLY;BYDAY=WE",
635 start_time: "20:00",
636 review: false
637 },
638 {
639 slug: "chaostreff-saarbruecken",
640 title_de: "hacksaar Saarbrücken",
641 title_en: nil,
642 description_de: "Unser regelmäßiges Treffen findet jeden Mittwoch ab 19 Uhr im h´eck in der Rathausstraße 18 in 66125 Saarbrücken statt. Gäste und Interessierte sind immer gerne willkommen.",
643 description_en: nil,
644 external_url: "https://www.hacksaar.de",
645 location: "Rathausstraße 18, 66125 Saarbrücken",
646 rrule: "FREQ=WEEKLY;BYDAY=WE",
647 start_time: "19:00",
648 review: false
649 },
650 {
651 slug: "chaostreff-schwerin",
652 title_de: "Hacklabor Schwerin",
653 title_en: nil,
654 description_de: "Bist Du interessiert an Computerkrams, Programmieren, Capture-the-Flag-Challenges, 3D-Druckern, CO2-Lasern, Microcontrollern, Automatisierung, gesellschaftlichen Auswirkungen von Technik und Spaß am Gerät? Hat es Dich nach Mecklenburg-Vorpommern verschlagen? Dann komm ins Hacklabor in der Hagenower Straße 73, Schwerin. In unserer offenen Werkstatt findet sich vom Lötkolben bis zum 3D-Drucker alles, was das Makerherz höher schlagen lässt. Jugendlichen bieten wir im \"Jugend hackt Lab\" die Möglichkeit, Neues auszuprobieren und kreative Ideen zu verwirklichen. Unsere Treffen sind öffentlich und finden mittwochs und freitags ab 19 Uhr statt.",
655 description_en: nil,
656 external_url: "https://hacklabor.de/",
657 location: "Hagenower Straße 73, Schwerin",
658 rrule: "FREQ=WEEKLY;BYDAY=WE,FR",
659 start_time: "19:00",
660 review: false
661 },
662 {
663 slug: "chaostreff-stralsund",
664 title_de: "Port39 e.V. Stralsund (Chaostreff)",
665 title_en: "Port39 e.V. Stralsund",
666 description_de: "Das Chaos ist jetzt auch in Stralsund eingezogen! Als ein weiterer Space in Mecklenburg-Vorpommern möchten wir auch hier das gute Chaos verbreiten, mit Chaos macht Schule in Stralsund und Umgebung Jung und Alt für Technik und IT begeistern und mit diversen Projekten im Space mal mehr, mal weniger sinnvolle Dinge anstellen. Kommt gerne rum oder schaut auf unserer <a href=\"https://port39.de/\">Website</a> oder den Socials vorbei. Definitiv da sind wir jeden Donnerstag zum Chaostreff ab 19 Uhr und jeden 2. &amp; 4. Samstag ab 14 Uhr zum OpenSpace.",
667 description_en: "As the first Erfa in Mecklenburg-Western Pomerania, we at Port39 e.V. make sure that there's a healthy dose of chaos in Stralsund. Feel free to drop by or check out our <a href=\"https://port39.de\">website</a>. We're definitely there every Thursday for the Chaos Meetup starting at 7pm and every 2nd &amp; 4th Saturday starting at 2pm for OpenSpace.",
668 external_url: "https://port39.de/",
669 location: "Stralsund",
670 rrule: "FREQ=WEEKLY;BYDAY=TH",
671 start_time: "19:00",
672 review: false
673 },
674 {
675 slug: "chaostreff-trier",
676 title_de: "Maschinendeck e.V. Trier",
677 title_en: nil,
678 description_de: "Mit dem Maschinendeck e. V. haben wir uns zum Ziel gesetzt, in Trier einen Ort zu schaffen, wo alle Arten von Nerdkultur ein Zuhause finden können. Ob Du coden, löten, Kaffee rösten, Brettspiele spielen oder Deine neueste Verschwörungstheorie besprechen willst: Im Maschinendeck gibt es einen Platz für Dich. Das wöchentliche Treffen findet jeden Mittwoch, 20 Uhr, in unseren Räumen statt.",
679 description_en: nil,
680 external_url: "http://www.maschinendeck.org",
681 location: "Trier",
682 rrule: "FREQ=WEEKLY;BYDAY=WE",
683 start_time: "20:00",
684 review: false
685 },
686 {
687 slug: "chaostreff-tuebingen",
688 title_de: "Chaostreff Tübingen",
689 title_en: nil,
690 description_de: "Der Chaostreff Tübingen ist eine lockere Sammlung zumeist Tübinger und Reutlinger Chaos. Wir treffen uns regelmäßig am letzten Sonntag im Monat gegen 18:00 Uhr im <a href=\"https://ki-maker.space/\">KIMS</a> und ungefähr jeden 2. Montag im Monat gegen 19:00 Uhr im <a href=\"https://www.fablab-neckar-alb.org/\">FabLab</a>. Beide Orte glücklicherweise gut zu Fuß vom Bahnhof erreichbar.",
691 description_en: nil,
692 external_url: "https://cttue.de",
693 location: "Tübingen",
694 rrule: "FREQ=MONTHLY;BYDAY=-1SU",
695 start_time: "18:00",
696 review: false
697 },
698 {
699 slug: "chaostreff-villingen-schwenningen",
700 title_de: "vspace.one Villingen-Schwenningen",
701 title_en: nil,
702 description_de: "Der Chaostreff Villingen-Schwenningen ist Treffpunkt für alle Chaosnahen aus dem Raum Schwarzwald-Baar. Er ist dem Maker- / Hackerspace vspace.one angeschlossen. Jeden Dienstag ab 19 Uhr finden öffentliche Treffen zur Wissensförderung in der Wilhelm-Binder-Straße 19 in Villingen statt. Für gemütliche Plätze, coole Atmosphäre und Mate ist gesorgt!",
703 description_en: nil,
704 external_url: "http://vspace.one",
705 location: "Wilhelm-Binder-Straße 19, Villingen-Schwenningen",
706 rrule: "FREQ=WEEKLY;BYDAY=TU",
707 start_time: "19:00",
708 review: false
709 },
710 {
711 slug: "chaostreff-waldkraiburg",
712 title_de: "Chaostreff Waldkraiburg",
713 title_en: nil,
714 description_de: "Der Chaostreff Waldkraiburg ist eine dem Chaos Computer Club zugehörige Gruppe und Anlaufstelle für alle chaosnahen und interessierten Wesen für die Landkreise Mühldorf am Inn, Altötting und darüber hinaus. Wir sind technikbegeisterte Menschen und beschäftigen uns mit IT-Sicherheit, Webdesign, Gaming, alternativen Betriebssystemen, Retrocomputing, freier Software, Netzpolitik und vielen weiteren Themen. Ob Anfänger oder Profi spielt keine Rolle, es ist keine Anmeldung erforderlich.",
715 description_en: nil,
716 external_url: "https://c3wkb.de",
717 location: "Waldkraiburg",
718 rrule: nil,
719 start_time: nil,
720 review: false
721 },
722 {
723 slug: "chaostreff-westerwald",
724 title_de: "Westwoodlabs Westerwald",
725 title_en: nil,
726 description_de: "Der Chaostreff Westerwald trifft sich jeden Dienstag um 18 Uhr für alle Interessierten in den Räumen der Westwoodlabs in Ransbach-Baumbach.",
727 description_en: nil,
728 external_url: "https://westwoodlabs.de/",
729 location: "Ransbach-Baumbach",
730 rrule: "FREQ=WEEKLY;BYDAY=TU",
731 start_time: "18:00",
732 review: false
733 },
734 {
735 slug: "chaostreff-wuppertal",
736 title_de: "Chaostreff Wuppertal (chaostal)",
737 title_en: nil,
738 description_de: "Der Chaostreff unter der Schwebebahn organisiert in regelmäßigen Abständen Treffen zum gegenseitigen Austausch. Neue Besucher sind jederzeit willkommen. Treffen finden jeden ersten Donnerstag im Monat ab 20 Uhr im Mirker Bahnhof, Mirker Straße 48, Wuppertal-Elberfeld statt. An allen anderen Donnerstagen wechselt der Ort.",
739 description_en: nil,
740 external_url: "https://www.chaostal.de/category/meeting",
741 location: "Mirker Straße 48, Wuppertal-Elberfeld",
742 rrule: "FREQ=MONTHLY;BYDAY=1TH",
743 start_time: "20:00",
744 review: false
745 },
746 {
747 slug: "chaostreff-zwickau",
748 title_de: "z-Labor Zwickau",
749 title_en: nil,
750 description_de: "Für alle chaosnahen Lebewesen öffnet das z-Labor donnerstags um 19 Uhr die Räumlichkeiten in der <a href=\"https://osm.org/go/0MCmr_jJo\">Kulturweberei</a> zum kollektiven Hacken, Basteln, Lernen und Philosophieren. Wir mögen Freie Software, IT-Sicherheit, (Analog-)Fotografie, 3D-Druck, Mate und viele Formen von (digitaler) Kunst. Neben Elektroniklabor und Rechentechnik gibt es eine Holz- und Metallwerkstatt, eine Musik-Ecke und einen Retro-Spiel-Bereich.",
751 description_en: nil,
752 external_url: "https://www.z-labor.space",
753 location: "Kulturweberei, Zwickau",
754 rrule: "FREQ=WEEKLY;BYDAY=TH",
755 start_time: "19:00",
756 review: false
757 }
758]
diff --git a/db/seeds/conflicts.txt b/db/seeds/conflicts.txt
new file mode 100644
index 0000000..a07471f
--- /dev/null
+++ b/db/seeds/conflicts.txt
@@ -0,0 +1,9 @@
1Entries flagged for review: true — these have notable German/English discrepancies:
2
3erfa-berlin: DE says Tuesday+Thursday 19:00; EN says Thursday 17:00 only — the English version is likely outdated
4erfa-erlangen: DE says ZAM, Hauptstr. 65-67, Fridays 18:00; EN says E-Werk, Fuchsenwiese 1, Tuesdays 19:30 — different location and day entirely
5erfa-freiburg: DE says Adlerstraße 12a; EN says ArTik, Kaiser-Joseph-Strasse 141 — different address
6erfa-goettingen: DE says Von-Bar-Straße 2-4; EN says Neustadt 7 — different address
7erfa-hannover: DE says every Wednesday; EN says every second Wednesday and last Sunday — different schedule
8erfa-karlsruhe: DE says Saturday; EN says Sunday — different day
9erfa-ulm: DE says Café Einstein; EN says Freiraum, Platzgasse 18 — different venue
diff --git a/db/seeds/erfas.rb b/db/seeds/erfas.rb
new file mode 100644
index 0000000..bb96924
--- /dev/null
+++ b/db/seeds/erfas.rb
@@ -0,0 +1,470 @@
1erfas = [
2 {
3 slug: "erfa-aachen",
4 title_de: "CCC Aachen",
5 title_en: "CCC Aachen",
6 description_de: "Der CCC Aachen ist regelmäßig zu Themen- und offenen Abenden für Besucher*innen geöffnet. Unsere kleinen aber feinen Clubräume voller Plüschhaie liegen zwischen Hauptbahnhof und Stadtzentrum und sind aus beiden Richtungen in wenigen Minuten Fußweg zu erreichen (Schützenstraße 11, 52062 Aachen). Dank bunter LEDs sind sie besonders abends nicht zu übersehen.",
7 description_en: "CCC Aachen opens its doors regularly to themed and open evenings. Our small but cozy space full of plush sharks is located within a few minutes by foot from central station and the city center (Schützenstraße 11, 52062 Aachen). Thanks to colorful LEDs it's especially easy to find at night.",
8 external_url: "https://ccc.ac/",
9 location: "Schützenstraße 11, 52062 Aachen",
10 rrule: "FREQ=WEEKLY;BYDAY=TU",
11 start_time: "19:00",
12 review: false
13 },
14 {
15 slug: "erfa-bamberg",
16 title_de: "backspace e.V. Bamberg",
17 title_en: "backspace e.V. Bamberg",
18 description_de: "Der Bamberger Erfa-Kreis und Hackerspace ist der backspace e.V., ein Zusammenschluss von Menschen, die technische Grenzen überwinden wollen, Innovationen erproben und den freien Wissensaustausch befördern. Der backspace ist Thinktank, Werkstatt, Hackerspace, Freiraum, Zuhause, Labor und Impulsgeber. Es ist fast immer was los, besonders am Dienstag ab 19 Uhr im Spiegelgraben 41, 96052 Bamberg.",
19 description_en: "The CCC affiliated hackerspace backspace gathers people interested in technical innovation and free information exchange. It is a think tank, workshop, hackerspace, open space, home, laboratory and instigator. There is something going on every day, but most people meet at Spiegelgraben 41 in Bamberg on Tuesday, 7pm.",
20 external_url: "https://www.hackerspace-bamberg.de/",
21 location: "Spiegelgraben 41, 96052 Bamberg",
22 rrule: "FREQ=WEEKLY;BYDAY=TU",
23 start_time: "19:00",
24 review: false
25 },
26 {
27 slug: "erfa-basel",
28 title_de: "CCC Basel",
29 title_en: "CCC Basel",
30 description_de: "Die Türen des CCC Basel sind jeden Dienstagabend ab 19:30 Uhr geöffnet. Uns findet man an der Birsfelderstrasse 6 in CH-4132 Muttenz (Außentreppe zum Kellereingang). Falls du mit der Tram 14 vorfährst, empfehlen wir dir die Haltestelle Käppeli.",
31 description_en: "CCC Basel opens its doors every Tuesday evening from 19:30. We are located at Birsfelderstrasse 6, 4132 Muttenz, Switzerland; just go down the outdoors stairway to the basement. If you arrive by public transit, we recommend taking tramway 14 to the stop Käppeli.",
32 external_url: "https://ccc-basel.ch/",
33 location: "Birsfelderstrasse 6, CH-4132 Muttenz",
34 rrule: "FREQ=WEEKLY;BYDAY=TU",
35 start_time: "19:30",
36 review: false
37 },
38 {
39 slug: "erfa-berlin",
40 title_de: "CCC Berlin – Club Discordia",
41 title_en: "CCC Berlin – Club Discordia",
42 description_de: "Der Club Discordia ist ein öffentliches Treffen in den Clubräumen des CCC Berlin (Marienstraße 11, 10117 Berlin-Mitte). Die Treffen finden jeden Dienstag und Donnerstag ab ca. 19 Uhr statt.",
43 description_en: "Club Discordia is a public meeting located at the CCC Berlin (Marienstr. 11, 10117 Berlin-Mitte). Meetings are held every Thursday at 5pm.",
44 external_url: "http://berlin.ccc.de/",
45 location: "Marienstraße 11, 10117 Berlin",
46 rrule: "FREQ=WEEKLY;BYDAY=TU,TH",
47 start_time: "19:00",
48 review: true
49 },
50 {
51 slug: "erfa-bremen",
52 title_de: "CCC Bremen",
53 title_en: "CCC Bremen",
54 description_de: "Ein öffentliches Treffen des CCC Bremen findet jeweils dienstags ab 20 Uhr in der Zweigstraße 1 statt.",
55 description_en: "The public get together of CCC Bremen takes place every Tuesday at 8pm at Z1 (Zweigstraße 1, 28217 Bremen).",
56 external_url: "https://www.ccchb.de/",
57 location: "Zweigstraße 1, 28217 Bremen",
58 rrule: "FREQ=WEEKLY;BYDAY=TU",
59 start_time: "20:00",
60 review: false
61 },
62 {
63 slug: "erfa-chemnitz",
64 title_de: "CCC Chemnitz (ChCh)",
65 title_en: nil,
66 description_de: "Der Chaos Computer Club Chemnitz (ChCh) betreibt seit 2011 einen eigenen Hackspace in der Augustusburger Straße 102. Wir stehen allen technikinteressierten und kreativen Menschen offen und freuen uns immer über neue Gäste. Wir fühlen uns der Informationsfreiheit und der Aufklärung über die Auswirkungen aktueller Technologien auf die Gesellschaft verpflichtet. Trotzdem kommt bei uns auch der Spaß am Gerät nicht zu kurz.",
67 description_en: nil,
68 external_url: "https://chaoschemnitz.de",
69 location: "Augustusburger Straße 102, Chemnitz",
70 rrule: nil,
71 start_time: nil,
72 review: false
73 },
74 {
75 slug: "erfa-darmstadt",
76 title_de: "CCC Darmstadt",
77 title_en: "CCC Darmstadt",
78 description_de: "Wir treffen uns jeden Dienstagabend ab 19 Uhr zum gemeinsamen Basteln, Diskutieren, Hacken, Nerden – eben einfach zum offenen Chaos – in unserem Hackspace in der Wilhelminenstraße 17, mitten in der Darmstädter Innenstadt. Aber auch an <a href=\"https://www.chaos-darmstadt.de/termine.html\">jedem anderen Abend</a> ist in der Regel etwas los. Neben der Nutzung unserer Elektronikwerkstatt hast du zum Beispiel die Möglichkeit, bei unserem <a href=\"https://www.chaos-darmstadt.de/wizardsofdos.html\">Capture-the-Flag-Team „Wizards of DoS"</a> reinzuschauen oder dich bei <a href=\"https://darmstadt.freifunk.net\">Freifunk Darmstadt</a> zu engagieren. Aktuelle Termine und Neuigkeiten sowie den Türstatus gibt's auf <a href=\"https://www.chaos-darmstadt.de/\">chaos-darmstadt.de</a>. Im IRC findest du uns unter <a href=\"https://webirc.hackint.org/#chaos-darmstadt\">#chaos-darmstadt auf hackint</a>. Mailingliste: public&lt;ät&gt;lists.darmstadt.ccc.de. Schau doch einfach mal vorbei!",
79 description_en: "CCC Darmstadt meets Tuesdays from 8pm in their hackspace at Wilhelm-Leuschner-Strasse 36.",
80 external_url: "https://www.chaos-darmstadt.de/",
81 location: "Wilhelminenstraße 17, Darmstadt",
82 rrule: "FREQ=WEEKLY;BYDAY=TU",
83 start_time: "19:00",
84 review: true
85 },
86 {
87 slug: "erfa-dortmund",
88 title_de: "CCC Dortmund",
89 title_en: nil,
90 description_de: "Der Erfa Dortmund ist ein Treffen von Dortmundern oder Leuten, die in der Dortmunder Umgebung wohnen (Unna, Holzwickede, Schwerte etc.). Wem kreativer Umgang mit Technik nicht fremd ist, ist herzlich zum Treff im Langen August in der Braunschweiger Straße 22 in Dortmund eingeladen. Treffen finden dienstags und donnerstags ab 19 Uhr (+1h Chaos-Verspätung) statt.",
91 description_en: nil,
92 external_url: "http://www.chaostreff-dortmund.de",
93 location: "Braunschweiger Straße 22, Dortmund",
94 rrule: "FREQ=WEEKLY;BYDAY=TU,TH",
95 start_time: "19:00",
96 review: false
97 },
98 {
99 slug: "erfa-dresden",
100 title_de: "CCC Dresden (c3d2)",
101 title_en: "CCC Dresden (c3d2)",
102 description_de: "Die Chaoten aus dem ganzsächsischen bzw. südbrandenburgischen Raum treffen sich jeden Dienstag in Dresden (Details bitte jeweils <a href=\"http://www.c3d2.de/muc.html\">per Jabber unter c3d2@muc.hq.c3d2.de</a> erfragen). Darüberhinaus finden auch häufig, aber unregelmäßig Themenabende statt.",
103 description_en: "The geeks from Saxony and southern Brandenburg meet every Tuesday in Dresden (<a href=\"http://www.c3d2.de/muc.html\">for details please ask via jabber at c3d2@muc.hq.c3d2.de</a>). Furthermore there are occasional get-togethers for specific subjects.",
104 external_url: "http://www.c3d2.de/",
105 location: "Dresden",
106 rrule: "FREQ=WEEKLY;BYDAY=TU",
107 start_time: "19:00",
108 review: false
109 },
110 {
111 slug: "erfa-duesseldorf",
112 title_de: "Chaosdorf Düsseldorf",
113 title_en: "Chaosdorf Düsseldorf",
114 description_de: "Der Düsseldorfer Erfa (auch als Chaosdorf bekannt) betreibt einen Hackspace in der Sonnenstr. 58, der nahezu durchgehend geöffnet ist. Der Kennenlernabend, „Freitagsfoo", findet jeden Freitag ab 18 Uhr statt.",
115 description_en: "CCC Düsseldorf (aka Chaosdorf) operates a hackspace in Sonnenstraße 58 that is open nearly 24/7. The best method for getting to know it is the \"Freitagsfoo\" event, taking place every Friday from 6pm.",
116 external_url: "https://chaosdorf.de/",
117 location: "Sonnenstraße 58, Düsseldorf",
118 rrule: "FREQ=WEEKLY;BYDAY=FR",
119 start_time: "18:00",
120 review: false
121 },
122 {
123 slug: "erfa-erlangen",
124 title_de: "Bits'n'Bugs e.V. Erlangen",
125 title_en: "Bits'n'Bugs e.V. Erlangen",
126 description_de: "Der Bits'n'Bugs e.V. trifft sich jeden Freitag ab 18 Uhr im <a href=\"https://zam.haus/\">ZAM</a>, Hauptstr. 65-67, und zu weiteren unregelmäßigen Zeiten je nach Aktivitäten. Wir beteiligen uns außerdem regelmäßig an Veranstaltungen und Projekten des ZAM.",
127 description_en: "Bits'n'Bugs e.V. meets every Tuesday at 7:30pm in E-Werk Erlangen, Fuchsenwiese 1, group room 5.",
128 external_url: "http://erlangen.ccc.de/",
129 location: "Hauptstraße 65-67, Erlangen",
130 rrule: "FREQ=WEEKLY;BYDAY=FR",
131 start_time: "18:00",
132 review: true
133 },
134 {
135 slug: "erfa-essen",
136 title_de: "Chaospott Essen",
137 title_en: "Chaospott Essen",
138 description_de: "Der Chaospott ist die lokale Vertretung des CCC im Herzen des Ruhrgebiets. Wir treffen uns jeden Mittwoch ab 19 Uhr in der Sibyllastraße 9, 45136 Essen (Hofgebäude).",
139 description_en: "Chaospott is the local subsidiary of the CCC at the heart of the Ruhr area. We meet every Wednesday at 7pm in the »foobar«.",
140 external_url: "http://chaospott.de/",
141 location: "Sibyllastraße 9, 45136 Essen",
142 rrule: "FREQ=WEEKLY;BYDAY=WE",
143 start_time: "19:00",
144 review: true
145 },
146 {
147 slug: "erfa-flensburg",
148 title_de: "CCC Flensburg",
149 title_en: nil,
150 description_de: "Deutschlands nördlichster Erfa trifft sich jeden Dienstag ab 18 Uhr in der Apenrader Straße 49, 24939 Flensburg. Bei unserem <a href=\"https://c3fl.de/mitmachen/openSpace/\">OpenSpace</a> sind neue Gesichter immer willkommen! Folgt uns gerne auch auf <a href=\"https://chaos.social/@chaos_fl\">Mastodon</a>.",
151 description_en: nil,
152 external_url: "https://c3fl.de/",
153 location: "Apenrader Straße 49, 24939 Flensburg",
154 rrule: "FREQ=WEEKLY;BYDAY=TU",
155 start_time: "18:00",
156 review: false
157 },
158 {
159 slug: "erfa-frankfurt",
160 title_de: "CCC Frankfurt am Main",
161 title_en: "CCC Frankfurt am Main",
162 description_de: "Wir treffen uns jeden Dienstag und Donnerstag (auch an den meisten Feiertagen) ab 19 Uhr in unserem Hackerspace, dem HQ. Dazu sind alle Interessierten jederzeit herzlich eingeladen.",
163 description_en: "We meet every Tuesday (even on most holidays) at 7pm in our hackspace the HQ. All interested people are welcome.",
164 external_url: "http://ccc-ffm.de/hackerspace/",
165 location: "Frankfurt am Main",
166 rrule: "FREQ=WEEKLY;BYDAY=TU,TH",
167 start_time: "19:00",
168 review: false
169 },
170 {
171 slug: "erfa-freiburg",
172 title_de: "CCC Freiburg",
173 title_en: "CCC Freiburg",
174 description_de: "Der Chaos Computer Club Freiburg trifft sich montags und dienstags ab 19 Uhr sowie nach Lust und Laune in seinen Räumen in der Adlerstraße 12a, 79098 Freiburg. Plenum ist jede zweite Woche dienstags ab 20 Uhr.",
175 description_en: "Erfa Freiburg meets on Tuesdays at 7pm in their own room at ArTik, the former underpass at Siegesdenkmal (Kaiser-Joseph-Strasse 141, 79089 Freiburg).",
176 external_url: "http://cccfr.de",
177 location: "Adlerstraße 12a, 79098 Freiburg",
178 rrule: "FREQ=WEEKLY;BYDAY=TU",
179 start_time: "19:00",
180 review: true
181 },
182 {
183 slug: "erfa-fulda",
184 title_de: "Magrathea Laboratories e.V. Fulda",
185 title_en: nil,
186 description_de: "Der Magrathea Laboratories e.V. (mag.lab) ist die lokale Chaosmanifestation und Treffpunkt einiger Haecksen, Hacker und anderweitig Technikinteressierter in der Lindenstraße 14 in Fulda. Das Chaos steht allen immer freitags ab 19 Uhr offen.",
187 description_en: nil,
188 external_url: "https://maglab.space/",
189 location: "Lindenstraße 14, Fulda",
190 rrule: "FREQ=WEEKLY;BYDAY=FR",
191 start_time: "19:00",
192 review: false
193 },
194 {
195 slug: "erfa-goettingen",
196 title_de: "CCC Göttingen",
197 title_en: "CCC Göttingen",
198 description_de: "Der Erfa-Kreis Göttingen wurde im November 2007 von Hackern gegründet, die sich dem Chaos Computer Club nahefühlen. Open Chaos findet jeden zweiten Dienstag ab 20 Uhr im Neotopia (Von-Bar-Straße 2-4, Keller des MLP-Hauses) statt. Interessierte sind herzlich willkommen.",
199 description_en: "Erfa Göttingen was founded Nov 2007 by hackers close to the Chaos Computer Club. Open Chaos is every Tuesday from 8pm at NOKLAB (Neustadt 7, Innenstadt). All interested people are welcome.",
200 external_url: "http://www.chaostreff-goettingen.de/",
201 location: "Von-Bar-Straße 2-4, Göttingen",
202 rrule: "FREQ=WEEKLY;INTERVAL=2;BYDAY=TU",
203 start_time: "20:00",
204 review: true
205 },
206 {
207 slug: "erfa-hamburg",
208 title_de: "CCC Hamburg",
209 title_en: "CCC Hamburg",
210 description_de: "Der Hamburger Erfa-Kreis trifft sich in der Viktoria-Kaserne (1. Stock, Ostflügel), Zeiseweg 9, 22765 Hamburg. Der zweite Freitag und der letzte Dienstag im Monat sind perfekt zum Kennenlernen und Fragen stellen, weitere Termine finden sich auf dem <a href=\"https://www.hamburg.ccc.de/calendar/\">Kalender des Erfa Hamburg</a>, der mit öffentlichen Veranstaltungen gefüllt ist.",
211 description_en: "The Erfakreis Hamburg meets at Viktoria-Kaserne, room 119 (1st floor, east wing) Zeiseweg 9, 22765 Hamburg. Every second Friday and last Tuesday of the month are great opportunities to meet people and ask questions. We also have a <a href=\"http://www.hamburg.ccc.de/category/termine\">calendar</a> filled with events open for visitors.",
212 external_url: "http://hamburg.ccc.de/",
213 location: "Zeiseweg 9, 22765 Hamburg",
214 rrule: "FREQ=MONTHLY;BYDAY=2FR",
215 start_time: "19:00",
216 review: false
217 },
218 {
219 slug: "erfa-hannover",
220 title_de: "CCC Hannover",
221 title_en: "CCC Hannover",
222 description_de: "Das regionale Chaos in Hannover trifft sich jeden Mittwoch ab 19 Uhr in der Bürgerschule im Clubraum (Raum 3.1) im Stadtteilzentrum Nordstadt.",
223 description_en: "The regional Chaos in Hannover meets every second Wednesday of the month from 8pm and on the last Sunday of the month from 4pm at the Bürgerschule in their clubroom (room 3.1) in the community center Nordstadt.",
224 external_url: "https://hannover.ccc.de/",
225 location: "Bürgerschule, Raum 3.1, Hannover",
226 rrule: "FREQ=WEEKLY;BYDAY=WE",
227 start_time: "19:00",
228 review: true
229 },
230 {
231 slug: "erfa-kaiserslautern",
232 title_de: "Chaos inKL. e.V. Kaiserslautern",
233 title_en: nil,
234 description_de: "Der Chaos inKL. e.V. ist die Kaiserslauterner Niederlassung des Chaos Computer Clubs. Unsere öffentlichen Veranstaltungen sind die Hacknight (der samstägliche Basteltreff ab 19 Uhr), das monatliche Seminar und das monatliche Kneipentreffen.",
235 description_en: nil,
236 external_url: "http://www.chaos-inkl.de/",
237 location: "Kaiserslautern",
238 rrule: "FREQ=WEEKLY;BYDAY=SA",
239 start_time: "19:00",
240 review: false
241 },
242 {
243 slug: "erfa-karlsruhe",
244 title_de: "Entropia e.V. Karlsruhe",
245 title_en: "Entropia e.V. Karlsruhe",
246 description_de: "Der <a href=\"https://entropia.de/\">Erfa-Kreis Karlsruhe</a> ist ein eingetragener Verein mit dem Namen Entropia. Die öffentlichen <a href=\"https://entropia.de/Treffen\">Treffen</a> finden jeden Samstag ab 19:30 Uhr in <a href=\"https://entropia.de/Clubr%C3%A4ume\">den Räumen des Erfa Karlsruhe</a> (Gewerbehof, Steinstraße 23) statt und richten sich an alle aus Karlsruhe und dem Umland.",
247 description_en: "Erfa Karlsruhe is a registered club with the name 'Entropia'. The public meetings take place every Sunday from 7:30pm at our club (Gewerbehof, Steinstr. 23) and targets people from Karlsruhe and surrounding region.",
248 external_url: "https://entropia.de/",
249 location: "Steinstraße 23, Karlsruhe",
250 rrule: "FREQ=WEEKLY;BYDAY=SA",
251 start_time: "19:30",
252 review: true
253 },
254 {
255 slug: "erfa-kassel",
256 title_de: "flipdot e.V. Kassel",
257 title_en: "flipdot e.V. Kassel",
258 description_de: "flipdot e.V. hackerspace kassel ist der lokale Erfa-Kreis – ein lebendiger Ort mit viel Platz zum Bausteln und Coden. Es gibt gut ausgestattete Werkstatträume, Vortrags- und Kinoraum und eine Küche mit Profi-Pizzaofen. Im flipdot wird sehr oft zusammen gekocht und gegessen. flipdot ist seit 2009 Brutstätte neuer Ideen, Wohnzimmer, anarchistische Volkshochschule, Coder-Cave und umtriebige Werkstatt. Offen für Besucher jeden Dienstag ab 19 Uhr, Schillerstraße 25, 34117 Kassel.",
259 description_en: "flipdot e.V. hackerspace kassel is the local Erfa circle – a lively place with plenty of space for building and coding. There are well-equipped workshop rooms, a lecture and cinema room, and a kitchen with a professional pizza oven. At flipdot, people often cook and eat together. Since 2009, flipdot has been a breeding ground for new ideas, a living room, an anarchist adult education center, a coder's cave, and a bustling workshop. Open to visitors every Tuesday from 7pm, Schillerstraße 25, 34117 Kassel.",
260 external_url: "http://kassel.ccc.de/",
261 location: "Schillerstraße 25, 34117 Kassel",
262 rrule: "FREQ=WEEKLY;BYDAY=TU",
263 start_time: "19:00",
264 review: false
265 },
266 {
267 slug: "erfa-koeln",
268 title_de: "c4 Köln",
269 title_en: "c4 Cologne",
270 description_de: "Der c4 ist der westliche Brückenkopf des innovativen Technologieeinsatzes mit allen Features, die zum Chaos gehören. Öffentliche Treffen gibt es jeden Donnerstag ab 19:30 Uhr im Chaoslabor in Köln-Ehrenfeld, an jedem letzten Donnerstag im Monat gibt es ein OpenChaos als Vortragsrahmenprogramm.",
271 description_en: "The c4 is a westward bridge head of the innovative technology usage with all features that are necessary for chaos. The public meeting is called OpenChaos and takes place on the last Thursday of the month at 19:30 in the Chaoslabor in Cologne-Ehrenfeld.",
272 external_url: "http://koeln.ccc.de/",
273 location: "Köln-Ehrenfeld",
274 rrule: "FREQ=WEEKLY;BYDAY=TH",
275 start_time: "19:30",
276 review: false
277 },
278 {
279 slug: "erfa-leipzig",
280 title_de: "dezentrale e.V. Leipzig",
281 title_en: nil,
282 description_de: "Der dezentrale e.V. vertritt als Erfa das lokale Chaos in Leipzig. Wir bieten einen Anlaufpunkt für Softwarenerds, Künstler:innen, Hardwareschraubende und -löter:innen und alle chaosnahen Themen. Infos über uns findest Du unter <a href=\"http://dezentrale.space\">dezentrale.space</a>. Unser Vernetzungsabend ist der Chaostreff jeden Freitag ab 19:00.",
283 description_en: nil,
284 external_url: "http://dezentrale.space",
285 location: "Leipzig",
286 rrule: "FREQ=WEEKLY;BYDAY=FR",
287 start_time: "19:00",
288 review: false
289 },
290 {
291 slug: "erfa-luebeck",
292 title_de: "Chaotikum e.V. Lübeck",
293 title_en: "Chaotikum e.V. Lübeck",
294 description_de: "Der Lübecker Erfa ist der Chaotikum e.V., welcher seit 2012 den Hackspace Nobreakspace betreibt. Dort treffen sich seitdem technikinteressierte Menschen, um an diversen Projekten zu arbeiten, über Themen zu reden, die uns beschäftigen, und vor allem um Spaß zu haben. Open Space ist immer Mittwochs ab 19:00 Uhr.",
295 description_en: "The Lübeck Hackspace group is Chaotikum e.V., which has been running the Nobreakspace hackspace since 2012. Since then, tech enthusiasts have been meeting there to work on various projects, discuss topics that interest them, and above all, have fun. Open Space is every Wednesday from 7:00 PM.",
296 external_url: "https://chaotikum.org",
297 location: "Lübeck",
298 rrule: "FREQ=WEEKLY;BYDAY=WE",
299 start_time: "19:00",
300 review: false
301 },
302 {
303 slug: "erfa-mainz-wiesbaden",
304 title_de: "CCC Mainz/Wiesbaden",
305 title_en: "CCC Mainz/Wiesbaden",
306 description_de: "Das Wiesbadener Chaos trifft sich jeden Dienstag ab 19 Uhr in seinen Räumen am Sedanplatz 7 in Wiesbaden. Die Treffen richten sich an alle aus Mainz/Wiesbaden und dem nahen Umland.",
307 description_en: "The Chaos Computer Club Mainz meets every Tuesday, 7pm, at Sedanplatz 7 in Wiesbaden. The meetup is addressed to everyone from Mainz/Wiesbaden and the near surroundings.",
308 external_url: "http://www.cccmz.de",
309 location: "Sedanplatz 7, Wiesbaden",
310 rrule: "FREQ=WEEKLY;BYDAY=TU",
311 start_time: "19:00",
312 review: false
313 },
314 {
315 slug: "erfa-mannheim",
316 title_de: "CCC Mannheim",
317 title_en: "CCC Mannheim",
318 description_de: "Der Erfa-Kreis Mannheim ist eine Anlaufstelle für Computer- und Technikinteressierte, die Gleichgesinnte suchen. Hier kann man sich austauschen, seine Ideen präsentieren und diskutieren. Unsere öffentlichen Treffen finden jeden Freitag ab 19 Uhr statt. Die Termine stehen in unserem Wiki.",
319 description_en: "Erfa Mannheim is a local contact point for people that are interested in computer and technology, who search for like minded people. You can exchange, present and discuss your ideas. Our public meeting takes place every Friday.",
320 external_url: "http://www.ccc-mannheim.de",
321 location: "Mannheim",
322 rrule: "FREQ=WEEKLY;BYDAY=FR",
323 start_time: "19:00",
324 review: false
325 },
326 {
327 slug: "erfa-muenchen",
328 title_de: "µC³ München",
329 title_en: "µC³ Munich",
330 description_de: "Die öffentlichen Treffen des µC³ finden am zweiten Dienstag jeden Monats ab ca. 20 Uhr im Club in der Schleißheimer Straße 39 (Ecke Heßstraße 90) statt. Dies ist natürlich auch ein Ort, um jederzeit mit jemandem des Münchner CCCs ins Gespräch zu kommen.",
331 description_en: "The public meetup of the µC³ takes places every second Tuesday of the month, starting at about 8pm at Schleißheimer Str. 39 (corner to Heßstraße 90).",
332 external_url: "https://muc.ccc.de/",
333 location: "Schleißheimer Straße 39, München",
334 rrule: "FREQ=MONTHLY;BYDAY=2TU",
335 start_time: "20:00",
336 review: false
337 },
338 {
339 slug: "erfa-offenburg",
340 title_de: "Section77 e.V. Offenburg",
341 title_en: nil,
342 description_de: "Der lockere Treff von Section77 e. V. für alle Chaos-Interessierten aus dem Raum Offenburg findet jeden Dienstag ab 20 Uhr im Hackspace statt. Dieser befindet sich in der Hauptstraße 1 in Offenburg (direkt im Bahnhofsgebäude). Gäste sind immer willkommen.",
343 description_en: nil,
344 external_url: "https://section77.de",
345 location: "Hauptstraße 1, Offenburg",
346 rrule: "FREQ=WEEKLY;BYDAY=TU",
347 start_time: "20:00",
348 review: false
349 },
350 {
351 slug: "erfa-paderborn",
352 title_de: "CCC Paderborn (subraum)",
353 title_en: "CCC Paderborn",
354 description_de: "Wir treffen uns immer mittwochs in unserem Hackerspace \"subraum\" in der Westernmauer 12-16.",
355 description_en: "We meet up Wednesdays at the pottery in the \"Kulturwerkstatt\". Our move to our new rooms in Westernmauer 12 is imminent.",
356 external_url: "https://www.c3pb.de/",
357 location: "Westernmauer 12-16, Paderborn",
358 rrule: "FREQ=WEEKLY;BYDAY=WE",
359 start_time: "19:00",
360 review: true
361 },
362 {
363 slug: "erfa-salzburg",
364 title_de: "Erfa Salzburg",
365 title_en: nil,
366 description_de: "Der Erfa Salzburg ist eine als eingetragener Verein organisierte und trotzdem lockere Runde von Leuten, die sich mit dem Chaos Computer Club e.V. eng verbunden fühlen. Wir versuchen, einen Blick hinter die Kulissen zu werfen und viele Dinge zu hinterfragen und zu diskutieren.",
367 description_en: nil,
368 external_url: "http://sbg.chaostreff.at/",
369 location: "Salzburg",
370 rrule: nil,
371 start_time: nil,
372 review: false
373 },
374 {
375 slug: "erfa-siegen",
376 title_de: "Chaos Siegen",
377 title_en: nil,
378 description_de: "Chaos Siegen besteht aus einer Handvoll freundlicher und offener Menschen mit einer Leidenschaft für Netzpolitik, dem Chaos Computer Club im Hintergrund und gestrandet im Hackspace Siegen durch die Wirren unserer Galaxie. #tuwat und komm vorbei!",
379 description_en: nil,
380 external_url: "https://c3si.de/",
381 location: "Siegen",
382 rrule: nil,
383 start_time: nil,
384 review: false
385 },
386 {
387 slug: "erfa-stralsund",
388 title_de: "Port39 e.V. Stralsund",
389 title_en: "Port39 e.V. Stralsund",
390 description_de: "Als erster Erfa in Mecklenburg-Vorpommern sorgen wir als Port39 e.V. in Stralsund und Umgebung für eine ordentliche Portion Chaos. Mit Chaos macht Schule, Vorträgen und Workshops, Hacking-Sessions, Löt-Workshops, RepairCafés und vielem mehr wollen wir Jung und Alt für Technik, IT und allem, was dazu gehört, begeistern, und mit diversen Projekten im eigenen Hackerspace mal mehr, mal weniger sinnvolle Dinge anstellen. Kommt gerne rum oder schaut auf unserer <a href=\"https://port39.de\">Website</a> oder auf <a href=\"https://chaos.social/@Port39\">Mastodon</a> vorbei. Definitiv da sind wir jeden Donnerstag zum Chaostreff ab 19 Uhr und jeden 2. &amp; 4. Samstag ab 14 Uhr zum OpenSpace.",
391 description_en: "As the first Erfa in Mecklenburg-Western Pomerania, we at Port39 e.V. make sure that there's a healthy dose of chaos in Stralsund and the surrounding area. Through \"Chaos macht Schule\" events, lectures, workshops, hacking sessions, soldering workshops, Repair Cafés, and much more, we aim to inspire people of all ages to get excited about technology, IT, and everything that goes with it. Feel free to drop by or check out our <a href=\"https://port39.de\">website</a> or <a href=\"https://chaos.social/@Port39\">Mastodon</a>. We're definitely there every Thursday for the Chaos Meetup starting at 7pm and every 2nd &amp; 4th Saturday starting at 2pm for OpenSpace.",
392 external_url: "https://port39.de",
393 location: "Stralsund",
394 rrule: "FREQ=WEEKLY;BYDAY=TH",
395 start_time: "19:00",
396 review: false
397 },
398 {
399 slug: "erfa-stuttgart",
400 title_de: "CCC Stuttgart",
401 title_en: "CCC Stuttgart",
402 description_de: "Der Chaos Computer Club Stuttgart e.V. trifft sich jeden ersten Dienstag im Monat im Lichtblick in der Stadtmitte (Reinsburgstraße 13) ab 18:30 Uhr und jeden dritten Mittwoch im Monat im Shackspace (Ulmer Straße 255) ab 18:30 Uhr. Im Shackspace kann Bastelhardware gerne mitgebracht werden. Jeden zweiten Donnerstag im Monat haben wir unsere Vortragsreihe in der Stadtbibliothek Stuttgart am Mailänder Platz.",
403 description_en: "Der Chaos Computer Club Stuttgart e.V. meets every first Tuesday of the month at the Zadu-Bar (Reuchlinstraße 4b) at 6:30pm and every third Wednesday of the month at the Shackspace (Ulmer Straße 255). Our monthly Talk is every second Thursday of the month in the public library of Stuttgart at the Mailänder Platz at 7:30pm.",
404 external_url: "https://www.cccs.de/",
405 location: "Stuttgart",
406 rrule: "FREQ=MONTHLY;BYDAY=1TU",
407 start_time: "18:30",
408 review: true
409 },
410 {
411 slug: "erfa-ulm",
412 title_de: "Chaostreff Ulm",
413 title_en: "Chaostreff Ulm",
414 description_de: "Der Chaostreff Ulm findet jeden Montag ab 19:30 Uhr im Café Einstein an der Uni Ulm statt, außer jeden zweiten Montag des Monats. Dieser ist dem Chaosseminar vorbehalten.",
415 description_en: "The Chaostreff Ulm takes place every Monday at 8:00pm in the Freiraum (3rd floor, Platzgasse 18, Ulm) at Hackerspace Ulm e.V. In addition, the talk series Chaos seminar on various topics is held there every second Monday of the month.",
416 external_url: "http://www.ulm.ccc.de/",
417 location: "Café Einstein, Uni Ulm",
418 rrule: "FREQ=WEEKLY;BYDAY=MO",
419 start_time: "19:30",
420 review: true
421 },
422 {
423 slug: "erfa-unna",
424 title_de: "CCC Unna (UN-Hack-Bar)",
425 title_en: "CCC Unna (UN-Hack-Bar)",
426 description_de: "Der CCC Unna trifft sich für gewöhnlich jeden Donnerstag ab ca. 19 Uhr in den Räumen der UN-Hack-Bar. Dort quatschen wir über allerlei Dinge wie z. B. Netzpolitik, Politik im Allgemeinen, Computer &amp; Technik, aber auch schonmal darüber, wie man einen brennenden Feuerlöscher löscht oder das neueste Internet-Meme. ;-) Natürlich wird auch gebastelt, gebaut und im besten Sinne gehackt. Gäste aller Couleur sind gern gesehen.",
427 description_en: "The CCC Unna usually meets every Thursday at around 7pm in the rooms of the UN-Hack-Bar. We chat about all kinds of topics: from net politics and politics in general to computers and technology, and sometimes even about odd questions like how to extinguish a burning fire extinguisher or the latest internet meme. ;-) Of course, we also tinker, build, and hack things in the best possible sense. Guests of all kinds are very welcome.",
428 external_url: "https://www.un-hack-bar.de/ccc-unna/",
429 location: "Unna",
430 rrule: "FREQ=WEEKLY;BYDAY=TH",
431 start_time: "19:00",
432 review: false
433 },
434 {
435 slug: "erfa-wien",
436 title_de: "CCC Wien",
437 title_en: "CCC Vienna",
438 description_de: "Der Chaos Computer Club Wien trifft sich einmal im Monat, meistens im <a href=\"https://metalab.at/\">Metalab</a>. Details zu den Treffen werden <a href=\"https://c3w.at/events/\">auf der Webseite des C3W</a> bekanntgegeben. Für Fragen und allgemeine Announcements stehen die <a href=\"https://c3w.at/mitmachen/\">öffentliche C3W-Mailingliste</a> oder <a href=\"https://chaos.social/@C3Wien\">@C3Wien@chaos.social</a> bereit. Komm vorbei!",
439 description_en: "The Chaos Computer Club Vienna meets once a month. Usually at <a href=\"https://metalab.at/\">Metalab</a>. Find details on <a href=\"https://c3w.at/events/\">our website</a>. Use the <a href=\"https://c3w.at/mitmachen/\">public mailinglist</a> or <a href=\"https://chaos.social/@C3Wien\">@C3Wien@chaos.social</a> to ask questions or to receive announcements. Come by!",
440 external_url: "https://c3w.at/",
441 location: "Metalab, Wien",
442 rrule: "FREQ=MONTHLY",
443 start_time: "19:00",
444 review: false
445 },
446 {
447 slug: "erfa-wuerzburg",
448 title_de: "Nerd2Nerd Würzburg",
449 title_en: nil,
450 description_de: "Nerd2Nerd trifft sich jeden Donnerstag ab 18 Uhr im FabLab Würzburg.",
451 description_en: nil,
452 external_url: "http://nerd2nerd.org/",
453 location: "FabLab Würzburg",
454 rrule: "FREQ=WEEKLY;BYDAY=TH",
455 start_time: "18:00",
456 review: false
457 },
458 {
459 slug: "erfa-zuerich",
460 title_de: "CCCZH Zürich",
461 title_en: "CCCZH Zurich",
462 description_de: "Der CCCZH ist Teil des Hackerspace <a href=\"https://www.bitwaescherei.ch/\">bitwäscherei</a>. Von Züri Hardbrücke aus einen halben Katzensprung in die Zentralwäscherei Zürich an der Neuen Hard 12.",
463 description_en: "The Chaostreff Zurich meets every Wednesday from 7pm at the Hackerspace at Luegislandstrasse 485 in Zürich/Schwamendingen.",
464 external_url: "https://www.ccczh.ch/",
465 location: "Neue Hard 12, Zürich",
466 rrule: "FREQ=WEEKLY;BYDAY=WE",
467 start_time: "19:00",
468 review: true
469 }
470]
diff --git a/test/models/event_test.rb b/test/models/event_test.rb
index f310af8..d85aadd 100644
--- a/test/models/event_test.rb
+++ b/test/models/event_test.rb
@@ -74,17 +74,17 @@ class EventTest < ActiveSupport::TestCase
74 74
75 assert_equal "2009-12-24T15:23:42".to_time, scoped_occurrences[51].start_time 75 assert_equal "2009-12-24T15:23:42".to_time, scoped_occurrences[51].start_time
76 assert_equal "2009-12-24T20:05:23".to_time, scoped_occurrences[51].end_time 76 assert_equal "2009-12-24T20:05:23".to_time, scoped_occurrences[51].end_time
77 assert_equal @cal_node.event, scoped_occurrences[51].event 77 assert_equal @cal_node.events.first, scoped_occurrences[51].event
78 assert_equal @cal_node, scoped_occurrences[51].node 78 assert_equal @cal_node, scoped_occurrences[51].node
79 79
80 assert_equal "2009-03-19T15:23:42".to_time, scoped_occurrences[11].start_time 80 assert_equal "2009-03-19T15:23:42".to_time, scoped_occurrences[11].start_time
81 assert_equal "2009-03-19T20:05:23".to_time, scoped_occurrences[11].end_time 81 assert_equal "2009-03-19T20:05:23".to_time, scoped_occurrences[11].end_time
82 assert_equal @cal_node.event, scoped_occurrences[11].event 82 assert_equal @cal_node.events.first, scoped_occurrences[11].event
83 assert_equal @cal_node, scoped_occurrences[11].node 83 assert_equal @cal_node, scoped_occurrences[11].node
84 84
85 assert_equal "2009-01-01T15:23:42".to_time, scoped_occurrences[0].start_time 85 assert_equal "2009-01-01T15:23:42".to_time, scoped_occurrences[0].start_time
86 assert_equal "2009-01-01T20:05:23".to_time, scoped_occurrences[0].end_time 86 assert_equal "2009-01-01T20:05:23".to_time, scoped_occurrences[0].end_time
87 assert_equal @cal_node.event, scoped_occurrences[11].event 87 assert_equal @cal_node.events.first, scoped_occurrences[11].event
88 assert_equal @cal_node, scoped_occurrences[11].node 88 assert_equal @cal_node, scoped_occurrences[11].node
89 end 89 end
90 90
@@ -111,4 +111,4 @@ class EventTest < ActiveSupport::TestCase
111 chaosradio_days = scoped_occurrences.map {|x| x.start_time.day} 111 chaosradio_days = scoped_occurrences.map {|x| x.start_time.day}
112 assert_equal expected_days, chaosradio_days 112 assert_equal expected_days, chaosradio_days
113 end 113 end
114end \ No newline at end of file 114end