Skip to content

Commit 22fef98

Browse files
committed
site: add monthly overview section; add landing page section with next live stream link
1 parent 2fade27 commit 22fef98

File tree

4 files changed

+180
-0
lines changed

4 files changed

+180
-0
lines changed
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
---
2+
sidebar_position: 6
3+
---
4+
5+
# Monthly Review Videos
6+
7+
Every last Wednesday of the month, the Leios team hosts a public review meeting to share progress, foster transparency, and invite early feedback from everyone—builders, curious community members, and innovation teams who may overlap with Leios in the future.
8+
9+
These sessions cover the latest updates from each workstream, followed by an open Q&A where anyone can ask questions about Leios. Our goal is to keep the community informed and engaged as the project evolves.
10+
11+
**Workstreams covered in each review:**
12+
- Research
13+
- Formal specification & conformance testing
14+
- Delta QSD
15+
- Simulations (Rust & Haskell)
16+
- General analysis (economical, technical, performance, etc.)
17+
18+
Stay up to date with the latest progress and discussions! Below you'll find links to our monthly review videos, summarizing key milestones, research updates, and community Q&A.
19+
20+
:::info
21+
Until the end of 2024, our monthly review meetings were recorded via Google Meet and shared as links. Starting in 2025, we began live streaming these sessions on [YouTube](https://www.youtube.com/playlist?list=PLnPTB0CuBOBzWWpnojAK3ZaFy9RdofP6l) for greater accessibility and transparency. For some months, due to technical issues (e.g., screen sharing or audio problems), we may provide a fallback Google Meet recording instead of the YouTube stream.
22+
:::
23+
24+
## 2025 (YouTube & Google Meet Recordings)
25+
26+
- **May 2025:** [YouTube](https://www.youtube.com/watch?v=wXqKpQT2H3Y&list=PLnPTB0CuBOBzWWpnojAK3ZaFy9RdofP6l&index=1) | [Google Meet](https://meet.google.com/qhx-joxe-rmz)
27+
- **April 2025:** [YouTube](https://www.youtube.com/watch?v=-jddya2E2NA&list=PLnPTB0CuBOBzWWpnojAK3ZaFy9RdofP6l&index=2) | [Google Meet](https://drive.google.com/file/d/1OufvQSHLhC2VHmVr-RLplb6hkdEyfPLi/view?usp=sharing)
28+
- **March 2025:** [YouTube](https://www.youtube.com/watch?v=7K6qXiVsMXg&list=PLnPTB0CuBOBzWWpnojAK3ZaFy9RdofP6l&index=3) | [Google Meet](https://drive.google.com/file/d/1aCM-RJql7nX1MpMOG3pO9A-qTkpivzIT/view?usp=sharing)
29+
- **February 2025:** [YouTube](https://www.youtube.com/watch?v=7Ze9iVs-bI4&list=PLnPTB0CuBOBzWWpnojAK3ZaFy9RdofP6l&index=4) | [Google Meet](https://drive.google.com/file/d/17f5OtHEsKuUPRdbwQn9wJtdffBiPbJK7/view?usp=sharing)
30+
- **January 2025:** [YouTube](https://www.youtube.com/watch?v=6ovcWDCdqFU&list=PLnPTB0CuBOBzWWpnojAK3ZaFy9RdofP6l&index=5) | [Google Meet](https://drive.google.com/file/d/1e7YVDUWw945zQL3j0LrUwr42lXpJf4cK/view?usp=sharing)
31+
32+
## 2023 (Google Meet Recordings)
33+
34+
- **December 2024**: [Google Meet](https://drive.google.com/file/d/1F07oKxBgdOEasGcstxEavkPCgr58sbIO/view?usp=sharing)
35+
- **November 2024**: [Google Meet](https://drive.google.com/file/d/1W4iu4MwOXILXes1Zi43MeM505KAOHXso/view?usp=sharing)
36+
- **October 2024**: [Google Meet](https://drive.google.com/file/d/12VE0__S0knHqXXpIVdXGWvDipK0g89p_/view?usp=sharing)

site/sidebars.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ const sidebars: SidebarsConfig = {
3434
"development/throughput-simulation",
3535
"development/simulation-demonstration",
3636
"development/cost-estimator",
37+
"development/monthly-reviews",
3738
{
3839
type: "link",
3940
href: "https://leios.cardano-scaling.org/visualizer",

site/src/pages/index.module.css

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -128,3 +128,16 @@ details[open] .faqQuestion::after {
128128
border-top: 1px solid var(--ifm-color-emphasis-300);
129129
margin-top: 2rem;
130130
}
131+
132+
.underlineLink {
133+
background: none;
134+
color: var(--ifm-link-color);
135+
text-decoration: underline;
136+
text-underline-offset: 4px;
137+
font-size: 1.1rem;
138+
font-weight: 600;
139+
padding: 0;
140+
border: none;
141+
box-shadow: none;
142+
cursor: pointer;
143+
}

site/src/pages/index.tsx

Lines changed: 130 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import HomepageFeatures from "@site/src/components/HomepageFeatures";
55
import Heading from "@theme/Heading";
66
import Layout from "@theme/Layout";
77
import clsx from "clsx";
8+
import React, { useEffect, useState } from "react";
89

910
import styles from "./index.module.css";
1011

@@ -68,6 +69,134 @@ function VideoSection() {
6869
);
6970
}
7071

72+
function getLastWednesdayOfMonth(date = new Date()) {
73+
const year = date.getFullYear();
74+
const month = date.getMonth();
75+
// Start from the last day of the month
76+
const lastDay = new Date(Date.UTC(year, month + 1, 0));
77+
// 3 = Wednesday
78+
const lastWednesday = new Date(lastDay);
79+
while (lastWednesday.getUTCDay() !== 3) {
80+
lastWednesday.setUTCDate(lastWednesday.getUTCDate() - 1);
81+
}
82+
// Set to 14:00 UTC (2pm UTC)
83+
lastWednesday.setUTCHours(14, 0, 0, 0);
84+
return lastWednesday;
85+
}
86+
87+
function formatCountdown(ms) {
88+
if (ms <= 0) return "Starting soon";
89+
const totalSeconds = Math.floor(ms / 1000);
90+
const weeks = Math.floor(totalSeconds / (7 * 24 * 3600));
91+
const days = Math.floor((totalSeconds % (7 * 24 * 3600)) / (24 * 3600));
92+
const hours = Math.floor((totalSeconds % (24 * 3600)) / 3600);
93+
const minutes = Math.floor((totalSeconds % 3600) / 60);
94+
const seconds = totalSeconds % 60;
95+
const parts = [];
96+
if (weeks) parts.push(`${weeks} week${weeks > 1 ? "s" : ""}`);
97+
if (days) parts.push(`${days} day${days > 1 ? "s" : ""}`);
98+
if (hours) parts.push(`${hours} hour${hours > 1 ? "s" : ""}`);
99+
if (minutes) parts.push(`${minutes} min${minutes > 1 ? "s" : ""}`);
100+
if (seconds && parts.length < 2) {
101+
parts.push(`${seconds} sec${seconds > 1 ? "s" : ""}`);
102+
}
103+
return `Starting in ${parts.slice(0, 2).join(", ")}`;
104+
}
105+
106+
function MonthlyReviewsSection() {
107+
const [countdown, setCountdown] = useState("");
108+
const [nextDate, setNextDate] = useState("");
109+
useEffect(() => {
110+
function updateCountdown() {
111+
const now = new Date();
112+
const target = getLastWednesdayOfMonth(now);
113+
setCountdown(formatCountdown(target.getTime() - now.getTime()));
114+
setNextDate(target.toLocaleString(undefined, {
115+
weekday: "short",
116+
year: "numeric",
117+
month: "short",
118+
day: "numeric",
119+
hour: "2-digit",
120+
minute: "2-digit",
121+
hour12: false,
122+
}));
123+
}
124+
updateCountdown();
125+
const interval = setInterval(updateCountdown, 1000);
126+
return () => clearInterval(interval);
127+
}, []);
128+
return (
129+
<section className={clsx(styles.videoSection, styles.borderTop)}>
130+
<div className="container">
131+
<div className="row">
132+
<div className="col col--8 col--offset-2">
133+
<h2 className="text--center">
134+
Stay Up to Date
135+
</h2>
136+
<p className={clsx("text--center", styles.subtitle)}>
137+
Catch up on the latest Leios progress, key
138+
decisions, and Q&A in our monthly review videos.
139+
</p>
140+
<div
141+
className="text--center"
142+
style={{
143+
display: "flex",
144+
justifyContent: "center",
145+
alignItems: "center",
146+
gap: 16,
147+
}}
148+
>
149+
<Link
150+
className="button button--primary button--lg"
151+
to="https://www.youtube.com/watch?v=wXqKpQT2H3Y&list=PLnPTB0CuBOBzWWpnojAK3ZaFy9RdofP6l&index=2"
152+
target="_blank"
153+
rel="noopener noreferrer"
154+
style={{
155+
display: "flex",
156+
flexDirection: "column",
157+
alignItems: "center",
158+
minWidth: 180,
159+
}}
160+
>
161+
<span>Watch Live</span>
162+
<span
163+
style={{
164+
fontSize: "0.68em",
165+
fontWeight: 600,
166+
color:
167+
"var(--ifm-color-primary-contrast-background, #222)",
168+
marginTop: 2,
169+
lineHeight: 1.2,
170+
}}
171+
>
172+
{countdown}
173+
</span>
174+
</Link>
175+
<Link
176+
className={clsx(styles.underlineLink)}
177+
to="/docs/development/monthly-reviews"
178+
>
179+
Catch Up Now
180+
</Link>
181+
</div>
182+
<div
183+
style={{
184+
fontSize: "1rem",
185+
marginTop: 10,
186+
color: "var(--ifm-color-emphasis-800)",
187+
textAlign: "center",
188+
fontWeight: 500,
189+
}}
190+
>
191+
Next update: {nextDate}
192+
</div>
193+
</div>
194+
</div>
195+
</div>
196+
</section>
197+
);
198+
}
199+
71200
export default function Home(): React.ReactElement {
72201
const { siteConfig } = useDocusaurusContext();
73202
return (
@@ -78,6 +207,7 @@ export default function Home(): React.ReactElement {
78207
<HomepageHeader />
79208
<main>
80209
<HomepageFeatures />
210+
<MonthlyReviewsSection />
81211
<VideoSection />
82212
</main>
83213
</Layout>

0 commit comments

Comments
 (0)