From 28944c155ac4aa66d789f8ef5c300bac7c9cad39 Mon Sep 17 00:00:00 2001 From: tleininger Date: Tue, 29 Sep 2026 21:35:53 +0200 Subject: [PATCH 01/13] Sort FAQ entries by editor-defined order within each topic --- Elternbeirat.PocketBase/PocketBaseClient.cs | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/Elternbeirat.PocketBase/PocketBaseClient.cs b/Elternbeirat.PocketBase/PocketBaseClient.cs index 7b7189f..23e13f4 100644 --- a/Elternbeirat.PocketBase/PocketBaseClient.cs +++ b/Elternbeirat.PocketBase/PocketBaseClient.cs @@ -71,13 +71,14 @@ public sealed class PocketBaseClient(HttpClient httpClient) /// /// Gets all public FAQ entries, ordered by , then by - /// . + /// the editor's order within each topic. /// /// /// The second sort key makes the order total: sorting by topic alone leaves /// entries within a topic in an undefined order, so the same content could - /// render differently between requests. Adding the question as a tie-breaker - /// keeps the FAQ list and any teaser drawn from it stable. + /// render differently between requests. The per-topic order field lets + /// an editor arrange the questions within a topic and keeps that arrangement + /// stable between requests; the topic groups themselves stay alphabetical. /// /// /// @@ -85,7 +86,7 @@ public sealed class PocketBaseClient(HttpClient httpClient) /// /// public Task> GetFaqsAsync(CancellationToken token = default) - => GetRecordsAsync("faqs", "topic,question", token); + => GetRecordsAsync("faqs", "topic,order", token); /// /// Gets all public records of a collection in a single request. From 2ea8856d65988b9fa74ca9de3109640c2d2bdc4a Mon Sep 17 00:00:00 2001 From: tleininger Date: Tue, 29 Sep 2026 22:11:30 +0200 Subject: [PATCH 02/13] Group FAQs by a topic relation, ordered; drop unused FAQ teaser --- Elternbeirat.Contracts/Faq.cs | 44 ++++-- Elternbeirat.Contracts/FaqTopic.cs | 73 +++++++++ Elternbeirat.Contracts/Page.cs | 4 +- Elternbeirat.PocketBase/PocketBaseClient.cs | 30 ++-- .../PocketBaseClientTests.cs | 21 +-- Elternbeirat.Web.Tests/PocketBaseFixture.cs | 34 +++- .../Features/Embeds/FaqsEmbed.razor | 16 -- .../Features/Embeds/FaqsEmbed.razor.cs | 46 ------ .../Features/Embeds/FaqsEmbed.razor.css | 5 - .../Features/Embeds/PageEmbeds.razor | 5 +- Elternbeirat.Web/Features/Faqs/FaqList.razor | 2 +- .../Features/Faqs/FaqList.razor.cs | 9 +- pb/pb_migrations/1727200000_dev_seed.js | 19 ++- pb/pb_migrations/collections_schema.json | 148 +++++++++++++++--- 14 files changed, 328 insertions(+), 128 deletions(-) create mode 100644 Elternbeirat.Contracts/FaqTopic.cs delete mode 100644 Elternbeirat.Web/Features/Embeds/FaqsEmbed.razor delete mode 100644 Elternbeirat.Web/Features/Embeds/FaqsEmbed.razor.cs delete mode 100644 Elternbeirat.Web/Features/Embeds/FaqsEmbed.razor.css diff --git a/Elternbeirat.Contracts/Faq.cs b/Elternbeirat.Contracts/Faq.cs index c7b22ca..f592cb3 100644 --- a/Elternbeirat.Contracts/Faq.cs +++ b/Elternbeirat.Contracts/Faq.cs @@ -6,7 +6,9 @@ namespace Elternbeirat.Contracts; /// A single question and answer of the FAQ, as stored in PocketBase. /// /// -/// On the FAQ page, entries are grouped by . +/// On the FAQ page, entries are grouped by their . The topic is +/// a PocketBase relation; is the resolved topic record, present +/// only when the query expanded the relation (see ). /// public record Faq { @@ -42,17 +44,39 @@ public record Faq public required string Answer { get; init; } /// - /// Gets the topic the question is grouped under, e.g. - /// "Mensa und Mittagessen". + /// Gets the expanded relations returned by PocketBase, or + /// when the query did not expand any. + /// + [JsonPropertyName("expand")] + public FaqExpand? Expand { get; init; } + + /// + /// Gets the resolved topic this entry is grouped under, or + /// when the query did not expand the topic relation. /// /// - /// : the FAQ page groups entries by topic, so an entry - /// without one has no place. The field is required in PocketBase. - /// - /// This is the heading shown on the page verbatim, not a slug: editors add a - /// new group by typing its heading here, no code change. Entries with the same - /// topic text land in one group. + /// Convenience over : the FAQ page reads the grouping + /// heading from here. It is unless the entry was loaded + /// with the topic relation expanded. /// + [JsonIgnore] + public FaqTopic? Topic => Expand?.Topic; +} + +/// +/// The relations of a that PocketBase returns under +/// expand when the query asks for them. +/// +/// +/// One property per expandable relation, named after its PocketBase field, so the +/// JSON expand object maps straight onto it. reads +/// through this. +/// +public record FaqExpand +{ + /// + /// Gets the expanded topic of the topic relation, if it was expanded. + /// [JsonPropertyName("topic")] - public required string Topic { get; init; } + public FaqTopic? Topic { get; init; } } diff --git a/Elternbeirat.Contracts/FaqTopic.cs b/Elternbeirat.Contracts/FaqTopic.cs new file mode 100644 index 0000000..9f681bb --- /dev/null +++ b/Elternbeirat.Contracts/FaqTopic.cs @@ -0,0 +1,73 @@ +using System.Text.Json.Serialization; + +namespace Elternbeirat.Contracts; + +/// +/// A topic the FAQ entries are grouped under, as stored in PocketBase. +/// +/// +/// A points at its topic through a relation, so the FAQ page +/// groups the questions by topic and shows the groups in . +/// Making the topic its own record (rather than a free-text field on each +/// question) means the heading, its order and its optional +/// are edited in one place and shared by every question in the group. +/// +public record FaqTopic +{ + /// + /// Gets the PocketBase record id. + /// + /// + /// : every stored record has an id. Modeling it as + /// required states which fields a record must carry, independent of the store, + /// so a future data source has to supply them too. + /// + [JsonPropertyName("id")] + public required string Id { get; init; } + + /// + /// Gets the heading shown above the group of questions, e.g. + /// "Mensa und Mittagessen". + /// + /// + /// Free text; may contain umlauts and spaces. For the URL, see . + /// : a topic without a heading has nothing to show, and + /// the field is required in PocketBase. + /// + [JsonPropertyName("title")] + public required string Title { get; init; } + + /// + /// Gets the URL slug of the topic, e.g. "mensa". + /// + /// + /// A URL path segment: lowercase letters, digits and single hyphens as + /// separators, no umlauts. PocketBase enforces this on save via a field + /// pattern (^[a-z0-9]+(-[a-z0-9]+)*$), so every stored slug is already + /// canonical and the app can use it verbatim. + /// + /// + /// : the slug is required in PocketBase and is the + /// stable identifier of a topic, independent of its display title. + /// + [JsonPropertyName("slug")] + public required string Slug { get; init; } + + /// + /// Gets the optional introduction shown below the topic heading, as Markdown. + /// + /// + /// The intro Markdown, or an empty string when the topic has none. + /// + [JsonPropertyName("intro")] + public string Intro { get; init; } = string.Empty; + + /// + /// Gets the sort order of the topic among the FAQ groups. + /// + /// + /// The sort key; topics with smaller values appear first. + /// + [JsonPropertyName("order")] + public double Order { get; init; } +} diff --git a/Elternbeirat.Contracts/Page.cs b/Elternbeirat.Contracts/Page.cs index ee17931..4fb6dfc 100644 --- a/Elternbeirat.Contracts/Page.cs +++ b/Elternbeirat.Contracts/Page.cs @@ -90,8 +90,8 @@ public record Page /// Gets the dynamic blocks rendered below the . /// /// - /// Any of "posts", "events" and "faqs", or an empty list - /// for a plain text page. + /// Any of "posts" and "events", or an empty list for a plain + /// text page. /// [JsonPropertyName("embed")] public IReadOnlyList Embed { get; init; } = []; diff --git a/Elternbeirat.PocketBase/PocketBaseClient.cs b/Elternbeirat.PocketBase/PocketBaseClient.cs index 23e13f4..fd9507b 100644 --- a/Elternbeirat.PocketBase/PocketBaseClient.cs +++ b/Elternbeirat.PocketBase/PocketBaseClient.cs @@ -70,15 +70,17 @@ public sealed class PocketBaseClient(HttpClient httpClient) => GetRecordsAsync("events", "start", token); /// - /// Gets all public FAQ entries, ordered by , then by - /// the editor's order within each topic. + /// Gets all public FAQ entries, grouped by topic: ordered by the topic's own + /// order, then by the entry's order within that topic. Each entry + /// carries its expanded . /// /// - /// The second sort key makes the order total: sorting by topic alone leaves - /// entries within a topic in an undefined order, so the same content could - /// render differently between requests. The per-topic order field lets - /// an editor arrange the questions within a topic and keeps that arrangement - /// stable between requests; the topic groups themselves stay alphabetical. + /// Sorting by topic.order first keeps all questions of a topic together + /// and lists the topic groups in the order an editor gave the topics; the + /// entry's own order then arranges the questions within each group. Both + /// keys together make the order total, so the same content renders the same way + /// between requests. The topic relation is expanded so the page can show each + /// group's heading without a second request. /// /// /// @@ -86,7 +88,7 @@ public sealed class PocketBaseClient(HttpClient httpClient) /// /// public Task> GetFaqsAsync(CancellationToken token = default) - => GetRecordsAsync("faqs", "topic,order", token); + => GetRecordsAsync("faqs", "topic.order,order", token, expand: "topic"); /// /// Gets all public records of a collection in a single request. @@ -103,6 +105,10 @@ public sealed class PocketBaseClient(HttpClient httpClient) /// /// A token to cancel the request. /// + /// + /// A PocketBase expand expression naming relations to resolve inline + /// (comma-separated, dot-nested), or to expand none. + /// /// /// The public records, or an empty list if there are none. /// @@ -115,7 +121,8 @@ public sealed class PocketBaseClient(HttpClient httpClient) private async Task> GetRecordsAsync( string collection, string sort, - CancellationToken token) + CancellationToken token, + string? expand = null) { // filter=public=true keeps drafts out; perPage is large enough to fetch // every record in a single page given the small content volume. @@ -123,6 +130,11 @@ public sealed class PocketBaseClient(HttpClient httpClient) + $"?perPage=500&filter={Uri.EscapeDataString("public=true")}" + $"&sort={Uri.EscapeDataString(sort)}"; + // Add expand only when asked, so callers that need no relations send the + // leaner request they did before. + if (expand is not null) + url += $"&expand={Uri.EscapeDataString(expand)}"; + try { var result = await httpClient.GetFromJsonAsync>(url, token); diff --git a/Elternbeirat.Web.Tests/PocketBaseClientTests.cs b/Elternbeirat.Web.Tests/PocketBaseClientTests.cs index 59b1305..f875e29 100644 --- a/Elternbeirat.Web.Tests/PocketBaseClientTests.cs +++ b/Elternbeirat.Web.Tests/PocketBaseClientTests.cs @@ -18,7 +18,7 @@ public sealed class PocketBaseClientTests(PocketBaseFixture pocketBase) var events = await client.GetEventsAsync(); // Two seeded events, earliest start first. - events.Select(e => e.Title).ShouldBe(["Elternbeiratssitzung", "Herbstbasar"]); + events.Select(@event => @event.Title).ShouldBe(["Elternbeiratssitzung", "Herbstbasar"]); } [Fact] @@ -46,8 +46,8 @@ public sealed class PocketBaseClientTests(PocketBaseFixture pocketBase) var events = await client.GetEventsAsync(); - var meeting = events.Single(e => e.Title == "Elternbeiratssitzung"); - var basar = events.Single(e => e.Title == "Herbstbasar"); + var meeting = events.Single(@event => @event.Title == "Elternbeiratssitzung"); + var basar = events.Single(@event => @event.Title == "Herbstbasar"); meeting.End.ShouldBeNull(); // no end seeded basar.End.ShouldNotBeNull(); // end seeded } @@ -60,7 +60,7 @@ public sealed class PocketBaseClientTests(PocketBaseFixture pocketBase) var posts = await client.GetPostsAsync(); // Sorted by -date: March before January. - posts.Select(p => p.Title).ShouldBe(["Neuer Vorstand", "Neue Sporthalle"]); + posts.Select(post => post.Title).ShouldBe(["Neuer Vorstand", "Neue Sporthalle"]); } [Fact] @@ -85,9 +85,9 @@ public sealed class PocketBaseClientTests(PocketBaseFixture pocketBase) var pages = await client.GetPagesAsync(); // The draft (public=false) must be filtered out, the public ones present. - pages.ShouldNotContain(p => p.Slug == "draft"); - pages.ShouldContain(p => p.Slug == "home"); - pages.ShouldContain(p => p.Slug == "contact"); + pages.ShouldNotContain(page => page.Slug == "draft"); + pages.ShouldContain(page => page.Slug == "home"); + pages.ShouldContain(page => page.Slug == "contact"); } [Fact] @@ -111,7 +111,10 @@ public sealed class PocketBaseClientTests(PocketBaseFixture pocketBase) var faqs = await client.GetFaqsAsync(); - faqs.Select(f => f.Topic).ShouldBe(["Mensa und Mittagessen", "Schließfächer"], ignoreOrder: true); - faqs.ShouldAllBe(f => !string.IsNullOrWhiteSpace(f.Question)); + // The topic relation is expanded, so each entry carries its topic. The two + // seeded topics are ordered (Mensa order 1 before Schließfächer order 2), and + // GetFaqsAsync sorts by topic.order, so the groups come back in that order. + faqs.Select(faq => faq.Topic?.Title).ShouldBe(["Mensa und Mittagessen", "Schließfächer"]); + faqs.ShouldAllBe(faq => !string.IsNullOrWhiteSpace(faq.Question)); } } diff --git a/Elternbeirat.Web.Tests/PocketBaseFixture.cs b/Elternbeirat.Web.Tests/PocketBaseFixture.cs index 6d58445..439f3e2 100644 --- a/Elternbeirat.Web.Tests/PocketBaseFixture.cs +++ b/Elternbeirat.Web.Tests/PocketBaseFixture.cs @@ -313,23 +313,49 @@ public sealed class PocketBaseFixture : IAsyncLifetime title = "Herbstbasar", location = "Schulhof", note = "", @public = true, }); - // Faqs: two topics. + // Faq topics: two, ordered. The topics own the grouping and the order the FAQ + // page shows the groups in (Mensa before Schließfächer). + var lunchTopicId = await CreateRecordAsync(http, "faq_topics", new + { + title = "Mensa und Mittagessen", slug = "mensa", intro = "", + order = 1, @public = true, + }); + var lockerTopicId = await CreateRecordAsync(http, "faq_topics", new + { + title = "Schließfächer", slug = "schliessfach", intro = "", + order = 2, @public = true, + }); + + // Faqs: each points at its topic through the "topic" relation (the created + // topic id), and carries its own order within the topic. await CreateRecordAsync(http, "faqs", new { question = "Wann gibt es Mittagessen?", answer = "Um 12 Uhr.", - topic = "Mensa und Mittagessen", @public = true, + topic = lunchTopicId, order = 1, @public = true, }); await CreateRecordAsync(http, "faqs", new { question = "Wie viel kostet ein Schließfach?", answer = "20 Euro.", - topic = "Schließfächer", @public = true, + topic = lockerTopicId, order = 1, @public = true, }); } - private static async Task CreateRecordAsync(HttpClient http, string collection, object record) + private static async Task CreateRecordAsync(HttpClient http, string collection, object record) { var response = await http.PostAsJsonAsync($"/api/collections/{collection}/records", record); response.EnsureSuccessStatusCode(); + + // Return the created record's id so a caller can seed a relation to it (e.g. a + // faq pointing at its topic). Callers that do not need it just ignore the value. + var created = await response.Content.ReadFromJsonAsync(); + return created?.Id ?? throw new InvalidOperationException( + $"PocketBase returned no id for the created '{collection}' record."); + } + + private sealed record CreatedRecord + { + [System.Text.Json.Serialization.JsonPropertyName("id")] + public string Id { get; init; } = string.Empty; } private sealed record AuthResponse diff --git a/Elternbeirat.Web/Features/Embeds/FaqsEmbed.razor b/Elternbeirat.Web/Features/Embeds/FaqsEmbed.razor deleted file mode 100644 index 893d725..0000000 --- a/Elternbeirat.Web/Features/Embeds/FaqsEmbed.razor +++ /dev/null @@ -1,16 +0,0 @@ -@if (_faqs.Count > 0) -{ -
-

Häufige Fragen

- @foreach (var faq in _faqs) - { -
- @faq.Question -
- @((MarkupString)Markdown.ToHtml(faq.Answer)) -
-
- } -

Alle Fragen

-
-} diff --git a/Elternbeirat.Web/Features/Embeds/FaqsEmbed.razor.cs b/Elternbeirat.Web/Features/Embeds/FaqsEmbed.razor.cs deleted file mode 100644 index 5d421ba..0000000 --- a/Elternbeirat.Web/Features/Embeds/FaqsEmbed.razor.cs +++ /dev/null @@ -1,46 +0,0 @@ -using Elternbeirat.Contracts; -using Elternbeirat.PocketBase; -using Microsoft.AspNetCore.Components; - -namespace Elternbeirat.Web.Features.Embeds; - -public partial class FaqsEmbed -{ - // Number of questions shown in the teaser; the full hub is one link away. - private const int TeaserCount = 3; - - [LoggerMessage( - Level = LogLevel.Warning, - Message = "Could not load FAQs for an embed from PocketBase; the teaser is omitted.")] - private static partial void LogSourceUnavailable( - ILogger logger, - Exception exception); - - [Inject] - private PocketBaseClient PocketBase { get; set; } = null!; - - [Inject] - private ILogger Logger { get; set; } = null!; - - [CascadingParameter] - private HttpContext? HttpContext { get; set; } - - private IReadOnlyList _faqs = []; - - protected override async Task OnInitializedAsync() - { - try - { - // GetFaqsAsync is ordered by topic, then question, so the first entries - // the teaser takes are stable across requests. - var faqs = await PocketBase.GetFaqsAsync(HttpContext?.RequestAborted ?? CancellationToken.None); - _faqs = [.. faqs.Take(TeaserCount)]; - } - catch (PocketBaseUnavailableException exception) - { - // Only part of the page fails: omit the teaser, keep the page (and its - // 200) intact. A missing teaser is degraded, not broken. - LogSourceUnavailable(Logger, exception); - } - } -} diff --git a/Elternbeirat.Web/Features/Embeds/FaqsEmbed.razor.css b/Elternbeirat.Web/Features/Embeds/FaqsEmbed.razor.css deleted file mode 100644 index 4a084e8..0000000 --- a/Elternbeirat.Web/Features/Embeds/FaqsEmbed.razor.css +++ /dev/null @@ -1,5 +0,0 @@ -/* Card styles for .faq-item are shared with the full FAQ page and live in the - global app.css. Only the embed's spacing on the home page is specific here. */ -.embed-faqs { - margin-top: var(--space-5); -} diff --git a/Elternbeirat.Web/Features/Embeds/PageEmbeds.razor b/Elternbeirat.Web/Features/Embeds/PageEmbeds.razor index 60f3263..332f120 100644 --- a/Elternbeirat.Web/Features/Embeds/PageEmbeds.razor +++ b/Elternbeirat.Web/Features/Embeds/PageEmbeds.razor @@ -12,14 +12,11 @@ case "events": break; - case "faqs": - - break; } } @code { - /// The page's embed keys ("posts", "events", "faqs"), in order. + /// The page's embed keys ("posts", "events"), in order. [Parameter] public IReadOnlyList Embed { get; set; } = []; } diff --git a/Elternbeirat.Web/Features/Faqs/FaqList.razor b/Elternbeirat.Web/Features/Faqs/FaqList.razor index c1d9d53..21488dc 100644 --- a/Elternbeirat.Web/Features/Faqs/FaqList.razor +++ b/Elternbeirat.Web/Features/Faqs/FaqList.razor @@ -17,7 +17,7 @@ else @foreach (var group in _groups) {
-

@group.Key

+

@group.Key.Title

@foreach (var faq in group) {
diff --git a/Elternbeirat.Web/Features/Faqs/FaqList.razor.cs b/Elternbeirat.Web/Features/Faqs/FaqList.razor.cs index f2e1802..68362fc 100644 --- a/Elternbeirat.Web/Features/Faqs/FaqList.razor.cs +++ b/Elternbeirat.Web/Features/Faqs/FaqList.razor.cs @@ -23,7 +23,7 @@ public partial class FaqList [CascadingParameter] private HttpContext? HttpContext { get; set; } - private IReadOnlyList> _groups = []; + private IReadOnlyList> _groups = []; // Set when the content source could not be reached or read. The markup then // shows a "temporarily unavailable" note instead of "no questions", matching @@ -35,7 +35,12 @@ public partial class FaqList try { var faqs = await PocketBase.GetFaqsAsync(HttpContext?.RequestAborted ?? CancellationToken.None); - _groups = [.. faqs.GroupBy(faq => faq.Topic)]; + + // GetFaqsAsync sorts by topic.order first, so grouping in encounter order + // keeps the topic groups in the order an editor gave the topics. Entries + // without an expanded topic have no group and are skipped rather than + // grouped under a null heading. + _groups = [.. faqs.Where(faq => faq.Topic is not null).GroupBy(faq => faq.Topic!)]; } catch (PocketBaseUnavailableException exception) { diff --git a/pb/pb_migrations/1727200000_dev_seed.js b/pb/pb_migrations/1727200000_dev_seed.js index 3477406..0f2d451 100644 --- a/pb/pb_migrations/1727200000_dev_seed.js +++ b/pb/pb_migrations/1727200000_dev_seed.js @@ -27,11 +27,19 @@ migrate((app) => { , events: [{"end":"","location":"Aula","note":"Gäste sind willkommen. Um Anmeldung im Sekretariat wird gebeten.","public":true,"start":"2026-10-08 19:30:00.000Z","title":"Elternbeiratssitzung"},{"end":"2026-10-20 18:30:00.000Z","location":"Klassenräume","note":"Terminvergabe über das Schulportal.","public":true,"start":"2026-10-20 16:00:00.000Z","title":"Elternsprechtag"},{"end":"2026-11-22 13:00:00.000Z","location":"Schulhof","note":"Kuchenspenden willkommen.","public":true,"start":"2026-11-22 09:00:00.000Z","title":"Herbstbasar"},{"end":"2027-01-06 00:00:00.000Z","location":"","note":"","public":true,"start":"2026-12-19 00:00:00.000Z","title":"Weihnachtsferien"},{"end":"","location":"Mensa","note":"Kennenlernen bei Butterbrezeln und Kaffee.","public":true,"start":"2026-09-10 18:00:00.000Z","title":"Willkommensabend der neuen Fünftklässler"}] , - faqs: [{"answer":"Die Anmeldung läuft über das Bestellsystem der Schule. Die Zugangsdaten erhalten Sie zu Schuljahresbeginn über die Klassenleitung.","public":true,"question":"Wie melde ich mein Kind zum Mittagessen an?","topic":"Mensa und Mittagessen"},{"answer":"Ein Mittagessen kostet aktuell **4,20 €**. Für Familien mit Anspruch auf Leistungen nach dem Bildungs- und Teilhabepaket ist das Essen kostenfrei – sprechen Sie das Sekretariat an.","public":true,"question":"Was kostet ein Mittagessen?","topic":"Mensa und Mittagessen"},{"answer":"Ja, täglich steht mindestens ein vegetarisches Gericht zur Wahl.","public":true,"question":"Gibt es vegetarische Gerichte?","topic":"Mensa und Mittagessen"},{"answer":"Schließfächer werden über einen externen Anbieter gemietet. Das Anmeldeformular liegt bei den [Downloads](/downloads).","public":true,"question":"Wie bekommt mein Kind ein Schließfach?","topic":"Schließfächer"},{"answer":"Die Miete beträgt rund 15 € pro Schuljahr zuzüglich einer Kaution, die bei Rückgabe erstattet wird.","public":true,"question":"Was kostet die Miete?","topic":"Schließfächer"},{"answer":"Wenden Sie sich an den Anbieter; die Kontaktdaten stehen auf dem Mietvertrag. Bei Fragen hilft auch der [Elternbeirat](/contact).","public":true,"question":"Der Schlüssel ist verloren – was nun?","topic":"Schließfächer"},{"answer":"Der Eltern-Euro ist ein **freiwilliger** Beitrag, mit dem kleinere Anschaffungen für die Klassen unkompliziert finanziert werden – etwa Bastelmaterial oder Ausflüge.","public":true,"question":"Was ist der Eltern-Euro?","topic":"Eltern-Euro"},{"answer":"Nein. Der Beitrag ist ausdrücklich freiwillig, und niemand wird bei Nichtzahlung benachteiligt.","public":true,"question":"Ist der Beitrag verpflichtend?","topic":"Eltern-Euro"},{"answer":"Ob Schulfest, Basar oder eine helfende Hand bei Ausflügen – über jede Unterstützung freuen wir uns. Melden Sie sich einfach über die [Kontaktseite](/contact).","public":true,"question":"Wie kann ich mich engagieren?","topic":"Elternarbeit und Mitmachen"},{"answer":"Nein. Viele Aufgaben erledigen Eltern, die einfach mithelfen möchten, ganz ohne Amt.","public":true,"question":"Muss ich in den Elternbeirat gewählt sein, um zu helfen?","topic":"Elternarbeit und Mitmachen"}] + // Topics own the grouping and the order of the FAQ page; a question links to + // its topic below via the "topic" relation, resolved by slug at seed time. + faq_topics: [{"title":"Elternarbeit","slug":"elternarbeit","intro":"","order":1,"public":true},{"title":"Eltern-Euro","slug":"eltern-euro","intro":"","order":2,"public":true},{"title":"Mensa und Mittagessen","slug":"mensa","intro":"","order":3,"public":true},{"title":"Schließfächer","slug":"schliessfach","intro":"","order":4,"public":true}] +, + // "topic" is a slug here, not a relation id: the record loader below resolves it + // to the faq_topics id, since the ids are only known once the topics are saved. + faqs: [{"answer":"Die Anmeldung läuft über das Bestellsystem der Schule. Die Zugangsdaten erhalten Sie zu Schuljahresbeginn über die Klassenleitung.","public":true,"question":"Wie melde ich mein Kind zum Mittagessen an?","topic":"mensa","order":1},{"answer":"Ein Mittagessen kostet aktuell **4,20 €**. Für Familien mit Anspruch auf Leistungen nach dem Bildungs- und Teilhabepaket ist das Essen kostenfrei – sprechen Sie das Sekretariat an.","public":true,"question":"Was kostet ein Mittagessen?","topic":"mensa","order":2},{"answer":"Ja, täglich steht mindestens ein vegetarisches Gericht zur Wahl.","public":true,"question":"Gibt es vegetarische Gerichte?","topic":"mensa","order":3},{"answer":"Schließfächer werden über einen externen Anbieter gemietet. Das Anmeldeformular liegt bei den [Downloads](/downloads).","public":true,"question":"Wie bekommt mein Kind ein Schließfach?","topic":"schliessfach","order":1},{"answer":"Die Miete beträgt rund 15 € pro Schuljahr zuzüglich einer Kaution, die bei Rückgabe erstattet wird.","public":true,"question":"Was kostet die Miete?","topic":"schliessfach","order":2},{"answer":"Wenden Sie sich an den Anbieter; die Kontaktdaten stehen auf dem Mietvertrag. Bei Fragen hilft auch der [Elternbeirat](/contact).","public":true,"question":"Der Schlüssel ist verloren – was nun?","topic":"schliessfach","order":3},{"answer":"Der Eltern-Euro ist ein **freiwilliger** Beitrag, mit dem kleinere Anschaffungen für die Klassen unkompliziert finanziert werden – etwa Bastelmaterial oder Ausflüge.","public":true,"question":"Was ist der Eltern-Euro?","topic":"eltern-euro","order":1},{"answer":"Nein. Der Beitrag ist ausdrücklich freiwillig, und niemand wird bei Nichtzahlung benachteiligt.","public":true,"question":"Ist der Beitrag verpflichtend?","topic":"eltern-euro","order":2},{"answer":"Ob Schulfest, Basar oder eine helfende Hand bei Ausflügen – über jede Unterstützung freuen wir uns. Melden Sie sich einfach über die [Kontaktseite](/contact).","public":true,"question":"Wie kann ich mich engagieren?","topic":"elternarbeit","order":1},{"answer":"Nein. Viele Aufgaben erledigen Eltern, die einfach mithelfen möchten, ganz ohne Amt.","public":true,"question":"Muss ich in den Elternbeirat gewählt sein, um zu helfen?","topic":"elternarbeit","order":2}] , } - // Phase 1: schema. Create any collection that is not present yet. + // Phase 1: schema. Create any collection that is not present yet. The schema + // file lists faq_topics before faqs, so the target of the faqs "topic" relation + // exists by the time faqs is created. for (const name of Object.keys(schema)) { try { app.findCollectionByNameOrId(name) @@ -42,13 +50,20 @@ migrate((app) => { // Phase 2: records. Fill a collection only while it is still empty, so a // populated volume (or, should this ever run there, production) is untouched. + // faqs are seeded after faq_topics (object key order), so the slug->id map is + // populated before a faq resolves its "topic" against it. + const faqTopicIdBySlug = {} for (const [name, rows] of Object.entries(records)) { if (app.countRecords(name) > 0) continue const collection = app.findCollectionByNameOrId(name) for (const data of rows) { + // A faq's "topic" is a topic slug in this seed; swap it for the real id. + if (name === "faqs") data = { ...data, topic: faqTopicIdBySlug[data.topic] } const record = new Record(collection) record.load(data) app.save(record) + // Remember each topic's id so the faqs seeded afterwards can point at it. + if (name === "faq_topics") faqTopicIdBySlug[data.slug] = record.id } } }, (app) => { diff --git a/pb/pb_migrations/collections_schema.json b/pb/pb_migrations/collections_schema.json index db11602..fc0ec7c 100644 --- a/pb/pb_migrations/collections_schema.json +++ b/pb/pb_migrations/collections_schema.json @@ -309,7 +309,7 @@ "help": "", "hidden": false, "id": "select1203373331", - "maxSelect": 3, + "maxSelect": 2, "name": "embed", "presentable": false, "required": false, @@ -317,8 +317,7 @@ "type": "select", "values": [ "posts", - "events", - "faqs" + "events" ] }, { @@ -337,6 +336,107 @@ "updated": "2026-09-23 11:25:35.648Z", "system": false }, + "faq_topics": { + "id": "pbc_529028860", + "listRule": "", + "viewRule": "", + "createRule": null, + "updateRule": null, + "deleteRule": null, + "name": "faq_topics", + "type": "base", + "fields": [ + { + "autogeneratePattern": "[a-z0-9]{15}", + "help": "", + "hidden": false, + "id": "text3208210256", + "max": 15, + "min": 15, + "name": "id", + "pattern": "^[a-z0-9]+$", + "presentable": false, + "primaryKey": true, + "required": true, + "system": true, + "type": "text" + }, + { + "autogeneratePattern": "", + "help": "", + "hidden": false, + "id": "text724990059", + "max": 0, + "min": 0, + "name": "title", + "pattern": "", + "presentable": false, + "primaryKey": false, + "required": true, + "system": false, + "type": "text" + }, + { + "autogeneratePattern": "", + "help": "", + "hidden": false, + "id": "text2560465762", + "max": 0, + "min": 0, + "name": "slug", + "pattern": "^[a-z0-9]+(-[a-z0-9]+)*$", + "presentable": false, + "primaryKey": false, + "required": true, + "system": false, + "type": "text" + }, + { + "autogeneratePattern": "", + "help": "", + "hidden": false, + "id": "text436585760", + "max": 0, + "min": 0, + "name": "intro", + "pattern": "", + "presentable": false, + "primaryKey": false, + "required": false, + "system": false, + "type": "text" + }, + { + "help": "", + "hidden": false, + "id": "number4113142680", + "max": null, + "min": null, + "name": "order", + "onlyInt": true, + "presentable": false, + "required": false, + "system": false, + "type": "number" + }, + { + "help": "", + "hidden": false, + "id": "bool1001664029", + "name": "public", + "presentable": false, + "required": false, + "system": false, + "type": "bool" + } + ], + "indexes": [ + "CREATE UNIQUE INDEX `idx_faq_topics_slug` ON `faq_topics` (`slug`)" + ], + "created": "2026-09-23 11:59:13.899Z", + "updated": "2026-09-23 11:59:13.899Z", + "system": false + }, "faqs": { "id": "pbc_2923026773", "listRule": "", @@ -392,21 +492,6 @@ "system": false, "type": "text" }, - { - "autogeneratePattern": "", - "help": "", - "hidden": false, - "id": "select2638274075", - "max": 0, - "min": 0, - "name": "topic", - "pattern": "", - "presentable": false, - "primaryKey": false, - "required": true, - "system": false, - "type": "text" - }, { "help": "", "hidden": false, @@ -416,6 +501,33 @@ "required": false, "system": false, "type": "bool" + }, + { + "cascadeDelete": false, + "collectionId": "pbc_529028860", + "help": "", + "hidden": false, + "id": "relation3340346911", + "maxSelect": 1, + "minSelect": 0, + "name": "topic", + "presentable": false, + "required": false, + "system": false, + "type": "relation" + }, + { + "help": "", + "hidden": false, + "id": "number4113142680", + "max": null, + "min": null, + "name": "order", + "onlyInt": true, + "presentable": false, + "required": false, + "system": false, + "type": "number" } ], "indexes": [], From e38ebf078d6061e6c9c7947628d976665b7d885e Mon Sep 17 00:00:00 2001 From: tleininger Date: Wed, 30 Sep 2026 14:58:12 +0200 Subject: [PATCH 03/13] Render FAQ topics as cards, drop dead scoped CSS --- Elternbeirat.Contracts/Faq.cs | 27 ++++++++ Elternbeirat.Contracts/FaqTopic.cs | 47 +++++++++++++- Elternbeirat.PocketBase/PocketBaseClient.cs | 48 ++++++++++++++ Elternbeirat.Web.Tests/PocketBaseFixture.cs | 7 ++- Elternbeirat.Web/Features/Faqs/FaqList.razor | 29 ++++----- .../Features/Faqs/FaqList.razor.cs | 16 ++--- .../Features/Faqs/FaqList.razor.css | 10 --- .../Features/Faqs/FaqTopicDetail.razor | 30 +++++++++ .../Features/Faqs/FaqTopicDetail.razor.cs | 63 +++++++++++++++++++ Elternbeirat.Web/wwwroot/app.css | 25 +++++++- pb/pb_migrations/1727200000_dev_seed.js | 4 +- 11 files changed, 260 insertions(+), 46 deletions(-) delete mode 100644 Elternbeirat.Web/Features/Faqs/FaqList.razor.css create mode 100644 Elternbeirat.Web/Features/Faqs/FaqTopicDetail.razor create mode 100644 Elternbeirat.Web/Features/Faqs/FaqTopicDetail.razor.cs diff --git a/Elternbeirat.Contracts/Faq.cs b/Elternbeirat.Contracts/Faq.cs index f592cb3..c0dac89 100644 --- a/Elternbeirat.Contracts/Faq.cs +++ b/Elternbeirat.Contracts/Faq.cs @@ -43,6 +43,33 @@ public record Faq [JsonPropertyName("answer")] public required string Answer { get; init; } + /// + /// Gets the sort order of the question within its topic. + /// + /// + /// The sort key; questions with smaller values appear first. + /// + [JsonPropertyName("order")] + public double Order { get; init; } + + /// + /// Gets whether this entry is published and may be shown to visitors. + /// + /// + /// when the entry is public, for a + /// draft that must stay hidden. + /// + /// + /// Collection queries filter on public=true server-side, so entries loaded + /// that way are always public and never need this checked. It matters only for the + /// faqs_via_topic back-relation expand behind : + /// PocketBase does not apply the topic query's public filter to expanded + /// child records, so a draft question would otherwise leak onto the topic page. + /// That getter filters on this to keep drafts hidden. + /// + [JsonPropertyName("public")] + public bool Public { get; init; } + /// /// Gets the expanded relations returned by PocketBase, or /// when the query did not expand any. diff --git a/Elternbeirat.Contracts/FaqTopic.cs b/Elternbeirat.Contracts/FaqTopic.cs index 9f681bb..9f585c8 100644 --- a/Elternbeirat.Contracts/FaqTopic.cs +++ b/Elternbeirat.Contracts/FaqTopic.cs @@ -38,7 +38,7 @@ public record FaqTopic public required string Title { get; init; } /// - /// Gets the URL slug of the topic, e.g. "mensa". + /// Gets the URL slug of the topic, e.g. "cafeteria". /// /// /// A URL path segment: lowercase letters, digits and single hyphens as @@ -70,4 +70,49 @@ public record FaqTopic /// [JsonPropertyName("order")] public double Order { get; init; } + + /// + /// Gets the expanded relations returned by PocketBase, or + /// when the query did not expand any. + /// + [JsonPropertyName("expand")] + public FaqTopicExpand? Expand { get; init; } + + /// + /// Gets the questions of this topic, ordered by , or an + /// empty list when none are linked or the relation was not expanded. + /// + /// + /// Convenience over : questions name their topic, so + /// PocketBase returns them under the back-relation key when the query expands it + /// (faqs_via_topic). The topic detail page reads them from here. They + /// arrive unsorted, so this orders them by for a stable + /// render. Drafts are dropped: PocketBase does not apply the topic query's + /// public filter to the expanded children, so this keeps + /// non-public questions () off the page. + /// + [JsonIgnore] + public IReadOnlyList Faqs => + Expand?.Faqs is { } faqs + ? [.. faqs.Where(faq => faq.Public).OrderBy(faq => faq.Order)] + : []; +} + +/// +/// The relations of a that PocketBase returns under +/// expand when the query asks for them. +/// +/// +/// The questions point at their topic, so PocketBase exposes them as the +/// back-relation faqs_via_topic. reads through +/// this. +/// +public record FaqTopicExpand +{ + /// + /// Gets the expanded questions of the faqs_via_topic back-relation, if it + /// was expanded. + /// + [JsonPropertyName("faqs_via_topic")] + public IReadOnlyList? Faqs { get; init; } } diff --git a/Elternbeirat.PocketBase/PocketBaseClient.cs b/Elternbeirat.PocketBase/PocketBaseClient.cs index fd9507b..841de14 100644 --- a/Elternbeirat.PocketBase/PocketBaseClient.cs +++ b/Elternbeirat.PocketBase/PocketBaseClient.cs @@ -90,6 +90,54 @@ public sealed class PocketBaseClient(HttpClient httpClient) public Task> GetFaqsAsync(CancellationToken token = default) => GetRecordsAsync("faqs", "topic.order,order", token, expand: "topic"); + /// + /// Gets all public FAQ topics, ordered by . + /// + /// + /// Backs the FAQ overview, which lists the topics as links to their own pages. + /// The questions are not loaded here; the topic page loads them per topic via + /// . + /// + /// + /// + /// The public FAQ topics, or an empty list if there are none. + /// + /// + public Task> GetFaqTopicsAsync(CancellationToken token = default) + => GetRecordsAsync("faq_topics", "order", token); + + /// + /// Gets one public FAQ topic by its slug, with its questions expanded, or + /// when no public topic has that slug. + /// + /// + /// Backs the topic's own page at /faqs/{slug}: it loads the single topic + /// and, through the faqs_via_topic back-relation, the questions grouped + /// under it, so the page needs one request. The slug is unique, so at most one + /// record matches. + /// + /// + /// The topic slug from the URL, e.g. "cafeteria". + /// + /// + /// + /// The matching public topic with its questions, or if + /// none matches. + /// + /// + public async Task GetFaqTopicBySlugAsync( + string slug, + CancellationToken token = default) + { + var topics = await GetRecordsAsync( + "faq_topics", + "order", + token, + expand: "faqs_via_topic"); + return topics.FirstOrDefault( + topic => string.Equals(topic.Slug, slug, StringComparison.OrdinalIgnoreCase)); + } + /// /// Gets all public records of a collection in a single request. /// diff --git a/Elternbeirat.Web.Tests/PocketBaseFixture.cs b/Elternbeirat.Web.Tests/PocketBaseFixture.cs index 439f3e2..0253efc 100644 --- a/Elternbeirat.Web.Tests/PocketBaseFixture.cs +++ b/Elternbeirat.Web.Tests/PocketBaseFixture.cs @@ -314,15 +314,16 @@ public sealed class PocketBaseFixture : IAsyncLifetime }); // Faq topics: two, ordered. The topics own the grouping and the order the FAQ - // page shows the groups in (Mensa before Schließfächer). + // page shows the groups in (cafeteria before lockers). Titles stay German for + // visitors; slugs are English, as for every route. var lunchTopicId = await CreateRecordAsync(http, "faq_topics", new { - title = "Mensa und Mittagessen", slug = "mensa", intro = "", + title = "Mensa und Mittagessen", slug = "cafeteria", intro = "", order = 1, @public = true, }); var lockerTopicId = await CreateRecordAsync(http, "faq_topics", new { - title = "Schließfächer", slug = "schliessfach", intro = "", + title = "Schließfächer", slug = "lockers", intro = "", order = 2, @public = true, }); diff --git a/Elternbeirat.Web/Features/Faqs/FaqList.razor b/Elternbeirat.Web/Features/Faqs/FaqList.razor index 21488dc..9bf0c4c 100644 --- a/Elternbeirat.Web/Features/Faqs/FaqList.razor +++ b/Elternbeirat.Web/Features/Faqs/FaqList.razor @@ -8,25 +8,22 @@ {

Die Fragen sind gerade nicht erreichbar. Bitte später erneut versuchen.

} -else if (_groups.Count == 0) +else if (_topics.Count == 0) {

Zurzeit gibt es keine Fragen.

} else { - @foreach (var group in _groups) - { -
-

@group.Key.Title

- @foreach (var faq in group) - { -
- @faq.Question -
- @((MarkupString)Markdown.ToHtml(faq.Answer)) -
-
- } -
- } +
    + @foreach (var topic in _topics) + { +
  • +

    @topic.Title

    + @if (!string.IsNullOrWhiteSpace(topic.Intro)) + { +
    @((MarkupString)Markdown.ToHtml(topic.Intro))
    + } +
  • + } +
} diff --git a/Elternbeirat.Web/Features/Faqs/FaqList.razor.cs b/Elternbeirat.Web/Features/Faqs/FaqList.razor.cs index 68362fc..e0a24ac 100644 --- a/Elternbeirat.Web/Features/Faqs/FaqList.razor.cs +++ b/Elternbeirat.Web/Features/Faqs/FaqList.razor.cs @@ -9,7 +9,7 @@ public partial class FaqList { [LoggerMessage( Level = LogLevel.Error, - Message = "Could not load FAQs from PocketBase; content source is unavailable.")] + Message = "Could not load FAQ topics from PocketBase; content source is unavailable.")] private static partial void LogSourceUnavailable( ILogger logger, Exception exception); @@ -23,10 +23,10 @@ public partial class FaqList [CascadingParameter] private HttpContext? HttpContext { get; set; } - private IReadOnlyList> _groups = []; + private IReadOnlyList _topics = []; // Set when the content source could not be reached or read. The markup then - // shows a "temporarily unavailable" note instead of "no questions", matching + // shows a "temporarily unavailable" note instead of "no topics", matching // the 503 this sets on the response. private bool _unavailable; @@ -34,17 +34,11 @@ public partial class FaqList { try { - var faqs = await PocketBase.GetFaqsAsync(HttpContext?.RequestAborted ?? CancellationToken.None); - - // GetFaqsAsync sorts by topic.order first, so grouping in encounter order - // keeps the topic groups in the order an editor gave the topics. Entries - // without an expanded topic have no group and are skipped rather than - // grouped under a null heading. - _groups = [.. faqs.Where(faq => faq.Topic is not null).GroupBy(faq => faq.Topic!)]; + _topics = await PocketBase.GetFaqTopicsAsync(HttpContext?.RequestAborted ?? CancellationToken.None); } catch (PocketBaseUnavailableException exception) { - // An empty page would claim there are no questions. The site works, its + // An empty page would claim there are no topics. The site works, its // data store is down: 503 and an honest note. LogSourceUnavailable(Logger, exception); _unavailable = true; diff --git a/Elternbeirat.Web/Features/Faqs/FaqList.razor.css b/Elternbeirat.Web/Features/Faqs/FaqList.razor.css deleted file mode 100644 index 6bb2570..0000000 --- a/Elternbeirat.Web/Features/Faqs/FaqList.razor.css +++ /dev/null @@ -1,10 +0,0 @@ -/* The .faq-item card styles are shared with the home-page embed and live in the - global app.css. Only the topic grouping is specific to this full page (the - embed shows a flat list without topic headings). */ -.faq-topic { - margin-bottom: var(--space-5); -} - -.faq-topic h2 { - margin-bottom: var(--space-3); -} diff --git a/Elternbeirat.Web/Features/Faqs/FaqTopicDetail.razor b/Elternbeirat.Web/Features/Faqs/FaqTopicDetail.razor new file mode 100644 index 0000000..d8bf6a2 --- /dev/null +++ b/Elternbeirat.Web/Features/Faqs/FaqTopicDetail.razor @@ -0,0 +1,30 @@ +@page "/faqs/{Slug}" + +@if (_unavailable) +{ + Vorübergehend nicht erreichbar +

Das Thema ist gerade nicht erreichbar. Bitte später erneut versuchen.

+} +else if (_topic is not null) +{ + @_topic.Title + +

@_topic.Title

+ @if (!string.IsNullOrWhiteSpace(_topic.Intro)) + { +
@((MarkupString)Markdown.ToHtml(_topic.Intro))
+ } + @foreach (var faq in _topic.Faqs) + { +
+ @faq.Question +
+ @((MarkupString)Markdown.ToHtml(faq.Answer)) +
+
+ } +} +@* No topic and not unavailable: the slug was unknown; NavigationManager.NotFound() + already ran in OnParametersSetAsync and renders the not-found page. *@ diff --git a/Elternbeirat.Web/Features/Faqs/FaqTopicDetail.razor.cs b/Elternbeirat.Web/Features/Faqs/FaqTopicDetail.razor.cs new file mode 100644 index 0000000..a22518b --- /dev/null +++ b/Elternbeirat.Web/Features/Faqs/FaqTopicDetail.razor.cs @@ -0,0 +1,63 @@ +using Elternbeirat.Contracts; +using Elternbeirat.PocketBase; +using Elternbeirat.Web.Shared; +using Microsoft.AspNetCore.Components; + +namespace Elternbeirat.Web.Features.Faqs; + +public partial class FaqTopicDetail +{ + [LoggerMessage( + Level = LogLevel.Error, + Message = "Could not load FAQ topic '{Slug}' from PocketBase; content source is unavailable.")] + private static partial void LogSourceUnavailable( + ILogger logger, + string slug, + Exception exception); + + [Parameter] + public string Slug { get; set; } = string.Empty; + + [Inject] + private PocketBaseClient PocketBase { get; set; } = null!; + + [Inject] + private ILogger Logger { get; set; } = null!; + + [Inject] + private NavigationManager Navigation { get; set; } = null!; + + [CascadingParameter] + private HttpContext? HttpContext { get; set; } + + private FaqTopic? _topic; + + // Set when the content source could not be reached or read. The markup then + // shows a "temporarily unavailable" note instead of a not-found page, matching + // the 503 this sets on the response. + private bool _unavailable; + + protected override async Task OnParametersSetAsync() + { + try + { + _topic = await PocketBase.GetFaqTopicBySlugAsync( + Slug, + HttpContext?.RequestAborted ?? CancellationToken.None); + } + catch (PocketBaseUnavailableException exception) + { + // The site works, its data store is down: 503, not 404. + LogSourceUnavailable(Logger, Slug, exception); + _unavailable = true; + SourceUnavailable.SetStatus(HttpContext); + return; + } + + if (_topic is null) + { + // The source answered, but there is no topic with this slug: a genuine 404. + Navigation.NotFound(); + } + } +} diff --git a/Elternbeirat.Web/wwwroot/app.css b/Elternbeirat.Web/wwwroot/app.css index fa622ef..4d159bf 100644 --- a/Elternbeirat.Web/wwwroot/app.css +++ b/Elternbeirat.Web/wwwroot/app.css @@ -206,7 +206,8 @@ h1:focus { lifted off the tinted page background with a soft shadow and a gentle hover. */ .post-list, -.event-list { +.event-list, +.faq-topic-list { list-style: none; padding: 0; margin: 0; @@ -215,7 +216,8 @@ h1:focus { } .post-list li, -.event-list li { +.event-list li, +.faq-topic-list li { background: var(--color-bg); border-radius: var(--radius); box-shadow: var(--shadow); @@ -224,11 +226,28 @@ h1:focus { } .post-list li:hover, -.event-list li:hover { +.event-list li:hover, +.faq-topic-list li:hover { box-shadow: var(--shadow-hover); transform: translateY(-2px); } +/* FAQ topics: each card is a link to the topic's own page, with an optional intro + below the heading. The heading matches the post/event card titles. */ +.faq-topic-list h2 { + margin: 0; + font-size: 1.15rem; +} + +.faq-topic-list h2 a { + text-decoration: none; +} + +.faq-topic-intro { + margin-top: var(--space-2); + color: var(--color-text-soft); +} + /* Posts */ .post-list a { font-size: 1.15rem; diff --git a/pb/pb_migrations/1727200000_dev_seed.js b/pb/pb_migrations/1727200000_dev_seed.js index 0f2d451..fc55f83 100644 --- a/pb/pb_migrations/1727200000_dev_seed.js +++ b/pb/pb_migrations/1727200000_dev_seed.js @@ -29,11 +29,11 @@ migrate((app) => { , // Topics own the grouping and the order of the FAQ page; a question links to // its topic below via the "topic" relation, resolved by slug at seed time. - faq_topics: [{"title":"Elternarbeit","slug":"elternarbeit","intro":"","order":1,"public":true},{"title":"Eltern-Euro","slug":"eltern-euro","intro":"","order":2,"public":true},{"title":"Mensa und Mittagessen","slug":"mensa","intro":"","order":3,"public":true},{"title":"Schließfächer","slug":"schliessfach","intro":"","order":4,"public":true}] + faq_topics: [{"title":"Elternarbeit","slug":"parent-involvement","intro":"","order":1,"public":true},{"title":"Eltern-Euro","slug":"parent-euro","intro":"","order":2,"public":true},{"title":"Mensa und Mittagessen","slug":"cafeteria","intro":"","order":3,"public":true},{"title":"Schließfächer","slug":"lockers","intro":"","order":4,"public":true}] , // "topic" is a slug here, not a relation id: the record loader below resolves it // to the faq_topics id, since the ids are only known once the topics are saved. - faqs: [{"answer":"Die Anmeldung läuft über das Bestellsystem der Schule. Die Zugangsdaten erhalten Sie zu Schuljahresbeginn über die Klassenleitung.","public":true,"question":"Wie melde ich mein Kind zum Mittagessen an?","topic":"mensa","order":1},{"answer":"Ein Mittagessen kostet aktuell **4,20 €**. Für Familien mit Anspruch auf Leistungen nach dem Bildungs- und Teilhabepaket ist das Essen kostenfrei – sprechen Sie das Sekretariat an.","public":true,"question":"Was kostet ein Mittagessen?","topic":"mensa","order":2},{"answer":"Ja, täglich steht mindestens ein vegetarisches Gericht zur Wahl.","public":true,"question":"Gibt es vegetarische Gerichte?","topic":"mensa","order":3},{"answer":"Schließfächer werden über einen externen Anbieter gemietet. Das Anmeldeformular liegt bei den [Downloads](/downloads).","public":true,"question":"Wie bekommt mein Kind ein Schließfach?","topic":"schliessfach","order":1},{"answer":"Die Miete beträgt rund 15 € pro Schuljahr zuzüglich einer Kaution, die bei Rückgabe erstattet wird.","public":true,"question":"Was kostet die Miete?","topic":"schliessfach","order":2},{"answer":"Wenden Sie sich an den Anbieter; die Kontaktdaten stehen auf dem Mietvertrag. Bei Fragen hilft auch der [Elternbeirat](/contact).","public":true,"question":"Der Schlüssel ist verloren – was nun?","topic":"schliessfach","order":3},{"answer":"Der Eltern-Euro ist ein **freiwilliger** Beitrag, mit dem kleinere Anschaffungen für die Klassen unkompliziert finanziert werden – etwa Bastelmaterial oder Ausflüge.","public":true,"question":"Was ist der Eltern-Euro?","topic":"eltern-euro","order":1},{"answer":"Nein. Der Beitrag ist ausdrücklich freiwillig, und niemand wird bei Nichtzahlung benachteiligt.","public":true,"question":"Ist der Beitrag verpflichtend?","topic":"eltern-euro","order":2},{"answer":"Ob Schulfest, Basar oder eine helfende Hand bei Ausflügen – über jede Unterstützung freuen wir uns. Melden Sie sich einfach über die [Kontaktseite](/contact).","public":true,"question":"Wie kann ich mich engagieren?","topic":"elternarbeit","order":1},{"answer":"Nein. Viele Aufgaben erledigen Eltern, die einfach mithelfen möchten, ganz ohne Amt.","public":true,"question":"Muss ich in den Elternbeirat gewählt sein, um zu helfen?","topic":"elternarbeit","order":2}] + faqs: [{"answer":"Die Anmeldung läuft über das Bestellsystem der Schule. Die Zugangsdaten erhalten Sie zu Schuljahresbeginn über die Klassenleitung.","public":true,"question":"Wie melde ich mein Kind zum Mittagessen an?","topic":"cafeteria","order":1},{"answer":"Ein Mittagessen kostet aktuell **4,20 €**. Für Familien mit Anspruch auf Leistungen nach dem Bildungs- und Teilhabepaket ist das Essen kostenfrei – sprechen Sie das Sekretariat an.","public":true,"question":"Was kostet ein Mittagessen?","topic":"cafeteria","order":2},{"answer":"Ja, täglich steht mindestens ein vegetarisches Gericht zur Wahl.","public":true,"question":"Gibt es vegetarische Gerichte?","topic":"cafeteria","order":3},{"answer":"Schließfächer werden über einen externen Anbieter gemietet. Das Anmeldeformular liegt bei den [Downloads](/downloads).","public":true,"question":"Wie bekommt mein Kind ein Schließfach?","topic":"lockers","order":1},{"answer":"Die Miete beträgt rund 15 € pro Schuljahr zuzüglich einer Kaution, die bei Rückgabe erstattet wird.","public":true,"question":"Was kostet die Miete?","topic":"lockers","order":2},{"answer":"Wenden Sie sich an den Anbieter; die Kontaktdaten stehen auf dem Mietvertrag. Bei Fragen hilft auch der [Elternbeirat](/contact).","public":true,"question":"Der Schlüssel ist verloren – was nun?","topic":"lockers","order":3},{"answer":"Der Eltern-Euro ist ein **freiwilliger** Beitrag, mit dem kleinere Anschaffungen für die Klassen unkompliziert finanziert werden – etwa Bastelmaterial oder Ausflüge.","public":true,"question":"Was ist der Eltern-Euro?","topic":"parent-euro","order":1},{"answer":"Nein. Der Beitrag ist ausdrücklich freiwillig, und niemand wird bei Nichtzahlung benachteiligt.","public":true,"question":"Ist der Beitrag verpflichtend?","topic":"parent-euro","order":2},{"answer":"Ob Schulfest, Basar oder eine helfende Hand bei Ausflügen – über jede Unterstützung freuen wir uns. Melden Sie sich einfach über die [Kontaktseite](/contact).","public":true,"question":"Wie kann ich mich engagieren?","topic":"parent-involvement","order":1},{"answer":"Nein. Viele Aufgaben erledigen Eltern, die einfach mithelfen möchten, ganz ohne Amt.","public":true,"question":"Muss ich in den Elternbeirat gewählt sein, um zu helfen?","topic":"parent-involvement","order":2}] , } From cb345975cbc81762a13e52e27bfd0e7a94961e06 Mon Sep 17 00:00:00 2001 From: tleininger Date: Wed, 30 Sep 2026 15:13:19 +0200 Subject: [PATCH 04/13] Write proper FAQ page intro; drop dead faqs-embed from tests --- Elternbeirat.Web.Tests/PocketBaseFixture.cs | 14 ++++++----- Elternbeirat.Web.Tests/RouteSmokeTests.cs | 23 +++++++++---------- Elternbeirat.Web/Features/Faqs/FaqList.razor | 15 ++++++++++-- .../Features/Faqs/FaqList.razor.cs | 15 +++++++++++- pb/pb_migrations/1727200000_dev_seed.js | 2 +- 5 files changed, 47 insertions(+), 22 deletions(-) diff --git a/Elternbeirat.Web.Tests/PocketBaseFixture.cs b/Elternbeirat.Web.Tests/PocketBaseFixture.cs index 0253efc..ccba604 100644 --- a/Elternbeirat.Web.Tests/PocketBaseFixture.cs +++ b/Elternbeirat.Web.Tests/PocketBaseFixture.cs @@ -236,16 +236,18 @@ public sealed class PocketBaseFixture : IAsyncLifetime }); await CreateRecordAsync(http, "pages", new { - // Carries an embed so the ContentPage embed path is covered: /patrons - // renders its body plus the FAQ teaser. title = "Förderverein", body = "# Förderverein", location = "header", - order = 3, slug = "patrons", embed = new[] { "faqs" }, @public = true, + order = 3, slug = "patrons", embed = Array.Empty(), @public = true, }); - // Nav placeholder for the FAQ list (route /faqs is served by FaqList, - // which shadows this page). Slug matches production's "faqs" nav entry. + // Page record for the FAQ list. Route /faqs is served by FaqList, which reads + // this record for its heading and intro (title + body) and renders the topic + // cards itself. Slug matches production's "faqs" nav entry. The body carries + // no "# heading": the title already renders as the h1. await CreateRecordAsync(http, "pages", new { - title = "FAQ", body = "# Häufige Fragen", location = "header", + title = "FAQs", + body = "Wählen Sie ein Thema, um die passenden Fragen zu sehen.", + location = "header", order = 4, slug = "faqs", embed = Array.Empty(), @public = true, }); await CreateRecordAsync(http, "pages", new diff --git a/Elternbeirat.Web.Tests/RouteSmokeTests.cs b/Elternbeirat.Web.Tests/RouteSmokeTests.cs index 821951b..d79a2ad 100644 --- a/Elternbeirat.Web.Tests/RouteSmokeTests.cs +++ b/Elternbeirat.Web.Tests/RouteSmokeTests.cs @@ -85,18 +85,19 @@ public sealed class RouteSmokeTests : IDisposable } [Fact] - public async Task Faqs_route_renders_the_grouped_list() + public async Task Faqs_route_renders_the_topic_list() { // /faqs is a literal route (FaqList) that must win over the /{Slug} - // catch-all content page. Assert it shows the FAQ list, grouped by topic - // from the seeded questions, not a content page body. + // catch-all content page. It reads the "faqs" page for heading and intro + // and lists the topics as cards linking to their own pages. The individual + // questions live on the topic pages (/faqs/{slug}), not here. var client = _factory.CreateClient(); var html = await client.GetStringAsync(new Uri("/faqs", UriKind.Relative)); - html.ShouldContain("Häufige Fragen"); - html.ShouldContain("Wann gibt es Mittagessen?"); - html.ShouldContain("Mensa und Mittagessen"); // German topic heading + html.ShouldContain("FAQs"); // heading from the page title + html.ShouldContain("Mensa und Mittagessen"); // German topic heading (a card) + html.ShouldContain("href=\"/faqs/cafeteria\""); // card links to the topic page } [Fact] @@ -129,16 +130,14 @@ public sealed class RouteSmokeTests : IDisposable } [Fact] - public async Task Content_page_renders_the_embed_its_page_opts_into() + public async Task Content_page_renders_its_body() { - // /patrons is a catch-all content page whose embed field is ["faqs"], so it - // shows its body plus the FAQ teaser -- proving the ContentPage embed path. + // /patrons is a catch-all content page (the /{Slug} route). Assert it renders + // its Markdown body, proving the ContentPage path works for an arbitrary slug. var client = _factory.CreateClient(); var html = await client.GetStringAsync(new Uri("/patrons", UriKind.Relative)); - html.ShouldContain("Förderverein"); // the page body - html.ShouldContain("Häufige Fragen"); // faqs embed heading - html.ShouldContain("Wann gibt es Mittagessen?"); // a seeded question + html.ShouldContain("Förderverein"); // the page body, rendered from Markdown } } diff --git a/Elternbeirat.Web/Features/Faqs/FaqList.razor b/Elternbeirat.Web/Features/Faqs/FaqList.razor index 9bf0c4c..b731fcc 100644 --- a/Elternbeirat.Web/Features/Faqs/FaqList.razor +++ b/Elternbeirat.Web/Features/Faqs/FaqList.razor @@ -1,8 +1,19 @@ @page "/faqs" -Häufige Fragen +@{ + // Heading and intro come from the "faqs" page record; fall back to a sensible + // default only if that record is missing, so the page still renders. + var title = _page?.Title ?? "FAQs"; +} -

Häufige Fragen

+@title + +

@title

+ +@if (_page is not null && !string.IsNullOrWhiteSpace(_page.Body)) +{ +
@Body
+} @if (_unavailable) { diff --git a/Elternbeirat.Web/Features/Faqs/FaqList.razor.cs b/Elternbeirat.Web/Features/Faqs/FaqList.razor.cs index e0a24ac..ec60fc8 100644 --- a/Elternbeirat.Web/Features/Faqs/FaqList.razor.cs +++ b/Elternbeirat.Web/Features/Faqs/FaqList.razor.cs @@ -23,6 +23,11 @@ public partial class FaqList [CascadingParameter] private HttpContext? HttpContext { get; set; } + // The "faqs" page record supplies the heading and intro text, so an editor + // owns them in PocketBase rather than them being hard-coded here. Null until + // loaded, or when no such page exists. + private Page? _page; + private IReadOnlyList _topics = []; // Set when the content source could not be reached or read. The markup then @@ -30,11 +35,19 @@ public partial class FaqList // the 503 this sets on the response. private bool _unavailable; + // The page body rendered from Markdown to HTML, ready to emit as a + // MarkupString in the markup. + private MarkupString Body => (MarkupString)Markdown.ToHtml(_page?.Body); + protected override async Task OnInitializedAsync() { try { - _topics = await PocketBase.GetFaqTopicsAsync(HttpContext?.RequestAborted ?? CancellationToken.None); + var token = HttpContext?.RequestAborted ?? CancellationToken.None; + var pages = await PocketBase.GetPagesAsync(token); + _page = pages.FirstOrDefault( + page => string.Equals(page.Slug, "faqs", StringComparison.OrdinalIgnoreCase)); + _topics = await PocketBase.GetFaqTopicsAsync(token); } catch (PocketBaseUnavailableException exception) { diff --git a/pb/pb_migrations/1727200000_dev_seed.js b/pb/pb_migrations/1727200000_dev_seed.js index fc55f83..d448e13 100644 --- a/pb/pb_migrations/1727200000_dev_seed.js +++ b/pb/pb_migrations/1727200000_dev_seed.js @@ -21,7 +21,7 @@ migrate((app) => { const schema = JSON.parse(toString($os.readFile("/pb_migrations/collections_schema.json"))) const records = { - pages: [{"body":"# Vorstandsteam\n\nDer Elternbeirat der IGMH vertritt die Interessen aller Eltern gegenüber der Schulleitung und dem Kollegium. Wir treffen uns regelmäßig, bringen Anliegen aus der Elternschaft ein und begleiten das Schulleben aktiv.\n\n## Vorstand\n\n- **Vorsitz** — Anke Berger\n- **Stellvertretung** — Murat Yılmaz\n- **Kasse** — Sabine Krause\n- **Schriftführung** — Thomas Heinrich\n\n## So erreichen Sie uns\n\nAm schnellsten per Mail über unsere [Kontaktseite](/contact). Zu unseren öffentlichen Sitzungen sind alle Eltern herzlich eingeladen — die Termine finden Sie unter [Termine](/events).","embed":[],"location":"header","order":2,"public":true,"slug":"board","title":"Vorstandsteam"},{"body":"# Förderverein\n\nDer Förderverein der IGMH unterstützt Projekte, für die im regulären Schulhaushalt kein Geld vorgesehen ist: von der Ausstattung der Bibliothek über Pausenspielgeräte bis zu Zuschüssen für Klassenfahrten, damit kein Kind aus finanziellen Gründen zurückbleibt.\n\n## Mitglied werden\n\nDer Jahresbeitrag beträgt 24 € — jeder Euro fließt direkt in die Arbeit an der Schule. Den Aufnahmeantrag finden Sie unter [Downloads](/downloads).\n\n## Spenden\n\nSpenden sind jederzeit willkommen und werden auf Wunsch mit einer Zuwendungsbestätigung quittiert. Sprechen Sie uns über die [Kontaktseite](/contact) an.","embed":[],"location":"header","order":3,"public":true,"slug":"patrons","title":"Förderverein"},{"body":"# Häufige Fragen\n\nHier beantworten wir die Fragen, die uns am häufigsten erreichen.\n\nIhre Frage ist nicht dabei? Schreiben Sie uns über die [Kontaktseite](/contact).","embed":[],"location":"header","order":6,"public":true,"slug":"faqs","title":"FAQ"},{"body":"# Downloads\n\nFormulare und Dokumente zum Herunterladen:\n\n- Aufnahmeantrag Förderverein\n- Einzugsermächtigung\n- Erstattungsformular Klassenkasse\n\nFehlt ein Dokument? Melden Sie sich über die [Kontaktseite](/contact).","embed":[],"location":"header","order":7,"public":true,"slug":"downloads","title":"Downloads"},{"body":"# Kontakt\n\nSie erreichen den Elternbeirat der IGMH per E-Mail:\n\n**elternbeirat@igmh.example**\n\nWir antworten in der Regel innerhalb weniger Tage. Bei dringenden schulischen Angelegenheiten wenden Sie sich bitte direkt an das Sekretariat der Schule.","embed":[],"location":"footer","order":1,"public":true,"slug":"contact","title":"Kontakt"},{"body":"# Impressum\n\nAngaben gemäß § 5 DDG\n\n**Elternbeirat der IGMH**\nVertreten durch den Vorstand\n\nKontakt: siehe [Kontaktseite](/contact)\n\nVerantwortlich für den Inhalt nach § 18 Abs. 2 MStV: der Vorstand des Elternbeirats.","embed":[],"location":"footer","order":2,"public":true,"slug":"imprint","title":"Impressum"},{"body":"# Datenschutz\n\nDer Schutz Ihrer Daten ist uns wichtig. Diese Website kommt ohne externe Dienste aus: keine Analysewerkzeuge, keine eingebundenen Karten oder Videos, keine Schriften von fremden Servern.\n\n## Server-Logs\n\nBeim Aufruf werden technisch notwendige Zugriffsdaten (IP-Adresse, Zeitpunkt, aufgerufene Seite) kurzzeitig verarbeitet, um den Betrieb sicherzustellen. Eine Zusammenführung mit anderen Daten findet nicht statt.\n\n## Ihre Rechte\n\nFragen zum Datenschutz richten Sie bitte an die [Kontaktseite](/contact).","embed":[],"location":"footer","order":3,"public":true,"slug":"privacy","title":"Datenschutz"},{"body":"# Willkommen beim Elternbeirat der IGMH","embed":["posts","events"],"location":"header","order":1,"public":true,"slug":"home","title":"Start"},{"body":"# Beiträge","embed":[],"location":"header","order":4,"public":true,"slug":"posts","title":"Beiträge"},{"body":"# Termine","embed":[],"location":"header","order":5,"public":true,"slug":"events","title":"Termine"}] + pages: [{"body":"# Vorstandsteam\n\nDer Elternbeirat der IGMH vertritt die Interessen aller Eltern gegenüber der Schulleitung und dem Kollegium. Wir treffen uns regelmäßig, bringen Anliegen aus der Elternschaft ein und begleiten das Schulleben aktiv.\n\n## Vorstand\n\n- **Vorsitz** — Anke Berger\n- **Stellvertretung** — Murat Yılmaz\n- **Kasse** — Sabine Krause\n- **Schriftführung** — Thomas Heinrich\n\n## So erreichen Sie uns\n\nAm schnellsten per Mail über unsere [Kontaktseite](/contact). Zu unseren öffentlichen Sitzungen sind alle Eltern herzlich eingeladen — die Termine finden Sie unter [Termine](/events).","embed":[],"location":"header","order":2,"public":true,"slug":"board","title":"Vorstandsteam"},{"body":"# Förderverein\n\nDer Förderverein der IGMH unterstützt Projekte, für die im regulären Schulhaushalt kein Geld vorgesehen ist: von der Ausstattung der Bibliothek über Pausenspielgeräte bis zu Zuschüssen für Klassenfahrten, damit kein Kind aus finanziellen Gründen zurückbleibt.\n\n## Mitglied werden\n\nDer Jahresbeitrag beträgt 24 € — jeder Euro fließt direkt in die Arbeit an der Schule. Den Aufnahmeantrag finden Sie unter [Downloads](/downloads).\n\n## Spenden\n\nSpenden sind jederzeit willkommen und werden auf Wunsch mit einer Zuwendungsbestätigung quittiert. Sprechen Sie uns über die [Kontaktseite](/contact) an.","embed":[],"location":"header","order":3,"public":true,"slug":"patrons","title":"Förderverein"},{"body":"Hier finden Sie Antworten auf die Fragen, die uns am häufigsten erreichen – nach Themen geordnet. Wählen Sie ein Thema, um die passenden Fragen und Antworten zu sehen.\n\nIhre Frage ist nicht dabei? Schreiben Sie uns über die [Kontaktseite](/contact) – wir helfen gern weiter.","embed":[],"location":"header","order":6,"public":true,"slug":"faqs","title":"FAQs"},{"body":"# Downloads\n\nFormulare und Dokumente zum Herunterladen:\n\n- Aufnahmeantrag Förderverein\n- Einzugsermächtigung\n- Erstattungsformular Klassenkasse\n\nFehlt ein Dokument? Melden Sie sich über die [Kontaktseite](/contact).","embed":[],"location":"header","order":7,"public":true,"slug":"downloads","title":"Downloads"},{"body":"# Kontakt\n\nSie erreichen den Elternbeirat der IGMH per E-Mail:\n\n**elternbeirat@igmh.example**\n\nWir antworten in der Regel innerhalb weniger Tage. Bei dringenden schulischen Angelegenheiten wenden Sie sich bitte direkt an das Sekretariat der Schule.","embed":[],"location":"footer","order":1,"public":true,"slug":"contact","title":"Kontakt"},{"body":"# Impressum\n\nAngaben gemäß § 5 DDG\n\n**Elternbeirat der IGMH**\nVertreten durch den Vorstand\n\nKontakt: siehe [Kontaktseite](/contact)\n\nVerantwortlich für den Inhalt nach § 18 Abs. 2 MStV: der Vorstand des Elternbeirats.","embed":[],"location":"footer","order":2,"public":true,"slug":"imprint","title":"Impressum"},{"body":"# Datenschutz\n\nDer Schutz Ihrer Daten ist uns wichtig. Diese Website kommt ohne externe Dienste aus: keine Analysewerkzeuge, keine eingebundenen Karten oder Videos, keine Schriften von fremden Servern.\n\n## Server-Logs\n\nBeim Aufruf werden technisch notwendige Zugriffsdaten (IP-Adresse, Zeitpunkt, aufgerufene Seite) kurzzeitig verarbeitet, um den Betrieb sicherzustellen. Eine Zusammenführung mit anderen Daten findet nicht statt.\n\n## Ihre Rechte\n\nFragen zum Datenschutz richten Sie bitte an die [Kontaktseite](/contact).","embed":[],"location":"footer","order":3,"public":true,"slug":"privacy","title":"Datenschutz"},{"body":"# Willkommen beim Elternbeirat der IGMH","embed":["posts","events"],"location":"header","order":1,"public":true,"slug":"home","title":"Start"},{"body":"# Beiträge","embed":[],"location":"header","order":4,"public":true,"slug":"posts","title":"Beiträge"},{"body":"# Termine","embed":[],"location":"header","order":5,"public":true,"slug":"events","title":"Termine"}] , posts: [{"body":"## Neuer Vorstand gewählt\n\nAuf der Mitgliederversammlung wurde der Vorstand des Elternbeirats für das Schuljahr **2026/27** neu gewählt. Wir danken dem bisherigen Team für sein Engagement und freuen uns auf die gemeinsame Arbeit.\n\nDie neuen Ansprechpartnerinnen und Ansprechpartner finden Sie auf der Seite [Vorstandsteam](/board).","date":"2026-09-24 18:00:00.000Z","public":true,"slug":"new-board-2026","title":"Neuer Vorstand für das Schuljahr 2026/27 gewählt"},{"body":"## Herbstbasar am 22. November\n\nAm **22. November** findet wieder unser beliebter Herbstbasar statt. Es gibt selbst gebackene Kuchen, Bastelstände und ein Bühnenprogramm der Klassen.\n\nWer einen Stand betreuen oder etwas beisteuern möchte, meldet sich bitte bis zum 10. November über das [Kontaktformular](/contact) an. Wir freuen uns über jede helfende Hand!","date":"2026-09-18 09:30:00.000Z","public":true,"slug":"herbstbasar-2026","title":"Herbstbasar am 22. November – jetzt anmelden"},{"body":"## Mehr Auswahl beim Mittagessen\n\nAb den Herbstferien erweitert der Caterer das Angebot in der Mensa: Es gibt künftig **täglich ein zusätzliches vegetarisches Gericht** sowie eine größere Salatauswahl.\n\nRückmeldungen zum Essen nehmen wir gerne über den Elternbeirat auf – sprechen Sie uns an.","date":"2026-09-10 12:15:00.000Z","public":true,"slug":"mensa-mehr-auswahl","title":"Mehr Auswahl beim Mittagessen ab den Herbstferien"},{"body":"## Besuchen Sie unseren Stand\n\nAm kommenden **Elternsprechtag** ist der Elternbeirat mit einem Info-Stand im Foyer vertreten. Kommen Sie vorbei – wir beantworten Fragen rund um die Elternarbeit und freuen uns über neue Mitstreiterinnen und Mitstreiter.\n\nAlle Termine finden Sie unter [Termine](/events).","date":"2026-09-02 08:00:00.000Z","public":true,"slug":"elternsprechtag-stand","title":"Elternbeirat am Elternsprechtag – besuchen Sie unseren Stand"},{"body":"## Neue Spielgeräte für den Pausenhof\n\nDank der Einnahmen aus dem letzten Basar und der Unterstützung des [Fördervereins](/patrons) konnten neue Spielgeräte für den Pausenhof angeschafft werden.\n\nDie Kinder haben die Klettergerüste bereits begeistert in Beschlag genommen.","date":"2026-08-28 16:45:00.000Z","public":true,"slug":"neue-spielgeraete","title":"Neue Spielgeräte für den Pausenhof"}] , From eacf95e0412d81b919fcf30e9d713e225101e840 Mon Sep 17 00:00:00 2001 From: tleininger Date: Wed, 30 Sep 2026 16:21:49 +0200 Subject: [PATCH 05/13] Show FAQ topics as an in-page accordion instead of drill-down pages --- Elternbeirat.PocketBase/PocketBaseClient.cs | 46 +++----------- Elternbeirat.Web.Tests/RouteSmokeTests.cs | 10 +-- Elternbeirat.Web/Features/Faqs/FaqList.razor | 31 +++++---- .../Features/Faqs/FaqTopicDetail.razor | 30 --------- .../Features/Faqs/FaqTopicDetail.razor.cs | 63 ------------------- Elternbeirat.Web/wwwroot/app.css | 59 +++++++++++++---- pb/pb_migrations/1727200000_dev_seed.js | 2 +- 7 files changed, 79 insertions(+), 162 deletions(-) delete mode 100644 Elternbeirat.Web/Features/Faqs/FaqTopicDetail.razor delete mode 100644 Elternbeirat.Web/Features/Faqs/FaqTopicDetail.razor.cs diff --git a/Elternbeirat.PocketBase/PocketBaseClient.cs b/Elternbeirat.PocketBase/PocketBaseClient.cs index 841de14..7b13dac 100644 --- a/Elternbeirat.PocketBase/PocketBaseClient.cs +++ b/Elternbeirat.PocketBase/PocketBaseClient.cs @@ -91,52 +91,22 @@ public sealed class PocketBaseClient(HttpClient httpClient) => GetRecordsAsync("faqs", "topic.order,order", token, expand: "topic"); /// - /// Gets all public FAQ topics, ordered by . + /// Gets all public FAQ topics, ordered by , each with + /// its questions expanded. /// /// - /// Backs the FAQ overview, which lists the topics as links to their own pages. - /// The questions are not loaded here; the topic page loads them per topic via - /// . + /// Backs the FAQ page, which shows every topic as a collapsible group with its + /// questions nested inside. The faqs_via_topic back-relation is expanded so + /// one request returns the topics and their questions together; drafts among the + /// questions are dropped in . /// /// /// - /// The public FAQ topics, or an empty list if there are none. + /// The public FAQ topics with their questions, or an empty list if there are none. /// /// public Task> GetFaqTopicsAsync(CancellationToken token = default) - => GetRecordsAsync("faq_topics", "order", token); - - /// - /// Gets one public FAQ topic by its slug, with its questions expanded, or - /// when no public topic has that slug. - /// - /// - /// Backs the topic's own page at /faqs/{slug}: it loads the single topic - /// and, through the faqs_via_topic back-relation, the questions grouped - /// under it, so the page needs one request. The slug is unique, so at most one - /// record matches. - /// - /// - /// The topic slug from the URL, e.g. "cafeteria". - /// - /// - /// - /// The matching public topic with its questions, or if - /// none matches. - /// - /// - public async Task GetFaqTopicBySlugAsync( - string slug, - CancellationToken token = default) - { - var topics = await GetRecordsAsync( - "faq_topics", - "order", - token, - expand: "faqs_via_topic"); - return topics.FirstOrDefault( - topic => string.Equals(topic.Slug, slug, StringComparison.OrdinalIgnoreCase)); - } + => GetRecordsAsync("faq_topics", "order", token, expand: "faqs_via_topic"); /// /// Gets all public records of a collection in a single request. diff --git a/Elternbeirat.Web.Tests/RouteSmokeTests.cs b/Elternbeirat.Web.Tests/RouteSmokeTests.cs index d79a2ad..c52c5f7 100644 --- a/Elternbeirat.Web.Tests/RouteSmokeTests.cs +++ b/Elternbeirat.Web.Tests/RouteSmokeTests.cs @@ -85,19 +85,19 @@ public sealed class RouteSmokeTests : IDisposable } [Fact] - public async Task Faqs_route_renders_the_topic_list() + public async Task Faqs_route_renders_the_topic_accordion() { // /faqs is a literal route (FaqList) that must win over the /{Slug} // catch-all content page. It reads the "faqs" page for heading and intro - // and lists the topics as cards linking to their own pages. The individual - // questions live on the topic pages (/faqs/{slug}), not here. + // and renders each topic as a collapsible group with its questions nested + // inside, so both the topic headings and the questions are in the markup. var client = _factory.CreateClient(); var html = await client.GetStringAsync(new Uri("/faqs", UriKind.Relative)); html.ShouldContain("FAQs"); // heading from the page title - html.ShouldContain("Mensa und Mittagessen"); // German topic heading (a card) - html.ShouldContain("href=\"/faqs/cafeteria\""); // card links to the topic page + html.ShouldContain("Mensa und Mittagessen"); // German topic heading (a group) + html.ShouldContain("Wann gibt es Mittagessen?"); // a question nested in the group } [Fact] diff --git a/Elternbeirat.Web/Features/Faqs/FaqList.razor b/Elternbeirat.Web/Features/Faqs/FaqList.razor index b731fcc..21accf9 100644 --- a/Elternbeirat.Web/Features/Faqs/FaqList.razor +++ b/Elternbeirat.Web/Features/Faqs/FaqList.razor @@ -25,16 +25,23 @@ else if (_topics.Count == 0) } else { -
    - @foreach (var topic in _topics) - { -
  • -

    @topic.Title

    - @if (!string.IsNullOrWhiteSpace(topic.Intro)) - { -
    @((MarkupString)Markdown.ToHtml(topic.Intro))
    - } -
  • - } -
+ @foreach (var topic in _topics) + { +
+ @topic.Title + @if (!string.IsNullOrWhiteSpace(topic.Intro)) + { +
@((MarkupString)Markdown.ToHtml(topic.Intro))
+ } + @foreach (var faq in topic.Faqs) + { +
+ @faq.Question +
+ @((MarkupString)Markdown.ToHtml(faq.Answer)) +
+
+ } +
+ } } diff --git a/Elternbeirat.Web/Features/Faqs/FaqTopicDetail.razor b/Elternbeirat.Web/Features/Faqs/FaqTopicDetail.razor deleted file mode 100644 index d8bf6a2..0000000 --- a/Elternbeirat.Web/Features/Faqs/FaqTopicDetail.razor +++ /dev/null @@ -1,30 +0,0 @@ -@page "/faqs/{Slug}" - -@if (_unavailable) -{ - Vorübergehend nicht erreichbar -

Das Thema ist gerade nicht erreichbar. Bitte später erneut versuchen.

-} -else if (_topic is not null) -{ - @_topic.Title - -

@_topic.Title

- @if (!string.IsNullOrWhiteSpace(_topic.Intro)) - { -
@((MarkupString)Markdown.ToHtml(_topic.Intro))
- } - @foreach (var faq in _topic.Faqs) - { -
- @faq.Question -
- @((MarkupString)Markdown.ToHtml(faq.Answer)) -
-
- } -} -@* No topic and not unavailable: the slug was unknown; NavigationManager.NotFound() - already ran in OnParametersSetAsync and renders the not-found page. *@ diff --git a/Elternbeirat.Web/Features/Faqs/FaqTopicDetail.razor.cs b/Elternbeirat.Web/Features/Faqs/FaqTopicDetail.razor.cs deleted file mode 100644 index a22518b..0000000 --- a/Elternbeirat.Web/Features/Faqs/FaqTopicDetail.razor.cs +++ /dev/null @@ -1,63 +0,0 @@ -using Elternbeirat.Contracts; -using Elternbeirat.PocketBase; -using Elternbeirat.Web.Shared; -using Microsoft.AspNetCore.Components; - -namespace Elternbeirat.Web.Features.Faqs; - -public partial class FaqTopicDetail -{ - [LoggerMessage( - Level = LogLevel.Error, - Message = "Could not load FAQ topic '{Slug}' from PocketBase; content source is unavailable.")] - private static partial void LogSourceUnavailable( - ILogger logger, - string slug, - Exception exception); - - [Parameter] - public string Slug { get; set; } = string.Empty; - - [Inject] - private PocketBaseClient PocketBase { get; set; } = null!; - - [Inject] - private ILogger Logger { get; set; } = null!; - - [Inject] - private NavigationManager Navigation { get; set; } = null!; - - [CascadingParameter] - private HttpContext? HttpContext { get; set; } - - private FaqTopic? _topic; - - // Set when the content source could not be reached or read. The markup then - // shows a "temporarily unavailable" note instead of a not-found page, matching - // the 503 this sets on the response. - private bool _unavailable; - - protected override async Task OnParametersSetAsync() - { - try - { - _topic = await PocketBase.GetFaqTopicBySlugAsync( - Slug, - HttpContext?.RequestAborted ?? CancellationToken.None); - } - catch (PocketBaseUnavailableException exception) - { - // The site works, its data store is down: 503, not 404. - LogSourceUnavailable(Logger, Slug, exception); - _unavailable = true; - SourceUnavailable.SetStatus(HttpContext); - return; - } - - if (_topic is null) - { - // The source answered, but there is no topic with this slug: a genuine 404. - Navigation.NotFound(); - } - } -} diff --git a/Elternbeirat.Web/wwwroot/app.css b/Elternbeirat.Web/wwwroot/app.css index 4d159bf..29bc4cf 100644 --- a/Elternbeirat.Web/wwwroot/app.css +++ b/Elternbeirat.Web/wwwroot/app.css @@ -206,8 +206,7 @@ h1:focus { lifted off the tinted page background with a soft shadow and a gentle hover. */ .post-list, -.event-list, -.faq-topic-list { +.event-list { list-style: none; padding: 0; margin: 0; @@ -216,8 +215,7 @@ h1:focus { } .post-list li, -.event-list li, -.faq-topic-list li { +.event-list li { background: var(--color-bg); border-radius: var(--radius); box-shadow: var(--shadow); @@ -226,21 +224,56 @@ h1:focus { } .post-list li:hover, -.event-list li:hover, -.faq-topic-list li:hover { +.event-list li:hover { box-shadow: var(--shadow-hover); transform: translateY(-2px); } -/* FAQ topics: each card is a link to the topic's own page, with an optional intro - below the heading. The heading matches the post/event card titles. */ -.faq-topic-list h2 { - margin: 0; - font-size: 1.15rem; +/* FAQ topics: each is a collapsible card. Its summary is the topic heading; open it + to reveal the optional intro and the questions (themselves collapsible .faq-item + cards). The topic marker is a rotating triangle, distinct from the +/- on the + questions nested inside, so the two accordion levels read apart. */ +.faq-topic { + background: var(--color-bg); + border-radius: var(--radius); + box-shadow: var(--shadow); + padding: var(--space-3) var(--space-4); + margin-bottom: var(--space-3); + transition: box-shadow var(--transition); } -.faq-topic-list h2 a { - text-decoration: none; +.faq-topic:hover { + box-shadow: var(--shadow-hover); +} + +.faq-topic > summary { + cursor: pointer; + font-size: 1.15rem; + font-weight: 600; + color: var(--color-brand); + list-style: none; + display: flex; + align-items: baseline; + gap: var(--space-2); +} + +.faq-topic > summary::-webkit-details-marker { + display: none; +} + +.faq-topic > summary::before { + content: "▸"; + color: var(--color-accent-dark); + font-size: 0.9rem; +} + +.faq-topic[open] > summary::before { + content: "▾"; +} + +/* Space the questions off the topic heading once the topic is open. */ +.faq-topic[open] > .faq-item:first-of-type { + margin-top: var(--space-3); } .faq-topic-intro { diff --git a/pb/pb_migrations/1727200000_dev_seed.js b/pb/pb_migrations/1727200000_dev_seed.js index d448e13..0d9a03e 100644 --- a/pb/pb_migrations/1727200000_dev_seed.js +++ b/pb/pb_migrations/1727200000_dev_seed.js @@ -21,7 +21,7 @@ migrate((app) => { const schema = JSON.parse(toString($os.readFile("/pb_migrations/collections_schema.json"))) const records = { - pages: [{"body":"# Vorstandsteam\n\nDer Elternbeirat der IGMH vertritt die Interessen aller Eltern gegenüber der Schulleitung und dem Kollegium. Wir treffen uns regelmäßig, bringen Anliegen aus der Elternschaft ein und begleiten das Schulleben aktiv.\n\n## Vorstand\n\n- **Vorsitz** — Anke Berger\n- **Stellvertretung** — Murat Yılmaz\n- **Kasse** — Sabine Krause\n- **Schriftführung** — Thomas Heinrich\n\n## So erreichen Sie uns\n\nAm schnellsten per Mail über unsere [Kontaktseite](/contact). Zu unseren öffentlichen Sitzungen sind alle Eltern herzlich eingeladen — die Termine finden Sie unter [Termine](/events).","embed":[],"location":"header","order":2,"public":true,"slug":"board","title":"Vorstandsteam"},{"body":"# Förderverein\n\nDer Förderverein der IGMH unterstützt Projekte, für die im regulären Schulhaushalt kein Geld vorgesehen ist: von der Ausstattung der Bibliothek über Pausenspielgeräte bis zu Zuschüssen für Klassenfahrten, damit kein Kind aus finanziellen Gründen zurückbleibt.\n\n## Mitglied werden\n\nDer Jahresbeitrag beträgt 24 € — jeder Euro fließt direkt in die Arbeit an der Schule. Den Aufnahmeantrag finden Sie unter [Downloads](/downloads).\n\n## Spenden\n\nSpenden sind jederzeit willkommen und werden auf Wunsch mit einer Zuwendungsbestätigung quittiert. Sprechen Sie uns über die [Kontaktseite](/contact) an.","embed":[],"location":"header","order":3,"public":true,"slug":"patrons","title":"Förderverein"},{"body":"Hier finden Sie Antworten auf die Fragen, die uns am häufigsten erreichen – nach Themen geordnet. Wählen Sie ein Thema, um die passenden Fragen und Antworten zu sehen.\n\nIhre Frage ist nicht dabei? Schreiben Sie uns über die [Kontaktseite](/contact) – wir helfen gern weiter.","embed":[],"location":"header","order":6,"public":true,"slug":"faqs","title":"FAQs"},{"body":"# Downloads\n\nFormulare und Dokumente zum Herunterladen:\n\n- Aufnahmeantrag Förderverein\n- Einzugsermächtigung\n- Erstattungsformular Klassenkasse\n\nFehlt ein Dokument? Melden Sie sich über die [Kontaktseite](/contact).","embed":[],"location":"header","order":7,"public":true,"slug":"downloads","title":"Downloads"},{"body":"# Kontakt\n\nSie erreichen den Elternbeirat der IGMH per E-Mail:\n\n**elternbeirat@igmh.example**\n\nWir antworten in der Regel innerhalb weniger Tage. Bei dringenden schulischen Angelegenheiten wenden Sie sich bitte direkt an das Sekretariat der Schule.","embed":[],"location":"footer","order":1,"public":true,"slug":"contact","title":"Kontakt"},{"body":"# Impressum\n\nAngaben gemäß § 5 DDG\n\n**Elternbeirat der IGMH**\nVertreten durch den Vorstand\n\nKontakt: siehe [Kontaktseite](/contact)\n\nVerantwortlich für den Inhalt nach § 18 Abs. 2 MStV: der Vorstand des Elternbeirats.","embed":[],"location":"footer","order":2,"public":true,"slug":"imprint","title":"Impressum"},{"body":"# Datenschutz\n\nDer Schutz Ihrer Daten ist uns wichtig. Diese Website kommt ohne externe Dienste aus: keine Analysewerkzeuge, keine eingebundenen Karten oder Videos, keine Schriften von fremden Servern.\n\n## Server-Logs\n\nBeim Aufruf werden technisch notwendige Zugriffsdaten (IP-Adresse, Zeitpunkt, aufgerufene Seite) kurzzeitig verarbeitet, um den Betrieb sicherzustellen. Eine Zusammenführung mit anderen Daten findet nicht statt.\n\n## Ihre Rechte\n\nFragen zum Datenschutz richten Sie bitte an die [Kontaktseite](/contact).","embed":[],"location":"footer","order":3,"public":true,"slug":"privacy","title":"Datenschutz"},{"body":"# Willkommen beim Elternbeirat der IGMH","embed":["posts","events"],"location":"header","order":1,"public":true,"slug":"home","title":"Start"},{"body":"# Beiträge","embed":[],"location":"header","order":4,"public":true,"slug":"posts","title":"Beiträge"},{"body":"# Termine","embed":[],"location":"header","order":5,"public":true,"slug":"events","title":"Termine"}] + pages: [{"body":"# Vorstandsteam\n\nDer Elternbeirat der IGMH vertritt die Interessen aller Eltern gegenüber der Schulleitung und dem Kollegium. Wir treffen uns regelmäßig, bringen Anliegen aus der Elternschaft ein und begleiten das Schulleben aktiv.\n\n## Vorstand\n\n- **Vorsitz** — Anke Berger\n- **Stellvertretung** — Murat Yılmaz\n- **Kasse** — Sabine Krause\n- **Schriftführung** — Thomas Heinrich\n\n## So erreichen Sie uns\n\nAm schnellsten per Mail über unsere [Kontaktseite](/contact). Zu unseren öffentlichen Sitzungen sind alle Eltern herzlich eingeladen — die Termine finden Sie unter [Termine](/events).","embed":[],"location":"header","order":2,"public":true,"slug":"board","title":"Vorstandsteam"},{"body":"# Förderverein\n\nDer Förderverein der IGMH unterstützt Projekte, für die im regulären Schulhaushalt kein Geld vorgesehen ist: von der Ausstattung der Bibliothek über Pausenspielgeräte bis zu Zuschüssen für Klassenfahrten, damit kein Kind aus finanziellen Gründen zurückbleibt.\n\n## Mitglied werden\n\nDer Jahresbeitrag beträgt 24 € — jeder Euro fließt direkt in die Arbeit an der Schule. Den Aufnahmeantrag finden Sie unter [Downloads](/downloads).\n\n## Spenden\n\nSpenden sind jederzeit willkommen und werden auf Wunsch mit einer Zuwendungsbestätigung quittiert. Sprechen Sie uns über die [Kontaktseite](/contact) an.","embed":[],"location":"header","order":3,"public":true,"slug":"patrons","title":"Förderverein"},{"body":"Auf dieser Seite haben wir die Fragen zusammengetragen, die uns am häufigsten erreichen.\n\nIhre Frage ist nicht dabei? Schreiben Sie uns über die [Kontaktseite](/contact) – wir helfen gern weiter.","embed":[],"location":"header","order":6,"public":true,"slug":"faqs","title":"FAQs"},{"body":"# Downloads\n\nFormulare und Dokumente zum Herunterladen:\n\n- Aufnahmeantrag Förderverein\n- Einzugsermächtigung\n- Erstattungsformular Klassenkasse\n\nFehlt ein Dokument? Melden Sie sich über die [Kontaktseite](/contact).","embed":[],"location":"header","order":7,"public":true,"slug":"downloads","title":"Downloads"},{"body":"# Kontakt\n\nSie erreichen den Elternbeirat der IGMH per E-Mail:\n\n**kontakt@elternbeirat-igmh.info**\n\nWir antworten in der Regel innerhalb weniger Tage. Bei dringenden schulischen Angelegenheiten wenden Sie sich bitte direkt an das Sekretariat der Schule.","embed":[],"location":"footer","order":1,"public":true,"slug":"contact","title":"Kontakt"},{"body":"# Impressum\n\nAngaben gemäß § 5 DDG\n\n**Elternbeirat der IGMH**\nVertreten durch den Vorstand\n\nKontakt: siehe [Kontaktseite](/contact)\n\nVerantwortlich für den Inhalt nach § 18 Abs. 2 MStV: der Vorstand des Elternbeirats.","embed":[],"location":"footer","order":2,"public":true,"slug":"imprint","title":"Impressum"},{"body":"# Datenschutz\n\nDer Schutz Ihrer Daten ist uns wichtig. Diese Website kommt ohne externe Dienste aus: keine Analysewerkzeuge, keine eingebundenen Karten oder Videos, keine Schriften von fremden Servern.\n\n## Server-Logs\n\nBeim Aufruf werden technisch notwendige Zugriffsdaten (IP-Adresse, Zeitpunkt, aufgerufene Seite) kurzzeitig verarbeitet, um den Betrieb sicherzustellen. Eine Zusammenführung mit anderen Daten findet nicht statt.\n\n## Ihre Rechte\n\nFragen zum Datenschutz richten Sie bitte an die [Kontaktseite](/contact).","embed":[],"location":"footer","order":3,"public":true,"slug":"privacy","title":"Datenschutz"},{"body":"# Willkommen beim Elternbeirat der IGMH","embed":["posts","events"],"location":"header","order":1,"public":true,"slug":"home","title":"Start"},{"body":"# Beiträge","embed":[],"location":"header","order":4,"public":true,"slug":"posts","title":"Beiträge"},{"body":"# Termine","embed":[],"location":"header","order":5,"public":true,"slug":"events","title":"Termine"}] , posts: [{"body":"## Neuer Vorstand gewählt\n\nAuf der Mitgliederversammlung wurde der Vorstand des Elternbeirats für das Schuljahr **2026/27** neu gewählt. Wir danken dem bisherigen Team für sein Engagement und freuen uns auf die gemeinsame Arbeit.\n\nDie neuen Ansprechpartnerinnen und Ansprechpartner finden Sie auf der Seite [Vorstandsteam](/board).","date":"2026-09-24 18:00:00.000Z","public":true,"slug":"new-board-2026","title":"Neuer Vorstand für das Schuljahr 2026/27 gewählt"},{"body":"## Herbstbasar am 22. November\n\nAm **22. November** findet wieder unser beliebter Herbstbasar statt. Es gibt selbst gebackene Kuchen, Bastelstände und ein Bühnenprogramm der Klassen.\n\nWer einen Stand betreuen oder etwas beisteuern möchte, meldet sich bitte bis zum 10. November über das [Kontaktformular](/contact) an. Wir freuen uns über jede helfende Hand!","date":"2026-09-18 09:30:00.000Z","public":true,"slug":"herbstbasar-2026","title":"Herbstbasar am 22. November – jetzt anmelden"},{"body":"## Mehr Auswahl beim Mittagessen\n\nAb den Herbstferien erweitert der Caterer das Angebot in der Mensa: Es gibt künftig **täglich ein zusätzliches vegetarisches Gericht** sowie eine größere Salatauswahl.\n\nRückmeldungen zum Essen nehmen wir gerne über den Elternbeirat auf – sprechen Sie uns an.","date":"2026-09-10 12:15:00.000Z","public":true,"slug":"mensa-mehr-auswahl","title":"Mehr Auswahl beim Mittagessen ab den Herbstferien"},{"body":"## Besuchen Sie unseren Stand\n\nAm kommenden **Elternsprechtag** ist der Elternbeirat mit einem Info-Stand im Foyer vertreten. Kommen Sie vorbei – wir beantworten Fragen rund um die Elternarbeit und freuen uns über neue Mitstreiterinnen und Mitstreiter.\n\nAlle Termine finden Sie unter [Termine](/events).","date":"2026-09-02 08:00:00.000Z","public":true,"slug":"elternsprechtag-stand","title":"Elternbeirat am Elternsprechtag – besuchen Sie unseren Stand"},{"body":"## Neue Spielgeräte für den Pausenhof\n\nDank der Einnahmen aus dem letzten Basar und der Unterstützung des [Fördervereins](/patrons) konnten neue Spielgeräte für den Pausenhof angeschafft werden.\n\nDie Kinder haben die Klettergerüste bereits begeistert in Beschlag genommen.","date":"2026-08-28 16:45:00.000Z","public":true,"slug":"neue-spielgeraete","title":"Neue Spielgeräte für den Pausenhof"}] , From c67c71ea282d7f3dca13470b845eb2c297f8fb0e Mon Sep 17 00:00:00 2001 From: tleininger Date: Wed, 30 Sep 2026 16:40:33 +0200 Subject: [PATCH 06/13] Remove hover motion from cards and "more" links --- Elternbeirat.Web/wwwroot/app.css | 12 +----------- 1 file changed, 1 insertion(+), 11 deletions(-) diff --git a/Elternbeirat.Web/wwwroot/app.css b/Elternbeirat.Web/wwwroot/app.css index 29bc4cf..64a2b73 100644 --- a/Elternbeirat.Web/wwwroot/app.css +++ b/Elternbeirat.Web/wwwroot/app.css @@ -220,13 +220,12 @@ h1:focus { border-radius: var(--radius); box-shadow: var(--shadow); padding: var(--space-3) var(--space-4); - transition: box-shadow var(--transition), transform var(--transition); + transition: box-shadow var(--transition); } .post-list li:hover, .event-list li:hover { box-shadow: var(--shadow-hover); - transform: translateY(-2px); } /* FAQ topics: each is a collapsible card. Its summary is the topic heading; open it @@ -332,7 +331,6 @@ h1:focus { } .event-list-past li:hover { - transform: none; box-shadow: none; } @@ -412,11 +410,3 @@ h1:focus { .embed-more a:hover { color: var(--color-brand); } - -.embed-more a span { - transition: transform var(--transition); -} - -.embed-more a:hover span { - transform: translateX(3px); -} From 666614a3b211aba954fefe0c26f18728b316e45f Mon Sep 17 00:00:00 2001 From: tleininger Date: Wed, 30 Sep 2026 21:07:40 +0200 Subject: [PATCH 07/13] Smoke-test /health for the reachable (200) and unreachable (503) cases --- Elternbeirat.PocketBase/PocketBaseClient.cs | 37 +++++++++++++++ Elternbeirat.Web.Tests/RouteSmokeTests.cs | 31 +++++++++++- Elternbeirat.Web/Program.cs | 52 ++++++++++++--------- compose.yaml | 18 ++++--- 4 files changed, 110 insertions(+), 28 deletions(-) diff --git a/Elternbeirat.PocketBase/PocketBaseClient.cs b/Elternbeirat.PocketBase/PocketBaseClient.cs index 7b13dac..dd72ccd 100644 --- a/Elternbeirat.PocketBase/PocketBaseClient.cs +++ b/Elternbeirat.PocketBase/PocketBaseClient.cs @@ -108,6 +108,43 @@ public sealed class PocketBaseClient(HttpClient httpClient) public Task> GetFaqTopicsAsync(CancellationToken token = default) => GetRecordsAsync("faq_topics", "order", token, expand: "faqs_via_topic"); + /// + /// Checks whether PocketBase answers its health endpoint. + /// + /// + /// Backs the app's own /health endpoint, which an external monitor (Uptime + /// Kuma) polls: the app answering at all proves the app is up, and this probe adds + /// whether the content source behind it is reachable, so one monitor covers both. + /// This calls GET /api/health, PocketBase's own liveness endpoint, which + /// needs no auth and touches no collection. + /// + /// + /// A token to cancel the probe. + /// + /// + /// if PocketBase answered with a success status within the + /// client timeout; if it was unreachable, timed out, or + /// answered with an error status. + /// + public async Task IsHealthyAsync(CancellationToken token = default) + { + try + { + using var response = await httpClient.GetAsync( + new Uri("/api/health", UriKind.Relative), token); + return response.IsSuccessStatusCode; + } + // Same failure shapes as a record read: unreachable (HttpRequestException) or the + // client's own timeout (a TaskCanceledException wrapping a TimeoutException). A + // plain TaskCanceledException is the caller's cancellation and propagates. + catch (Exception exception) when ( + exception is HttpRequestException + or TaskCanceledException { InnerException: TimeoutException }) + { + return false; + } + } + /// /// Gets all public records of a collection in a single request. /// diff --git a/Elternbeirat.Web.Tests/RouteSmokeTests.cs b/Elternbeirat.Web.Tests/RouteSmokeTests.cs index c52c5f7..152c80b 100644 --- a/Elternbeirat.Web.Tests/RouteSmokeTests.cs +++ b/Elternbeirat.Web.Tests/RouteSmokeTests.cs @@ -1,5 +1,4 @@ using System.Net; -using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Mvc.Testing; namespace Elternbeirat.Web.Tests; @@ -140,4 +139,34 @@ public sealed class RouteSmokeTests : IDisposable html.ShouldContain("Förderverein"); // the page body, rendered from Markdown } + + [Fact] + public async Task Health_returns_200_when_PocketBase_is_reachable() + { + // The monitor's happy path: the app answers and PocketBase (the seeded + // fixture) is up, so /health is 200. This mostly guards the wiring -- that the + // endpoint exists and reaches the client -- since the fixture keeps PocketBase + // alive; the unreachable case is covered separately below. + var client = _factory.CreateClient(); + + var response = await client.GetAsync(new Uri("/health", UriKind.Relative)); + + response.StatusCode.ShouldBe(HttpStatusCode.OK); + } + + [Fact] + public async Task Health_returns_503_when_PocketBase_is_unreachable() + { + // The case the monitor exists for: the app is up but PocketBase is not. Point a + // throwaway app at a dead address (nothing listens on port 1, so the probe is + // refused at once, no timeout wait) and assert /health reports 503 rather than + // claiming healthy. + await using var factory = _baseFactory.WithWebHostBuilder(builder => + builder.UseSetting("PocketBase:BaseUrl", "http://localhost:1")); + var client = factory.CreateClient(); + + var response = await client.GetAsync(new Uri("/health", UriKind.Relative)); + + response.StatusCode.ShouldBe(HttpStatusCode.ServiceUnavailable); + } } diff --git a/Elternbeirat.Web/Program.cs b/Elternbeirat.Web/Program.cs index 185408c..fbe49a8 100644 --- a/Elternbeirat.Web/Program.cs +++ b/Elternbeirat.Web/Program.cs @@ -6,52 +6,50 @@ using Microsoft.AspNetCore.HttpOverrides; var builder = WebApplication.CreateBuilder(args); -// Add services to the container. builder.Services.AddRazorComponents(); // The typed client reads content from PocketBase over its REST API. The base URL -// comes from configuration: appsettings for local dev, the PocketBase__BaseUrl -// env var on the server (see compose.yaml). +// comes from config: appsettings for local dev, the PocketBase__BaseUrl env var +// on the server (see compose.yaml). var pocketBaseUrl = builder.Configuration["PocketBase:BaseUrl"] ?? throw new InvalidOperationException("PocketBase:BaseUrl is not configured."); builder.Services.AddHttpClient(client => - client.BaseAddress = new Uri(pocketBaseUrl)); +{ + client.BaseAddress = new Uri(pocketBaseUrl); + // Every page waits for PocketBase. The default wait is 100 seconds, so if + // PocketBase is down the page would hang that long. 5 seconds fails fast instead. + client.Timeout = TimeSpan.FromSeconds(5); +}); var app = builder.Build(); -// NPM terminates TLS and is the only way to reach the container (no port -// mapping in production). Without UseForwardedHeaders the app sees every request -// as HTTP and with the proxy IP instead of the client IP. -// KnownNetworks/KnownProxies are deliberately empty because only NPM reaches -// the container. +// NPM sits in front of the app and handles HTTPS. Without this line the app would +// think every request is plain HTTP and would see NPM's IP, not the visitor's. +// KnownNetworks/KnownProxies are left empty on purpose: only NPM reaches the app. app.UseForwardedHeaders( new ForwardedHeadersOptions { ForwardedHeaders = ForwardedHeaders.XForwardedFor | ForwardedHeaders.XForwardedProto }); -// Configure the HTTP request pipeline. if (app.Environment.IsDevelopment() is false) { app.UseExceptionHandler("/Error", createScopeForErrors: true); - // No UseHsts() and no UseHttpsRedirection(): NPM sets HSTS and terminates - // TLS. Both here would create a redirect loop behind the proxy. + // No UseHsts() and no UseHttpsRedirection() here: NPM already handles HTTPS. + // Adding them behind NPM would send the browser into a redirect loop. } -// No UseStatusCodePagesWithReExecute: the Router renders the NotFoundPage -// (Pages.NotFound) in process for both an unmatched route and an explicit -// NavigationManager.NotFound() from a component (see Routes.razor). Re-executing -// every error code to /not-found would also turn a 503 (content source down) into -// a "not found" page; leaving it out lets those components keep their own -// "temporarily unavailable" markup and 503 status. +// Don't add UseStatusCodePagesWithReExecute here. Blazor already shows its own +// not-found page. That middleware would catch *every* error code, so when PocketBase +// is down (a 503) it would wrongly show "not found" instead of our own message. app.UseAntiforgery(); app.MapStaticAssets(); app.MapRazorComponents(); -// Subscribable calendar feed of all events. A minimal API endpoint rather than -// a Razor page because it returns text/calendar, not HTML. Reads from PocketBase -// per request; an unreachable source yields an empty calendar, not a 500. +// Calendar feed people can subscribe to. It returns calendar data, not a web page, +// so it is a plain endpoint, not a Razor page. If PocketBase is down it returns an +// empty calendar rather than an error. app.MapGet("/events.ics", async (PocketBaseClient pocketBase, CancellationToken token) => { IReadOnlyList events; @@ -67,4 +65,16 @@ app.MapGet("/events.ics", async (PocketBaseClient pocketBase, CancellationToken return Results.Text(IcsCalendar.Build(events), "text/calendar; charset=utf-8"); }); +// Status page for an outside monitor (Uptime Kuma) to check. One check tells all +// three states apart: no reply = the app is down, 503 = the app runs but PocketBase +// is down, 200 = both are fine. It talks to PocketBase directly, not through the +// page-rendering code, so it can still report when that code is the thing failing. +app.MapGet("/health", async (PocketBaseClient pocketBase, CancellationToken token) => + await pocketBase.IsHealthyAsync(token) + ? Results.Text("healthy", "text/plain; charset=utf-8") + : Results.Text( + "PocketBase unreachable", + "text/plain; charset=utf-8", + statusCode: StatusCodes.Status503ServiceUnavailable)); + app.Run(); diff --git a/compose.yaml b/compose.yaml index b207665..4574716 100644 --- a/compose.yaml +++ b/compose.yaml @@ -3,8 +3,12 @@ # # The two `ports:` blocks below are TEMPORARY. The target state is NPM in front: # NPM terminates TLS and is the only path to the web app, and the editors reach -# PocketBase through an NPM subdomain -- then both port mappings go away (#9). While -# NPM is not set up yet, the ports are the only way onto the site and the admin UI. +# PocketBase through an NPM subdomain (#9). NPM still needs a target address and +# port, so a port stays reachable either way -- the plan is to reach the containers +# by name over a shared Docker network (e.g. eb-blazor:8080) instead of publishing +# them on the LAN, and to drop these host mappings that expose the site and admin UI +# to anyone on the LAN. While NPM is not set up yet, these mappings are the only way +# onto the site and the admin UI. # # For local development use the dev overlay on top, which adds host ports and builds # the web image from source: @@ -31,8 +35,9 @@ services: - /mnt/user/appdata/pocketbase/pb_data:/pb_data ports: # TEMPORARY: exposes the admin UI on the LAN (http://:8090/_/) while - # NPM is not in front yet. Remove once the editors reach PocketBase through an - # NPM subdomain (#9) -- until then the admin has no other way in. + # NPM is not in front yet. Replace once the editors reach PocketBase through an + # NPM subdomain (#9): NPM points at eb-pocketbase:8090 over a shared network, so + # this host mapping can go -- until then the admin has no other way in. - "8090:8090" healthcheck: # The image ships this endpoint; the web app waits for it to pass. @@ -55,6 +60,7 @@ services: PocketBase__BaseUrl: http://eb-pocketbase:8090 ports: # TEMPORARY: reach the site on the LAN (http://:5000) while NPM is not - # in front yet. Replace with the external npm network once NPM terminates TLS - # and is the only path in (#9). + # in front yet. Replace once NPM terminates TLS and fronts the site (#9): join + # the external NPM network and let NPM point at eb-blazor:8080 by name, so this + # host mapping can go and the site is no longer open on the LAN. - "5000:8080" From 4fa17429b56d2eccd6fd432f5e6a93f5362f7880 Mon Sep 17 00:00:00 2001 From: tleininger Date: Wed, 30 Sep 2026 21:33:26 +0200 Subject: [PATCH 08/13] Read heading and intro from the pages record on /posts and /events --- Elternbeirat.Web.Tests/PocketBaseFixture.cs | 16 ++++++++++++++++ Elternbeirat.Web.Tests/RouteSmokeTests.cs | 18 ++++++++++++++++++ .../Features/Events/EventList.razor | 15 +++++++++++++-- .../Features/Events/EventList.razor.cs | 14 +++++++++++++- Elternbeirat.Web/Features/Posts/PostList.razor | 15 +++++++++++++-- .../Features/Posts/PostList.razor.cs | 14 +++++++++++++- pb/pb_migrations/1727200000_dev_seed.js | 2 +- 7 files changed, 87 insertions(+), 7 deletions(-) diff --git a/Elternbeirat.Web.Tests/PocketBaseFixture.cs b/Elternbeirat.Web.Tests/PocketBaseFixture.cs index ccba604..4f152de 100644 --- a/Elternbeirat.Web.Tests/PocketBaseFixture.cs +++ b/Elternbeirat.Web.Tests/PocketBaseFixture.cs @@ -255,6 +255,22 @@ public sealed class PocketBaseFixture : IAsyncLifetime title = "Downloads", body = "# Downloads", location = "header", order = 5, slug = "downloads", embed = Array.Empty(), @public = true, }); + // Page records for the posts and events lists. Routes /posts and /events are + // served by PostList and EventList, which read these records for their heading + // and intro (title + body) and render the list themselves, just like FaqList. + // The body carries no "# heading": the title already renders as the h1. + await CreateRecordAsync(http, "pages", new + { + title = "Beiträge", body = "Neuigkeiten aus dem Elternbeirat.", + location = "header", + order = 6, slug = "posts", embed = Array.Empty(), @public = true, + }); + await CreateRecordAsync(http, "pages", new + { + title = "Termine", body = "Sitzungen und Veranstaltungen auf einen Blick.", + location = "header", + order = 7, slug = "events", embed = Array.Empty(), @public = true, + }); // A plain content page reached only by its slug (not shown in the header), // so the catch-all "/{slug}" ContentPage route stays covered. It carries a // valid location because the field is required; footer keeps it low-key. diff --git a/Elternbeirat.Web.Tests/RouteSmokeTests.cs b/Elternbeirat.Web.Tests/RouteSmokeTests.cs index 152c80b..d483a2f 100644 --- a/Elternbeirat.Web.Tests/RouteSmokeTests.cs +++ b/Elternbeirat.Web.Tests/RouteSmokeTests.cs @@ -140,6 +140,24 @@ public sealed class RouteSmokeTests : IDisposable html.ShouldContain("Förderverein"); // the page body, rendered from Markdown } + [Fact] + public async Task Posts_and_events_render_their_page_heading_and_body() + { + // /posts and /events are served by PostList and EventList, which -- like + // FaqList -- read their own "posts"/"events" page record for heading and + // intro instead of hard-coding them. Assert both the title (as the h1) and + // the body text from the fixture records reach the markup. + var client = _factory.CreateClient(); + + var posts = await client.GetStringAsync(new Uri("/posts", UriKind.Relative)); + posts.ShouldContain("Beiträge"); // heading from the page title + posts.ShouldContain("Neuigkeiten aus dem Elternbeirat."); // the page body + + var events = await client.GetStringAsync(new Uri("/events", UriKind.Relative)); + events.ShouldContain("Termine"); // heading from the page title + events.ShouldContain("Sitzungen und Veranstaltungen auf einen Blick."); // the page body + } + [Fact] public async Task Health_returns_200_when_PocketBase_is_reachable() { diff --git a/Elternbeirat.Web/Features/Events/EventList.razor b/Elternbeirat.Web/Features/Events/EventList.razor index 465608e..3a78f04 100644 --- a/Elternbeirat.Web/Features/Events/EventList.razor +++ b/Elternbeirat.Web/Features/Events/EventList.razor @@ -1,8 +1,19 @@ @page "/events" -Termine +@{ + // Heading and intro come from the "events" page record; fall back to a sensible + // default only if that record is missing, so the page still renders. + var title = _page?.Title ?? "Termine"; +} -

Termine

+@title + +

@title

+ +@if (_page is not null && !string.IsNullOrWhiteSpace(_page.Body)) +{ +
@Body
+} @if (_unavailable) { diff --git a/Elternbeirat.Web/Features/Events/EventList.razor.cs b/Elternbeirat.Web/Features/Events/EventList.razor.cs index c358748..2c6417d 100644 --- a/Elternbeirat.Web/Features/Events/EventList.razor.cs +++ b/Elternbeirat.Web/Features/Events/EventList.razor.cs @@ -23,6 +23,11 @@ public partial class EventList [CascadingParameter] private HttpContext? HttpContext { get; set; } + // The "events" page record supplies the heading and intro text, so an editor + // owns them in PocketBase like every other page, instead of them being + // hard-coded here. Null until loaded, or when no such page exists. + private Page? _page; + private IReadOnlyList _upcomingEvents = []; private IReadOnlyList _pastEvents = []; @@ -31,12 +36,19 @@ public partial class EventList // 503 this sets on the response. private bool _unavailable; + // The page body rendered from Markdown to HTML, ready to emit as a MarkupString. + private MarkupString Body => (MarkupString)Markdown.ToHtml(_page?.Body); + protected override async Task OnInitializedAsync() { IReadOnlyList events; try { - events = await PocketBase.GetEventsAsync(HttpContext?.RequestAborted ?? CancellationToken.None); + var token = HttpContext?.RequestAborted ?? CancellationToken.None; + var pages = await PocketBase.GetPagesAsync(token); + _page = pages.FirstOrDefault( + page => string.Equals(page.Slug, "events", StringComparison.OrdinalIgnoreCase)); + events = await PocketBase.GetEventsAsync(token); } catch (PocketBaseUnavailableException exception) { diff --git a/Elternbeirat.Web/Features/Posts/PostList.razor b/Elternbeirat.Web/Features/Posts/PostList.razor index 071d4e7..bbdd30f 100644 --- a/Elternbeirat.Web/Features/Posts/PostList.razor +++ b/Elternbeirat.Web/Features/Posts/PostList.razor @@ -1,8 +1,19 @@ @page "/posts" -Beiträge +@{ + // Heading and intro come from the "posts" page record; fall back to a sensible + // default only if that record is missing, so the page still renders. + var title = _page?.Title ?? "Beiträge"; +} -

Beiträge

+@title + +

@title

+ +@if (_page is not null && !string.IsNullOrWhiteSpace(_page.Body)) +{ +
@Body
+} @if (_unavailable) { diff --git a/Elternbeirat.Web/Features/Posts/PostList.razor.cs b/Elternbeirat.Web/Features/Posts/PostList.razor.cs index 979e6c4..c72dba5 100644 --- a/Elternbeirat.Web/Features/Posts/PostList.razor.cs +++ b/Elternbeirat.Web/Features/Posts/PostList.razor.cs @@ -23,6 +23,11 @@ public partial class PostList [CascadingParameter] private HttpContext? HttpContext { get; set; } + // The "posts" page record supplies the heading and intro text, so an editor owns + // them in PocketBase like every other page, instead of them being hard-coded here. + // Null until loaded, or when no such page exists. + private Page? _page; + private IReadOnlyList _posts = []; // Set when the content source could not be reached or read. The markup then @@ -30,11 +35,18 @@ public partial class PostList // 503 this sets on the response. private bool _unavailable; + // The page body rendered from Markdown to HTML, ready to emit as a MarkupString. + private MarkupString Body => (MarkupString)Markdown.ToHtml(_page?.Body); + protected override async Task OnInitializedAsync() { try { - _posts = await PocketBase.GetPostsAsync(HttpContext?.RequestAborted ?? CancellationToken.None); + var token = HttpContext?.RequestAborted ?? CancellationToken.None; + var pages = await PocketBase.GetPagesAsync(token); + _page = pages.FirstOrDefault( + page => string.Equals(page.Slug, "posts", StringComparison.OrdinalIgnoreCase)); + _posts = await PocketBase.GetPostsAsync(token); } catch (PocketBaseUnavailableException exception) { diff --git a/pb/pb_migrations/1727200000_dev_seed.js b/pb/pb_migrations/1727200000_dev_seed.js index 0d9a03e..87e2f5f 100644 --- a/pb/pb_migrations/1727200000_dev_seed.js +++ b/pb/pb_migrations/1727200000_dev_seed.js @@ -21,7 +21,7 @@ migrate((app) => { const schema = JSON.parse(toString($os.readFile("/pb_migrations/collections_schema.json"))) const records = { - pages: [{"body":"# Vorstandsteam\n\nDer Elternbeirat der IGMH vertritt die Interessen aller Eltern gegenüber der Schulleitung und dem Kollegium. Wir treffen uns regelmäßig, bringen Anliegen aus der Elternschaft ein und begleiten das Schulleben aktiv.\n\n## Vorstand\n\n- **Vorsitz** — Anke Berger\n- **Stellvertretung** — Murat Yılmaz\n- **Kasse** — Sabine Krause\n- **Schriftführung** — Thomas Heinrich\n\n## So erreichen Sie uns\n\nAm schnellsten per Mail über unsere [Kontaktseite](/contact). Zu unseren öffentlichen Sitzungen sind alle Eltern herzlich eingeladen — die Termine finden Sie unter [Termine](/events).","embed":[],"location":"header","order":2,"public":true,"slug":"board","title":"Vorstandsteam"},{"body":"# Förderverein\n\nDer Förderverein der IGMH unterstützt Projekte, für die im regulären Schulhaushalt kein Geld vorgesehen ist: von der Ausstattung der Bibliothek über Pausenspielgeräte bis zu Zuschüssen für Klassenfahrten, damit kein Kind aus finanziellen Gründen zurückbleibt.\n\n## Mitglied werden\n\nDer Jahresbeitrag beträgt 24 € — jeder Euro fließt direkt in die Arbeit an der Schule. Den Aufnahmeantrag finden Sie unter [Downloads](/downloads).\n\n## Spenden\n\nSpenden sind jederzeit willkommen und werden auf Wunsch mit einer Zuwendungsbestätigung quittiert. Sprechen Sie uns über die [Kontaktseite](/contact) an.","embed":[],"location":"header","order":3,"public":true,"slug":"patrons","title":"Förderverein"},{"body":"Auf dieser Seite haben wir die Fragen zusammengetragen, die uns am häufigsten erreichen.\n\nIhre Frage ist nicht dabei? Schreiben Sie uns über die [Kontaktseite](/contact) – wir helfen gern weiter.","embed":[],"location":"header","order":6,"public":true,"slug":"faqs","title":"FAQs"},{"body":"# Downloads\n\nFormulare und Dokumente zum Herunterladen:\n\n- Aufnahmeantrag Förderverein\n- Einzugsermächtigung\n- Erstattungsformular Klassenkasse\n\nFehlt ein Dokument? Melden Sie sich über die [Kontaktseite](/contact).","embed":[],"location":"header","order":7,"public":true,"slug":"downloads","title":"Downloads"},{"body":"# Kontakt\n\nSie erreichen den Elternbeirat der IGMH per E-Mail:\n\n**kontakt@elternbeirat-igmh.info**\n\nWir antworten in der Regel innerhalb weniger Tage. Bei dringenden schulischen Angelegenheiten wenden Sie sich bitte direkt an das Sekretariat der Schule.","embed":[],"location":"footer","order":1,"public":true,"slug":"contact","title":"Kontakt"},{"body":"# Impressum\n\nAngaben gemäß § 5 DDG\n\n**Elternbeirat der IGMH**\nVertreten durch den Vorstand\n\nKontakt: siehe [Kontaktseite](/contact)\n\nVerantwortlich für den Inhalt nach § 18 Abs. 2 MStV: der Vorstand des Elternbeirats.","embed":[],"location":"footer","order":2,"public":true,"slug":"imprint","title":"Impressum"},{"body":"# Datenschutz\n\nDer Schutz Ihrer Daten ist uns wichtig. Diese Website kommt ohne externe Dienste aus: keine Analysewerkzeuge, keine eingebundenen Karten oder Videos, keine Schriften von fremden Servern.\n\n## Server-Logs\n\nBeim Aufruf werden technisch notwendige Zugriffsdaten (IP-Adresse, Zeitpunkt, aufgerufene Seite) kurzzeitig verarbeitet, um den Betrieb sicherzustellen. Eine Zusammenführung mit anderen Daten findet nicht statt.\n\n## Ihre Rechte\n\nFragen zum Datenschutz richten Sie bitte an die [Kontaktseite](/contact).","embed":[],"location":"footer","order":3,"public":true,"slug":"privacy","title":"Datenschutz"},{"body":"# Willkommen beim Elternbeirat der IGMH","embed":["posts","events"],"location":"header","order":1,"public":true,"slug":"home","title":"Start"},{"body":"# Beiträge","embed":[],"location":"header","order":4,"public":true,"slug":"posts","title":"Beiträge"},{"body":"# Termine","embed":[],"location":"header","order":5,"public":true,"slug":"events","title":"Termine"}] + pages: [{"body":"# Vorstandsteam\n\nDer Elternbeirat der IGMH vertritt die Interessen aller Eltern gegenüber der Schulleitung und dem Kollegium. Wir treffen uns regelmäßig, bringen Anliegen aus der Elternschaft ein und begleiten das Schulleben aktiv.\n\n## Vorstand\n\n- **Vorsitz** — Anke Berger\n- **Stellvertretung** — Murat Yılmaz\n- **Kasse** — Sabine Krause\n- **Schriftführung** — Thomas Heinrich\n\n## So erreichen Sie uns\n\nAm schnellsten per Mail über unsere [Kontaktseite](/contact). Zu unseren öffentlichen Sitzungen sind alle Eltern herzlich eingeladen — die Termine finden Sie unter [Termine](/events).","embed":[],"location":"header","order":2,"public":true,"slug":"board","title":"Vorstandsteam"},{"body":"# Förderverein\n\nDer Förderverein der IGMH unterstützt Projekte, für die im regulären Schulhaushalt kein Geld vorgesehen ist: von der Ausstattung der Bibliothek über Pausenspielgeräte bis zu Zuschüssen für Klassenfahrten, damit kein Kind aus finanziellen Gründen zurückbleibt.\n\n## Mitglied werden\n\nDer Jahresbeitrag beträgt 24 € — jeder Euro fließt direkt in die Arbeit an der Schule. Den Aufnahmeantrag finden Sie unter [Downloads](/downloads).\n\n## Spenden\n\nSpenden sind jederzeit willkommen und werden auf Wunsch mit einer Zuwendungsbestätigung quittiert. Sprechen Sie uns über die [Kontaktseite](/contact) an.","embed":[],"location":"header","order":3,"public":true,"slug":"patrons","title":"Förderverein"},{"body":"Auf dieser Seite haben wir die Fragen zusammengetragen, die uns am häufigsten erreichen.\n\nIhre Frage ist nicht dabei? Schreiben Sie uns über die [Kontaktseite](/contact) – wir helfen gern weiter.","embed":[],"location":"header","order":6,"public":true,"slug":"faqs","title":"FAQs"},{"body":"# Downloads\n\nFormulare und Dokumente zum Herunterladen:\n\n- Aufnahmeantrag Förderverein\n- Einzugsermächtigung\n- Erstattungsformular Klassenkasse\n\nFehlt ein Dokument? Melden Sie sich über die [Kontaktseite](/contact).","embed":[],"location":"header","order":7,"public":true,"slug":"downloads","title":"Downloads"},{"body":"# Kontakt\n\nSie erreichen den Elternbeirat der IGMH per E-Mail:\n\n**kontakt@elternbeirat-igmh.info**\n\nWir antworten in der Regel innerhalb weniger Tage. Bei dringenden schulischen Angelegenheiten wenden Sie sich bitte direkt an das Sekretariat der Schule.","embed":[],"location":"footer","order":1,"public":true,"slug":"contact","title":"Kontakt"},{"body":"# Impressum\n\nAngaben gemäß § 5 DDG\n\n**Elternbeirat der IGMH**\nVertreten durch den Vorstand\n\nKontakt: siehe [Kontaktseite](/contact)\n\nVerantwortlich für den Inhalt nach § 18 Abs. 2 MStV: der Vorstand des Elternbeirats.","embed":[],"location":"footer","order":2,"public":true,"slug":"imprint","title":"Impressum"},{"body":"# Datenschutz\n\nDer Schutz Ihrer Daten ist uns wichtig. Diese Website kommt ohne externe Dienste aus: keine Analysewerkzeuge, keine eingebundenen Karten oder Videos, keine Schriften von fremden Servern.\n\n## Server-Logs\n\nBeim Aufruf werden technisch notwendige Zugriffsdaten (IP-Adresse, Zeitpunkt, aufgerufene Seite) kurzzeitig verarbeitet, um den Betrieb sicherzustellen. Eine Zusammenführung mit anderen Daten findet nicht statt.\n\n## Ihre Rechte\n\nFragen zum Datenschutz richten Sie bitte an die [Kontaktseite](/contact).","embed":[],"location":"footer","order":3,"public":true,"slug":"privacy","title":"Datenschutz"},{"body":"# Willkommen beim Elternbeirat der IGMH","embed":["posts","events"],"location":"header","order":1,"public":true,"slug":"home","title":"Start"},{"body":"Neuigkeiten aus dem Elternbeirat: Berichte aus den Sitzungen, Ankündigungen und Wissenswertes rund um die Elternarbeit an der IGMH. Die neuesten Beiträge stehen oben.","embed":[],"location":"header","order":4,"public":true,"slug":"posts","title":"Beiträge"},{"body":"Sitzungen des Elternbeirats, Schulveranstaltungen und weitere Termine, die für Eltern wichtig sind.","embed":[],"location":"header","order":5,"public":true,"slug":"events","title":"Termine"}] , posts: [{"body":"## Neuer Vorstand gewählt\n\nAuf der Mitgliederversammlung wurde der Vorstand des Elternbeirats für das Schuljahr **2026/27** neu gewählt. Wir danken dem bisherigen Team für sein Engagement und freuen uns auf die gemeinsame Arbeit.\n\nDie neuen Ansprechpartnerinnen und Ansprechpartner finden Sie auf der Seite [Vorstandsteam](/board).","date":"2026-09-24 18:00:00.000Z","public":true,"slug":"new-board-2026","title":"Neuer Vorstand für das Schuljahr 2026/27 gewählt"},{"body":"## Herbstbasar am 22. November\n\nAm **22. November** findet wieder unser beliebter Herbstbasar statt. Es gibt selbst gebackene Kuchen, Bastelstände und ein Bühnenprogramm der Klassen.\n\nWer einen Stand betreuen oder etwas beisteuern möchte, meldet sich bitte bis zum 10. November über das [Kontaktformular](/contact) an. Wir freuen uns über jede helfende Hand!","date":"2026-09-18 09:30:00.000Z","public":true,"slug":"herbstbasar-2026","title":"Herbstbasar am 22. November – jetzt anmelden"},{"body":"## Mehr Auswahl beim Mittagessen\n\nAb den Herbstferien erweitert der Caterer das Angebot in der Mensa: Es gibt künftig **täglich ein zusätzliches vegetarisches Gericht** sowie eine größere Salatauswahl.\n\nRückmeldungen zum Essen nehmen wir gerne über den Elternbeirat auf – sprechen Sie uns an.","date":"2026-09-10 12:15:00.000Z","public":true,"slug":"mensa-mehr-auswahl","title":"Mehr Auswahl beim Mittagessen ab den Herbstferien"},{"body":"## Besuchen Sie unseren Stand\n\nAm kommenden **Elternsprechtag** ist der Elternbeirat mit einem Info-Stand im Foyer vertreten. Kommen Sie vorbei – wir beantworten Fragen rund um die Elternarbeit und freuen uns über neue Mitstreiterinnen und Mitstreiter.\n\nAlle Termine finden Sie unter [Termine](/events).","date":"2026-09-02 08:00:00.000Z","public":true,"slug":"elternsprechtag-stand","title":"Elternbeirat am Elternsprechtag – besuchen Sie unseren Stand"},{"body":"## Neue Spielgeräte für den Pausenhof\n\nDank der Einnahmen aus dem letzten Basar und der Unterstützung des [Fördervereins](/patrons) konnten neue Spielgeräte für den Pausenhof angeschafft werden.\n\nDie Kinder haben die Klettergerüste bereits begeistert in Beschlag genommen.","date":"2026-08-28 16:45:00.000Z","public":true,"slug":"neue-spielgeraete","title":"Neue Spielgeräte für den Pausenhof"}] , From 43e6ed77437d92f7c9f0007145766096352275cd Mon Sep 17 00:00:00 2001 From: tleininger Date: Wed, 30 Sep 2026 21:52:59 +0200 Subject: [PATCH 09/13] Unify post and event cards to one style on the home page --- .../Features/Embeds/EventsEmbed.razor | 15 ++-- .../Features/Embeds/PostsEmbed.razor | 7 +- .../Features/Events/EventDate.razor.css | 9 +++ .../Features/Events/EventList.razor | 36 +++++----- .../Features/Posts/PostList.razor | 6 +- Elternbeirat.Web/wwwroot/app.css | 70 ++++++------------- 6 files changed, 67 insertions(+), 76 deletions(-) create mode 100644 Elternbeirat.Web/Features/Events/EventDate.razor.css diff --git a/Elternbeirat.Web/Features/Embeds/EventsEmbed.razor b/Elternbeirat.Web/Features/Embeds/EventsEmbed.razor index 6cdc561..54818cb 100644 --- a/Elternbeirat.Web/Features/Embeds/EventsEmbed.razor +++ b/Elternbeirat.Web/Features/Embeds/EventsEmbed.razor @@ -7,15 +7,16 @@ @foreach (var ev in _upcomingEvents) {
  • - - @ev.Title - @if (!string.IsNullOrWhiteSpace(ev.Location)) - { - @ev.Location - } + + @ev.Title + + @if (!string.IsNullOrWhiteSpace(ev.Location)) + { + @ev.Location + } +
  • } -

    Alle Termine

    } diff --git a/Elternbeirat.Web/Features/Embeds/PostsEmbed.razor b/Elternbeirat.Web/Features/Embeds/PostsEmbed.razor index f50c856..dbb81d2 100644 --- a/Elternbeirat.Web/Features/Embeds/PostsEmbed.razor +++ b/Elternbeirat.Web/Features/Embeds/PostsEmbed.razor @@ -7,11 +7,12 @@ @foreach (var post in _latest) {
  • - @post.Title - + + @post.Title + +
  • } -

    Alle Beiträge

    } diff --git a/Elternbeirat.Web/Features/Events/EventDate.razor.css b/Elternbeirat.Web/Features/Events/EventDate.razor.css new file mode 100644 index 0000000..dc6f9c4 --- /dev/null +++ b/Elternbeirat.Web/Features/Events/EventDate.razor.css @@ -0,0 +1,9 @@ +/* The date's own look: small and softened, matching so post and event + cards read as one style. Lives with the component so every place that renders + (list, home embed) shows the date the same way. Positioning (margin + to neighbours) is NOT set here -- that is the surrounding list's job. */ +time { + display: block; + color: var(--color-text-soft); /* token, so it adapts in dark mode */ + font-size: 0.85rem; +} diff --git a/Elternbeirat.Web/Features/Events/EventList.razor b/Elternbeirat.Web/Features/Events/EventList.razor index 3a78f04..3193cdf 100644 --- a/Elternbeirat.Web/Features/Events/EventList.razor +++ b/Elternbeirat.Web/Features/Events/EventList.razor @@ -39,16 +39,18 @@ else @foreach (var ev in _upcomingEvents) {
  • - - @ev.Title - @if (!string.IsNullOrWhiteSpace(ev.Location)) - { - @ev.Location - } - @if (!string.IsNullOrWhiteSpace(ev.Note)) - { -

    @ev.Note

    - } + + @ev.Title + + @if (!string.IsNullOrWhiteSpace(ev.Location)) + { + @ev.Location + } + @if (!string.IsNullOrWhiteSpace(ev.Note)) + { +

    @ev.Note

    + } +
  • } @@ -61,12 +63,14 @@ else @foreach (var ev in _pastEvents) {
  • - - @ev.Title - @if (!string.IsNullOrWhiteSpace(ev.Location)) - { - @ev.Location - } + + @ev.Title + + @if (!string.IsNullOrWhiteSpace(ev.Location)) + { + @ev.Location + } +
  • } diff --git a/Elternbeirat.Web/Features/Posts/PostList.razor b/Elternbeirat.Web/Features/Posts/PostList.razor index bbdd30f..a879961 100644 --- a/Elternbeirat.Web/Features/Posts/PostList.razor +++ b/Elternbeirat.Web/Features/Posts/PostList.razor @@ -29,8 +29,10 @@ else @foreach (var post in _posts) {
  • - @post.Title - + + @post.Title + +
  • } diff --git a/Elternbeirat.Web/wwwroot/app.css b/Elternbeirat.Web/wwwroot/app.css index 64a2b73..d77750e 100644 --- a/Elternbeirat.Web/wwwroot/app.css +++ b/Elternbeirat.Web/wwwroot/app.css @@ -219,7 +219,6 @@ h1:focus { background: var(--color-bg); border-radius: var(--radius); box-shadow: var(--shadow); - padding: var(--space-3) var(--space-4); transition: box-shadow var(--transition); } @@ -228,6 +227,16 @@ h1:focus { box-shadow: var(--shadow-hover); } +/* The whole card is one link. The fills the card and carries the padding (so + the entire surface is clickable, not just the text), and resets link colour and + underline so the content inside -- title, date, location -- keeps its own look. */ +.card-link { + display: block; + padding: var(--space-3) var(--space-4); + color: inherit; + text-decoration: none; +} + /* FAQ topics: each is a collapsible card. Its summary is the topic heading; open it to reveal the optional intro and the questions (themselves collapsible .faq-item cards). The topic marker is a rotating triangle, distinct from the +/- on the @@ -280,41 +289,28 @@ h1:focus { color: var(--color-text-soft); } -/* Posts */ -.post-list a { - font-size: 1.15rem; - font-weight: 600; - text-decoration: none; -} - -/* The date's look (small, softened) comes from PostDate.razor.css. Here only the - list-specific spacing: nudge the date down from the post's title link above. */ -.post-list time { - margin-top: var(--space-1); -} - -/* Events: the date leads in the warm accent colour. */ -.event-list time { - display: block; - color: var(--color-accent-dark); - font-weight: 600; - font-size: 0.9rem; -} - +/* Post and event cards are built the same way, so they read as one style on the + home page where both appear: the title leads in the brand colour (the whole card + is the link, so the title itself is plain text), the date sits quietly beneath. */ +.post-title, .event-title { display: block; - margin-top: var(--space-1); font-size: 1.15rem; font-weight: 600; color: var(--color-brand); } -.event-location::before { - content: " · "; - color: var(--color-text-soft); +/* The date's small, softened look comes from PostDate.razor.css / EventDate; here + only the shared spacing: nudge it down from the title above. */ +.post-list time, +.event-list time { + margin-top: var(--space-1); } +/* The location sits on its own quiet line beneath the date. */ .event-location { + display: block; + margin-top: var(--space-1); color: var(--color-text-soft); } @@ -388,25 +384,3 @@ h1:focus { padding-top: var(--space-2); color: var(--color-text); } - -/* "Alle Beiträge/Termine/Fragen →" links below an embedded list on the home page. - Set apart from the cards with extra space above, and styled as a distinct call - to action in the accent colour rather than looking like body text. The arrow - nudges right on hover for a subtle bit of life. */ -.embed-more { - margin-top: var(--space-4); - max-width: none; /* override the global paragraph reading cap */ -} - -.embed-more a { - display: inline-flex; - align-items: center; - gap: var(--space-2); - font-weight: 600; - color: var(--color-accent-dark); - text-decoration: none; -} - -.embed-more a:hover { - color: var(--color-brand); -} From de319d3b00e2bd521f0a85c5ecced3b19063b582 Mon Sep 17 00:00:00 2001 From: tleininger Date: Wed, 30 Sep 2026 22:43:47 +0200 Subject: [PATCH 10/13] Replace placeholder posts with the real backup articles --- pb/pb_migrations/1727200000_dev_seed.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pb/pb_migrations/1727200000_dev_seed.js b/pb/pb_migrations/1727200000_dev_seed.js index 87e2f5f..4857cd1 100644 --- a/pb/pb_migrations/1727200000_dev_seed.js +++ b/pb/pb_migrations/1727200000_dev_seed.js @@ -21,9 +21,9 @@ migrate((app) => { const schema = JSON.parse(toString($os.readFile("/pb_migrations/collections_schema.json"))) const records = { - pages: [{"body":"# Vorstandsteam\n\nDer Elternbeirat der IGMH vertritt die Interessen aller Eltern gegenüber der Schulleitung und dem Kollegium. Wir treffen uns regelmäßig, bringen Anliegen aus der Elternschaft ein und begleiten das Schulleben aktiv.\n\n## Vorstand\n\n- **Vorsitz** — Anke Berger\n- **Stellvertretung** — Murat Yılmaz\n- **Kasse** — Sabine Krause\n- **Schriftführung** — Thomas Heinrich\n\n## So erreichen Sie uns\n\nAm schnellsten per Mail über unsere [Kontaktseite](/contact). Zu unseren öffentlichen Sitzungen sind alle Eltern herzlich eingeladen — die Termine finden Sie unter [Termine](/events).","embed":[],"location":"header","order":2,"public":true,"slug":"board","title":"Vorstandsteam"},{"body":"# Förderverein\n\nDer Förderverein der IGMH unterstützt Projekte, für die im regulären Schulhaushalt kein Geld vorgesehen ist: von der Ausstattung der Bibliothek über Pausenspielgeräte bis zu Zuschüssen für Klassenfahrten, damit kein Kind aus finanziellen Gründen zurückbleibt.\n\n## Mitglied werden\n\nDer Jahresbeitrag beträgt 24 € — jeder Euro fließt direkt in die Arbeit an der Schule. Den Aufnahmeantrag finden Sie unter [Downloads](/downloads).\n\n## Spenden\n\nSpenden sind jederzeit willkommen und werden auf Wunsch mit einer Zuwendungsbestätigung quittiert. Sprechen Sie uns über die [Kontaktseite](/contact) an.","embed":[],"location":"header","order":3,"public":true,"slug":"patrons","title":"Förderverein"},{"body":"Auf dieser Seite haben wir die Fragen zusammengetragen, die uns am häufigsten erreichen.\n\nIhre Frage ist nicht dabei? Schreiben Sie uns über die [Kontaktseite](/contact) – wir helfen gern weiter.","embed":[],"location":"header","order":6,"public":true,"slug":"faqs","title":"FAQs"},{"body":"# Downloads\n\nFormulare und Dokumente zum Herunterladen:\n\n- Aufnahmeantrag Förderverein\n- Einzugsermächtigung\n- Erstattungsformular Klassenkasse\n\nFehlt ein Dokument? Melden Sie sich über die [Kontaktseite](/contact).","embed":[],"location":"header","order":7,"public":true,"slug":"downloads","title":"Downloads"},{"body":"# Kontakt\n\nSie erreichen den Elternbeirat der IGMH per E-Mail:\n\n**kontakt@elternbeirat-igmh.info**\n\nWir antworten in der Regel innerhalb weniger Tage. Bei dringenden schulischen Angelegenheiten wenden Sie sich bitte direkt an das Sekretariat der Schule.","embed":[],"location":"footer","order":1,"public":true,"slug":"contact","title":"Kontakt"},{"body":"# Impressum\n\nAngaben gemäß § 5 DDG\n\n**Elternbeirat der IGMH**\nVertreten durch den Vorstand\n\nKontakt: siehe [Kontaktseite](/contact)\n\nVerantwortlich für den Inhalt nach § 18 Abs. 2 MStV: der Vorstand des Elternbeirats.","embed":[],"location":"footer","order":2,"public":true,"slug":"imprint","title":"Impressum"},{"body":"# Datenschutz\n\nDer Schutz Ihrer Daten ist uns wichtig. Diese Website kommt ohne externe Dienste aus: keine Analysewerkzeuge, keine eingebundenen Karten oder Videos, keine Schriften von fremden Servern.\n\n## Server-Logs\n\nBeim Aufruf werden technisch notwendige Zugriffsdaten (IP-Adresse, Zeitpunkt, aufgerufene Seite) kurzzeitig verarbeitet, um den Betrieb sicherzustellen. Eine Zusammenführung mit anderen Daten findet nicht statt.\n\n## Ihre Rechte\n\nFragen zum Datenschutz richten Sie bitte an die [Kontaktseite](/contact).","embed":[],"location":"footer","order":3,"public":true,"slug":"privacy","title":"Datenschutz"},{"body":"# Willkommen beim Elternbeirat der IGMH","embed":["posts","events"],"location":"header","order":1,"public":true,"slug":"home","title":"Start"},{"body":"Neuigkeiten aus dem Elternbeirat: Berichte aus den Sitzungen, Ankündigungen und Wissenswertes rund um die Elternarbeit an der IGMH. Die neuesten Beiträge stehen oben.","embed":[],"location":"header","order":4,"public":true,"slug":"posts","title":"Beiträge"},{"body":"Sitzungen des Elternbeirats, Schulveranstaltungen und weitere Termine, die für Eltern wichtig sind.","embed":[],"location":"header","order":5,"public":true,"slug":"events","title":"Termine"}] + pages: [{"body":"Der Elternbeirat der IGMH vertritt die Interessen aller Eltern gegenüber der Schulleitung und dem Kollegium. Wir treffen uns regelmäßig, bringen Anliegen aus der Elternschaft ein und begleiten das Schulleben aktiv.\n\nDer Vorstand wurde am 13. November 2025 gewählt.\n\n## Vorsitz\n\n- **Maik Palm** (Vorsitzender) \n *Schulkonferenz, Mensarat, Homepage* \n Mitglied im Gesamtelternbeirat und im Schulbeirat der Stadt Mannheim.\n- **Gentiana Erol** (1. Stellvertreterin) \n *Schulkonferenz, Kommunikation Hausmeister, Mensarat*\n- **Raul Chira** (2. Stellvertreter) \n *Mensarat*\n\n## Schriftführung\n\n- **Marion Leininger** \n *Kasse, Schriftführung, Kontakt Förderverein*\n\n## Beisitz\n\n- **Jenny Reger-Stilgenbauer** \n *Schulkonferenz, Schaukasten*\n- **Mariella Ianello** \n *Mensarat, Kontakt Förderverein*\n- **Isabell Vesper**\n- **Susanne Naumburg** \n *Stellvertretende Schulkonferenz*\n- **Rebecca Goldmann**\n- **Michael Weber** \n *Stellvertretende Schulkonferenz*\n\n## So erreichen Sie uns\n\nAm schnellsten per Mail über unsere [Kontaktseite](/contact). Zu unseren öffentlichen Sitzungen sind alle Eltern herzlich eingeladen. Die Termine finden Sie unter [Termine](/events).","embed":[],"location":"header","order":2,"public":true,"slug":"board","title":"Vorstandsteam"},{"body":"Der Förderverein **„Freunde der IGMH e.V.\"** unterstützt die Schule seit 1975 bei Anschaffungen und Projekten, die aus dem regulären Schulbudget nicht finanziert werden können. Mehr als 500 Mitglieder aus Eltern, Lehrkräften, Ehemaligen und Förderern bringen sich mit Zeit, Ideen oder finanziellen Beiträgen ein.\n\nDer Förderverein ist ein eigenständiger, gemeinnützig anerkannter Verein und nicht Teil des Elternbeirats.\n\n## Was der Verein fördert\n\n- die pädagogische Arbeit und bessere Rahmenbedingungen an der Schule\n- musische, sportliche und kulturelle Projekte\n- Anschaffungen, die allen Schülerinnen und Schülern zugutekommen\n- Chancengerechtigkeit, damit kein Kind aus finanziellen Gründen zurückbleibt\n\n## Was bereits gefördert wurde\n\n- Rennräder, Bälle, Trikots sowie Sport- und Spielgeräte für AGs\n- Zuschüsse für Chorwochenenden und Kanutage\n- Unterstützung der Theater-AG\n- Veranstaltungstechnik und Musikinstrumente, zum Beispiel DJ-Mischpult und Klavier\n- Vor- und Mitfinanzierung der Schülerhandbücher\n- Kletterwand, Außenmöbel in den Innenhöfen, Sitzbänke im Schulhaus und Wasserspender im Mensabereich\n- Laptops und Tablets für den Unterricht\n\n## Mitglied werden\n\nMitglied werden kann, wer die Arbeit der Schule unterstützen möchte. Eine Mitgliedschaft ist bereits ab einem Jahresbeitrag von **10 €** möglich.\n\nDie Beitrittserklärung füllen Sie online beim Förderverein aus:\n[Zur Beitrittserklärung](https://easyverein.com/public/FDI/applicationform/21612)\n\n## Spenden\n\nSpenden sind jederzeit willkommen und werden auf Wunsch mit einer Zuwendungsbestätigung quittiert. Der Verein ist als gemeinnützig anerkannt. Wie Sie spenden können, erfahren Sie beim Förderverein.\n\n## Kontakt zum Förderverein\n\n**Freunde der IGMH e.V.** \nHerzogenriedstraße 50 \n68169 Mannheim \n(Fach 165)\n\nE-Mail: [foerderverein@igmh.de](mailto:foerderverein@igmh.de) \nWebsite: [foerderverein.igmh.de](https://foerderverein.igmh.de)","embed":[],"location":"header","order":3,"public":true,"slug":"patrons","title":"Förderverein"},{"body":"Auf dieser Seite haben wir die Fragen zusammengetragen, die uns am häufigsten erreichen.\n\nIhre Frage ist nicht dabei? Schreiben Sie uns über die [Kontaktseite](/contact) – wir helfen gern weiter.","embed":[],"location":"header","order":6,"public":true,"slug":"faqs","title":"FAQs"},{"body":"# Downloads\n\nFormulare und Dokumente zum Herunterladen:\n\n- Aufnahmeantrag Förderverein\n- Einzugsermächtigung\n- Erstattungsformular Klassenkasse\n\nFehlt ein Dokument? Melden Sie sich über die [Kontaktseite](/contact).","embed":[],"location":"header","order":7,"public":true,"slug":"downloads","title":"Downloads"},{"body":"# Kontakt\n\nSie erreichen den Elternbeirat der IGMH per E-Mail:\n\n**kontakt@elternbeirat-igmh.info**\n\nWir antworten in der Regel innerhalb weniger Tage. Bei dringenden schulischen Angelegenheiten wenden Sie sich bitte direkt an das Sekretariat der Schule.","embed":[],"location":"footer","order":1,"public":true,"slug":"contact","title":"Kontakt"},{"body":"# Impressum\n\nAngaben gemäß § 5 DDG\n\n**Elternbeirat der IGMH**\nVertreten durch den Vorstand\n\nKontakt: siehe [Kontaktseite](/contact)\n\nVerantwortlich für den Inhalt nach § 18 Abs. 2 MStV: der Vorstand des Elternbeirats.","embed":[],"location":"footer","order":2,"public":true,"slug":"imprint","title":"Impressum"},{"body":"# Datenschutz\n\nDer Schutz Ihrer Daten ist uns wichtig. Diese Website kommt ohne externe Dienste aus: keine Analysewerkzeuge, keine eingebundenen Karten oder Videos, keine Schriften von fremden Servern.\n\n## Server-Logs\n\nBeim Aufruf werden technisch notwendige Zugriffsdaten (IP-Adresse, Zeitpunkt, aufgerufene Seite) kurzzeitig verarbeitet, um den Betrieb sicherzustellen. Eine Zusammenführung mit anderen Daten findet nicht statt.\n\n## Ihre Rechte\n\nFragen zum Datenschutz richten Sie bitte an die [Kontaktseite](/contact).","embed":[],"location":"footer","order":3,"public":true,"slug":"privacy","title":"Datenschutz"},{"body":"# Willkommen beim Elternbeirat der IGMH","embed":["posts","events"],"location":"header","order":1,"public":true,"slug":"home","title":"Start"},{"body":"Neuigkeiten aus dem Elternbeirat: Berichte aus den Sitzungen, Ankündigungen und Wissenswertes rund um die Elternarbeit an der IGMH. Die neuesten Beiträge stehen oben.","embed":[],"location":"header","order":4,"public":true,"slug":"posts","title":"Beiträge"},{"body":"Sitzungen des Elternbeirats, Schulveranstaltungen und weitere Termine, die für Eltern wichtig sind.","embed":[],"location":"header","order":5,"public":true,"slug":"events","title":"Termine"}] , - posts: [{"body":"## Neuer Vorstand gewählt\n\nAuf der Mitgliederversammlung wurde der Vorstand des Elternbeirats für das Schuljahr **2026/27** neu gewählt. Wir danken dem bisherigen Team für sein Engagement und freuen uns auf die gemeinsame Arbeit.\n\nDie neuen Ansprechpartnerinnen und Ansprechpartner finden Sie auf der Seite [Vorstandsteam](/board).","date":"2026-09-24 18:00:00.000Z","public":true,"slug":"new-board-2026","title":"Neuer Vorstand für das Schuljahr 2026/27 gewählt"},{"body":"## Herbstbasar am 22. November\n\nAm **22. November** findet wieder unser beliebter Herbstbasar statt. Es gibt selbst gebackene Kuchen, Bastelstände und ein Bühnenprogramm der Klassen.\n\nWer einen Stand betreuen oder etwas beisteuern möchte, meldet sich bitte bis zum 10. November über das [Kontaktformular](/contact) an. Wir freuen uns über jede helfende Hand!","date":"2026-09-18 09:30:00.000Z","public":true,"slug":"herbstbasar-2026","title":"Herbstbasar am 22. November – jetzt anmelden"},{"body":"## Mehr Auswahl beim Mittagessen\n\nAb den Herbstferien erweitert der Caterer das Angebot in der Mensa: Es gibt künftig **täglich ein zusätzliches vegetarisches Gericht** sowie eine größere Salatauswahl.\n\nRückmeldungen zum Essen nehmen wir gerne über den Elternbeirat auf – sprechen Sie uns an.","date":"2026-09-10 12:15:00.000Z","public":true,"slug":"mensa-mehr-auswahl","title":"Mehr Auswahl beim Mittagessen ab den Herbstferien"},{"body":"## Besuchen Sie unseren Stand\n\nAm kommenden **Elternsprechtag** ist der Elternbeirat mit einem Info-Stand im Foyer vertreten. Kommen Sie vorbei – wir beantworten Fragen rund um die Elternarbeit und freuen uns über neue Mitstreiterinnen und Mitstreiter.\n\nAlle Termine finden Sie unter [Termine](/events).","date":"2026-09-02 08:00:00.000Z","public":true,"slug":"elternsprechtag-stand","title":"Elternbeirat am Elternsprechtag – besuchen Sie unseren Stand"},{"body":"## Neue Spielgeräte für den Pausenhof\n\nDank der Einnahmen aus dem letzten Basar und der Unterstützung des [Fördervereins](/patrons) konnten neue Spielgeräte für den Pausenhof angeschafft werden.\n\nDie Kinder haben die Klettergerüste bereits begeistert in Beschlag genommen.","date":"2026-08-28 16:45:00.000Z","public":true,"slug":"neue-spielgeraete","title":"Neue Spielgeräte für den Pausenhof"}] + posts: [{"body":"In fast allen Familien wird über die Handy-Nutzung diskutiert. Auch im schulischen Alltag ist das immer wieder ein Thema.\n\nSinnvolles und weniger Sinnvolles ist mit dem Handy möglich. Viele Jugendliche haben das Handy bis in die späten Abendstunden und über Nacht bei sich, was natürlich zur Nutzung verführt. Innerhalb der Familie dazu Regelungen zu finden, ist nicht einfach. Auch wir in der Schule kennen diese Gespräche.\n\nWir möchten Ihnen ein Angebot digitaler Elternmodule zu diesem Themenfeld vorstellen und kurz aus schulischer, sozialpädagogischer und strafrechtlicher Sicht zur Handynutzung informieren.\n\n**Dienstag, 18. Februar 2025 um 18 Uhr im Hörsaal 2.**\n\nBitte geben Sie kurz über die Klassenleitung Rückmeldung, dass Sie teilnehmen werden.","date":"2025-02-07 12:00:00.000Z","public":true,"slug":"elternabend-handy-nutzung","title":"Elternabend zur Handy-Nutzung"},{"body":"Am 8. Februar öffnete die IGMH ihre Türen für interessierte Eltern und Kinder, die sich einen Eindruck von unserer Schule verschaffen wollten. Besonders Eltern, die planen, ihre Kinder im kommenden Schuljahr anzumelden, konnten sich umfassend informieren und direkt einen Anmeldetermin vereinbaren.\n\n## Vielfältige Einblicke in das Schulleben\n\nAn verschiedenen Stationen lernten die Besucherinnen und Besucher das breite Angebot der IGMH kennen. Die Eliteschule des Sports präsentierte ihre Fördermöglichkeiten, und Schulhund Tonka ließ viele Kinderherzen höherschlagen. Auch der Elternbeirat und der Förderverein der IGMH informierten in der Aula über ihre Arbeit.\n\nFür die jungen Gäste gab es zahlreiche Mitmach-Aktionen:\n\n- Im römischen Zimmer konnten sie sich spielerisch mit der lateinischen Sprache beschäftigen.\n- Im Chemielabor wurden spannende Experimente durchgeführt.\n- Die Kletterwand war ein echter Publikumsmagnet, hier ging es unter professioneller Sicherung hoch hinaus.\n\n## Unterhaltung und kulinarische Highlights\n\n- Die Schülerband begeisterte das Publikum mit ihren Auftritten in der Aula.\n- Im Hörsaal 2 führten die 6. und 7. Klassen eine unterhaltsame Theateraufführung auf.\n- Für das leibliche Wohl war bestens gesorgt, ob im gemütlichen Schülercafé oder im Bistro Français.\n\nDer Tag der offenen Tür war ein voller Erfolg und lockte zahlreiche Besucherinnen und Besucher an. Die positive Resonanz zeigt, wie groß das Interesse an unserer Schule ist.","date":"2025-02-09 12:00:00.000Z","public":true,"slug":"tag-der-offenen-tuer-2025","title":"Rückblick: Tag der offenen Tür an der IGMH"},{"body":"Digitale Medien spielen eine zentrale Rolle im Alltag von Kindern und Jugendlichen, sei es das Smartphone, ein Tablet oder die Spielkonsole. Doch was machen junge Menschen eigentlich damit? Welcher Erwachsene weiß genau, was sich auf WhatsApp, Instagram oder Snapchat abspielt? Und was passiert auf TikTok? Wann wird ein Videospiel zur Sucht? Und welches Vorbild geben wir als Erwachsene ab, wenn auch unser eigener Alltag vom Smartphone bestimmt wird?\n\n## Digitaler Medienelternabend an der IGMH\n\nVor Kurzem fand an der IGMH ein digitaler Medienelternabend statt, der auf großes Interesse stieß. Frau Ruthig, stellvertretende Mittelstufenleiterin, führte in das Thema ein und beleuchtete die Herausforderungen der Mediennutzung.\n\nAnschließend erklärte Schulpolizist Herr Ebert die juristischen Aspekte. Dabei zeigte er auf, welche Möglichkeiten Eltern haben, wenn ihr Kind von Cybermobbing betroffen ist:\n\n- Gespräch mit Schule und Polizeibeamten\n- Gespräch mit dem Präventionsbeamten der Polizei\n- Durchführung eines Präventionstermins in der Klasse\n- Mit Einverständnis der Eltern des Täters: Gespräch mit dem Täter\n- Mit Einverständnis der Eltern des Täters: Gespräch mit Täter, Opfer, Eltern und Schule\n- Strafanzeige durch die Polizei\n\nWeiterführende Informationen zu Computerspielen finden Sie unter [usk.de](http://www.usk.de) (USK Unterhaltungssoftware) und [zavatar.de](http://www.zavatar.de).\n\n## Herausforderungen der Handynutzung aus sozialpädagogischer Sicht\n\nFrau Graske (Sozialpädagogin) stellte die Herausforderungen aus Sicht der Schulsozialarbeit dar und gab Eltern konkrete Tipps:\n\n**1. Bildschirmzeit im Blick behalten**\n\n**2. Handy am Abend außer Reichweite bringen.** Vereinbaren Sie einen festen Schlafplatz für das Handy und aktivieren Sie einen Ruhemodus.\n\n**3. Online-Kontakte des Kindes sensibel begleiten.** Lassen Sie sich Chat-Gruppen zeigen, schauen Sie gemeinsam das TikTok-Profil an und nutzen Sie Ratschläge von [Clemens hilft](https://www.clemenshilft.de/).\n\n**4. Bleiben Sie die wichtigste Ansprechperson für Ihr Kind.** Zeigen Sie, dass Ihr Kind Ihnen vertrauen kann, begründen Sie Ihre Maßnahmen und bleiben Sie offen für Fragen. Der [Mediennutzungsvertrag](https://www.mediennutzungsvertrag.de/) hilft bei klaren Absprachen.\n\n**5. Denken Sie auch an sich selbst.** Anerkennen Sie Ihren Einsatz, seien Sie nachsichtig mit sich, wenn Pläne nicht sofort aufgehen, und holen Sie sich bei Frustration Unterstützung.\n\n## Kontakt zur Schulsozialarbeit\n\nBei Fragen zur Handynutzung aus sozialpädagogischer Sicht können Sie sich an die Schulsozialarbeit der IGMH wenden (Raum CO.03).\n\n## Weitere hilfreiche Informationen\n\n1. [Klicksafe](https://www.klicksafe.de/), die EU-Initiative für mehr Sicherheit im Netz, unterstützt Eltern mit Informationen und Tipps zum kompetenten Umgang mit digitalen Medien.\n2. Der [Mediennutzungsvertrag](https://www.mediennutzungsvertrag.de/) hilft, gemeinsam mit dem Kind Regeln für die Mediennutzung festzulegen.","date":"2025-02-18 12:00:00.000Z","public":true,"slug":"digitale-medien-herausforderung","title":"Digitale Medien: Herausforderung für Jugendliche und Eltern"},{"body":"Kürzlich fand die Wahl des neuen Vorstands des Elternbeirats statt. Sie wurde notwendig, da mehrere Mitglieder aus dem Gremium ausgeschieden sind, unter anderem aufgrund eines Schulwechsels.\n\nLeider wurde die Wahl nur von wenigen Eltern besucht, was bedauerlich ist, da die Elternarbeit eine wichtige Rolle für unsere Schule spielt. Dennoch konnte die Wahl erfolgreich durchgeführt werden.\n\nGewählt wurde folgender Vorstand des Elternbeirats der IGMH:\n\n**Elternbeiratsvorsitz**\n\n- Dina Losert\n\n**Stellvertretende Elternbeiratsvorsitzende**\n\n- Bernhard Topschall\n- Maik Palm\n\n**Beisitzerinnen und Beisitzer**\n\n- Marielle Ianello\n- Gentiana Erol\n- Jenny Reger-Stilgenbauer\n- Michael Weber\n- Marion Leininger\n- Raul Chira\n\nAußerdem wurden die ständigen Mitglieder sowie deren Stellvertreterinnen und Stellvertreter für die Schulkonferenz gewählt. In der ersten Sitzung werden die konkreten Aufgaben verteilt, zum Beispiel die Vertretung im Mensarat oder im Förderverein.\n\nWir freuen uns auf eine engagierte und erfolgreiche Zusammenarbeit im Interesse aller Schülerinnen und Schüler.","date":"2025-02-26 12:00:00.000Z","public":true,"slug":"vorstand-gewaehlt-februar-2025","title":"Neuer Vorstand des Elternbeirats gewählt (Februar 2025)"},{"body":"Am 1. Oktober 2025 war es endlich so weit: Die IGMH feierte die Einweihung ihrer neuen Sporthalle. Oberbürgermeister Christian Specht übergab das moderne Gebäude im Wert von rund 23 Millionen Euro offiziell seiner Bestimmung. 3,85 Millionen Euro der Kosten wurden durch das Bundesprogramm „Sanierung kommunaler Einrichtungen\" gefördert.\n\nNach vielen Jahren des Wartens und Planens ist damit ein echtes Zukunftsprojekt für unsere Schule und die ganze Neckarstadt entstanden. Die alte Halle konnte aufgrund schwerer Bauschäden nicht mehr genutzt werden, so fiel die Entscheidung für einen kompletten Neubau.\n\nEntstanden ist eine helle, moderne und barrierefreie Sportanlage mit einer großen Dreifeldhalle und einer kleineren Einfeldhalle, die sowohl im Schulalltag als auch von Vereinen genutzt werden können. Eine Photovoltaikanlage, Dachbegrünung und moderne Wärmeschutztechnik sorgen dafür, dass auch das Thema Nachhaltigkeit nicht zu kurz kommt.\n\nAuch architektonisch ist die neue Halle ein Hingucker: viel Glas, ein elegantes Holztragwerk und eine dunkle Fassade, die sich harmonisch in den Herzogenriedpark einfügt. „Ein Leuchtturmprojekt für Bildung, Sport und Nachhaltigkeit\", betonte Oberbürgermeister Specht bei der Einweihung.\n\nDie Schülerinnen und Schüler dürfen sich auf ideale Bedingungen für Unterricht und Training freuen, und die IGMH kann stolz sein auf eine Sporthalle, die ihrem Namen als Eliteschule des Sports wirklich gerecht wird.","date":"2025-10-05 12:00:00.000Z","public":true,"slug":"neue-sporthalle-eroeffnet","title":"Neue Sporthalle feierlich eröffnet"},{"body":"Wir laden herzlich zur Vollversammlung des Elternbeirats der IGMH ein.\n\n**Datum:** Donnerstag, 13. November 2025\n**Uhrzeit:** 19:00 Uhr\n**Ort:** Hörsaal 2 der IGMH\n\n## Tagesordnung\n\n1. Begrüßung und Feststellung der Beschlussfähigkeit, Wahlleitung und Protokoll\n2. Vorstellung der Kandidatinnen und Kandidaten\n3. Wahl der Mitglieder des EBV-Vorstands\n4. Wahl der Mitglieder der Schulkonferenz\n5. Mitteilung über Änderung der Geschäftsordnung\n6. Schlusswort\n\n## Wir brauchen Sie\n\nZur Wahl stehen der Elternbeiratsvorstand, zwei stellvertretende Vorsitzende sowie Beisitzerinnen und Beisitzer. Als Beisitzerin oder Beisitzer nehmen Sie beispielsweise an den Sitzungen des Elternbeirats teil, die in der Regel alle ein bis zwei Monate stattfinden. Es gibt vielfältige Möglichkeiten, sich je nach zeitlicher Verfügbarkeit einzubringen. Jede Form der Unterstützung ist von großem Wert.\n\nFalls Sie Interesse haben, sich aufstellen zu lassen, oder Fragen zur Arbeit des Elternbeirats haben, melden Sie sich gerne vorab über die [Kontaktseite](/contact) oder sprechen Sie uns direkt am Wahlabend an.\n\nWir kommen hiermit einer Informationspflicht nach Punkt 9 der Geschäftsordnung nach:\n\n> Eine Änderung der Geschäftsordnung erfolgt durch Mehrheitsbeschluss des Vorstands. Die Information über die geänderte Geschäftsordnung erfolgt mit Veröffentlichung auf der Homepage des Elternbeirates und in der nächsten Elternbeiratssitzung.","date":"2025-10-24 12:00:00.000Z","public":true,"slug":"einladung-vollversammlung-2025","title":"Einladung zur Vollversammlung des Elternbeirats"},{"body":"Die Schule bietet ab sofort einen neuen Service an: Lost and Found, eine Fundstelle für verlorene Gegenstände.\n\nAb sofort gibt es eine digitale Möglichkeit, nach verlorenen Gegenständen zu suchen. Über 200 Fundsachen wurden fotografiert und in Bildergalerien nach Kategorien auf der Homepage der IGMH veröffentlicht.\n\nAlle Informationen und die Bilderstrecken finden Sie beim [Lost-and-Found-Service der IGMH](https://igmh.de/presse/fundsachen-bilder-durchklicken-verlorenes-wiederfinden).\n\nWer etwas auf den Fotos oder in der Beschreibung wiedererkennt, kann sich per E-Mail an [heike.scholz@igmh.de](mailto:heike.scholz@igmh.de) wenden.","date":"2025-10-29 12:00:00.000Z","public":true,"slug":"lost-and-found","title":"Lost and Found: Fundstelle für verlorene Gegenstände"},{"body":"Am 13. November 2025 fand die turnusmäßige Wahl des Elternbeirats der IGMH im Hörsaal 2 statt. Besetzt wurden der Vorstand, die Beisitzerinnen und Beisitzer, die Mitglieder der Schulkonferenz sowie zwei Kassenprüferinnen bzw. Kassenprüfer. Die Versammlung war mit 35 wahlberechtigten Elternvertreterinnen und Elternvertretern beschlussfähig.\n\nMit der Wahl beginnt die nächste Amtsperiode, in der die gewählten Mitglieder die Interessen der Eltern vertreten, die Zusammenarbeit mit der Schulleitung begleiten und Impulse für das Schulleben setzen. Im Anschluss wurden aktuelle Themen angesprochen, darunter die Pausenregelung, der Umgang mit Mobiltelefonen, der digitale Zugang zu Untis, die Situation der Schultoiletten sowie die Kommunikation zwischen Elternhaus und Schule.\n\n## Ergebnisse im Überblick\n\n**Vorstand Elternbeirat**\n\n- 1. Vorsitz: Maik Palm\n- Stellvertretung: Gentiana Erol\n- Stellvertretung: Raul Chira\n\n**Beisitzer**\n\n- Neu gewählt: Susanne Naumburg, Rebecca Goldmann, Isabell Vesper\n- Im Amt verbleibend: Mariella Ianello, Marion Leininger, Jenny Reger-Stilgenbauer, Michael Weber\n\n**Schulkonferenz**\n\n- Mitglied kraft Amtes: Maik Palm\n- Feste Sitze: Gentiana Erol, Tanja Engelhardt, Jenny Reger-Stilgenbauer\n- Ersatzmitglieder: Franziska Schaaf, Susanne Naumburg, Michael Weber, Cemile Ökzüz\n\n**Kassenprüfer**\n\n- Franziska Wieczorek\n- Michael Vokt\n\nDas ausführliche Protokoll steht im Downloadbereich zur Verfügung.","date":"2025-11-26 12:00:00.000Z","public":true,"slug":"vollversammlung-wahl-november-2025","title":"Vollversammlung des Elternbeirats: Wahl am 13. November 2025"},{"body":"Bitte unterstützen Sie das Schülercafé der IGMH mit Ihrer Stimme. Das Café soll verschönert und gemütlicher gestaltet werden, dafür zählt jede Stimme von Eltern und Unterstützern.\n\n**Hier können Sie abstimmen:** [zum Abstimmen beim Sparda-Impuls](https://www.spardaimpuls.de/projekte/68f9d6ec1d40df0c78f35285).\n\n## Dafür machen wir uns stark\n\nDas Schulcafé der IGMH ist ein Ort des Miteinanders. In den Mittagspausen verkaufen Schülerinnen und Schüler verschiedene gesunde Mittagssnacks, vom Sandwichtoast über Müsli bis zum Obstsalat, im Sommer darf es auch einmal ein Eis sein. Die helfenden Jugendlichen bekommen erste Einblicke in die gastronomische Arbeitswelt und engagieren sich für die Gemeinschaft.\n\nDie Überschüsse aus dem Verkauf fließen in ein Projekt, das Schülerinnen und Schüler bei der Finanzierung von Klassenfahrten unterstützt, die finanziell belastet sind und nicht von Bildung und Teilhabe profitieren können. Um dieses Projekt aufrechterhalten zu können, bewerben wir uns beim Sparda-Impuls.","date":"2025-11-12 12:00:00.000Z","public":true,"slug":"schulcafe-sparda-impuls-abstimmung","title":"Stimmen Sie für das Schulcafé beim Sparda-Impuls"},{"body":"Nachdem es anfangs recht schleppend mit den Stimmen voranging, begaben sich die Elternsprecher im wahrsten Sinne des Wortes auf Stimmenfang. Zwischenzeitlich belegten wir sogar kurzzeitig einen der ersten drei Plätze.\n\nDer Schlussspurt war ein regelrechter Krimi. Zwischen dem fünften und sechsten Platz lagen zeitweise nur drei Stimmen Unterschied. Am Ende erreichte das Projekt Schulcafé beim Sparda-Impuls-Wettbewerb einen hervorragenden fünften Platz mit 2.490 Stimmen.\n\nDank dieses großartigen Ergebnisses kann das Schulcafé nun mit den gewonnenen 3.000 Euro verschönert werden, sehr zur Freude aller Schülerinnen und Schüler der IGMH.\n\nDer Elternbeiratsvorstand gratuliert herzlich zum fünften Platz und bedankt sich bei allen Eltern, die engagiert Werbung für das Projekt gemacht haben, und natürlich bei allen, die abgestimmt und damit zum Erfolg beigetragen haben.\n\n## Kurz zusammengefasst\n\n- Projekt: Verschönerung des IGMH-Schulcafés\n- Wettbewerb: Sparda-Impuls\n- Ergebnis: 5. Platz\n- Stimmen: 2.490\n- Fördersumme: 3.000 Euro","date":"2025-12-04 12:00:00.000Z","public":true,"slug":"schulcafe-platz-5-sparda-impuls","title":"Das Schulcafé holt Platz 5 beim Sparda-Impuls-Wettbewerb"},{"body":"Am 9. Dezember fand die erste Sitzung des Elternbeiratsvorstands im Schuljahr 2025/26 statt. Im Mittelpunkt stand die Besetzung zentraler Aufgaben und Zuständigkeiten. Dabei wurde festgelegt, wer den Austausch mit dem Förderverein übernimmt, wer im Mensarat mitarbeitet und welche weiteren organisatorischen Aufgaben wahrgenommen werden.\n\n## Zusammenfassung\n\n- Förderverein: Mariella Ianello, Marion Leininger\n- Mensarat: Gentiana Erol, Raul Chira, Mariella Ianello, Maik Palm\n- Kasse und Protokoll: Marion Leininger\n- Homepage: Maik Palm\n- Schaukasten: Jenny Reger-Stilgenbauer\n\nDie Kasse wurde ordnungsgemäß an die zukünftige Kassenwartin übergeben. Die nächste Sitzung des Elternbeiratsvorstands ist für Ende Januar 2026 geplant.","date":"2025-12-12 12:00:00.000Z","public":true,"slug":"ebv-sitzung-dezember-2025","title":"1. EBV-Sitzung im Schuljahr 2025/26"},{"body":"Kreativität, Teamgeist und eine stimmungsvolle Atmosphäre: Auch in diesem Jahr war der Adventstüren-Contest ein voller Erfolg.\n\nDie Schülerinnen und Schüler hatten wieder die Gelegenheit, ihre Klassenzimmertür weihnachtlich zu dekorieren. Die Schülermitverantwortung (SMV) lobt den Contest jährlich aus und bietet den Klassen damit die Möglichkeit, ihre Klassenkasse aufzubessern.\n\nDer Förderverein der IGMH unterstützt die SMV dabei jedes Jahr und stellt das Preisgeld zur Verfügung. In diesem Jahr wurde das Preisgeld zusätzlich durch den Elternbeirat aufgestockt, der den Wettbewerb mit weiteren 280 Euro unterstützte.\n\nAm Mittwoch, den 17. Dezember, fand in der ersten großen Pause die feierliche Preisverleihung statt. Der Adventstüren-Contest sorgte auch in diesem Jahr für eine stimmungsvolle vorweihnachtliche Atmosphäre an der Schule.\n\n## Zusammenfassung\n\n- Die SMV organisiert jährlich den Adventstüren-Contest.\n- Der Förderverein stellt das Preisgeld bereit.\n- Der Elternbeirat unterstützt zusätzlich mit 280 Euro.\n- Preisverleihung: Mittwoch, 17. Dezember, in der 1. großen Pause.","date":"2025-12-18 12:00:00.000Z","public":true,"slug":"adventstueren-contest-2025","title":"Adventstüren-Contest"},{"body":"Am 10. März 2026 fand die zweite Sitzung des Elternbeiratsvorstands statt. Im Mittelpunkt standen der Mensabetrieb, Rückerstattungen des ehemaligen Caterers, Maßnahmen zur Mobbingprävention sowie organisatorische Fragen. Das Treffen verlief konstruktiv und lösungsorientiert.\n\n## Mensabetrieb und Austausch mit FMD\n\nFür den 18. März wurde ein Austausch mit dem Caterer FMD angekündigt. Fragen der Eltern zum Mensabetrieb sollten über die Elternsprecher gesammelt und gebündelt weitergeleitet werden. Deutlich wurde, dass die zweite Essensausgabeschlange für die siebten Klassen derzeit nicht wie vorgesehen funktioniert. Dieses Thema sollte gezielt angesprochen werden.\n\n## Rückerstattungen des ehemaligen Caterers\n\nBeim ehemaligen Caterer Ehrenfried haben noch nicht alle Eltern, die Beiträge überwiesen hatten, ihre Rückerstattung erhalten. Der Großteil der ausstehenden Beträge wurde jedoch bereits zurückgezahlt.\n\n## Mobbingprävention\n\nDa es vermehrt zu Mobbing- und Gewaltvorfällen kommt, soll sich der Vorstand künftig intensiver mit Mobbingprävention befassen. Konkrete Vorschläge sollen an die Schulleitung herangetragen werden, beispielsweise unter Einbeziehung externer Stellen wie dem Haus des Jugendrechts.\n\n## Themen für die Schulleitung\n\nMehrere offene Punkte werden an die Schulleitung herangetragen, darunter der Wunsch nach einem Schulfotografen, der aktuelle Stand beim Elternzugang zu WebUntis und die Wiederaufnahme der Quartalsgespräche mit der Schulleitung.\n\nDie Sitzung war von einem konstruktiven Austausch geprägt und setzte wichtige Impulse für die weitere Elternarbeit.","date":"2026-03-21 12:00:00.000Z","public":true,"slug":"ebv-sitzung-maerz-2026","title":"Zweite Sitzung des Elternbeiratsvorstands am 10. März 2026"},{"body":"Am 18. März fand ein Austausch mit Mitarbeitenden des Caterers FMD, Elternvertreterinnen und Elternvertretern, Lehrkräften sowie Schülerinnen und Schülern der SMV statt. Insgesamt war es ein sehr konstruktives Gespräch. Die Eltern hatten im Vorfeld die Möglichkeit, über ihre Elternvertretungen Fragen und Anregungen einzureichen.\n\n## Fragen und Anmerkungen der Eltern\n\n- Mehrere Eltern äußerten Fragen zu den erhöhten Preisen.\n- Einige Kinder berichten, dass sie trotz Vorbestellung keinen Nachtisch erhalten haben, obwohl dieser bezahlt wurde.\n- Positiv war, dass laktosefreie und vegetarische Menüs angeboten werden. Werden beide am selben Tag angeboten, ist die Auswahl jedoch eingeschränkt. Angeregt wurde ein abwechslungsreicherer Speiseplan.\n- Angeregt wurde, PayPal als zusätzliche Aufladefunktion für das Essenskonto zu prüfen.\n- Gewünscht wurden kleinere Snacks oder einfache Gerichte zum Barzahlen, etwa belegte Brötchen oder Brezeln.\n- Viele Eltern sprachen ausdrücklich ein Lob aus, dass sich das Essen insgesamt deutlich verbessert habe.\n\n## Rückmeldungen von FMD\n\nFMD erklärte, dass der Preisspielraum begrenzt sei, da die Preise im Vergleich zu anderen Caterern bereits im unteren Bereich lägen. Nach Vorgaben der Stadt gibt es nur einmal pro Woche ein Fleischgericht. Als tägliche Alternative gibt es weiterhin Spaghetti Bolognese, die nicht vorbestellbar sind, aber jeden Tag bar oder per Chip erhältlich.\n\nFalls Kinder einen vorbestellten Nachtisch nicht erhalten haben, sollen sie bitte aktiv danach fragen. Hierzu wird es zusätzlich einen Aushang geben. Zudem wird geprüft, ob künftig wieder eine Salatbar angeboten werden kann. PayPal wurde angesprochen, hier hat FMD als Teil der GBG-Gruppe keine alleinige Entscheidungsfreiheit, nimmt das Anliegen aber mit.\n\n## Kiosk und Snack-Angebot\n\nDer Kiosk bietet täglich ab 7:15 Uhr sowie in der Mittagszeit kleine Snacks an, zahlbar bar oder mit Chip. Dort liegt ein Wünschebuch aus, in das die Kinder gewünschte Produkte eintragen können. Ein mobiler Snack-Trolley ist aus personellen und hygienischen Gründen leider nicht umsetzbar.\n\n## Zusammenfassung\n\n- Der Austausch mit FMD verlief konstruktiv und offen.\n- Zentrale Themen waren Preise, Dessertausgabe, Speiseplan, Snack-Angebote und Pausenregelung.\n- Spaghetti Bolognese bleibt täglich verfügbar, auch wenn sie nicht vorbestellbar ist.\n- Eine Salatbar wird geprüft, PayPal als Zahlungsoption angeregt.\n- Die Fragen zur Pausenregelung werden in der Schulkonferenz weiter beraten.","date":"2026-03-22 12:00:00.000Z","public":true,"slug":"mensa-austausch-fmd-maerz-2026","title":"Mensa-Austausch mit FMD am 18. März 2026"}] , events: [{"end":"","location":"Aula","note":"Gäste sind willkommen. Um Anmeldung im Sekretariat wird gebeten.","public":true,"start":"2026-10-08 19:30:00.000Z","title":"Elternbeiratssitzung"},{"end":"2026-10-20 18:30:00.000Z","location":"Klassenräume","note":"Terminvergabe über das Schulportal.","public":true,"start":"2026-10-20 16:00:00.000Z","title":"Elternsprechtag"},{"end":"2026-11-22 13:00:00.000Z","location":"Schulhof","note":"Kuchenspenden willkommen.","public":true,"start":"2026-11-22 09:00:00.000Z","title":"Herbstbasar"},{"end":"2027-01-06 00:00:00.000Z","location":"","note":"","public":true,"start":"2026-12-19 00:00:00.000Z","title":"Weihnachtsferien"},{"end":"","location":"Mensa","note":"Kennenlernen bei Butterbrezeln und Kaffee.","public":true,"start":"2026-09-10 18:00:00.000Z","title":"Willkommensabend der neuen Fünftklässler"}] , From cf799dd970bba823f4f861ac568af45950924483 Mon Sep 17 00:00:00 2001 From: tleininger Date: Wed, 30 Sep 2026 22:47:23 +0200 Subject: [PATCH 11/13] Reword the /posts intro to match the actual content mix --- pb/pb_migrations/1727200000_dev_seed.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pb/pb_migrations/1727200000_dev_seed.js b/pb/pb_migrations/1727200000_dev_seed.js index 4857cd1..6a05e4d 100644 --- a/pb/pb_migrations/1727200000_dev_seed.js +++ b/pb/pb_migrations/1727200000_dev_seed.js @@ -21,7 +21,7 @@ migrate((app) => { const schema = JSON.parse(toString($os.readFile("/pb_migrations/collections_schema.json"))) const records = { - pages: [{"body":"Der Elternbeirat der IGMH vertritt die Interessen aller Eltern gegenüber der Schulleitung und dem Kollegium. Wir treffen uns regelmäßig, bringen Anliegen aus der Elternschaft ein und begleiten das Schulleben aktiv.\n\nDer Vorstand wurde am 13. November 2025 gewählt.\n\n## Vorsitz\n\n- **Maik Palm** (Vorsitzender) \n *Schulkonferenz, Mensarat, Homepage* \n Mitglied im Gesamtelternbeirat und im Schulbeirat der Stadt Mannheim.\n- **Gentiana Erol** (1. Stellvertreterin) \n *Schulkonferenz, Kommunikation Hausmeister, Mensarat*\n- **Raul Chira** (2. Stellvertreter) \n *Mensarat*\n\n## Schriftführung\n\n- **Marion Leininger** \n *Kasse, Schriftführung, Kontakt Förderverein*\n\n## Beisitz\n\n- **Jenny Reger-Stilgenbauer** \n *Schulkonferenz, Schaukasten*\n- **Mariella Ianello** \n *Mensarat, Kontakt Förderverein*\n- **Isabell Vesper**\n- **Susanne Naumburg** \n *Stellvertretende Schulkonferenz*\n- **Rebecca Goldmann**\n- **Michael Weber** \n *Stellvertretende Schulkonferenz*\n\n## So erreichen Sie uns\n\nAm schnellsten per Mail über unsere [Kontaktseite](/contact). Zu unseren öffentlichen Sitzungen sind alle Eltern herzlich eingeladen. Die Termine finden Sie unter [Termine](/events).","embed":[],"location":"header","order":2,"public":true,"slug":"board","title":"Vorstandsteam"},{"body":"Der Förderverein **„Freunde der IGMH e.V.\"** unterstützt die Schule seit 1975 bei Anschaffungen und Projekten, die aus dem regulären Schulbudget nicht finanziert werden können. Mehr als 500 Mitglieder aus Eltern, Lehrkräften, Ehemaligen und Förderern bringen sich mit Zeit, Ideen oder finanziellen Beiträgen ein.\n\nDer Förderverein ist ein eigenständiger, gemeinnützig anerkannter Verein und nicht Teil des Elternbeirats.\n\n## Was der Verein fördert\n\n- die pädagogische Arbeit und bessere Rahmenbedingungen an der Schule\n- musische, sportliche und kulturelle Projekte\n- Anschaffungen, die allen Schülerinnen und Schülern zugutekommen\n- Chancengerechtigkeit, damit kein Kind aus finanziellen Gründen zurückbleibt\n\n## Was bereits gefördert wurde\n\n- Rennräder, Bälle, Trikots sowie Sport- und Spielgeräte für AGs\n- Zuschüsse für Chorwochenenden und Kanutage\n- Unterstützung der Theater-AG\n- Veranstaltungstechnik und Musikinstrumente, zum Beispiel DJ-Mischpult und Klavier\n- Vor- und Mitfinanzierung der Schülerhandbücher\n- Kletterwand, Außenmöbel in den Innenhöfen, Sitzbänke im Schulhaus und Wasserspender im Mensabereich\n- Laptops und Tablets für den Unterricht\n\n## Mitglied werden\n\nMitglied werden kann, wer die Arbeit der Schule unterstützen möchte. Eine Mitgliedschaft ist bereits ab einem Jahresbeitrag von **10 €** möglich.\n\nDie Beitrittserklärung füllen Sie online beim Förderverein aus:\n[Zur Beitrittserklärung](https://easyverein.com/public/FDI/applicationform/21612)\n\n## Spenden\n\nSpenden sind jederzeit willkommen und werden auf Wunsch mit einer Zuwendungsbestätigung quittiert. Der Verein ist als gemeinnützig anerkannt. Wie Sie spenden können, erfahren Sie beim Förderverein.\n\n## Kontakt zum Förderverein\n\n**Freunde der IGMH e.V.** \nHerzogenriedstraße 50 \n68169 Mannheim \n(Fach 165)\n\nE-Mail: [foerderverein@igmh.de](mailto:foerderverein@igmh.de) \nWebsite: [foerderverein.igmh.de](https://foerderverein.igmh.de)","embed":[],"location":"header","order":3,"public":true,"slug":"patrons","title":"Förderverein"},{"body":"Auf dieser Seite haben wir die Fragen zusammengetragen, die uns am häufigsten erreichen.\n\nIhre Frage ist nicht dabei? Schreiben Sie uns über die [Kontaktseite](/contact) – wir helfen gern weiter.","embed":[],"location":"header","order":6,"public":true,"slug":"faqs","title":"FAQs"},{"body":"# Downloads\n\nFormulare und Dokumente zum Herunterladen:\n\n- Aufnahmeantrag Förderverein\n- Einzugsermächtigung\n- Erstattungsformular Klassenkasse\n\nFehlt ein Dokument? Melden Sie sich über die [Kontaktseite](/contact).","embed":[],"location":"header","order":7,"public":true,"slug":"downloads","title":"Downloads"},{"body":"# Kontakt\n\nSie erreichen den Elternbeirat der IGMH per E-Mail:\n\n**kontakt@elternbeirat-igmh.info**\n\nWir antworten in der Regel innerhalb weniger Tage. Bei dringenden schulischen Angelegenheiten wenden Sie sich bitte direkt an das Sekretariat der Schule.","embed":[],"location":"footer","order":1,"public":true,"slug":"contact","title":"Kontakt"},{"body":"# Impressum\n\nAngaben gemäß § 5 DDG\n\n**Elternbeirat der IGMH**\nVertreten durch den Vorstand\n\nKontakt: siehe [Kontaktseite](/contact)\n\nVerantwortlich für den Inhalt nach § 18 Abs. 2 MStV: der Vorstand des Elternbeirats.","embed":[],"location":"footer","order":2,"public":true,"slug":"imprint","title":"Impressum"},{"body":"# Datenschutz\n\nDer Schutz Ihrer Daten ist uns wichtig. Diese Website kommt ohne externe Dienste aus: keine Analysewerkzeuge, keine eingebundenen Karten oder Videos, keine Schriften von fremden Servern.\n\n## Server-Logs\n\nBeim Aufruf werden technisch notwendige Zugriffsdaten (IP-Adresse, Zeitpunkt, aufgerufene Seite) kurzzeitig verarbeitet, um den Betrieb sicherzustellen. Eine Zusammenführung mit anderen Daten findet nicht statt.\n\n## Ihre Rechte\n\nFragen zum Datenschutz richten Sie bitte an die [Kontaktseite](/contact).","embed":[],"location":"footer","order":3,"public":true,"slug":"privacy","title":"Datenschutz"},{"body":"# Willkommen beim Elternbeirat der IGMH","embed":["posts","events"],"location":"header","order":1,"public":true,"slug":"home","title":"Start"},{"body":"Neuigkeiten aus dem Elternbeirat: Berichte aus den Sitzungen, Ankündigungen und Wissenswertes rund um die Elternarbeit an der IGMH. Die neuesten Beiträge stehen oben.","embed":[],"location":"header","order":4,"public":true,"slug":"posts","title":"Beiträge"},{"body":"Sitzungen des Elternbeirats, Schulveranstaltungen und weitere Termine, die für Eltern wichtig sind.","embed":[],"location":"header","order":5,"public":true,"slug":"events","title":"Termine"}] + pages: [{"body":"Der Elternbeirat der IGMH vertritt die Interessen aller Eltern gegenüber der Schulleitung und dem Kollegium. Wir treffen uns regelmäßig, bringen Anliegen aus der Elternschaft ein und begleiten das Schulleben aktiv.\n\nDer Vorstand wurde am 13. November 2025 gewählt.\n\n## Vorsitz\n\n- **Maik Palm** (Vorsitzender) \n *Schulkonferenz, Mensarat, Homepage* \n Mitglied im Gesamtelternbeirat und im Schulbeirat der Stadt Mannheim.\n- **Gentiana Erol** (1. Stellvertreterin) \n *Schulkonferenz, Kommunikation Hausmeister, Mensarat*\n- **Raul Chira** (2. Stellvertreter) \n *Mensarat*\n\n## Schriftführung\n\n- **Marion Leininger** \n *Kasse, Schriftführung, Kontakt Förderverein*\n\n## Beisitz\n\n- **Jenny Reger-Stilgenbauer** \n *Schulkonferenz, Schaukasten*\n- **Mariella Ianello** \n *Mensarat, Kontakt Förderverein*\n- **Isabell Vesper**\n- **Susanne Naumburg** \n *Stellvertretende Schulkonferenz*\n- **Rebecca Goldmann**\n- **Michael Weber** \n *Stellvertretende Schulkonferenz*\n\n## So erreichen Sie uns\n\nAm schnellsten per Mail über unsere [Kontaktseite](/contact). Zu unseren öffentlichen Sitzungen sind alle Eltern herzlich eingeladen. Die Termine finden Sie unter [Termine](/events).","embed":[],"location":"header","order":2,"public":true,"slug":"board","title":"Vorstandsteam"},{"body":"Der Förderverein **„Freunde der IGMH e.V.\"** unterstützt die Schule seit 1975 bei Anschaffungen und Projekten, die aus dem regulären Schulbudget nicht finanziert werden können. Mehr als 500 Mitglieder aus Eltern, Lehrkräften, Ehemaligen und Förderern bringen sich mit Zeit, Ideen oder finanziellen Beiträgen ein.\n\nDer Förderverein ist ein eigenständiger, gemeinnützig anerkannter Verein und nicht Teil des Elternbeirats.\n\n## Was der Verein fördert\n\n- die pädagogische Arbeit und bessere Rahmenbedingungen an der Schule\n- musische, sportliche und kulturelle Projekte\n- Anschaffungen, die allen Schülerinnen und Schülern zugutekommen\n- Chancengerechtigkeit, damit kein Kind aus finanziellen Gründen zurückbleibt\n\n## Was bereits gefördert wurde\n\n- Rennräder, Bälle, Trikots sowie Sport- und Spielgeräte für AGs\n- Zuschüsse für Chorwochenenden und Kanutage\n- Unterstützung der Theater-AG\n- Veranstaltungstechnik und Musikinstrumente, zum Beispiel DJ-Mischpult und Klavier\n- Vor- und Mitfinanzierung der Schülerhandbücher\n- Kletterwand, Außenmöbel in den Innenhöfen, Sitzbänke im Schulhaus und Wasserspender im Mensabereich\n- Laptops und Tablets für den Unterricht\n\n## Mitglied werden\n\nMitglied werden kann, wer die Arbeit der Schule unterstützen möchte. Eine Mitgliedschaft ist bereits ab einem Jahresbeitrag von **10 €** möglich.\n\nDie Beitrittserklärung füllen Sie online beim Förderverein aus:\n[Zur Beitrittserklärung](https://easyverein.com/public/FDI/applicationform/21612)\n\n## Spenden\n\nSpenden sind jederzeit willkommen und werden auf Wunsch mit einer Zuwendungsbestätigung quittiert. Der Verein ist als gemeinnützig anerkannt. Wie Sie spenden können, erfahren Sie beim Förderverein.\n\n## Kontakt zum Förderverein\n\n**Freunde der IGMH e.V.** \nHerzogenriedstraße 50 \n68169 Mannheim \n(Fach 165)\n\nE-Mail: [foerderverein@igmh.de](mailto:foerderverein@igmh.de) \nWebsite: [foerderverein.igmh.de](https://foerderverein.igmh.de)","embed":[],"location":"header","order":3,"public":true,"slug":"patrons","title":"Förderverein"},{"body":"Auf dieser Seite haben wir die Fragen zusammengetragen, die uns am häufigsten erreichen.\n\nIhre Frage ist nicht dabei? Schreiben Sie uns über die [Kontaktseite](/contact) – wir helfen gern weiter.","embed":[],"location":"header","order":6,"public":true,"slug":"faqs","title":"FAQs"},{"body":"# Downloads\n\nFormulare und Dokumente zum Herunterladen:\n\n- Aufnahmeantrag Förderverein\n- Einzugsermächtigung\n- Erstattungsformular Klassenkasse\n\nFehlt ein Dokument? Melden Sie sich über die [Kontaktseite](/contact).","embed":[],"location":"header","order":7,"public":true,"slug":"downloads","title":"Downloads"},{"body":"# Kontakt\n\nSie erreichen den Elternbeirat der IGMH per E-Mail:\n\n**kontakt@elternbeirat-igmh.info**\n\nWir antworten in der Regel innerhalb weniger Tage. Bei dringenden schulischen Angelegenheiten wenden Sie sich bitte direkt an das Sekretariat der Schule.","embed":[],"location":"footer","order":1,"public":true,"slug":"contact","title":"Kontakt"},{"body":"# Impressum\n\nAngaben gemäß § 5 DDG\n\n**Elternbeirat der IGMH**\nVertreten durch den Vorstand\n\nKontakt: siehe [Kontaktseite](/contact)\n\nVerantwortlich für den Inhalt nach § 18 Abs. 2 MStV: der Vorstand des Elternbeirats.","embed":[],"location":"footer","order":2,"public":true,"slug":"imprint","title":"Impressum"},{"body":"# Datenschutz\n\nDer Schutz Ihrer Daten ist uns wichtig. Diese Website kommt ohne externe Dienste aus: keine Analysewerkzeuge, keine eingebundenen Karten oder Videos, keine Schriften von fremden Servern.\n\n## Server-Logs\n\nBeim Aufruf werden technisch notwendige Zugriffsdaten (IP-Adresse, Zeitpunkt, aufgerufene Seite) kurzzeitig verarbeitet, um den Betrieb sicherzustellen. Eine Zusammenführung mit anderen Daten findet nicht statt.\n\n## Ihre Rechte\n\nFragen zum Datenschutz richten Sie bitte an die [Kontaktseite](/contact).","embed":[],"location":"footer","order":3,"public":true,"slug":"privacy","title":"Datenschutz"},{"body":"# Willkommen beim Elternbeirat der IGMH","embed":["posts","events"],"location":"header","order":1,"public":true,"slug":"home","title":"Start"},{"body":"Was tut sich am Elternbeirat und an der IGMH? Hier finden Sie Rückblicke auf Veranstaltungen, Ankündigungen und Berichte aus den Sitzungen des Elternbeirats.","embed":[],"location":"header","order":4,"public":true,"slug":"posts","title":"Beiträge"},{"body":"Sitzungen des Elternbeirats, Schulveranstaltungen und weitere Termine, die für Eltern wichtig sind.","embed":[],"location":"header","order":5,"public":true,"slug":"events","title":"Termine"}] , posts: [{"body":"In fast allen Familien wird über die Handy-Nutzung diskutiert. Auch im schulischen Alltag ist das immer wieder ein Thema.\n\nSinnvolles und weniger Sinnvolles ist mit dem Handy möglich. Viele Jugendliche haben das Handy bis in die späten Abendstunden und über Nacht bei sich, was natürlich zur Nutzung verführt. Innerhalb der Familie dazu Regelungen zu finden, ist nicht einfach. Auch wir in der Schule kennen diese Gespräche.\n\nWir möchten Ihnen ein Angebot digitaler Elternmodule zu diesem Themenfeld vorstellen und kurz aus schulischer, sozialpädagogischer und strafrechtlicher Sicht zur Handynutzung informieren.\n\n**Dienstag, 18. Februar 2025 um 18 Uhr im Hörsaal 2.**\n\nBitte geben Sie kurz über die Klassenleitung Rückmeldung, dass Sie teilnehmen werden.","date":"2025-02-07 12:00:00.000Z","public":true,"slug":"elternabend-handy-nutzung","title":"Elternabend zur Handy-Nutzung"},{"body":"Am 8. Februar öffnete die IGMH ihre Türen für interessierte Eltern und Kinder, die sich einen Eindruck von unserer Schule verschaffen wollten. Besonders Eltern, die planen, ihre Kinder im kommenden Schuljahr anzumelden, konnten sich umfassend informieren und direkt einen Anmeldetermin vereinbaren.\n\n## Vielfältige Einblicke in das Schulleben\n\nAn verschiedenen Stationen lernten die Besucherinnen und Besucher das breite Angebot der IGMH kennen. Die Eliteschule des Sports präsentierte ihre Fördermöglichkeiten, und Schulhund Tonka ließ viele Kinderherzen höherschlagen. Auch der Elternbeirat und der Förderverein der IGMH informierten in der Aula über ihre Arbeit.\n\nFür die jungen Gäste gab es zahlreiche Mitmach-Aktionen:\n\n- Im römischen Zimmer konnten sie sich spielerisch mit der lateinischen Sprache beschäftigen.\n- Im Chemielabor wurden spannende Experimente durchgeführt.\n- Die Kletterwand war ein echter Publikumsmagnet, hier ging es unter professioneller Sicherung hoch hinaus.\n\n## Unterhaltung und kulinarische Highlights\n\n- Die Schülerband begeisterte das Publikum mit ihren Auftritten in der Aula.\n- Im Hörsaal 2 führten die 6. und 7. Klassen eine unterhaltsame Theateraufführung auf.\n- Für das leibliche Wohl war bestens gesorgt, ob im gemütlichen Schülercafé oder im Bistro Français.\n\nDer Tag der offenen Tür war ein voller Erfolg und lockte zahlreiche Besucherinnen und Besucher an. Die positive Resonanz zeigt, wie groß das Interesse an unserer Schule ist.","date":"2025-02-09 12:00:00.000Z","public":true,"slug":"tag-der-offenen-tuer-2025","title":"Rückblick: Tag der offenen Tür an der IGMH"},{"body":"Digitale Medien spielen eine zentrale Rolle im Alltag von Kindern und Jugendlichen, sei es das Smartphone, ein Tablet oder die Spielkonsole. Doch was machen junge Menschen eigentlich damit? Welcher Erwachsene weiß genau, was sich auf WhatsApp, Instagram oder Snapchat abspielt? Und was passiert auf TikTok? Wann wird ein Videospiel zur Sucht? Und welches Vorbild geben wir als Erwachsene ab, wenn auch unser eigener Alltag vom Smartphone bestimmt wird?\n\n## Digitaler Medienelternabend an der IGMH\n\nVor Kurzem fand an der IGMH ein digitaler Medienelternabend statt, der auf großes Interesse stieß. Frau Ruthig, stellvertretende Mittelstufenleiterin, führte in das Thema ein und beleuchtete die Herausforderungen der Mediennutzung.\n\nAnschließend erklärte Schulpolizist Herr Ebert die juristischen Aspekte. Dabei zeigte er auf, welche Möglichkeiten Eltern haben, wenn ihr Kind von Cybermobbing betroffen ist:\n\n- Gespräch mit Schule und Polizeibeamten\n- Gespräch mit dem Präventionsbeamten der Polizei\n- Durchführung eines Präventionstermins in der Klasse\n- Mit Einverständnis der Eltern des Täters: Gespräch mit dem Täter\n- Mit Einverständnis der Eltern des Täters: Gespräch mit Täter, Opfer, Eltern und Schule\n- Strafanzeige durch die Polizei\n\nWeiterführende Informationen zu Computerspielen finden Sie unter [usk.de](http://www.usk.de) (USK Unterhaltungssoftware) und [zavatar.de](http://www.zavatar.de).\n\n## Herausforderungen der Handynutzung aus sozialpädagogischer Sicht\n\nFrau Graske (Sozialpädagogin) stellte die Herausforderungen aus Sicht der Schulsozialarbeit dar und gab Eltern konkrete Tipps:\n\n**1. Bildschirmzeit im Blick behalten**\n\n**2. Handy am Abend außer Reichweite bringen.** Vereinbaren Sie einen festen Schlafplatz für das Handy und aktivieren Sie einen Ruhemodus.\n\n**3. Online-Kontakte des Kindes sensibel begleiten.** Lassen Sie sich Chat-Gruppen zeigen, schauen Sie gemeinsam das TikTok-Profil an und nutzen Sie Ratschläge von [Clemens hilft](https://www.clemenshilft.de/).\n\n**4. Bleiben Sie die wichtigste Ansprechperson für Ihr Kind.** Zeigen Sie, dass Ihr Kind Ihnen vertrauen kann, begründen Sie Ihre Maßnahmen und bleiben Sie offen für Fragen. Der [Mediennutzungsvertrag](https://www.mediennutzungsvertrag.de/) hilft bei klaren Absprachen.\n\n**5. Denken Sie auch an sich selbst.** Anerkennen Sie Ihren Einsatz, seien Sie nachsichtig mit sich, wenn Pläne nicht sofort aufgehen, und holen Sie sich bei Frustration Unterstützung.\n\n## Kontakt zur Schulsozialarbeit\n\nBei Fragen zur Handynutzung aus sozialpädagogischer Sicht können Sie sich an die Schulsozialarbeit der IGMH wenden (Raum CO.03).\n\n## Weitere hilfreiche Informationen\n\n1. [Klicksafe](https://www.klicksafe.de/), die EU-Initiative für mehr Sicherheit im Netz, unterstützt Eltern mit Informationen und Tipps zum kompetenten Umgang mit digitalen Medien.\n2. Der [Mediennutzungsvertrag](https://www.mediennutzungsvertrag.de/) hilft, gemeinsam mit dem Kind Regeln für die Mediennutzung festzulegen.","date":"2025-02-18 12:00:00.000Z","public":true,"slug":"digitale-medien-herausforderung","title":"Digitale Medien: Herausforderung für Jugendliche und Eltern"},{"body":"Kürzlich fand die Wahl des neuen Vorstands des Elternbeirats statt. Sie wurde notwendig, da mehrere Mitglieder aus dem Gremium ausgeschieden sind, unter anderem aufgrund eines Schulwechsels.\n\nLeider wurde die Wahl nur von wenigen Eltern besucht, was bedauerlich ist, da die Elternarbeit eine wichtige Rolle für unsere Schule spielt. Dennoch konnte die Wahl erfolgreich durchgeführt werden.\n\nGewählt wurde folgender Vorstand des Elternbeirats der IGMH:\n\n**Elternbeiratsvorsitz**\n\n- Dina Losert\n\n**Stellvertretende Elternbeiratsvorsitzende**\n\n- Bernhard Topschall\n- Maik Palm\n\n**Beisitzerinnen und Beisitzer**\n\n- Marielle Ianello\n- Gentiana Erol\n- Jenny Reger-Stilgenbauer\n- Michael Weber\n- Marion Leininger\n- Raul Chira\n\nAußerdem wurden die ständigen Mitglieder sowie deren Stellvertreterinnen und Stellvertreter für die Schulkonferenz gewählt. In der ersten Sitzung werden die konkreten Aufgaben verteilt, zum Beispiel die Vertretung im Mensarat oder im Förderverein.\n\nWir freuen uns auf eine engagierte und erfolgreiche Zusammenarbeit im Interesse aller Schülerinnen und Schüler.","date":"2025-02-26 12:00:00.000Z","public":true,"slug":"vorstand-gewaehlt-februar-2025","title":"Neuer Vorstand des Elternbeirats gewählt (Februar 2025)"},{"body":"Am 1. Oktober 2025 war es endlich so weit: Die IGMH feierte die Einweihung ihrer neuen Sporthalle. Oberbürgermeister Christian Specht übergab das moderne Gebäude im Wert von rund 23 Millionen Euro offiziell seiner Bestimmung. 3,85 Millionen Euro der Kosten wurden durch das Bundesprogramm „Sanierung kommunaler Einrichtungen\" gefördert.\n\nNach vielen Jahren des Wartens und Planens ist damit ein echtes Zukunftsprojekt für unsere Schule und die ganze Neckarstadt entstanden. Die alte Halle konnte aufgrund schwerer Bauschäden nicht mehr genutzt werden, so fiel die Entscheidung für einen kompletten Neubau.\n\nEntstanden ist eine helle, moderne und barrierefreie Sportanlage mit einer großen Dreifeldhalle und einer kleineren Einfeldhalle, die sowohl im Schulalltag als auch von Vereinen genutzt werden können. Eine Photovoltaikanlage, Dachbegrünung und moderne Wärmeschutztechnik sorgen dafür, dass auch das Thema Nachhaltigkeit nicht zu kurz kommt.\n\nAuch architektonisch ist die neue Halle ein Hingucker: viel Glas, ein elegantes Holztragwerk und eine dunkle Fassade, die sich harmonisch in den Herzogenriedpark einfügt. „Ein Leuchtturmprojekt für Bildung, Sport und Nachhaltigkeit\", betonte Oberbürgermeister Specht bei der Einweihung.\n\nDie Schülerinnen und Schüler dürfen sich auf ideale Bedingungen für Unterricht und Training freuen, und die IGMH kann stolz sein auf eine Sporthalle, die ihrem Namen als Eliteschule des Sports wirklich gerecht wird.","date":"2025-10-05 12:00:00.000Z","public":true,"slug":"neue-sporthalle-eroeffnet","title":"Neue Sporthalle feierlich eröffnet"},{"body":"Wir laden herzlich zur Vollversammlung des Elternbeirats der IGMH ein.\n\n**Datum:** Donnerstag, 13. November 2025\n**Uhrzeit:** 19:00 Uhr\n**Ort:** Hörsaal 2 der IGMH\n\n## Tagesordnung\n\n1. Begrüßung und Feststellung der Beschlussfähigkeit, Wahlleitung und Protokoll\n2. Vorstellung der Kandidatinnen und Kandidaten\n3. Wahl der Mitglieder des EBV-Vorstands\n4. Wahl der Mitglieder der Schulkonferenz\n5. Mitteilung über Änderung der Geschäftsordnung\n6. Schlusswort\n\n## Wir brauchen Sie\n\nZur Wahl stehen der Elternbeiratsvorstand, zwei stellvertretende Vorsitzende sowie Beisitzerinnen und Beisitzer. Als Beisitzerin oder Beisitzer nehmen Sie beispielsweise an den Sitzungen des Elternbeirats teil, die in der Regel alle ein bis zwei Monate stattfinden. Es gibt vielfältige Möglichkeiten, sich je nach zeitlicher Verfügbarkeit einzubringen. Jede Form der Unterstützung ist von großem Wert.\n\nFalls Sie Interesse haben, sich aufstellen zu lassen, oder Fragen zur Arbeit des Elternbeirats haben, melden Sie sich gerne vorab über die [Kontaktseite](/contact) oder sprechen Sie uns direkt am Wahlabend an.\n\nWir kommen hiermit einer Informationspflicht nach Punkt 9 der Geschäftsordnung nach:\n\n> Eine Änderung der Geschäftsordnung erfolgt durch Mehrheitsbeschluss des Vorstands. Die Information über die geänderte Geschäftsordnung erfolgt mit Veröffentlichung auf der Homepage des Elternbeirates und in der nächsten Elternbeiratssitzung.","date":"2025-10-24 12:00:00.000Z","public":true,"slug":"einladung-vollversammlung-2025","title":"Einladung zur Vollversammlung des Elternbeirats"},{"body":"Die Schule bietet ab sofort einen neuen Service an: Lost and Found, eine Fundstelle für verlorene Gegenstände.\n\nAb sofort gibt es eine digitale Möglichkeit, nach verlorenen Gegenständen zu suchen. Über 200 Fundsachen wurden fotografiert und in Bildergalerien nach Kategorien auf der Homepage der IGMH veröffentlicht.\n\nAlle Informationen und die Bilderstrecken finden Sie beim [Lost-and-Found-Service der IGMH](https://igmh.de/presse/fundsachen-bilder-durchklicken-verlorenes-wiederfinden).\n\nWer etwas auf den Fotos oder in der Beschreibung wiedererkennt, kann sich per E-Mail an [heike.scholz@igmh.de](mailto:heike.scholz@igmh.de) wenden.","date":"2025-10-29 12:00:00.000Z","public":true,"slug":"lost-and-found","title":"Lost and Found: Fundstelle für verlorene Gegenstände"},{"body":"Am 13. November 2025 fand die turnusmäßige Wahl des Elternbeirats der IGMH im Hörsaal 2 statt. Besetzt wurden der Vorstand, die Beisitzerinnen und Beisitzer, die Mitglieder der Schulkonferenz sowie zwei Kassenprüferinnen bzw. Kassenprüfer. Die Versammlung war mit 35 wahlberechtigten Elternvertreterinnen und Elternvertretern beschlussfähig.\n\nMit der Wahl beginnt die nächste Amtsperiode, in der die gewählten Mitglieder die Interessen der Eltern vertreten, die Zusammenarbeit mit der Schulleitung begleiten und Impulse für das Schulleben setzen. Im Anschluss wurden aktuelle Themen angesprochen, darunter die Pausenregelung, der Umgang mit Mobiltelefonen, der digitale Zugang zu Untis, die Situation der Schultoiletten sowie die Kommunikation zwischen Elternhaus und Schule.\n\n## Ergebnisse im Überblick\n\n**Vorstand Elternbeirat**\n\n- 1. Vorsitz: Maik Palm\n- Stellvertretung: Gentiana Erol\n- Stellvertretung: Raul Chira\n\n**Beisitzer**\n\n- Neu gewählt: Susanne Naumburg, Rebecca Goldmann, Isabell Vesper\n- Im Amt verbleibend: Mariella Ianello, Marion Leininger, Jenny Reger-Stilgenbauer, Michael Weber\n\n**Schulkonferenz**\n\n- Mitglied kraft Amtes: Maik Palm\n- Feste Sitze: Gentiana Erol, Tanja Engelhardt, Jenny Reger-Stilgenbauer\n- Ersatzmitglieder: Franziska Schaaf, Susanne Naumburg, Michael Weber, Cemile Ökzüz\n\n**Kassenprüfer**\n\n- Franziska Wieczorek\n- Michael Vokt\n\nDas ausführliche Protokoll steht im Downloadbereich zur Verfügung.","date":"2025-11-26 12:00:00.000Z","public":true,"slug":"vollversammlung-wahl-november-2025","title":"Vollversammlung des Elternbeirats: Wahl am 13. November 2025"},{"body":"Bitte unterstützen Sie das Schülercafé der IGMH mit Ihrer Stimme. Das Café soll verschönert und gemütlicher gestaltet werden, dafür zählt jede Stimme von Eltern und Unterstützern.\n\n**Hier können Sie abstimmen:** [zum Abstimmen beim Sparda-Impuls](https://www.spardaimpuls.de/projekte/68f9d6ec1d40df0c78f35285).\n\n## Dafür machen wir uns stark\n\nDas Schulcafé der IGMH ist ein Ort des Miteinanders. In den Mittagspausen verkaufen Schülerinnen und Schüler verschiedene gesunde Mittagssnacks, vom Sandwichtoast über Müsli bis zum Obstsalat, im Sommer darf es auch einmal ein Eis sein. Die helfenden Jugendlichen bekommen erste Einblicke in die gastronomische Arbeitswelt und engagieren sich für die Gemeinschaft.\n\nDie Überschüsse aus dem Verkauf fließen in ein Projekt, das Schülerinnen und Schüler bei der Finanzierung von Klassenfahrten unterstützt, die finanziell belastet sind und nicht von Bildung und Teilhabe profitieren können. Um dieses Projekt aufrechterhalten zu können, bewerben wir uns beim Sparda-Impuls.","date":"2025-11-12 12:00:00.000Z","public":true,"slug":"schulcafe-sparda-impuls-abstimmung","title":"Stimmen Sie für das Schulcafé beim Sparda-Impuls"},{"body":"Nachdem es anfangs recht schleppend mit den Stimmen voranging, begaben sich die Elternsprecher im wahrsten Sinne des Wortes auf Stimmenfang. Zwischenzeitlich belegten wir sogar kurzzeitig einen der ersten drei Plätze.\n\nDer Schlussspurt war ein regelrechter Krimi. Zwischen dem fünften und sechsten Platz lagen zeitweise nur drei Stimmen Unterschied. Am Ende erreichte das Projekt Schulcafé beim Sparda-Impuls-Wettbewerb einen hervorragenden fünften Platz mit 2.490 Stimmen.\n\nDank dieses großartigen Ergebnisses kann das Schulcafé nun mit den gewonnenen 3.000 Euro verschönert werden, sehr zur Freude aller Schülerinnen und Schüler der IGMH.\n\nDer Elternbeiratsvorstand gratuliert herzlich zum fünften Platz und bedankt sich bei allen Eltern, die engagiert Werbung für das Projekt gemacht haben, und natürlich bei allen, die abgestimmt und damit zum Erfolg beigetragen haben.\n\n## Kurz zusammengefasst\n\n- Projekt: Verschönerung des IGMH-Schulcafés\n- Wettbewerb: Sparda-Impuls\n- Ergebnis: 5. Platz\n- Stimmen: 2.490\n- Fördersumme: 3.000 Euro","date":"2025-12-04 12:00:00.000Z","public":true,"slug":"schulcafe-platz-5-sparda-impuls","title":"Das Schulcafé holt Platz 5 beim Sparda-Impuls-Wettbewerb"},{"body":"Am 9. Dezember fand die erste Sitzung des Elternbeiratsvorstands im Schuljahr 2025/26 statt. Im Mittelpunkt stand die Besetzung zentraler Aufgaben und Zuständigkeiten. Dabei wurde festgelegt, wer den Austausch mit dem Förderverein übernimmt, wer im Mensarat mitarbeitet und welche weiteren organisatorischen Aufgaben wahrgenommen werden.\n\n## Zusammenfassung\n\n- Förderverein: Mariella Ianello, Marion Leininger\n- Mensarat: Gentiana Erol, Raul Chira, Mariella Ianello, Maik Palm\n- Kasse und Protokoll: Marion Leininger\n- Homepage: Maik Palm\n- Schaukasten: Jenny Reger-Stilgenbauer\n\nDie Kasse wurde ordnungsgemäß an die zukünftige Kassenwartin übergeben. Die nächste Sitzung des Elternbeiratsvorstands ist für Ende Januar 2026 geplant.","date":"2025-12-12 12:00:00.000Z","public":true,"slug":"ebv-sitzung-dezember-2025","title":"1. EBV-Sitzung im Schuljahr 2025/26"},{"body":"Kreativität, Teamgeist und eine stimmungsvolle Atmosphäre: Auch in diesem Jahr war der Adventstüren-Contest ein voller Erfolg.\n\nDie Schülerinnen und Schüler hatten wieder die Gelegenheit, ihre Klassenzimmertür weihnachtlich zu dekorieren. Die Schülermitverantwortung (SMV) lobt den Contest jährlich aus und bietet den Klassen damit die Möglichkeit, ihre Klassenkasse aufzubessern.\n\nDer Förderverein der IGMH unterstützt die SMV dabei jedes Jahr und stellt das Preisgeld zur Verfügung. In diesem Jahr wurde das Preisgeld zusätzlich durch den Elternbeirat aufgestockt, der den Wettbewerb mit weiteren 280 Euro unterstützte.\n\nAm Mittwoch, den 17. Dezember, fand in der ersten großen Pause die feierliche Preisverleihung statt. Der Adventstüren-Contest sorgte auch in diesem Jahr für eine stimmungsvolle vorweihnachtliche Atmosphäre an der Schule.\n\n## Zusammenfassung\n\n- Die SMV organisiert jährlich den Adventstüren-Contest.\n- Der Förderverein stellt das Preisgeld bereit.\n- Der Elternbeirat unterstützt zusätzlich mit 280 Euro.\n- Preisverleihung: Mittwoch, 17. Dezember, in der 1. großen Pause.","date":"2025-12-18 12:00:00.000Z","public":true,"slug":"adventstueren-contest-2025","title":"Adventstüren-Contest"},{"body":"Am 10. März 2026 fand die zweite Sitzung des Elternbeiratsvorstands statt. Im Mittelpunkt standen der Mensabetrieb, Rückerstattungen des ehemaligen Caterers, Maßnahmen zur Mobbingprävention sowie organisatorische Fragen. Das Treffen verlief konstruktiv und lösungsorientiert.\n\n## Mensabetrieb und Austausch mit FMD\n\nFür den 18. März wurde ein Austausch mit dem Caterer FMD angekündigt. Fragen der Eltern zum Mensabetrieb sollten über die Elternsprecher gesammelt und gebündelt weitergeleitet werden. Deutlich wurde, dass die zweite Essensausgabeschlange für die siebten Klassen derzeit nicht wie vorgesehen funktioniert. Dieses Thema sollte gezielt angesprochen werden.\n\n## Rückerstattungen des ehemaligen Caterers\n\nBeim ehemaligen Caterer Ehrenfried haben noch nicht alle Eltern, die Beiträge überwiesen hatten, ihre Rückerstattung erhalten. Der Großteil der ausstehenden Beträge wurde jedoch bereits zurückgezahlt.\n\n## Mobbingprävention\n\nDa es vermehrt zu Mobbing- und Gewaltvorfällen kommt, soll sich der Vorstand künftig intensiver mit Mobbingprävention befassen. Konkrete Vorschläge sollen an die Schulleitung herangetragen werden, beispielsweise unter Einbeziehung externer Stellen wie dem Haus des Jugendrechts.\n\n## Themen für die Schulleitung\n\nMehrere offene Punkte werden an die Schulleitung herangetragen, darunter der Wunsch nach einem Schulfotografen, der aktuelle Stand beim Elternzugang zu WebUntis und die Wiederaufnahme der Quartalsgespräche mit der Schulleitung.\n\nDie Sitzung war von einem konstruktiven Austausch geprägt und setzte wichtige Impulse für die weitere Elternarbeit.","date":"2026-03-21 12:00:00.000Z","public":true,"slug":"ebv-sitzung-maerz-2026","title":"Zweite Sitzung des Elternbeiratsvorstands am 10. März 2026"},{"body":"Am 18. März fand ein Austausch mit Mitarbeitenden des Caterers FMD, Elternvertreterinnen und Elternvertretern, Lehrkräften sowie Schülerinnen und Schülern der SMV statt. Insgesamt war es ein sehr konstruktives Gespräch. Die Eltern hatten im Vorfeld die Möglichkeit, über ihre Elternvertretungen Fragen und Anregungen einzureichen.\n\n## Fragen und Anmerkungen der Eltern\n\n- Mehrere Eltern äußerten Fragen zu den erhöhten Preisen.\n- Einige Kinder berichten, dass sie trotz Vorbestellung keinen Nachtisch erhalten haben, obwohl dieser bezahlt wurde.\n- Positiv war, dass laktosefreie und vegetarische Menüs angeboten werden. Werden beide am selben Tag angeboten, ist die Auswahl jedoch eingeschränkt. Angeregt wurde ein abwechslungsreicherer Speiseplan.\n- Angeregt wurde, PayPal als zusätzliche Aufladefunktion für das Essenskonto zu prüfen.\n- Gewünscht wurden kleinere Snacks oder einfache Gerichte zum Barzahlen, etwa belegte Brötchen oder Brezeln.\n- Viele Eltern sprachen ausdrücklich ein Lob aus, dass sich das Essen insgesamt deutlich verbessert habe.\n\n## Rückmeldungen von FMD\n\nFMD erklärte, dass der Preisspielraum begrenzt sei, da die Preise im Vergleich zu anderen Caterern bereits im unteren Bereich lägen. Nach Vorgaben der Stadt gibt es nur einmal pro Woche ein Fleischgericht. Als tägliche Alternative gibt es weiterhin Spaghetti Bolognese, die nicht vorbestellbar sind, aber jeden Tag bar oder per Chip erhältlich.\n\nFalls Kinder einen vorbestellten Nachtisch nicht erhalten haben, sollen sie bitte aktiv danach fragen. Hierzu wird es zusätzlich einen Aushang geben. Zudem wird geprüft, ob künftig wieder eine Salatbar angeboten werden kann. PayPal wurde angesprochen, hier hat FMD als Teil der GBG-Gruppe keine alleinige Entscheidungsfreiheit, nimmt das Anliegen aber mit.\n\n## Kiosk und Snack-Angebot\n\nDer Kiosk bietet täglich ab 7:15 Uhr sowie in der Mittagszeit kleine Snacks an, zahlbar bar oder mit Chip. Dort liegt ein Wünschebuch aus, in das die Kinder gewünschte Produkte eintragen können. Ein mobiler Snack-Trolley ist aus personellen und hygienischen Gründen leider nicht umsetzbar.\n\n## Zusammenfassung\n\n- Der Austausch mit FMD verlief konstruktiv und offen.\n- Zentrale Themen waren Preise, Dessertausgabe, Speiseplan, Snack-Angebote und Pausenregelung.\n- Spaghetti Bolognese bleibt täglich verfügbar, auch wenn sie nicht vorbestellbar ist.\n- Eine Salatbar wird geprüft, PayPal als Zahlungsoption angeregt.\n- Die Fragen zur Pausenregelung werden in der Schulkonferenz weiter beraten.","date":"2026-03-22 12:00:00.000Z","public":true,"slug":"mensa-austausch-fmd-maerz-2026","title":"Mensa-Austausch mit FMD am 18. März 2026"}] , From ee43d133e965953c3e351ac1af08738c90d8d2d2 Mon Sep 17 00:00:00 2001 From: tleininger Date: Wed, 30 Sep 2026 22:58:39 +0200 Subject: [PATCH 12/13] Replace placeholder events with real past events and the go-live date --- pb/pb_migrations/1727200000_dev_seed.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pb/pb_migrations/1727200000_dev_seed.js b/pb/pb_migrations/1727200000_dev_seed.js index 6a05e4d..a3f17f6 100644 --- a/pb/pb_migrations/1727200000_dev_seed.js +++ b/pb/pb_migrations/1727200000_dev_seed.js @@ -21,11 +21,11 @@ migrate((app) => { const schema = JSON.parse(toString($os.readFile("/pb_migrations/collections_schema.json"))) const records = { - pages: [{"body":"Der Elternbeirat der IGMH vertritt die Interessen aller Eltern gegenüber der Schulleitung und dem Kollegium. Wir treffen uns regelmäßig, bringen Anliegen aus der Elternschaft ein und begleiten das Schulleben aktiv.\n\nDer Vorstand wurde am 13. November 2025 gewählt.\n\n## Vorsitz\n\n- **Maik Palm** (Vorsitzender) \n *Schulkonferenz, Mensarat, Homepage* \n Mitglied im Gesamtelternbeirat und im Schulbeirat der Stadt Mannheim.\n- **Gentiana Erol** (1. Stellvertreterin) \n *Schulkonferenz, Kommunikation Hausmeister, Mensarat*\n- **Raul Chira** (2. Stellvertreter) \n *Mensarat*\n\n## Schriftführung\n\n- **Marion Leininger** \n *Kasse, Schriftführung, Kontakt Förderverein*\n\n## Beisitz\n\n- **Jenny Reger-Stilgenbauer** \n *Schulkonferenz, Schaukasten*\n- **Mariella Ianello** \n *Mensarat, Kontakt Förderverein*\n- **Isabell Vesper**\n- **Susanne Naumburg** \n *Stellvertretende Schulkonferenz*\n- **Rebecca Goldmann**\n- **Michael Weber** \n *Stellvertretende Schulkonferenz*\n\n## So erreichen Sie uns\n\nAm schnellsten per Mail über unsere [Kontaktseite](/contact). Zu unseren öffentlichen Sitzungen sind alle Eltern herzlich eingeladen. Die Termine finden Sie unter [Termine](/events).","embed":[],"location":"header","order":2,"public":true,"slug":"board","title":"Vorstandsteam"},{"body":"Der Förderverein **„Freunde der IGMH e.V.\"** unterstützt die Schule seit 1975 bei Anschaffungen und Projekten, die aus dem regulären Schulbudget nicht finanziert werden können. Mehr als 500 Mitglieder aus Eltern, Lehrkräften, Ehemaligen und Förderern bringen sich mit Zeit, Ideen oder finanziellen Beiträgen ein.\n\nDer Förderverein ist ein eigenständiger, gemeinnützig anerkannter Verein und nicht Teil des Elternbeirats.\n\n## Was der Verein fördert\n\n- die pädagogische Arbeit und bessere Rahmenbedingungen an der Schule\n- musische, sportliche und kulturelle Projekte\n- Anschaffungen, die allen Schülerinnen und Schülern zugutekommen\n- Chancengerechtigkeit, damit kein Kind aus finanziellen Gründen zurückbleibt\n\n## Was bereits gefördert wurde\n\n- Rennräder, Bälle, Trikots sowie Sport- und Spielgeräte für AGs\n- Zuschüsse für Chorwochenenden und Kanutage\n- Unterstützung der Theater-AG\n- Veranstaltungstechnik und Musikinstrumente, zum Beispiel DJ-Mischpult und Klavier\n- Vor- und Mitfinanzierung der Schülerhandbücher\n- Kletterwand, Außenmöbel in den Innenhöfen, Sitzbänke im Schulhaus und Wasserspender im Mensabereich\n- Laptops und Tablets für den Unterricht\n\n## Mitglied werden\n\nMitglied werden kann, wer die Arbeit der Schule unterstützen möchte. Eine Mitgliedschaft ist bereits ab einem Jahresbeitrag von **10 €** möglich.\n\nDie Beitrittserklärung füllen Sie online beim Förderverein aus:\n[Zur Beitrittserklärung](https://easyverein.com/public/FDI/applicationform/21612)\n\n## Spenden\n\nSpenden sind jederzeit willkommen und werden auf Wunsch mit einer Zuwendungsbestätigung quittiert. Der Verein ist als gemeinnützig anerkannt. Wie Sie spenden können, erfahren Sie beim Förderverein.\n\n## Kontakt zum Förderverein\n\n**Freunde der IGMH e.V.** \nHerzogenriedstraße 50 \n68169 Mannheim \n(Fach 165)\n\nE-Mail: [foerderverein@igmh.de](mailto:foerderverein@igmh.de) \nWebsite: [foerderverein.igmh.de](https://foerderverein.igmh.de)","embed":[],"location":"header","order":3,"public":true,"slug":"patrons","title":"Förderverein"},{"body":"Auf dieser Seite haben wir die Fragen zusammengetragen, die uns am häufigsten erreichen.\n\nIhre Frage ist nicht dabei? Schreiben Sie uns über die [Kontaktseite](/contact) – wir helfen gern weiter.","embed":[],"location":"header","order":6,"public":true,"slug":"faqs","title":"FAQs"},{"body":"# Downloads\n\nFormulare und Dokumente zum Herunterladen:\n\n- Aufnahmeantrag Förderverein\n- Einzugsermächtigung\n- Erstattungsformular Klassenkasse\n\nFehlt ein Dokument? Melden Sie sich über die [Kontaktseite](/contact).","embed":[],"location":"header","order":7,"public":true,"slug":"downloads","title":"Downloads"},{"body":"# Kontakt\n\nSie erreichen den Elternbeirat der IGMH per E-Mail:\n\n**kontakt@elternbeirat-igmh.info**\n\nWir antworten in der Regel innerhalb weniger Tage. Bei dringenden schulischen Angelegenheiten wenden Sie sich bitte direkt an das Sekretariat der Schule.","embed":[],"location":"footer","order":1,"public":true,"slug":"contact","title":"Kontakt"},{"body":"# Impressum\n\nAngaben gemäß § 5 DDG\n\n**Elternbeirat der IGMH**\nVertreten durch den Vorstand\n\nKontakt: siehe [Kontaktseite](/contact)\n\nVerantwortlich für den Inhalt nach § 18 Abs. 2 MStV: der Vorstand des Elternbeirats.","embed":[],"location":"footer","order":2,"public":true,"slug":"imprint","title":"Impressum"},{"body":"# Datenschutz\n\nDer Schutz Ihrer Daten ist uns wichtig. Diese Website kommt ohne externe Dienste aus: keine Analysewerkzeuge, keine eingebundenen Karten oder Videos, keine Schriften von fremden Servern.\n\n## Server-Logs\n\nBeim Aufruf werden technisch notwendige Zugriffsdaten (IP-Adresse, Zeitpunkt, aufgerufene Seite) kurzzeitig verarbeitet, um den Betrieb sicherzustellen. Eine Zusammenführung mit anderen Daten findet nicht statt.\n\n## Ihre Rechte\n\nFragen zum Datenschutz richten Sie bitte an die [Kontaktseite](/contact).","embed":[],"location":"footer","order":3,"public":true,"slug":"privacy","title":"Datenschutz"},{"body":"# Willkommen beim Elternbeirat der IGMH","embed":["posts","events"],"location":"header","order":1,"public":true,"slug":"home","title":"Start"},{"body":"Was tut sich am Elternbeirat und an der IGMH? Hier finden Sie Rückblicke auf Veranstaltungen, Ankündigungen und Berichte aus den Sitzungen des Elternbeirats.","embed":[],"location":"header","order":4,"public":true,"slug":"posts","title":"Beiträge"},{"body":"Sitzungen des Elternbeirats, Schulveranstaltungen und weitere Termine, die für Eltern wichtig sind.","embed":[],"location":"header","order":5,"public":true,"slug":"events","title":"Termine"}] + pages: [{"body":"Der Elternbeirat der IGMH vertritt die Interessen aller Eltern gegenüber der Schulleitung und dem Kollegium. Wir treffen uns regelmäßig, bringen Anliegen aus der Elternschaft ein und begleiten das Schulleben aktiv.\n\nDer Vorstand wurde am 13. November 2025 gewählt.\n\n## Vorsitz\n\n- **Maik Palm** (Vorsitzender) \n *Schulkonferenz, Mensarat, Homepage* \n Mitglied im Gesamtelternbeirat und im Schulbeirat der Stadt Mannheim.\n- **Gentiana Erol** (1. Stellvertreterin) \n *Schulkonferenz, Kommunikation Hausmeister, Mensarat*\n- **Raul Chira** (2. Stellvertreter) \n *Mensarat*\n\n## Schriftführung\n\n- **Marion Leininger** \n *Kasse, Schriftführung, Kontakt Förderverein*\n\n## Beisitz\n\n- **Jenny Reger-Stilgenbauer** \n *Schulkonferenz, Schaukasten*\n- **Mariella Ianello** \n *Mensarat, Kontakt Förderverein*\n- **Isabell Vesper**\n- **Susanne Naumburg** \n *Stellvertretende Schulkonferenz*\n- **Rebecca Goldmann**\n- **Michael Weber** \n *Stellvertretende Schulkonferenz*\n\n## So erreichen Sie uns\n\nAm schnellsten per Mail über unsere [Kontaktseite](/contact). Zu unseren öffentlichen Sitzungen sind alle Eltern herzlich eingeladen. Die Termine finden Sie unter [Termine](/events).","embed":[],"location":"header","order":2,"public":true,"slug":"board","title":"Vorstandsteam"},{"body":"Der Förderverein **„Freunde der IGMH e.V.\"** unterstützt die Schule seit 1975 bei Anschaffungen und Projekten, die aus dem regulären Schulbudget nicht finanziert werden können. Mehr als 500 Mitglieder aus Eltern, Lehrkräften, Ehemaligen und Förderern bringen sich mit Zeit, Ideen oder finanziellen Beiträgen ein.\n\nDer Förderverein ist ein eigenständiger, gemeinnützig anerkannter Verein und nicht Teil des Elternbeirats.\n\n## Was der Verein fördert\n\n- die pädagogische Arbeit und bessere Rahmenbedingungen an der Schule\n- musische, sportliche und kulturelle Projekte\n- Anschaffungen, die allen Schülerinnen und Schülern zugutekommen\n- Chancengerechtigkeit, damit kein Kind aus finanziellen Gründen zurückbleibt\n\n## Was bereits gefördert wurde\n\n- Rennräder, Bälle, Trikots sowie Sport- und Spielgeräte für AGs\n- Zuschüsse für Chorwochenenden und Kanutage\n- Unterstützung der Theater-AG\n- Veranstaltungstechnik und Musikinstrumente, zum Beispiel DJ-Mischpult und Klavier\n- Vor- und Mitfinanzierung der Schülerhandbücher\n- Kletterwand, Außenmöbel in den Innenhöfen, Sitzbänke im Schulhaus und Wasserspender im Mensabereich\n- Laptops und Tablets für den Unterricht\n\n## Mitglied werden\n\nMitglied werden kann, wer die Arbeit der Schule unterstützen möchte. Eine Mitgliedschaft ist bereits ab einem Jahresbeitrag von **10 €** möglich.\n\nDie Beitrittserklärung füllen Sie online beim Förderverein aus:\n[Zur Beitrittserklärung](https://easyverein.com/public/FDI/applicationform/21612)\n\n## Spenden\n\nSpenden sind jederzeit willkommen und werden auf Wunsch mit einer Zuwendungsbestätigung quittiert. Der Verein ist als gemeinnützig anerkannt. Wie Sie spenden können, erfahren Sie beim Förderverein.\n\n## Kontakt zum Förderverein\n\n**Freunde der IGMH e.V.** \nHerzogenriedstraße 50 \n68169 Mannheim \n(Fach 165)\n\nE-Mail: [foerderverein@igmh.de](mailto:foerderverein@igmh.de) \nWebsite: [foerderverein.igmh.de](https://foerderverein.igmh.de)","embed":[],"location":"header","order":3,"public":true,"slug":"patrons","title":"Förderverein"},{"body":"Auf dieser Seite haben wir die Fragen zusammengetragen, die uns am häufigsten erreichen.\n\nIhre Frage ist nicht dabei? Schreiben Sie uns über die [Kontaktseite](/contact) – wir helfen gern weiter.","embed":[],"location":"header","order":6,"public":true,"slug":"faqs","title":"FAQs"},{"body":"# Downloads\n\nFormulare und Dokumente zum Herunterladen:\n\n- Aufnahmeantrag Förderverein\n- Einzugsermächtigung\n- Erstattungsformular Klassenkasse\n\nFehlt ein Dokument? Melden Sie sich über die [Kontaktseite](/contact).","embed":[],"location":"header","order":7,"public":true,"slug":"downloads","title":"Downloads"},{"body":"# Kontakt\n\nSie erreichen den Elternbeirat der IGMH per E-Mail:\n\n**kontakt@elternbeirat-igmh.info**\n\nWir antworten in der Regel innerhalb weniger Tage. Bei dringenden schulischen Angelegenheiten wenden Sie sich bitte direkt an das Sekretariat der Schule.","embed":[],"location":"footer","order":1,"public":true,"slug":"contact","title":"Kontakt"},{"body":"# Impressum\n\nAngaben gemäß § 5 DDG\n\n**Elternbeirat der IGMH**\nVertreten durch den Vorstand\n\nKontakt: siehe [Kontaktseite](/contact)\n\nVerantwortlich für den Inhalt nach § 18 Abs. 2 MStV: der Vorstand des Elternbeirats.","embed":[],"location":"footer","order":2,"public":true,"slug":"imprint","title":"Impressum"},{"body":"# Datenschutz\n\nDer Schutz Ihrer Daten ist uns wichtig. Diese Website kommt ohne externe Dienste aus: keine Analysewerkzeuge, keine eingebundenen Karten oder Videos, keine Schriften von fremden Servern.\n\n## Server-Logs\n\nBeim Aufruf werden technisch notwendige Zugriffsdaten (IP-Adresse, Zeitpunkt, aufgerufene Seite) kurzzeitig verarbeitet, um den Betrieb sicherzustellen. Eine Zusammenführung mit anderen Daten findet nicht statt.\n\n## Ihre Rechte\n\nFragen zum Datenschutz richten Sie bitte an die [Kontaktseite](/contact).","embed":[],"location":"footer","order":3,"public":true,"slug":"privacy","title":"Datenschutz"},{"body":"# Willkommen beim Elternbeirat der IGMH","embed":["posts","events"],"location":"header","order":1,"public":true,"slug":"home","title":"Start"},{"body":"Was tut sich am Elternbeirat und an der IGMH? Hier finden Sie Rückblicke auf Veranstaltungen, Ankündigungen und Berichte aus den Sitzungen des Elternbeirats.","embed":[],"location":"header","order":4,"public":true,"slug":"posts","title":"Beiträge"},{"body":"Wann kommt der Elternbeirat zusammen, und was steht rund um die IGMH an? Hier finden Sie die Termine auf einen Blick.","embed":[],"location":"header","order":5,"public":true,"slug":"events","title":"Termine"}] , posts: [{"body":"In fast allen Familien wird über die Handy-Nutzung diskutiert. Auch im schulischen Alltag ist das immer wieder ein Thema.\n\nSinnvolles und weniger Sinnvolles ist mit dem Handy möglich. Viele Jugendliche haben das Handy bis in die späten Abendstunden und über Nacht bei sich, was natürlich zur Nutzung verführt. Innerhalb der Familie dazu Regelungen zu finden, ist nicht einfach. Auch wir in der Schule kennen diese Gespräche.\n\nWir möchten Ihnen ein Angebot digitaler Elternmodule zu diesem Themenfeld vorstellen und kurz aus schulischer, sozialpädagogischer und strafrechtlicher Sicht zur Handynutzung informieren.\n\n**Dienstag, 18. Februar 2025 um 18 Uhr im Hörsaal 2.**\n\nBitte geben Sie kurz über die Klassenleitung Rückmeldung, dass Sie teilnehmen werden.","date":"2025-02-07 12:00:00.000Z","public":true,"slug":"elternabend-handy-nutzung","title":"Elternabend zur Handy-Nutzung"},{"body":"Am 8. Februar öffnete die IGMH ihre Türen für interessierte Eltern und Kinder, die sich einen Eindruck von unserer Schule verschaffen wollten. Besonders Eltern, die planen, ihre Kinder im kommenden Schuljahr anzumelden, konnten sich umfassend informieren und direkt einen Anmeldetermin vereinbaren.\n\n## Vielfältige Einblicke in das Schulleben\n\nAn verschiedenen Stationen lernten die Besucherinnen und Besucher das breite Angebot der IGMH kennen. Die Eliteschule des Sports präsentierte ihre Fördermöglichkeiten, und Schulhund Tonka ließ viele Kinderherzen höherschlagen. Auch der Elternbeirat und der Förderverein der IGMH informierten in der Aula über ihre Arbeit.\n\nFür die jungen Gäste gab es zahlreiche Mitmach-Aktionen:\n\n- Im römischen Zimmer konnten sie sich spielerisch mit der lateinischen Sprache beschäftigen.\n- Im Chemielabor wurden spannende Experimente durchgeführt.\n- Die Kletterwand war ein echter Publikumsmagnet, hier ging es unter professioneller Sicherung hoch hinaus.\n\n## Unterhaltung und kulinarische Highlights\n\n- Die Schülerband begeisterte das Publikum mit ihren Auftritten in der Aula.\n- Im Hörsaal 2 führten die 6. und 7. Klassen eine unterhaltsame Theateraufführung auf.\n- Für das leibliche Wohl war bestens gesorgt, ob im gemütlichen Schülercafé oder im Bistro Français.\n\nDer Tag der offenen Tür war ein voller Erfolg und lockte zahlreiche Besucherinnen und Besucher an. Die positive Resonanz zeigt, wie groß das Interesse an unserer Schule ist.","date":"2025-02-09 12:00:00.000Z","public":true,"slug":"tag-der-offenen-tuer-2025","title":"Rückblick: Tag der offenen Tür an der IGMH"},{"body":"Digitale Medien spielen eine zentrale Rolle im Alltag von Kindern und Jugendlichen, sei es das Smartphone, ein Tablet oder die Spielkonsole. Doch was machen junge Menschen eigentlich damit? Welcher Erwachsene weiß genau, was sich auf WhatsApp, Instagram oder Snapchat abspielt? Und was passiert auf TikTok? Wann wird ein Videospiel zur Sucht? Und welches Vorbild geben wir als Erwachsene ab, wenn auch unser eigener Alltag vom Smartphone bestimmt wird?\n\n## Digitaler Medienelternabend an der IGMH\n\nVor Kurzem fand an der IGMH ein digitaler Medienelternabend statt, der auf großes Interesse stieß. Frau Ruthig, stellvertretende Mittelstufenleiterin, führte in das Thema ein und beleuchtete die Herausforderungen der Mediennutzung.\n\nAnschließend erklärte Schulpolizist Herr Ebert die juristischen Aspekte. Dabei zeigte er auf, welche Möglichkeiten Eltern haben, wenn ihr Kind von Cybermobbing betroffen ist:\n\n- Gespräch mit Schule und Polizeibeamten\n- Gespräch mit dem Präventionsbeamten der Polizei\n- Durchführung eines Präventionstermins in der Klasse\n- Mit Einverständnis der Eltern des Täters: Gespräch mit dem Täter\n- Mit Einverständnis der Eltern des Täters: Gespräch mit Täter, Opfer, Eltern und Schule\n- Strafanzeige durch die Polizei\n\nWeiterführende Informationen zu Computerspielen finden Sie unter [usk.de](http://www.usk.de) (USK Unterhaltungssoftware) und [zavatar.de](http://www.zavatar.de).\n\n## Herausforderungen der Handynutzung aus sozialpädagogischer Sicht\n\nFrau Graske (Sozialpädagogin) stellte die Herausforderungen aus Sicht der Schulsozialarbeit dar und gab Eltern konkrete Tipps:\n\n**1. Bildschirmzeit im Blick behalten**\n\n**2. Handy am Abend außer Reichweite bringen.** Vereinbaren Sie einen festen Schlafplatz für das Handy und aktivieren Sie einen Ruhemodus.\n\n**3. Online-Kontakte des Kindes sensibel begleiten.** Lassen Sie sich Chat-Gruppen zeigen, schauen Sie gemeinsam das TikTok-Profil an und nutzen Sie Ratschläge von [Clemens hilft](https://www.clemenshilft.de/).\n\n**4. Bleiben Sie die wichtigste Ansprechperson für Ihr Kind.** Zeigen Sie, dass Ihr Kind Ihnen vertrauen kann, begründen Sie Ihre Maßnahmen und bleiben Sie offen für Fragen. Der [Mediennutzungsvertrag](https://www.mediennutzungsvertrag.de/) hilft bei klaren Absprachen.\n\n**5. Denken Sie auch an sich selbst.** Anerkennen Sie Ihren Einsatz, seien Sie nachsichtig mit sich, wenn Pläne nicht sofort aufgehen, und holen Sie sich bei Frustration Unterstützung.\n\n## Kontakt zur Schulsozialarbeit\n\nBei Fragen zur Handynutzung aus sozialpädagogischer Sicht können Sie sich an die Schulsozialarbeit der IGMH wenden (Raum CO.03).\n\n## Weitere hilfreiche Informationen\n\n1. [Klicksafe](https://www.klicksafe.de/), die EU-Initiative für mehr Sicherheit im Netz, unterstützt Eltern mit Informationen und Tipps zum kompetenten Umgang mit digitalen Medien.\n2. Der [Mediennutzungsvertrag](https://www.mediennutzungsvertrag.de/) hilft, gemeinsam mit dem Kind Regeln für die Mediennutzung festzulegen.","date":"2025-02-18 12:00:00.000Z","public":true,"slug":"digitale-medien-herausforderung","title":"Digitale Medien: Herausforderung für Jugendliche und Eltern"},{"body":"Kürzlich fand die Wahl des neuen Vorstands des Elternbeirats statt. Sie wurde notwendig, da mehrere Mitglieder aus dem Gremium ausgeschieden sind, unter anderem aufgrund eines Schulwechsels.\n\nLeider wurde die Wahl nur von wenigen Eltern besucht, was bedauerlich ist, da die Elternarbeit eine wichtige Rolle für unsere Schule spielt. Dennoch konnte die Wahl erfolgreich durchgeführt werden.\n\nGewählt wurde folgender Vorstand des Elternbeirats der IGMH:\n\n**Elternbeiratsvorsitz**\n\n- Dina Losert\n\n**Stellvertretende Elternbeiratsvorsitzende**\n\n- Bernhard Topschall\n- Maik Palm\n\n**Beisitzerinnen und Beisitzer**\n\n- Marielle Ianello\n- Gentiana Erol\n- Jenny Reger-Stilgenbauer\n- Michael Weber\n- Marion Leininger\n- Raul Chira\n\nAußerdem wurden die ständigen Mitglieder sowie deren Stellvertreterinnen und Stellvertreter für die Schulkonferenz gewählt. In der ersten Sitzung werden die konkreten Aufgaben verteilt, zum Beispiel die Vertretung im Mensarat oder im Förderverein.\n\nWir freuen uns auf eine engagierte und erfolgreiche Zusammenarbeit im Interesse aller Schülerinnen und Schüler.","date":"2025-02-26 12:00:00.000Z","public":true,"slug":"vorstand-gewaehlt-februar-2025","title":"Neuer Vorstand des Elternbeirats gewählt (Februar 2025)"},{"body":"Am 1. Oktober 2025 war es endlich so weit: Die IGMH feierte die Einweihung ihrer neuen Sporthalle. Oberbürgermeister Christian Specht übergab das moderne Gebäude im Wert von rund 23 Millionen Euro offiziell seiner Bestimmung. 3,85 Millionen Euro der Kosten wurden durch das Bundesprogramm „Sanierung kommunaler Einrichtungen\" gefördert.\n\nNach vielen Jahren des Wartens und Planens ist damit ein echtes Zukunftsprojekt für unsere Schule und die ganze Neckarstadt entstanden. Die alte Halle konnte aufgrund schwerer Bauschäden nicht mehr genutzt werden, so fiel die Entscheidung für einen kompletten Neubau.\n\nEntstanden ist eine helle, moderne und barrierefreie Sportanlage mit einer großen Dreifeldhalle und einer kleineren Einfeldhalle, die sowohl im Schulalltag als auch von Vereinen genutzt werden können. Eine Photovoltaikanlage, Dachbegrünung und moderne Wärmeschutztechnik sorgen dafür, dass auch das Thema Nachhaltigkeit nicht zu kurz kommt.\n\nAuch architektonisch ist die neue Halle ein Hingucker: viel Glas, ein elegantes Holztragwerk und eine dunkle Fassade, die sich harmonisch in den Herzogenriedpark einfügt. „Ein Leuchtturmprojekt für Bildung, Sport und Nachhaltigkeit\", betonte Oberbürgermeister Specht bei der Einweihung.\n\nDie Schülerinnen und Schüler dürfen sich auf ideale Bedingungen für Unterricht und Training freuen, und die IGMH kann stolz sein auf eine Sporthalle, die ihrem Namen als Eliteschule des Sports wirklich gerecht wird.","date":"2025-10-05 12:00:00.000Z","public":true,"slug":"neue-sporthalle-eroeffnet","title":"Neue Sporthalle feierlich eröffnet"},{"body":"Wir laden herzlich zur Vollversammlung des Elternbeirats der IGMH ein.\n\n**Datum:** Donnerstag, 13. November 2025\n**Uhrzeit:** 19:00 Uhr\n**Ort:** Hörsaal 2 der IGMH\n\n## Tagesordnung\n\n1. Begrüßung und Feststellung der Beschlussfähigkeit, Wahlleitung und Protokoll\n2. Vorstellung der Kandidatinnen und Kandidaten\n3. Wahl der Mitglieder des EBV-Vorstands\n4. Wahl der Mitglieder der Schulkonferenz\n5. Mitteilung über Änderung der Geschäftsordnung\n6. Schlusswort\n\n## Wir brauchen Sie\n\nZur Wahl stehen der Elternbeiratsvorstand, zwei stellvertretende Vorsitzende sowie Beisitzerinnen und Beisitzer. Als Beisitzerin oder Beisitzer nehmen Sie beispielsweise an den Sitzungen des Elternbeirats teil, die in der Regel alle ein bis zwei Monate stattfinden. Es gibt vielfältige Möglichkeiten, sich je nach zeitlicher Verfügbarkeit einzubringen. Jede Form der Unterstützung ist von großem Wert.\n\nFalls Sie Interesse haben, sich aufstellen zu lassen, oder Fragen zur Arbeit des Elternbeirats haben, melden Sie sich gerne vorab über die [Kontaktseite](/contact) oder sprechen Sie uns direkt am Wahlabend an.\n\nWir kommen hiermit einer Informationspflicht nach Punkt 9 der Geschäftsordnung nach:\n\n> Eine Änderung der Geschäftsordnung erfolgt durch Mehrheitsbeschluss des Vorstands. Die Information über die geänderte Geschäftsordnung erfolgt mit Veröffentlichung auf der Homepage des Elternbeirates und in der nächsten Elternbeiratssitzung.","date":"2025-10-24 12:00:00.000Z","public":true,"slug":"einladung-vollversammlung-2025","title":"Einladung zur Vollversammlung des Elternbeirats"},{"body":"Die Schule bietet ab sofort einen neuen Service an: Lost and Found, eine Fundstelle für verlorene Gegenstände.\n\nAb sofort gibt es eine digitale Möglichkeit, nach verlorenen Gegenständen zu suchen. Über 200 Fundsachen wurden fotografiert und in Bildergalerien nach Kategorien auf der Homepage der IGMH veröffentlicht.\n\nAlle Informationen und die Bilderstrecken finden Sie beim [Lost-and-Found-Service der IGMH](https://igmh.de/presse/fundsachen-bilder-durchklicken-verlorenes-wiederfinden).\n\nWer etwas auf den Fotos oder in der Beschreibung wiedererkennt, kann sich per E-Mail an [heike.scholz@igmh.de](mailto:heike.scholz@igmh.de) wenden.","date":"2025-10-29 12:00:00.000Z","public":true,"slug":"lost-and-found","title":"Lost and Found: Fundstelle für verlorene Gegenstände"},{"body":"Am 13. November 2025 fand die turnusmäßige Wahl des Elternbeirats der IGMH im Hörsaal 2 statt. Besetzt wurden der Vorstand, die Beisitzerinnen und Beisitzer, die Mitglieder der Schulkonferenz sowie zwei Kassenprüferinnen bzw. Kassenprüfer. Die Versammlung war mit 35 wahlberechtigten Elternvertreterinnen und Elternvertretern beschlussfähig.\n\nMit der Wahl beginnt die nächste Amtsperiode, in der die gewählten Mitglieder die Interessen der Eltern vertreten, die Zusammenarbeit mit der Schulleitung begleiten und Impulse für das Schulleben setzen. Im Anschluss wurden aktuelle Themen angesprochen, darunter die Pausenregelung, der Umgang mit Mobiltelefonen, der digitale Zugang zu Untis, die Situation der Schultoiletten sowie die Kommunikation zwischen Elternhaus und Schule.\n\n## Ergebnisse im Überblick\n\n**Vorstand Elternbeirat**\n\n- 1. Vorsitz: Maik Palm\n- Stellvertretung: Gentiana Erol\n- Stellvertretung: Raul Chira\n\n**Beisitzer**\n\n- Neu gewählt: Susanne Naumburg, Rebecca Goldmann, Isabell Vesper\n- Im Amt verbleibend: Mariella Ianello, Marion Leininger, Jenny Reger-Stilgenbauer, Michael Weber\n\n**Schulkonferenz**\n\n- Mitglied kraft Amtes: Maik Palm\n- Feste Sitze: Gentiana Erol, Tanja Engelhardt, Jenny Reger-Stilgenbauer\n- Ersatzmitglieder: Franziska Schaaf, Susanne Naumburg, Michael Weber, Cemile Ökzüz\n\n**Kassenprüfer**\n\n- Franziska Wieczorek\n- Michael Vokt\n\nDas ausführliche Protokoll steht im Downloadbereich zur Verfügung.","date":"2025-11-26 12:00:00.000Z","public":true,"slug":"vollversammlung-wahl-november-2025","title":"Vollversammlung des Elternbeirats: Wahl am 13. November 2025"},{"body":"Bitte unterstützen Sie das Schülercafé der IGMH mit Ihrer Stimme. Das Café soll verschönert und gemütlicher gestaltet werden, dafür zählt jede Stimme von Eltern und Unterstützern.\n\n**Hier können Sie abstimmen:** [zum Abstimmen beim Sparda-Impuls](https://www.spardaimpuls.de/projekte/68f9d6ec1d40df0c78f35285).\n\n## Dafür machen wir uns stark\n\nDas Schulcafé der IGMH ist ein Ort des Miteinanders. In den Mittagspausen verkaufen Schülerinnen und Schüler verschiedene gesunde Mittagssnacks, vom Sandwichtoast über Müsli bis zum Obstsalat, im Sommer darf es auch einmal ein Eis sein. Die helfenden Jugendlichen bekommen erste Einblicke in die gastronomische Arbeitswelt und engagieren sich für die Gemeinschaft.\n\nDie Überschüsse aus dem Verkauf fließen in ein Projekt, das Schülerinnen und Schüler bei der Finanzierung von Klassenfahrten unterstützt, die finanziell belastet sind und nicht von Bildung und Teilhabe profitieren können. Um dieses Projekt aufrechterhalten zu können, bewerben wir uns beim Sparda-Impuls.","date":"2025-11-12 12:00:00.000Z","public":true,"slug":"schulcafe-sparda-impuls-abstimmung","title":"Stimmen Sie für das Schulcafé beim Sparda-Impuls"},{"body":"Nachdem es anfangs recht schleppend mit den Stimmen voranging, begaben sich die Elternsprecher im wahrsten Sinne des Wortes auf Stimmenfang. Zwischenzeitlich belegten wir sogar kurzzeitig einen der ersten drei Plätze.\n\nDer Schlussspurt war ein regelrechter Krimi. Zwischen dem fünften und sechsten Platz lagen zeitweise nur drei Stimmen Unterschied. Am Ende erreichte das Projekt Schulcafé beim Sparda-Impuls-Wettbewerb einen hervorragenden fünften Platz mit 2.490 Stimmen.\n\nDank dieses großartigen Ergebnisses kann das Schulcafé nun mit den gewonnenen 3.000 Euro verschönert werden, sehr zur Freude aller Schülerinnen und Schüler der IGMH.\n\nDer Elternbeiratsvorstand gratuliert herzlich zum fünften Platz und bedankt sich bei allen Eltern, die engagiert Werbung für das Projekt gemacht haben, und natürlich bei allen, die abgestimmt und damit zum Erfolg beigetragen haben.\n\n## Kurz zusammengefasst\n\n- Projekt: Verschönerung des IGMH-Schulcafés\n- Wettbewerb: Sparda-Impuls\n- Ergebnis: 5. Platz\n- Stimmen: 2.490\n- Fördersumme: 3.000 Euro","date":"2025-12-04 12:00:00.000Z","public":true,"slug":"schulcafe-platz-5-sparda-impuls","title":"Das Schulcafé holt Platz 5 beim Sparda-Impuls-Wettbewerb"},{"body":"Am 9. Dezember fand die erste Sitzung des Elternbeiratsvorstands im Schuljahr 2025/26 statt. Im Mittelpunkt stand die Besetzung zentraler Aufgaben und Zuständigkeiten. Dabei wurde festgelegt, wer den Austausch mit dem Förderverein übernimmt, wer im Mensarat mitarbeitet und welche weiteren organisatorischen Aufgaben wahrgenommen werden.\n\n## Zusammenfassung\n\n- Förderverein: Mariella Ianello, Marion Leininger\n- Mensarat: Gentiana Erol, Raul Chira, Mariella Ianello, Maik Palm\n- Kasse und Protokoll: Marion Leininger\n- Homepage: Maik Palm\n- Schaukasten: Jenny Reger-Stilgenbauer\n\nDie Kasse wurde ordnungsgemäß an die zukünftige Kassenwartin übergeben. Die nächste Sitzung des Elternbeiratsvorstands ist für Ende Januar 2026 geplant.","date":"2025-12-12 12:00:00.000Z","public":true,"slug":"ebv-sitzung-dezember-2025","title":"1. EBV-Sitzung im Schuljahr 2025/26"},{"body":"Kreativität, Teamgeist und eine stimmungsvolle Atmosphäre: Auch in diesem Jahr war der Adventstüren-Contest ein voller Erfolg.\n\nDie Schülerinnen und Schüler hatten wieder die Gelegenheit, ihre Klassenzimmertür weihnachtlich zu dekorieren. Die Schülermitverantwortung (SMV) lobt den Contest jährlich aus und bietet den Klassen damit die Möglichkeit, ihre Klassenkasse aufzubessern.\n\nDer Förderverein der IGMH unterstützt die SMV dabei jedes Jahr und stellt das Preisgeld zur Verfügung. In diesem Jahr wurde das Preisgeld zusätzlich durch den Elternbeirat aufgestockt, der den Wettbewerb mit weiteren 280 Euro unterstützte.\n\nAm Mittwoch, den 17. Dezember, fand in der ersten großen Pause die feierliche Preisverleihung statt. Der Adventstüren-Contest sorgte auch in diesem Jahr für eine stimmungsvolle vorweihnachtliche Atmosphäre an der Schule.\n\n## Zusammenfassung\n\n- Die SMV organisiert jährlich den Adventstüren-Contest.\n- Der Förderverein stellt das Preisgeld bereit.\n- Der Elternbeirat unterstützt zusätzlich mit 280 Euro.\n- Preisverleihung: Mittwoch, 17. Dezember, in der 1. großen Pause.","date":"2025-12-18 12:00:00.000Z","public":true,"slug":"adventstueren-contest-2025","title":"Adventstüren-Contest"},{"body":"Am 10. März 2026 fand die zweite Sitzung des Elternbeiratsvorstands statt. Im Mittelpunkt standen der Mensabetrieb, Rückerstattungen des ehemaligen Caterers, Maßnahmen zur Mobbingprävention sowie organisatorische Fragen. Das Treffen verlief konstruktiv und lösungsorientiert.\n\n## Mensabetrieb und Austausch mit FMD\n\nFür den 18. März wurde ein Austausch mit dem Caterer FMD angekündigt. Fragen der Eltern zum Mensabetrieb sollten über die Elternsprecher gesammelt und gebündelt weitergeleitet werden. Deutlich wurde, dass die zweite Essensausgabeschlange für die siebten Klassen derzeit nicht wie vorgesehen funktioniert. Dieses Thema sollte gezielt angesprochen werden.\n\n## Rückerstattungen des ehemaligen Caterers\n\nBeim ehemaligen Caterer Ehrenfried haben noch nicht alle Eltern, die Beiträge überwiesen hatten, ihre Rückerstattung erhalten. Der Großteil der ausstehenden Beträge wurde jedoch bereits zurückgezahlt.\n\n## Mobbingprävention\n\nDa es vermehrt zu Mobbing- und Gewaltvorfällen kommt, soll sich der Vorstand künftig intensiver mit Mobbingprävention befassen. Konkrete Vorschläge sollen an die Schulleitung herangetragen werden, beispielsweise unter Einbeziehung externer Stellen wie dem Haus des Jugendrechts.\n\n## Themen für die Schulleitung\n\nMehrere offene Punkte werden an die Schulleitung herangetragen, darunter der Wunsch nach einem Schulfotografen, der aktuelle Stand beim Elternzugang zu WebUntis und die Wiederaufnahme der Quartalsgespräche mit der Schulleitung.\n\nDie Sitzung war von einem konstruktiven Austausch geprägt und setzte wichtige Impulse für die weitere Elternarbeit.","date":"2026-03-21 12:00:00.000Z","public":true,"slug":"ebv-sitzung-maerz-2026","title":"Zweite Sitzung des Elternbeiratsvorstands am 10. März 2026"},{"body":"Am 18. März fand ein Austausch mit Mitarbeitenden des Caterers FMD, Elternvertreterinnen und Elternvertretern, Lehrkräften sowie Schülerinnen und Schülern der SMV statt. Insgesamt war es ein sehr konstruktives Gespräch. Die Eltern hatten im Vorfeld die Möglichkeit, über ihre Elternvertretungen Fragen und Anregungen einzureichen.\n\n## Fragen und Anmerkungen der Eltern\n\n- Mehrere Eltern äußerten Fragen zu den erhöhten Preisen.\n- Einige Kinder berichten, dass sie trotz Vorbestellung keinen Nachtisch erhalten haben, obwohl dieser bezahlt wurde.\n- Positiv war, dass laktosefreie und vegetarische Menüs angeboten werden. Werden beide am selben Tag angeboten, ist die Auswahl jedoch eingeschränkt. Angeregt wurde ein abwechslungsreicherer Speiseplan.\n- Angeregt wurde, PayPal als zusätzliche Aufladefunktion für das Essenskonto zu prüfen.\n- Gewünscht wurden kleinere Snacks oder einfache Gerichte zum Barzahlen, etwa belegte Brötchen oder Brezeln.\n- Viele Eltern sprachen ausdrücklich ein Lob aus, dass sich das Essen insgesamt deutlich verbessert habe.\n\n## Rückmeldungen von FMD\n\nFMD erklärte, dass der Preisspielraum begrenzt sei, da die Preise im Vergleich zu anderen Caterern bereits im unteren Bereich lägen. Nach Vorgaben der Stadt gibt es nur einmal pro Woche ein Fleischgericht. Als tägliche Alternative gibt es weiterhin Spaghetti Bolognese, die nicht vorbestellbar sind, aber jeden Tag bar oder per Chip erhältlich.\n\nFalls Kinder einen vorbestellten Nachtisch nicht erhalten haben, sollen sie bitte aktiv danach fragen. Hierzu wird es zusätzlich einen Aushang geben. Zudem wird geprüft, ob künftig wieder eine Salatbar angeboten werden kann. PayPal wurde angesprochen, hier hat FMD als Teil der GBG-Gruppe keine alleinige Entscheidungsfreiheit, nimmt das Anliegen aber mit.\n\n## Kiosk und Snack-Angebot\n\nDer Kiosk bietet täglich ab 7:15 Uhr sowie in der Mittagszeit kleine Snacks an, zahlbar bar oder mit Chip. Dort liegt ein Wünschebuch aus, in das die Kinder gewünschte Produkte eintragen können. Ein mobiler Snack-Trolley ist aus personellen und hygienischen Gründen leider nicht umsetzbar.\n\n## Zusammenfassung\n\n- Der Austausch mit FMD verlief konstruktiv und offen.\n- Zentrale Themen waren Preise, Dessertausgabe, Speiseplan, Snack-Angebote und Pausenregelung.\n- Spaghetti Bolognese bleibt täglich verfügbar, auch wenn sie nicht vorbestellbar ist.\n- Eine Salatbar wird geprüft, PayPal als Zahlungsoption angeregt.\n- Die Fragen zur Pausenregelung werden in der Schulkonferenz weiter beraten.","date":"2026-03-22 12:00:00.000Z","public":true,"slug":"mensa-austausch-fmd-maerz-2026","title":"Mensa-Austausch mit FMD am 18. März 2026"}] , - events: [{"end":"","location":"Aula","note":"Gäste sind willkommen. Um Anmeldung im Sekretariat wird gebeten.","public":true,"start":"2026-10-08 19:30:00.000Z","title":"Elternbeiratssitzung"},{"end":"2026-10-20 18:30:00.000Z","location":"Klassenräume","note":"Terminvergabe über das Schulportal.","public":true,"start":"2026-10-20 16:00:00.000Z","title":"Elternsprechtag"},{"end":"2026-11-22 13:00:00.000Z","location":"Schulhof","note":"Kuchenspenden willkommen.","public":true,"start":"2026-11-22 09:00:00.000Z","title":"Herbstbasar"},{"end":"2027-01-06 00:00:00.000Z","location":"","note":"","public":true,"start":"2026-12-19 00:00:00.000Z","title":"Weihnachtsferien"},{"end":"","location":"Mensa","note":"Kennenlernen bei Butterbrezeln und Kaffee.","public":true,"start":"2026-09-10 18:00:00.000Z","title":"Willkommensabend der neuen Fünftklässler"}] + events: [{"end":"","location":"","note":"Die neue Internetseite des Elternbeirats der IGMH löst die bisherige ab und ist ab diesem Tag unter der neuen Adresse erreichbar.","public":true,"start":"2026-10-14 22:00:00.000Z","title":"Neue Website des Elternbeirats geht online"},{"end":"","location":"IGMH","note":"","public":true,"start":"2025-02-07 23:00:00.000Z","title":"Tag der offenen Tür der IGMH"},{"end":"","location":"IGMH","note":"","public":true,"start":"2025-02-24 23:00:00.000Z","title":"Wahl des Elternbeiratsvorstands"},{"end":"","location":"Hörsaal 2 der IGMH","note":"","public":true,"start":"2025-11-13 18:00:00.000Z","title":"Vollversammlung des Elternbeirats mit Vorstandswahl"},{"end":"","location":"IGMH","note":"","public":true,"start":"2025-12-08 23:00:00.000Z","title":"1. Sitzung des Elternbeiratsvorstands"},{"end":"","location":"IGMH","note":"","public":true,"start":"2025-12-16 23:00:00.000Z","title":"Adventstüren-Contest"},{"end":"","location":"IGMH","note":"","public":true,"start":"2026-03-09 23:00:00.000Z","title":"2. Sitzung des Elternbeiratsvorstands"}] , // Topics own the grouping and the order of the FAQ page; a question links to // its topic below via the "topic" relation, resolved by slug at seed time. From 818f4c508e0e25a8093c4081f60f0e659ff2ebdf Mon Sep 17 00:00:00 2001 From: tleininger Date: Wed, 30 Sep 2026 23:02:22 +0200 Subject: [PATCH 13/13] Warm up the contact page text and link the e-mail address --- pb/pb_migrations/1727200000_dev_seed.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pb/pb_migrations/1727200000_dev_seed.js b/pb/pb_migrations/1727200000_dev_seed.js index a3f17f6..5fd1433 100644 --- a/pb/pb_migrations/1727200000_dev_seed.js +++ b/pb/pb_migrations/1727200000_dev_seed.js @@ -21,7 +21,7 @@ migrate((app) => { const schema = JSON.parse(toString($os.readFile("/pb_migrations/collections_schema.json"))) const records = { - pages: [{"body":"Der Elternbeirat der IGMH vertritt die Interessen aller Eltern gegenüber der Schulleitung und dem Kollegium. Wir treffen uns regelmäßig, bringen Anliegen aus der Elternschaft ein und begleiten das Schulleben aktiv.\n\nDer Vorstand wurde am 13. November 2025 gewählt.\n\n## Vorsitz\n\n- **Maik Palm** (Vorsitzender) \n *Schulkonferenz, Mensarat, Homepage* \n Mitglied im Gesamtelternbeirat und im Schulbeirat der Stadt Mannheim.\n- **Gentiana Erol** (1. Stellvertreterin) \n *Schulkonferenz, Kommunikation Hausmeister, Mensarat*\n- **Raul Chira** (2. Stellvertreter) \n *Mensarat*\n\n## Schriftführung\n\n- **Marion Leininger** \n *Kasse, Schriftführung, Kontakt Förderverein*\n\n## Beisitz\n\n- **Jenny Reger-Stilgenbauer** \n *Schulkonferenz, Schaukasten*\n- **Mariella Ianello** \n *Mensarat, Kontakt Förderverein*\n- **Isabell Vesper**\n- **Susanne Naumburg** \n *Stellvertretende Schulkonferenz*\n- **Rebecca Goldmann**\n- **Michael Weber** \n *Stellvertretende Schulkonferenz*\n\n## So erreichen Sie uns\n\nAm schnellsten per Mail über unsere [Kontaktseite](/contact). Zu unseren öffentlichen Sitzungen sind alle Eltern herzlich eingeladen. Die Termine finden Sie unter [Termine](/events).","embed":[],"location":"header","order":2,"public":true,"slug":"board","title":"Vorstandsteam"},{"body":"Der Förderverein **„Freunde der IGMH e.V.\"** unterstützt die Schule seit 1975 bei Anschaffungen und Projekten, die aus dem regulären Schulbudget nicht finanziert werden können. Mehr als 500 Mitglieder aus Eltern, Lehrkräften, Ehemaligen und Förderern bringen sich mit Zeit, Ideen oder finanziellen Beiträgen ein.\n\nDer Förderverein ist ein eigenständiger, gemeinnützig anerkannter Verein und nicht Teil des Elternbeirats.\n\n## Was der Verein fördert\n\n- die pädagogische Arbeit und bessere Rahmenbedingungen an der Schule\n- musische, sportliche und kulturelle Projekte\n- Anschaffungen, die allen Schülerinnen und Schülern zugutekommen\n- Chancengerechtigkeit, damit kein Kind aus finanziellen Gründen zurückbleibt\n\n## Was bereits gefördert wurde\n\n- Rennräder, Bälle, Trikots sowie Sport- und Spielgeräte für AGs\n- Zuschüsse für Chorwochenenden und Kanutage\n- Unterstützung der Theater-AG\n- Veranstaltungstechnik und Musikinstrumente, zum Beispiel DJ-Mischpult und Klavier\n- Vor- und Mitfinanzierung der Schülerhandbücher\n- Kletterwand, Außenmöbel in den Innenhöfen, Sitzbänke im Schulhaus und Wasserspender im Mensabereich\n- Laptops und Tablets für den Unterricht\n\n## Mitglied werden\n\nMitglied werden kann, wer die Arbeit der Schule unterstützen möchte. Eine Mitgliedschaft ist bereits ab einem Jahresbeitrag von **10 €** möglich.\n\nDie Beitrittserklärung füllen Sie online beim Förderverein aus:\n[Zur Beitrittserklärung](https://easyverein.com/public/FDI/applicationform/21612)\n\n## Spenden\n\nSpenden sind jederzeit willkommen und werden auf Wunsch mit einer Zuwendungsbestätigung quittiert. Der Verein ist als gemeinnützig anerkannt. Wie Sie spenden können, erfahren Sie beim Förderverein.\n\n## Kontakt zum Förderverein\n\n**Freunde der IGMH e.V.** \nHerzogenriedstraße 50 \n68169 Mannheim \n(Fach 165)\n\nE-Mail: [foerderverein@igmh.de](mailto:foerderverein@igmh.de) \nWebsite: [foerderverein.igmh.de](https://foerderverein.igmh.de)","embed":[],"location":"header","order":3,"public":true,"slug":"patrons","title":"Förderverein"},{"body":"Auf dieser Seite haben wir die Fragen zusammengetragen, die uns am häufigsten erreichen.\n\nIhre Frage ist nicht dabei? Schreiben Sie uns über die [Kontaktseite](/contact) – wir helfen gern weiter.","embed":[],"location":"header","order":6,"public":true,"slug":"faqs","title":"FAQs"},{"body":"# Downloads\n\nFormulare und Dokumente zum Herunterladen:\n\n- Aufnahmeantrag Förderverein\n- Einzugsermächtigung\n- Erstattungsformular Klassenkasse\n\nFehlt ein Dokument? Melden Sie sich über die [Kontaktseite](/contact).","embed":[],"location":"header","order":7,"public":true,"slug":"downloads","title":"Downloads"},{"body":"# Kontakt\n\nSie erreichen den Elternbeirat der IGMH per E-Mail:\n\n**kontakt@elternbeirat-igmh.info**\n\nWir antworten in der Regel innerhalb weniger Tage. Bei dringenden schulischen Angelegenheiten wenden Sie sich bitte direkt an das Sekretariat der Schule.","embed":[],"location":"footer","order":1,"public":true,"slug":"contact","title":"Kontakt"},{"body":"# Impressum\n\nAngaben gemäß § 5 DDG\n\n**Elternbeirat der IGMH**\nVertreten durch den Vorstand\n\nKontakt: siehe [Kontaktseite](/contact)\n\nVerantwortlich für den Inhalt nach § 18 Abs. 2 MStV: der Vorstand des Elternbeirats.","embed":[],"location":"footer","order":2,"public":true,"slug":"imprint","title":"Impressum"},{"body":"# Datenschutz\n\nDer Schutz Ihrer Daten ist uns wichtig. Diese Website kommt ohne externe Dienste aus: keine Analysewerkzeuge, keine eingebundenen Karten oder Videos, keine Schriften von fremden Servern.\n\n## Server-Logs\n\nBeim Aufruf werden technisch notwendige Zugriffsdaten (IP-Adresse, Zeitpunkt, aufgerufene Seite) kurzzeitig verarbeitet, um den Betrieb sicherzustellen. Eine Zusammenführung mit anderen Daten findet nicht statt.\n\n## Ihre Rechte\n\nFragen zum Datenschutz richten Sie bitte an die [Kontaktseite](/contact).","embed":[],"location":"footer","order":3,"public":true,"slug":"privacy","title":"Datenschutz"},{"body":"# Willkommen beim Elternbeirat der IGMH","embed":["posts","events"],"location":"header","order":1,"public":true,"slug":"home","title":"Start"},{"body":"Was tut sich am Elternbeirat und an der IGMH? Hier finden Sie Rückblicke auf Veranstaltungen, Ankündigungen und Berichte aus den Sitzungen des Elternbeirats.","embed":[],"location":"header","order":4,"public":true,"slug":"posts","title":"Beiträge"},{"body":"Wann kommt der Elternbeirat zusammen, und was steht rund um die IGMH an? Hier finden Sie die Termine auf einen Blick.","embed":[],"location":"header","order":5,"public":true,"slug":"events","title":"Termine"}] + pages: [{"body":"Der Elternbeirat der IGMH vertritt die Interessen aller Eltern gegenüber der Schulleitung und dem Kollegium. Wir treffen uns regelmäßig, bringen Anliegen aus der Elternschaft ein und begleiten das Schulleben aktiv.\n\nDer Vorstand wurde am 13. November 2025 gewählt.\n\n## Vorsitz\n\n- **Maik Palm** (Vorsitzender) \n *Schulkonferenz, Mensarat, Homepage* \n Mitglied im Gesamtelternbeirat und im Schulbeirat der Stadt Mannheim.\n- **Gentiana Erol** (1. Stellvertreterin) \n *Schulkonferenz, Kommunikation Hausmeister, Mensarat*\n- **Raul Chira** (2. Stellvertreter) \n *Mensarat*\n\n## Schriftführung\n\n- **Marion Leininger** \n *Kasse, Schriftführung, Kontakt Förderverein*\n\n## Beisitz\n\n- **Jenny Reger-Stilgenbauer** \n *Schulkonferenz, Schaukasten*\n- **Mariella Ianello** \n *Mensarat, Kontakt Förderverein*\n- **Isabell Vesper**\n- **Susanne Naumburg** \n *Stellvertretende Schulkonferenz*\n- **Rebecca Goldmann**\n- **Michael Weber** \n *Stellvertretende Schulkonferenz*\n\n## So erreichen Sie uns\n\nAm schnellsten per Mail über unsere [Kontaktseite](/contact). Zu unseren öffentlichen Sitzungen sind alle Eltern herzlich eingeladen. Die Termine finden Sie unter [Termine](/events).","embed":[],"location":"header","order":2,"public":true,"slug":"board","title":"Vorstandsteam"},{"body":"Der Förderverein **„Freunde der IGMH e.V.\"** unterstützt die Schule seit 1975 bei Anschaffungen und Projekten, die aus dem regulären Schulbudget nicht finanziert werden können. Mehr als 500 Mitglieder aus Eltern, Lehrkräften, Ehemaligen und Förderern bringen sich mit Zeit, Ideen oder finanziellen Beiträgen ein.\n\nDer Förderverein ist ein eigenständiger, gemeinnützig anerkannter Verein und nicht Teil des Elternbeirats.\n\n## Was der Verein fördert\n\n- die pädagogische Arbeit und bessere Rahmenbedingungen an der Schule\n- musische, sportliche und kulturelle Projekte\n- Anschaffungen, die allen Schülerinnen und Schülern zugutekommen\n- Chancengerechtigkeit, damit kein Kind aus finanziellen Gründen zurückbleibt\n\n## Was bereits gefördert wurde\n\n- Rennräder, Bälle, Trikots sowie Sport- und Spielgeräte für AGs\n- Zuschüsse für Chorwochenenden und Kanutage\n- Unterstützung der Theater-AG\n- Veranstaltungstechnik und Musikinstrumente, zum Beispiel DJ-Mischpult und Klavier\n- Vor- und Mitfinanzierung der Schülerhandbücher\n- Kletterwand, Außenmöbel in den Innenhöfen, Sitzbänke im Schulhaus und Wasserspender im Mensabereich\n- Laptops und Tablets für den Unterricht\n\n## Mitglied werden\n\nMitglied werden kann, wer die Arbeit der Schule unterstützen möchte. Eine Mitgliedschaft ist bereits ab einem Jahresbeitrag von **10 €** möglich.\n\nDie Beitrittserklärung füllen Sie online beim Förderverein aus:\n[Zur Beitrittserklärung](https://easyverein.com/public/FDI/applicationform/21612)\n\n## Spenden\n\nSpenden sind jederzeit willkommen und werden auf Wunsch mit einer Zuwendungsbestätigung quittiert. Der Verein ist als gemeinnützig anerkannt. Wie Sie spenden können, erfahren Sie beim Förderverein.\n\n## Kontakt zum Förderverein\n\n**Freunde der IGMH e.V.** \nHerzogenriedstraße 50 \n68169 Mannheim \n(Fach 165)\n\nE-Mail: [foerderverein@igmh.de](mailto:foerderverein@igmh.de) \nWebsite: [foerderverein.igmh.de](https://foerderverein.igmh.de)","embed":[],"location":"header","order":3,"public":true,"slug":"patrons","title":"Förderverein"},{"body":"Auf dieser Seite haben wir die Fragen zusammengetragen, die uns am häufigsten erreichen.\n\nIhre Frage ist nicht dabei? Schreiben Sie uns über die [Kontaktseite](/contact) – wir helfen gern weiter.","embed":[],"location":"header","order":6,"public":true,"slug":"faqs","title":"FAQs"},{"body":"# Downloads\n\nFormulare und Dokumente zum Herunterladen:\n\n- Aufnahmeantrag Förderverein\n- Einzugsermächtigung\n- Erstattungsformular Klassenkasse\n\nFehlt ein Dokument? Melden Sie sich über die [Kontaktseite](/contact).","embed":[],"location":"header","order":7,"public":true,"slug":"downloads","title":"Downloads"},{"body":"Haben Sie eine Frage, eine Anregung oder möchten Sie sich einbringen? Der Elternbeirat der IGMH freut sich über jede Nachricht.\n\nSie erreichen uns per E-Mail unter [kontakt@elternbeirat-igmh.info](mailto:kontakt@elternbeirat-igmh.info). In der Regel melden wir uns innerhalb weniger Tage zurück.\n\nBei dringenden schulischen Angelegenheiten wenden Sie sich bitte direkt an das Sekretariat der IGMH.","embed":[],"location":"footer","order":1,"public":true,"slug":"contact","title":"Kontakt"},{"body":"# Impressum\n\nAngaben gemäß § 5 DDG\n\n**Elternbeirat der IGMH**\nVertreten durch den Vorstand\n\nKontakt: siehe [Kontaktseite](/contact)\n\nVerantwortlich für den Inhalt nach § 18 Abs. 2 MStV: der Vorstand des Elternbeirats.","embed":[],"location":"footer","order":2,"public":true,"slug":"imprint","title":"Impressum"},{"body":"# Datenschutz\n\nDer Schutz Ihrer Daten ist uns wichtig. Diese Website kommt ohne externe Dienste aus: keine Analysewerkzeuge, keine eingebundenen Karten oder Videos, keine Schriften von fremden Servern.\n\n## Server-Logs\n\nBeim Aufruf werden technisch notwendige Zugriffsdaten (IP-Adresse, Zeitpunkt, aufgerufene Seite) kurzzeitig verarbeitet, um den Betrieb sicherzustellen. Eine Zusammenführung mit anderen Daten findet nicht statt.\n\n## Ihre Rechte\n\nFragen zum Datenschutz richten Sie bitte an die [Kontaktseite](/contact).","embed":[],"location":"footer","order":3,"public":true,"slug":"privacy","title":"Datenschutz"},{"body":"# Willkommen beim Elternbeirat der IGMH","embed":["posts","events"],"location":"header","order":1,"public":true,"slug":"home","title":"Start"},{"body":"Was tut sich am Elternbeirat und an der IGMH? Hier finden Sie Rückblicke auf Veranstaltungen, Ankündigungen und Berichte aus den Sitzungen des Elternbeirats.","embed":[],"location":"header","order":4,"public":true,"slug":"posts","title":"Beiträge"},{"body":"Wann kommt der Elternbeirat zusammen, und was steht rund um die IGMH an? Hier finden Sie die Termine auf einen Blick.","embed":[],"location":"header","order":5,"public":true,"slug":"events","title":"Termine"}] , posts: [{"body":"In fast allen Familien wird über die Handy-Nutzung diskutiert. Auch im schulischen Alltag ist das immer wieder ein Thema.\n\nSinnvolles und weniger Sinnvolles ist mit dem Handy möglich. Viele Jugendliche haben das Handy bis in die späten Abendstunden und über Nacht bei sich, was natürlich zur Nutzung verführt. Innerhalb der Familie dazu Regelungen zu finden, ist nicht einfach. Auch wir in der Schule kennen diese Gespräche.\n\nWir möchten Ihnen ein Angebot digitaler Elternmodule zu diesem Themenfeld vorstellen und kurz aus schulischer, sozialpädagogischer und strafrechtlicher Sicht zur Handynutzung informieren.\n\n**Dienstag, 18. Februar 2025 um 18 Uhr im Hörsaal 2.**\n\nBitte geben Sie kurz über die Klassenleitung Rückmeldung, dass Sie teilnehmen werden.","date":"2025-02-07 12:00:00.000Z","public":true,"slug":"elternabend-handy-nutzung","title":"Elternabend zur Handy-Nutzung"},{"body":"Am 8. Februar öffnete die IGMH ihre Türen für interessierte Eltern und Kinder, die sich einen Eindruck von unserer Schule verschaffen wollten. Besonders Eltern, die planen, ihre Kinder im kommenden Schuljahr anzumelden, konnten sich umfassend informieren und direkt einen Anmeldetermin vereinbaren.\n\n## Vielfältige Einblicke in das Schulleben\n\nAn verschiedenen Stationen lernten die Besucherinnen und Besucher das breite Angebot der IGMH kennen. Die Eliteschule des Sports präsentierte ihre Fördermöglichkeiten, und Schulhund Tonka ließ viele Kinderherzen höherschlagen. Auch der Elternbeirat und der Förderverein der IGMH informierten in der Aula über ihre Arbeit.\n\nFür die jungen Gäste gab es zahlreiche Mitmach-Aktionen:\n\n- Im römischen Zimmer konnten sie sich spielerisch mit der lateinischen Sprache beschäftigen.\n- Im Chemielabor wurden spannende Experimente durchgeführt.\n- Die Kletterwand war ein echter Publikumsmagnet, hier ging es unter professioneller Sicherung hoch hinaus.\n\n## Unterhaltung und kulinarische Highlights\n\n- Die Schülerband begeisterte das Publikum mit ihren Auftritten in der Aula.\n- Im Hörsaal 2 führten die 6. und 7. Klassen eine unterhaltsame Theateraufführung auf.\n- Für das leibliche Wohl war bestens gesorgt, ob im gemütlichen Schülercafé oder im Bistro Français.\n\nDer Tag der offenen Tür war ein voller Erfolg und lockte zahlreiche Besucherinnen und Besucher an. Die positive Resonanz zeigt, wie groß das Interesse an unserer Schule ist.","date":"2025-02-09 12:00:00.000Z","public":true,"slug":"tag-der-offenen-tuer-2025","title":"Rückblick: Tag der offenen Tür an der IGMH"},{"body":"Digitale Medien spielen eine zentrale Rolle im Alltag von Kindern und Jugendlichen, sei es das Smartphone, ein Tablet oder die Spielkonsole. Doch was machen junge Menschen eigentlich damit? Welcher Erwachsene weiß genau, was sich auf WhatsApp, Instagram oder Snapchat abspielt? Und was passiert auf TikTok? Wann wird ein Videospiel zur Sucht? Und welches Vorbild geben wir als Erwachsene ab, wenn auch unser eigener Alltag vom Smartphone bestimmt wird?\n\n## Digitaler Medienelternabend an der IGMH\n\nVor Kurzem fand an der IGMH ein digitaler Medienelternabend statt, der auf großes Interesse stieß. Frau Ruthig, stellvertretende Mittelstufenleiterin, führte in das Thema ein und beleuchtete die Herausforderungen der Mediennutzung.\n\nAnschließend erklärte Schulpolizist Herr Ebert die juristischen Aspekte. Dabei zeigte er auf, welche Möglichkeiten Eltern haben, wenn ihr Kind von Cybermobbing betroffen ist:\n\n- Gespräch mit Schule und Polizeibeamten\n- Gespräch mit dem Präventionsbeamten der Polizei\n- Durchführung eines Präventionstermins in der Klasse\n- Mit Einverständnis der Eltern des Täters: Gespräch mit dem Täter\n- Mit Einverständnis der Eltern des Täters: Gespräch mit Täter, Opfer, Eltern und Schule\n- Strafanzeige durch die Polizei\n\nWeiterführende Informationen zu Computerspielen finden Sie unter [usk.de](http://www.usk.de) (USK Unterhaltungssoftware) und [zavatar.de](http://www.zavatar.de).\n\n## Herausforderungen der Handynutzung aus sozialpädagogischer Sicht\n\nFrau Graske (Sozialpädagogin) stellte die Herausforderungen aus Sicht der Schulsozialarbeit dar und gab Eltern konkrete Tipps:\n\n**1. Bildschirmzeit im Blick behalten**\n\n**2. Handy am Abend außer Reichweite bringen.** Vereinbaren Sie einen festen Schlafplatz für das Handy und aktivieren Sie einen Ruhemodus.\n\n**3. Online-Kontakte des Kindes sensibel begleiten.** Lassen Sie sich Chat-Gruppen zeigen, schauen Sie gemeinsam das TikTok-Profil an und nutzen Sie Ratschläge von [Clemens hilft](https://www.clemenshilft.de/).\n\n**4. Bleiben Sie die wichtigste Ansprechperson für Ihr Kind.** Zeigen Sie, dass Ihr Kind Ihnen vertrauen kann, begründen Sie Ihre Maßnahmen und bleiben Sie offen für Fragen. Der [Mediennutzungsvertrag](https://www.mediennutzungsvertrag.de/) hilft bei klaren Absprachen.\n\n**5. Denken Sie auch an sich selbst.** Anerkennen Sie Ihren Einsatz, seien Sie nachsichtig mit sich, wenn Pläne nicht sofort aufgehen, und holen Sie sich bei Frustration Unterstützung.\n\n## Kontakt zur Schulsozialarbeit\n\nBei Fragen zur Handynutzung aus sozialpädagogischer Sicht können Sie sich an die Schulsozialarbeit der IGMH wenden (Raum CO.03).\n\n## Weitere hilfreiche Informationen\n\n1. [Klicksafe](https://www.klicksafe.de/), die EU-Initiative für mehr Sicherheit im Netz, unterstützt Eltern mit Informationen und Tipps zum kompetenten Umgang mit digitalen Medien.\n2. Der [Mediennutzungsvertrag](https://www.mediennutzungsvertrag.de/) hilft, gemeinsam mit dem Kind Regeln für die Mediennutzung festzulegen.","date":"2025-02-18 12:00:00.000Z","public":true,"slug":"digitale-medien-herausforderung","title":"Digitale Medien: Herausforderung für Jugendliche und Eltern"},{"body":"Kürzlich fand die Wahl des neuen Vorstands des Elternbeirats statt. Sie wurde notwendig, da mehrere Mitglieder aus dem Gremium ausgeschieden sind, unter anderem aufgrund eines Schulwechsels.\n\nLeider wurde die Wahl nur von wenigen Eltern besucht, was bedauerlich ist, da die Elternarbeit eine wichtige Rolle für unsere Schule spielt. Dennoch konnte die Wahl erfolgreich durchgeführt werden.\n\nGewählt wurde folgender Vorstand des Elternbeirats der IGMH:\n\n**Elternbeiratsvorsitz**\n\n- Dina Losert\n\n**Stellvertretende Elternbeiratsvorsitzende**\n\n- Bernhard Topschall\n- Maik Palm\n\n**Beisitzerinnen und Beisitzer**\n\n- Marielle Ianello\n- Gentiana Erol\n- Jenny Reger-Stilgenbauer\n- Michael Weber\n- Marion Leininger\n- Raul Chira\n\nAußerdem wurden die ständigen Mitglieder sowie deren Stellvertreterinnen und Stellvertreter für die Schulkonferenz gewählt. In der ersten Sitzung werden die konkreten Aufgaben verteilt, zum Beispiel die Vertretung im Mensarat oder im Förderverein.\n\nWir freuen uns auf eine engagierte und erfolgreiche Zusammenarbeit im Interesse aller Schülerinnen und Schüler.","date":"2025-02-26 12:00:00.000Z","public":true,"slug":"vorstand-gewaehlt-februar-2025","title":"Neuer Vorstand des Elternbeirats gewählt (Februar 2025)"},{"body":"Am 1. Oktober 2025 war es endlich so weit: Die IGMH feierte die Einweihung ihrer neuen Sporthalle. Oberbürgermeister Christian Specht übergab das moderne Gebäude im Wert von rund 23 Millionen Euro offiziell seiner Bestimmung. 3,85 Millionen Euro der Kosten wurden durch das Bundesprogramm „Sanierung kommunaler Einrichtungen\" gefördert.\n\nNach vielen Jahren des Wartens und Planens ist damit ein echtes Zukunftsprojekt für unsere Schule und die ganze Neckarstadt entstanden. Die alte Halle konnte aufgrund schwerer Bauschäden nicht mehr genutzt werden, so fiel die Entscheidung für einen kompletten Neubau.\n\nEntstanden ist eine helle, moderne und barrierefreie Sportanlage mit einer großen Dreifeldhalle und einer kleineren Einfeldhalle, die sowohl im Schulalltag als auch von Vereinen genutzt werden können. Eine Photovoltaikanlage, Dachbegrünung und moderne Wärmeschutztechnik sorgen dafür, dass auch das Thema Nachhaltigkeit nicht zu kurz kommt.\n\nAuch architektonisch ist die neue Halle ein Hingucker: viel Glas, ein elegantes Holztragwerk und eine dunkle Fassade, die sich harmonisch in den Herzogenriedpark einfügt. „Ein Leuchtturmprojekt für Bildung, Sport und Nachhaltigkeit\", betonte Oberbürgermeister Specht bei der Einweihung.\n\nDie Schülerinnen und Schüler dürfen sich auf ideale Bedingungen für Unterricht und Training freuen, und die IGMH kann stolz sein auf eine Sporthalle, die ihrem Namen als Eliteschule des Sports wirklich gerecht wird.","date":"2025-10-05 12:00:00.000Z","public":true,"slug":"neue-sporthalle-eroeffnet","title":"Neue Sporthalle feierlich eröffnet"},{"body":"Wir laden herzlich zur Vollversammlung des Elternbeirats der IGMH ein.\n\n**Datum:** Donnerstag, 13. November 2025\n**Uhrzeit:** 19:00 Uhr\n**Ort:** Hörsaal 2 der IGMH\n\n## Tagesordnung\n\n1. Begrüßung und Feststellung der Beschlussfähigkeit, Wahlleitung und Protokoll\n2. Vorstellung der Kandidatinnen und Kandidaten\n3. Wahl der Mitglieder des EBV-Vorstands\n4. Wahl der Mitglieder der Schulkonferenz\n5. Mitteilung über Änderung der Geschäftsordnung\n6. Schlusswort\n\n## Wir brauchen Sie\n\nZur Wahl stehen der Elternbeiratsvorstand, zwei stellvertretende Vorsitzende sowie Beisitzerinnen und Beisitzer. Als Beisitzerin oder Beisitzer nehmen Sie beispielsweise an den Sitzungen des Elternbeirats teil, die in der Regel alle ein bis zwei Monate stattfinden. Es gibt vielfältige Möglichkeiten, sich je nach zeitlicher Verfügbarkeit einzubringen. Jede Form der Unterstützung ist von großem Wert.\n\nFalls Sie Interesse haben, sich aufstellen zu lassen, oder Fragen zur Arbeit des Elternbeirats haben, melden Sie sich gerne vorab über die [Kontaktseite](/contact) oder sprechen Sie uns direkt am Wahlabend an.\n\nWir kommen hiermit einer Informationspflicht nach Punkt 9 der Geschäftsordnung nach:\n\n> Eine Änderung der Geschäftsordnung erfolgt durch Mehrheitsbeschluss des Vorstands. Die Information über die geänderte Geschäftsordnung erfolgt mit Veröffentlichung auf der Homepage des Elternbeirates und in der nächsten Elternbeiratssitzung.","date":"2025-10-24 12:00:00.000Z","public":true,"slug":"einladung-vollversammlung-2025","title":"Einladung zur Vollversammlung des Elternbeirats"},{"body":"Die Schule bietet ab sofort einen neuen Service an: Lost and Found, eine Fundstelle für verlorene Gegenstände.\n\nAb sofort gibt es eine digitale Möglichkeit, nach verlorenen Gegenständen zu suchen. Über 200 Fundsachen wurden fotografiert und in Bildergalerien nach Kategorien auf der Homepage der IGMH veröffentlicht.\n\nAlle Informationen und die Bilderstrecken finden Sie beim [Lost-and-Found-Service der IGMH](https://igmh.de/presse/fundsachen-bilder-durchklicken-verlorenes-wiederfinden).\n\nWer etwas auf den Fotos oder in der Beschreibung wiedererkennt, kann sich per E-Mail an [heike.scholz@igmh.de](mailto:heike.scholz@igmh.de) wenden.","date":"2025-10-29 12:00:00.000Z","public":true,"slug":"lost-and-found","title":"Lost and Found: Fundstelle für verlorene Gegenstände"},{"body":"Am 13. November 2025 fand die turnusmäßige Wahl des Elternbeirats der IGMH im Hörsaal 2 statt. Besetzt wurden der Vorstand, die Beisitzerinnen und Beisitzer, die Mitglieder der Schulkonferenz sowie zwei Kassenprüferinnen bzw. Kassenprüfer. Die Versammlung war mit 35 wahlberechtigten Elternvertreterinnen und Elternvertretern beschlussfähig.\n\nMit der Wahl beginnt die nächste Amtsperiode, in der die gewählten Mitglieder die Interessen der Eltern vertreten, die Zusammenarbeit mit der Schulleitung begleiten und Impulse für das Schulleben setzen. Im Anschluss wurden aktuelle Themen angesprochen, darunter die Pausenregelung, der Umgang mit Mobiltelefonen, der digitale Zugang zu Untis, die Situation der Schultoiletten sowie die Kommunikation zwischen Elternhaus und Schule.\n\n## Ergebnisse im Überblick\n\n**Vorstand Elternbeirat**\n\n- 1. Vorsitz: Maik Palm\n- Stellvertretung: Gentiana Erol\n- Stellvertretung: Raul Chira\n\n**Beisitzer**\n\n- Neu gewählt: Susanne Naumburg, Rebecca Goldmann, Isabell Vesper\n- Im Amt verbleibend: Mariella Ianello, Marion Leininger, Jenny Reger-Stilgenbauer, Michael Weber\n\n**Schulkonferenz**\n\n- Mitglied kraft Amtes: Maik Palm\n- Feste Sitze: Gentiana Erol, Tanja Engelhardt, Jenny Reger-Stilgenbauer\n- Ersatzmitglieder: Franziska Schaaf, Susanne Naumburg, Michael Weber, Cemile Ökzüz\n\n**Kassenprüfer**\n\n- Franziska Wieczorek\n- Michael Vokt\n\nDas ausführliche Protokoll steht im Downloadbereich zur Verfügung.","date":"2025-11-26 12:00:00.000Z","public":true,"slug":"vollversammlung-wahl-november-2025","title":"Vollversammlung des Elternbeirats: Wahl am 13. November 2025"},{"body":"Bitte unterstützen Sie das Schülercafé der IGMH mit Ihrer Stimme. Das Café soll verschönert und gemütlicher gestaltet werden, dafür zählt jede Stimme von Eltern und Unterstützern.\n\n**Hier können Sie abstimmen:** [zum Abstimmen beim Sparda-Impuls](https://www.spardaimpuls.de/projekte/68f9d6ec1d40df0c78f35285).\n\n## Dafür machen wir uns stark\n\nDas Schulcafé der IGMH ist ein Ort des Miteinanders. In den Mittagspausen verkaufen Schülerinnen und Schüler verschiedene gesunde Mittagssnacks, vom Sandwichtoast über Müsli bis zum Obstsalat, im Sommer darf es auch einmal ein Eis sein. Die helfenden Jugendlichen bekommen erste Einblicke in die gastronomische Arbeitswelt und engagieren sich für die Gemeinschaft.\n\nDie Überschüsse aus dem Verkauf fließen in ein Projekt, das Schülerinnen und Schüler bei der Finanzierung von Klassenfahrten unterstützt, die finanziell belastet sind und nicht von Bildung und Teilhabe profitieren können. Um dieses Projekt aufrechterhalten zu können, bewerben wir uns beim Sparda-Impuls.","date":"2025-11-12 12:00:00.000Z","public":true,"slug":"schulcafe-sparda-impuls-abstimmung","title":"Stimmen Sie für das Schulcafé beim Sparda-Impuls"},{"body":"Nachdem es anfangs recht schleppend mit den Stimmen voranging, begaben sich die Elternsprecher im wahrsten Sinne des Wortes auf Stimmenfang. Zwischenzeitlich belegten wir sogar kurzzeitig einen der ersten drei Plätze.\n\nDer Schlussspurt war ein regelrechter Krimi. Zwischen dem fünften und sechsten Platz lagen zeitweise nur drei Stimmen Unterschied. Am Ende erreichte das Projekt Schulcafé beim Sparda-Impuls-Wettbewerb einen hervorragenden fünften Platz mit 2.490 Stimmen.\n\nDank dieses großartigen Ergebnisses kann das Schulcafé nun mit den gewonnenen 3.000 Euro verschönert werden, sehr zur Freude aller Schülerinnen und Schüler der IGMH.\n\nDer Elternbeiratsvorstand gratuliert herzlich zum fünften Platz und bedankt sich bei allen Eltern, die engagiert Werbung für das Projekt gemacht haben, und natürlich bei allen, die abgestimmt und damit zum Erfolg beigetragen haben.\n\n## Kurz zusammengefasst\n\n- Projekt: Verschönerung des IGMH-Schulcafés\n- Wettbewerb: Sparda-Impuls\n- Ergebnis: 5. Platz\n- Stimmen: 2.490\n- Fördersumme: 3.000 Euro","date":"2025-12-04 12:00:00.000Z","public":true,"slug":"schulcafe-platz-5-sparda-impuls","title":"Das Schulcafé holt Platz 5 beim Sparda-Impuls-Wettbewerb"},{"body":"Am 9. Dezember fand die erste Sitzung des Elternbeiratsvorstands im Schuljahr 2025/26 statt. Im Mittelpunkt stand die Besetzung zentraler Aufgaben und Zuständigkeiten. Dabei wurde festgelegt, wer den Austausch mit dem Förderverein übernimmt, wer im Mensarat mitarbeitet und welche weiteren organisatorischen Aufgaben wahrgenommen werden.\n\n## Zusammenfassung\n\n- Förderverein: Mariella Ianello, Marion Leininger\n- Mensarat: Gentiana Erol, Raul Chira, Mariella Ianello, Maik Palm\n- Kasse und Protokoll: Marion Leininger\n- Homepage: Maik Palm\n- Schaukasten: Jenny Reger-Stilgenbauer\n\nDie Kasse wurde ordnungsgemäß an die zukünftige Kassenwartin übergeben. Die nächste Sitzung des Elternbeiratsvorstands ist für Ende Januar 2026 geplant.","date":"2025-12-12 12:00:00.000Z","public":true,"slug":"ebv-sitzung-dezember-2025","title":"1. EBV-Sitzung im Schuljahr 2025/26"},{"body":"Kreativität, Teamgeist und eine stimmungsvolle Atmosphäre: Auch in diesem Jahr war der Adventstüren-Contest ein voller Erfolg.\n\nDie Schülerinnen und Schüler hatten wieder die Gelegenheit, ihre Klassenzimmertür weihnachtlich zu dekorieren. Die Schülermitverantwortung (SMV) lobt den Contest jährlich aus und bietet den Klassen damit die Möglichkeit, ihre Klassenkasse aufzubessern.\n\nDer Förderverein der IGMH unterstützt die SMV dabei jedes Jahr und stellt das Preisgeld zur Verfügung. In diesem Jahr wurde das Preisgeld zusätzlich durch den Elternbeirat aufgestockt, der den Wettbewerb mit weiteren 280 Euro unterstützte.\n\nAm Mittwoch, den 17. Dezember, fand in der ersten großen Pause die feierliche Preisverleihung statt. Der Adventstüren-Contest sorgte auch in diesem Jahr für eine stimmungsvolle vorweihnachtliche Atmosphäre an der Schule.\n\n## Zusammenfassung\n\n- Die SMV organisiert jährlich den Adventstüren-Contest.\n- Der Förderverein stellt das Preisgeld bereit.\n- Der Elternbeirat unterstützt zusätzlich mit 280 Euro.\n- Preisverleihung: Mittwoch, 17. Dezember, in der 1. großen Pause.","date":"2025-12-18 12:00:00.000Z","public":true,"slug":"adventstueren-contest-2025","title":"Adventstüren-Contest"},{"body":"Am 10. März 2026 fand die zweite Sitzung des Elternbeiratsvorstands statt. Im Mittelpunkt standen der Mensabetrieb, Rückerstattungen des ehemaligen Caterers, Maßnahmen zur Mobbingprävention sowie organisatorische Fragen. Das Treffen verlief konstruktiv und lösungsorientiert.\n\n## Mensabetrieb und Austausch mit FMD\n\nFür den 18. März wurde ein Austausch mit dem Caterer FMD angekündigt. Fragen der Eltern zum Mensabetrieb sollten über die Elternsprecher gesammelt und gebündelt weitergeleitet werden. Deutlich wurde, dass die zweite Essensausgabeschlange für die siebten Klassen derzeit nicht wie vorgesehen funktioniert. Dieses Thema sollte gezielt angesprochen werden.\n\n## Rückerstattungen des ehemaligen Caterers\n\nBeim ehemaligen Caterer Ehrenfried haben noch nicht alle Eltern, die Beiträge überwiesen hatten, ihre Rückerstattung erhalten. Der Großteil der ausstehenden Beträge wurde jedoch bereits zurückgezahlt.\n\n## Mobbingprävention\n\nDa es vermehrt zu Mobbing- und Gewaltvorfällen kommt, soll sich der Vorstand künftig intensiver mit Mobbingprävention befassen. Konkrete Vorschläge sollen an die Schulleitung herangetragen werden, beispielsweise unter Einbeziehung externer Stellen wie dem Haus des Jugendrechts.\n\n## Themen für die Schulleitung\n\nMehrere offene Punkte werden an die Schulleitung herangetragen, darunter der Wunsch nach einem Schulfotografen, der aktuelle Stand beim Elternzugang zu WebUntis und die Wiederaufnahme der Quartalsgespräche mit der Schulleitung.\n\nDie Sitzung war von einem konstruktiven Austausch geprägt und setzte wichtige Impulse für die weitere Elternarbeit.","date":"2026-03-21 12:00:00.000Z","public":true,"slug":"ebv-sitzung-maerz-2026","title":"Zweite Sitzung des Elternbeiratsvorstands am 10. März 2026"},{"body":"Am 18. März fand ein Austausch mit Mitarbeitenden des Caterers FMD, Elternvertreterinnen und Elternvertretern, Lehrkräften sowie Schülerinnen und Schülern der SMV statt. Insgesamt war es ein sehr konstruktives Gespräch. Die Eltern hatten im Vorfeld die Möglichkeit, über ihre Elternvertretungen Fragen und Anregungen einzureichen.\n\n## Fragen und Anmerkungen der Eltern\n\n- Mehrere Eltern äußerten Fragen zu den erhöhten Preisen.\n- Einige Kinder berichten, dass sie trotz Vorbestellung keinen Nachtisch erhalten haben, obwohl dieser bezahlt wurde.\n- Positiv war, dass laktosefreie und vegetarische Menüs angeboten werden. Werden beide am selben Tag angeboten, ist die Auswahl jedoch eingeschränkt. Angeregt wurde ein abwechslungsreicherer Speiseplan.\n- Angeregt wurde, PayPal als zusätzliche Aufladefunktion für das Essenskonto zu prüfen.\n- Gewünscht wurden kleinere Snacks oder einfache Gerichte zum Barzahlen, etwa belegte Brötchen oder Brezeln.\n- Viele Eltern sprachen ausdrücklich ein Lob aus, dass sich das Essen insgesamt deutlich verbessert habe.\n\n## Rückmeldungen von FMD\n\nFMD erklärte, dass der Preisspielraum begrenzt sei, da die Preise im Vergleich zu anderen Caterern bereits im unteren Bereich lägen. Nach Vorgaben der Stadt gibt es nur einmal pro Woche ein Fleischgericht. Als tägliche Alternative gibt es weiterhin Spaghetti Bolognese, die nicht vorbestellbar sind, aber jeden Tag bar oder per Chip erhältlich.\n\nFalls Kinder einen vorbestellten Nachtisch nicht erhalten haben, sollen sie bitte aktiv danach fragen. Hierzu wird es zusätzlich einen Aushang geben. Zudem wird geprüft, ob künftig wieder eine Salatbar angeboten werden kann. PayPal wurde angesprochen, hier hat FMD als Teil der GBG-Gruppe keine alleinige Entscheidungsfreiheit, nimmt das Anliegen aber mit.\n\n## Kiosk und Snack-Angebot\n\nDer Kiosk bietet täglich ab 7:15 Uhr sowie in der Mittagszeit kleine Snacks an, zahlbar bar oder mit Chip. Dort liegt ein Wünschebuch aus, in das die Kinder gewünschte Produkte eintragen können. Ein mobiler Snack-Trolley ist aus personellen und hygienischen Gründen leider nicht umsetzbar.\n\n## Zusammenfassung\n\n- Der Austausch mit FMD verlief konstruktiv und offen.\n- Zentrale Themen waren Preise, Dessertausgabe, Speiseplan, Snack-Angebote und Pausenregelung.\n- Spaghetti Bolognese bleibt täglich verfügbar, auch wenn sie nicht vorbestellbar ist.\n- Eine Salatbar wird geprüft, PayPal als Zahlungsoption angeregt.\n- Die Fragen zur Pausenregelung werden in der Schulkonferenz weiter beraten.","date":"2026-03-22 12:00:00.000Z","public":true,"slug":"mensa-austausch-fmd-maerz-2026","title":"Mensa-Austausch mit FMD am 18. März 2026"}] ,