Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
71 changes: 47 additions & 24 deletions app/academic-forum/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -27,9 +27,9 @@ export default function PaperSubmission() {
</div>
</div>
<div className="mt-4">
<Text textType={"paragraph"}>
<Text textType={"paragraph"}>
Knowledge Partner: <b>IEEE Blockchain</b>
</Text>
</Text>
</div>
<div className="mt-12">
<Text textType={"paragraph"}>
Expand All @@ -38,12 +38,15 @@ export default function PaperSubmission() {
</div>
<div className="mt-2">
<Text textType={"paragraph"}>
<b>Submission Deadline:</b> <del>August 11, 2025 (23:59 CEST)</del> August 20, 2025 (23:59 CEST)
<b>Submission Deadline:</b>{" "}
<del>August 11, 2025 (23:59 CEST)</del> August 20, 2025 (23:59
CEST)
</Text>
</div>
<div className="mt-2">
<Text textType={"paragraph"}>
<b>Acceptance Notification:</b> <del>August 15, 2025</del> August 22, 2025
<b>Acceptance Notification:</b> <del>August 15, 2025</del>{" "}
August 22, 2025
</Text>
</div>
<div className="mt-2">
Expand All @@ -53,20 +56,17 @@ export default function PaperSubmission() {
</div>
<div className="mt-2">
<Text textType={"paragraph"}>
<b>Academic Track Date:</b> September 12, 2025
<b>Academic Track Date:</b> September 11, 2025; 13:30 - 17:45
CEST
</Text>
</div>
<div className="mt-2">
<Text textType={"paragraph"}>
<b>Venue:</b> House of Communication, Munich, Germany
</Text>
</div>
<Link
href={
"https://apply.tum-blockchain.com/r/m6YOrA"
}
>
<Button buttonType={"cta"} className="mt-6">
<Link href={"https://apply.tum-blockchain.com/r/m6YOrA"}>
<Button buttonType={"cta"} disabled className="mt-6">
Submit Abstract
</Button>
</Link>
Expand All @@ -77,10 +77,24 @@ export default function PaperSubmission() {
</div>
<div className="mt-12">
<Text textType={"paragraph"}>
We are delighted to announce the Call for Extended Abstracts for the Academic Forum at the 2025 TUM Blockchain Conference. The Academic Forum is hosted in collaboration with the TUM Chair of Network Architectures and Services. We are happy to have IEEE Blockchain as a Knowledge partner inviting selected works for a submission to IEEE Blockchain Technical Briefs. The selected abstracts will be offered to present their work in form of a short talk and/or a poster presentation.
We are delighted to announce the Call for Extended Abstracts for
the Academic Forum at the 2025 TUM Blockchain Conference. The
Academic Forum is hosted in collaboration with the TUM Chair of
Network Architectures and Services. We are happy to have IEEE
Blockchain as a Knowledge partner inviting selected works for a
submission to IEEE Blockchain Technical Briefs. The selected
abstracts will be offered to present their work in form of a
short talk and/or a poster presentation.
<br />
<br />
This event invites researchers, academics, and industry professionals to connect and present their latest work in the topics related to the Science of Blockchains. Accepted talks will be showcased through a short presentation at the conference and displayed as posters in the conference area. The posters will remain on display for the entire day of the event, offering an excellent platform for in-depth discussions and networking opportunities.
This event invites researchers, academics, and industry
professionals to connect and present their latest work in the
topics related to the Science of Blockchains. Accepted talks
will be showcased through a short presentation at the conference
and displayed as posters in the conference area. The posters
will remain on display for the entire day of the event, offering
an excellent platform for in-depth discussions and networking
opportunities.
</Text>
</div>
<div className="mt-20">
Expand Down Expand Up @@ -198,12 +212,8 @@ export default function PaperSubmission() {
</ul>
</Text>
</div>
<Link
href={
"https://apply.tum-blockchain.com/r/m6YOrA"
}
>
<Button buttonType={"cta"} className="mt-6">
<Link href={"https://apply.tum-blockchain.com/r/m6YOrA"}>
<Button buttonType={"cta"} disabled className="mt-6">
Submit Abstract
</Button>
</Link>
Expand All @@ -212,7 +222,8 @@ export default function PaperSubmission() {
</div>
<div className="mt-6">
<Text textType={"paragraph"}>
Abstracts will be reviewed by the listed committee. Accepted papers will be invited to present their work at the conference.
Abstracts will be reviewed by the listed committee. Accepted
papers will be invited to present their work at the conference.
</Text>
</div>
<div className="mt-12">
Expand Down Expand Up @@ -278,10 +289,22 @@ export default function PaperSubmission() {
style={{ listStyleType: "circle" }}
className="pl-5 space-y-2"
>
<li>Jonas Gebele, TUM, Chair of Software Engineering for Business Information Systems</li>
<li>Burak Oez, TUM, Chair of Software Engineering for Business Information Systems</li>
<li>Fabian Stiehle, TUM, Information System Development and Operation</li>
<li>Kilian Glas, TUM, Chair of Network Architectures and Services</li>
<li>
Jonas Gebele, TUM, Chair of Software Engineering for
Business Information Systems
</li>
<li>
Burak Oez, TUM, Chair of Software Engineering for Business
Information Systems
</li>
<li>
Fabian Stiehle, TUM, Information System Development and
Operation
</li>
<li>
Kilian Glas, TUM, Chair of Network Architectures and
Services
</li>
</ul>
</Text>
</div>
Expand Down
87 changes: 60 additions & 27 deletions app/agenda/agenda.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -28,13 +28,16 @@ export const Agenda: React.FC<AgendaProps> = ({ sessions, speakers }) => {
"Stage 2": "Hopper Stage",
"Stage 3": "Nakamoto Stage",
"Workshop Room": "Lovelace Room",
Gern: "Gern",
};

const STAGE_PRIORITY: Record<string, number> = {
"Stage 3": 0, // Nakamoto — highest priority
"Stage 1": 1, // Turing
"Stage 2": 2, // Hopper
Gern: 2, // Gern
"Workshop Room": 3, // Lovelace
"Lab lounge": 0, // Lab lounge
};
const SAME_TIME_WINDOW_MS = 0 * 60 * 1000; // 5 minutes

Expand All @@ -56,9 +59,38 @@ export const Agenda: React.FC<AgendaProps> = ({ sessions, speakers }) => {
trackFilter === "all" || !trackFilter || trackFilter === item.track;
const matchesStage =
stageFilter === "all" || !stageFilter || stageFilter === item.room;
const matchesTitle =
!titleFilter.trim() ||
item.title.toLowerCase().includes(titleFilter.trim().toLowerCase());

const q = titleFilter.trim().toLowerCase();

const speakerTextParts: string[] = [];
const rawSpeakers = (item as any).speakers;
if (rawSpeakers && typeof rawSpeakers === "object") {
speakerTextParts.push(
...Object.keys(rawSpeakers).map((x) => String(x)),
...Object.values(rawSpeakers).map((x) => String(x)),
);
}

const searchableChunks = [
item.title,
(item as any).subtitle,
(item as any).description,
(item as any).abstract,
(item as any).summary,
item.track,
item.room,
...(Array.isArray((item as any).tags) ? (item as any).tags : []),
...(Array.isArray((item as any).keywords)
? (item as any).keywords
: []),
...speakerTextParts,
]
.filter(Boolean)
.map((x) => String(x).toLowerCase());

const haystack = searchableChunks.join(" | ");

const matchesTitle = !q || haystack.includes(q);

return matchesDay && matchesTrack && matchesStage && matchesTitle;
});
Expand Down Expand Up @@ -97,13 +129,13 @@ export const Agenda: React.FC<AgendaProps> = ({ sessions, speakers }) => {
</Text>
<div className="flex flex-col gap-2">
<Text textType={"paragraph"} className="font-bold text-left" as="p">
Title
Search
</Text>
<input
type="text"
value={titleFilter}
onChange={(e) => setTitleFilter(e.target.value)}
placeholder="Search agenda titles..."
placeholder="Titles, speakers, descriptions…"
className="w-full rounded-lg text-white border py-2 px-3 bg-black placeholder-gray-500"
/>
</div>
Expand Down Expand Up @@ -192,28 +224,29 @@ export const Agenda: React.FC<AgendaProps> = ({ sessions, speakers }) => {
/>
<Select.Content>
<Select.Item value="all">Any Track</Select.Item>
{Tracks.filter(
(track) => track !== "TUM Blockchain Club",
).map((track, index) => (
<Select.Item
value={track}
key={index}
className="flex items-center gap-2"
>
<span
className={classNames(
"inline-block w-3 h-3 rounded-full mr-2",
track === "Education" && "bg-green-400",
track === "Research" && "bg-yellow-400",
track === "Ecosystem" && "bg-blue-400",
track === "Regulation" && "bg-red-400",
track === "Workshop" && "bg-purple-400",
track === "Application" && "bg-teal-400",
)}
/>
{track}
</Select.Item>
))}
{Tracks.filter((track) => track !== "TBC'25").map(
(track, index) => (
<Select.Item
value={track}
key={index}
className="flex items-center gap-2"
>
<span
className={classNames(
"inline-block w-3 h-3 rounded-full mr-2",
track === "Education" && "bg-green-400",
track === "Research" && "bg-yellow-400",
track === "Ecosystem" && "bg-blue-400",
track === "Regulation" && "bg-red-400",
track === "Workshop" && "bg-purple-400",
track === "Application" && "bg-teal-400",
track === "Academic Forum" && "bg-orange-400",
)}
/>
{track}
</Select.Item>
),
)}
</Select.Content>
</Select.Root>
</div>
Expand Down
27 changes: 20 additions & 7 deletions app/workshops/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -4,26 +4,39 @@ import { Container } from "@/components/container";
import { Text } from "@/components/text";
import { WorkshopsContainer } from "@/components/workshops/WorkshopsContainer";
import { workshopItems } from "@/constants/WorkshopData";
import { fetchWorkshops, Workshop } from "@/components/service/contentStrapi";

export default async function Workshops() {
const workshops: Workshop[] = await fetchWorkshops();

const items = workshops.map((e) => ({
title: e.title,
description: e.description,
backgroundImg: e.backgroundImg?.url || "/workshops/default-workshop.png",
url: e.url,
starttime: e.starttime,
endtime: e.endtime,
room: e.room,
}));

const Workshops = async () => {
return (
<div className={"overflow-x-hidden"}>
<main className={"w-full pt-[25px] lg:pt-0 z-20 2xl:px-[225px] pb-40"}>
<Container className="flex justify-center">
<div className={"mt-[100px] md:mt-[20vh] z-10 max-w-3xl"}>
<Container>
<div
className={"mt-[100px] md:mt-[20vh] z-10 w-full max-w-7xl mx-auto"}
>
<Text
textType={"sub_hero"}
className="text-gradient text-left mb-20"
as="p"
>
Workshops
</Text>
<WorkshopsContainer items={workshopItems} />
<WorkshopsContainer items={items} />
</div>
</Container>
</main>
</div>
);
};

export default Workshops;
}
19 changes: 10 additions & 9 deletions components/header/Header.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -23,18 +23,18 @@ type HeaderLink = {

const links: HeaderLink[] = [
{ label: "Home", link: "/", showsAtHome: true },
{ label: "Manifesto", link: "/#manifesto", showsAtHome: true },
// { label: "Manifesto", link: "/#manifesto", showsAtHome: true },
{ label: "Speakers", link: "/speakers", showsAtHome: true },
{ label: "Sponsors", link: "/#sponsors", showsAtHome: true },
{ label: "Academic Forum", link: "/academic-forum", showsAtHome: true },
{
label: "Apply as Speaker",
link: "https://tally.so/r/w8EB0o",
showsAtHome: true,
},
// {
// label: "Apply as Speaker",
// link: "https://tally.so/r/w8EB0o",
// showsAtHome: true,
// },
{ label: "Side Events", link: "/side-events", showsAtHome: true },
{ label: "Agenda", link: "/agenda", showsAtHome: true },
// { label: "Workshops", link: "/workshops", showsAtHome: true },
{ label: "Workshops", link: "/workshops", showsAtHome: true },
// { label: "Student Grants", link: "#grants", showsAtHome: true },
// { label: "FAQ", link: "#faq", showsAtHome: true },
];
Expand Down Expand Up @@ -88,13 +88,14 @@ export const Sidebar: React.FC<SidebarProps> = ({ isOpen, onClose }) => {

const PRIORITY: string[] = [
"Home",
"Manifesto",
// "Manifesto",
"Speakers",
"Sponsors",
"Academic Forum",
"Side Events",
"Agenda",
"Apply as Speaker",
"Workshops",
// "Apply as Speaker",
];

function NavDesktop({ items }: { items: HeaderLink[] }) {
Expand Down
Loading