diff --git a/frontend/themes/apus/views/future-session-view.css b/frontend/themes/apus/views/future-session-view.css
new file mode 100644
index 0000000..39b0caf
--- /dev/null
+++ b/frontend/themes/apus/views/future-session-view.css
@@ -0,0 +1,17 @@
+/*
+ * Apus - A social wall for conferences with additional features.
+ * Copyright (C) Marcus Fihlon and the individual contributors to Apus.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published
+ * by the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see .
+ */
diff --git a/frontend/themes/apus/views/future-sessions-view.css b/frontend/themes/apus/views/future-sessions-view.css
new file mode 100644
index 0000000..39b0caf
--- /dev/null
+++ b/frontend/themes/apus/views/future-sessions-view.css
@@ -0,0 +1,17 @@
+/*
+ * Apus - A social wall for conferences with additional features.
+ * Copyright (C) Marcus Fihlon and the individual contributors to Apus.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published
+ * by the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see .
+ */
diff --git a/frontend/themes/apus/views/running-session-view.css b/frontend/themes/apus/views/running-session-view.css
new file mode 100644
index 0000000..39b0caf
--- /dev/null
+++ b/frontend/themes/apus/views/running-session-view.css
@@ -0,0 +1,17 @@
+/*
+ * Apus - A social wall for conferences with additional features.
+ * Copyright (C) Marcus Fihlon and the individual contributors to Apus.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published
+ * by the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see .
+ */
diff --git a/frontend/themes/apus/views/running-sessions-view.css b/frontend/themes/apus/views/running-sessions-view.css
new file mode 100644
index 0000000..39b0caf
--- /dev/null
+++ b/frontend/themes/apus/views/running-sessions-view.css
@@ -0,0 +1,17 @@
+/*
+ * Apus - A social wall for conferences with additional features.
+ * Copyright (C) Marcus Fihlon and the individual contributors to Apus.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published
+ * by the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see .
+ */
diff --git a/frontend/themes/apus/views/sessions-view.css b/frontend/themes/apus/views/sessions-view.css
new file mode 100644
index 0000000..39b0caf
--- /dev/null
+++ b/frontend/themes/apus/views/sessions-view.css
@@ -0,0 +1,17 @@
+/*
+ * Apus - A social wall for conferences with additional features.
+ * Copyright (C) Marcus Fihlon and the individual contributors to Apus.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published
+ * by the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see .
+ */
diff --git a/src/main/bundles/dev.bundle b/src/main/bundles/dev.bundle
index 07dc3b2..35fcb72 100644
Binary files a/src/main/bundles/dev.bundle and b/src/main/bundles/dev.bundle differ
diff --git a/src/main/java/swiss/fihlon/apus/ui/view/FutureSessionView.java b/src/main/java/swiss/fihlon/apus/ui/view/FutureSessionView.java
new file mode 100644
index 0000000..44d1902
--- /dev/null
+++ b/src/main/java/swiss/fihlon/apus/ui/view/FutureSessionView.java
@@ -0,0 +1,36 @@
+/*
+ * Apus - A social wall for conferences with additional features.
+ * Copyright (C) Marcus Fihlon and the individual contributors to Apus.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published
+ * by the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see .
+ */
+package swiss.fihlon.apus.ui.view;
+
+import com.vaadin.flow.component.dependency.CssImport;
+import com.vaadin.flow.component.html.H4;
+import com.vaadin.flow.component.html.Paragraph;
+import com.vaadin.flow.component.orderedlayout.VerticalLayout;
+import org.jetbrains.annotations.NotNull;
+import swiss.fihlon.apus.conference.Session;
+
+@CssImport(value = "./themes/apus/views/future-session-view.css")
+public class FutureSessionView extends VerticalLayout {
+
+ public FutureSessionView(@NotNull final Session session) {
+ add(new H4(session.title()));
+ add(new Paragraph(session.speaker()));
+ add(new Paragraph(String.format("starts at %s", session.startDate().toLocalTime())));
+ }
+
+}
diff --git a/src/main/java/swiss/fihlon/apus/ui/view/FutureSessionsView.java b/src/main/java/swiss/fihlon/apus/ui/view/FutureSessionsView.java
new file mode 100644
index 0000000..6631a5e
--- /dev/null
+++ b/src/main/java/swiss/fihlon/apus/ui/view/FutureSessionsView.java
@@ -0,0 +1,39 @@
+/*
+ * Apus - A social wall for conferences with additional features.
+ * Copyright (C) Marcus Fihlon and the individual contributors to Apus.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published
+ * by the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see .
+ */
+package swiss.fihlon.apus.ui.view;
+
+import com.vaadin.flow.component.dependency.CssImport;
+import com.vaadin.flow.component.html.H3;
+import com.vaadin.flow.component.orderedlayout.HorizontalLayout;
+import com.vaadin.flow.component.orderedlayout.VerticalLayout;
+import org.jetbrains.annotations.NotNull;
+import swiss.fihlon.apus.conference.Session;
+import swiss.fihlon.apus.service.ConferenceService;
+
+@CssImport(value = "./themes/apus/views/future-sessions-view.css")
+public class FutureSessionsView extends VerticalLayout {
+
+ public FutureSessionsView(@NotNull final ConferenceService conferenceService) {
+ final HorizontalLayout futureSessions = new HorizontalLayout();
+ for (final Session session : conferenceService.getFutureSessions()) {
+ futureSessions.add(new FutureSessionView(session));
+ }
+ add(new H3("Future Sessions"), futureSessions);
+ }
+
+}
diff --git a/src/main/java/swiss/fihlon/apus/ui/view/RunningSessionView.java b/src/main/java/swiss/fihlon/apus/ui/view/RunningSessionView.java
new file mode 100644
index 0000000..160a4a7
--- /dev/null
+++ b/src/main/java/swiss/fihlon/apus/ui/view/RunningSessionView.java
@@ -0,0 +1,42 @@
+/*
+ * Apus - A social wall for conferences with additional features.
+ * Copyright (C) Marcus Fihlon and the individual contributors to Apus.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published
+ * by the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see .
+ */
+package swiss.fihlon.apus.ui.view;
+
+import com.vaadin.flow.component.dependency.CssImport;
+import com.vaadin.flow.component.html.H4;
+import com.vaadin.flow.component.html.Paragraph;
+import com.vaadin.flow.component.orderedlayout.VerticalLayout;
+import org.jetbrains.annotations.NotNull;
+import swiss.fihlon.apus.conference.Session;
+
+import java.time.Duration;
+import java.time.LocalDateTime;
+
+@CssImport(value = "./themes/apus/views/running-session-view.css")
+public class RunningSessionView extends VerticalLayout {
+
+ public RunningSessionView(@NotNull final Session session) {
+ final Duration duration = Duration.between(LocalDateTime.now(), session.endDate());
+ final long timeLeft = Math.round(duration.getSeconds() / 60f);
+ final String timeUnit = timeLeft == 1 ? "minute" : "minutes";
+ add(new H4(session.title()));
+ add(new Paragraph(session.speaker()));
+ add(new Paragraph(String.format("%d %s left", timeLeft, timeUnit)));
+ }
+
+}
diff --git a/src/main/java/swiss/fihlon/apus/ui/view/RunningSessionsView.java b/src/main/java/swiss/fihlon/apus/ui/view/RunningSessionsView.java
new file mode 100644
index 0000000..ca3f3e1
--- /dev/null
+++ b/src/main/java/swiss/fihlon/apus/ui/view/RunningSessionsView.java
@@ -0,0 +1,39 @@
+/*
+ * Apus - A social wall for conferences with additional features.
+ * Copyright (C) Marcus Fihlon and the individual contributors to Apus.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published
+ * by the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see .
+ */
+package swiss.fihlon.apus.ui.view;
+
+import com.vaadin.flow.component.dependency.CssImport;
+import com.vaadin.flow.component.html.H3;
+import com.vaadin.flow.component.orderedlayout.HorizontalLayout;
+import com.vaadin.flow.component.orderedlayout.VerticalLayout;
+import org.jetbrains.annotations.NotNull;
+import swiss.fihlon.apus.conference.Session;
+import swiss.fihlon.apus.service.ConferenceService;
+
+@CssImport(value = "./themes/apus/views/running-sessions-view.css")
+public class RunningSessionsView extends VerticalLayout {
+
+ public RunningSessionsView(@NotNull final ConferenceService conferenceService) {
+ final HorizontalLayout runningSessions = new HorizontalLayout();
+ for (final Session session : conferenceService.getRunningSessions()) {
+ runningSessions.add(new RunningSessionView(session));
+ }
+ add(new H3("Running Sessions"), runningSessions);
+ }
+
+}
diff --git a/src/main/java/swiss/fihlon/apus/ui/view/SessionsView.java b/src/main/java/swiss/fihlon/apus/ui/view/SessionsView.java
new file mode 100644
index 0000000..c26116f
--- /dev/null
+++ b/src/main/java/swiss/fihlon/apus/ui/view/SessionsView.java
@@ -0,0 +1,33 @@
+/*
+ * Apus - A social wall for conferences with additional features.
+ * Copyright (C) Marcus Fihlon and the individual contributors to Apus.
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU Affero General Public License as published
+ * by the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU Affero General Public License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with this program. If not, see .
+ */
+package swiss.fihlon.apus.ui.view;
+
+import com.vaadin.flow.component.dependency.CssImport;
+import com.vaadin.flow.component.orderedlayout.VerticalLayout;
+import org.jetbrains.annotations.NotNull;
+import swiss.fihlon.apus.service.ConferenceService;
+
+@CssImport(value = "./themes/apus/views/sessions-view.css")
+public class SessionsView extends VerticalLayout {
+
+ public SessionsView(@NotNull final ConferenceService conferenceService) {
+ add(new RunningSessionsView(conferenceService));
+ add(new FutureSessionsView(conferenceService));
+ }
+
+}
diff --git a/src/main/java/swiss/fihlon/apus/ui/view/SocialWall.java b/src/main/java/swiss/fihlon/apus/ui/view/SocialWall.java
index 0471b2e..3cd64ae 100644
--- a/src/main/java/swiss/fihlon/apus/ui/view/SocialWall.java
+++ b/src/main/java/swiss/fihlon/apus/ui/view/SocialWall.java
@@ -22,6 +22,8 @@
import com.vaadin.flow.component.orderedlayout.HorizontalLayout;
import com.vaadin.flow.component.orderedlayout.VerticalLayout;
import com.vaadin.flow.router.Route;
+import org.jetbrains.annotations.NotNull;
+import swiss.fihlon.apus.service.ConferenceService;
import java.io.Serial;
@@ -32,10 +34,10 @@ public class SocialWall extends VerticalLayout {
@Serial
private static final long serialVersionUID = 7909437130138135008L;
- public SocialWall() {
+ public SocialWall(@NotNull final ConferenceService conferenceService) {
setId("social-wall");
add(new HorizontalLayout(
- new Div("Agenda"),
+ new SessionsView(conferenceService),
new Div("Posts")));
add(new Div("Footer"));
}