As a quick exercise, I created a schedule inspired by the 1972 Munich Olympics schedule.
Here it is:
This is the reference image I used:
And here’s the source code:
<script lang="ts">
// Reference image:
// https://image.invaluable.com/housePhotos/PosterConnection/83/740183/H2180-L316434863.jpg
// SVGs from thenounproject
let dates = [
new Date("2024-08-14"),
new Date("2024-08-15"),
new Date("2024-08-16"),
];
let data = [
{ name: "Tech Help", values: [0, 1, 1], class: "computer-svg" },
{ name: "Reading Time", values: [0, 0, 1], class: "book-svg" },
];
</script>
<svelte:head>
<link rel="preconnect" href="https://fonts.googleapis.com" />
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
<link
href="https://fonts.googleapis.com/css2?family=Work+Sans:ital,wght@0,100..900;1,100..900&display=swap"
rel="stylesheet"
/>
</svelte:head>
<div class="container">
<div class="top">
<h1 class="heading-1">Library Events Schedule</h1>
</div>
<table>
<tr class="first">
<th>Schedule issued Aug 12, 2024</th>
{#each dates as date}
<td>
<div class="block">
<span>{date.toLocaleString("en-US", { month: "short" })}</span>
<span>{date.getDate()}.</span>
</div>
</td>
{/each}
<!-- Empty last column -->
<td></td>
</tr>
{#each data as record}
<tr>
<th>{record.name}</th>
{#each record.values as value}
<td data-value={value ? "yes" : "no"}>
{#if value}
<div class={record.class}></div>
{/if}
</td>
{/each}
<!-- Empty last column -->
<td></td>
</tr>
{/each}
<!-- Empty bottom row -->
<tr>
<th></th>
{#each dates as date}
<td></td>
{/each}
<td></td>
</tr>
</table>
</div>
<style>
:root {
--color-bg: oklch(60% 0.069 295.38);
--color-bg-transparent: oklch(50% 0.069 295.38 / 0.8);
--color-header: #dbcbd7;
--color-gray-100: #beb1d4;
--color-gray-900: #403856;
--color-blue-300: #97c4d2;
--color-green-300: #c7d85d;
}
.container {
background-color: var(--color-bg);
color: var(--color-gray-900);
width: fit-content;
background: linear-gradient(
var(--color-bg-transparent),
var(--color-bg-transparent)
),
url("noise.svg");
/* background: var(--color-bg-transparent), url("noise.svg"); */
font-family: "Work Sans", system-ui;
font-optical-sizing: auto;
font-weight: 500;
line-height: 1.2;
letter-spacing: -0.5px;
}
.top {
height: 20vw;
position: relative;
}
.heading-1 {
color: var(--color-header);
font-size: inherit;
font-weight: inherit;
position: absolute;
left: 40%;
}
table {
border-collapse: collapse;
}
td,
th {
text-align: left;
padding: 0.325rem;
position: relative;
border-bottom: 2px solid var(--color-gray-100);
border-right: 2px solid rgba(0, 0, 0, 0.3);
height: 4rem;
}
th {
width: 20ch;
font: inherit;
padding: 0.25em 0.5em 0.5em 2rem;
vertical-align: top;
text-wrap: balance;
}
td {
width: 8ch;
line-height: 1.1;
vertical-align: top;
height: 4rem;
}
/* Color in the yeses */
td[data-value="yes"] {
background-color: var(--color-blue-300);
}
/* Remove the borders on the far right and bottom */
tr td:last-child {
border-right: none;
}
table tr:last-child td,
table tr:last-child th {
border-bottom: none;
}
.computer-svg {
background: url('data:image/svg+xml;utf8,<svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 1200 1200"><path d="M280.95 335.53c-3.52.79-6 3.95-5.9 7.56v408.56a7.56 7.56 0 0 0 7.55 7.55h634.8a7.56 7.56 0 0 0 7.56-7.55V343.09a7.56 7.56 0 0 0-7.56-7.56H282.6a7.3 7.3 0 0 0-1.65 0zm9.21 15.11h619.7V692.6h-619.7zm0 357.07h619.7v36.37h-619.7z" fill-rule="evenodd" fill="white" /><path d="m533.41 787.54-.48.23h-.23c-.49.11-.96.27-1.42.47-.5.2-.97.43-1.41.71-.54.41-1.01.89-1.42 1.42v.24c-.47.49-.86 1.05-1.18 1.65v.23l-.24.47v.24a7.5 7.5 0 0 0-.23 3.54c-.24 6.84-2.23 10.71-5.43 14.17-3.44 3.7-8.9 6.72-14.88 9.92-5.99 3.2-12.55 6.48-18.19 12.04-5.63 5.55-9.65 13.82-9.44 24.09a7.56 7.56 0 0 0 7.55 7.56h227.2a7.56 7.56 0 0 0 7.55-7.56c.18-10.27-3.81-18.54-9.45-24.1-5.64-5.54-12.44-8.84-18.42-12.03s-11.22-6.22-14.64-9.92c-3.23-3.5-5.25-7.42-5.43-14.4.03-.4.03-.8 0-1.19.02-.31.02-.63 0-.94a7.61 7.61 0 0 0-1.42-3.55c-.2-.41-.44-.8-.71-1.18h-.24c-.28-.34-.6-.66-.94-.95h-.24c-.15-.08-.3-.16-.47-.23h-.23c-.15-.16-.3-.32-.47-.47h-.23l-.47-.23h-.94a8.65 8.65 0 0 0-.47-.23H535.08a6.36 6.36 0 0 0-.94 0 7.2 7.2 0 0 0-.71 0zm7.8 15.11h117.6c1.29 7.63 4.42 13.75 8.74 18.43 5.65 6.1 12.54 9.71 18.66 12.98 6.11 3.28 11.54 6.4 14.88 9.69 1.77 1.74 3.16 3.46 4.01 5.66H494.92c.85-2.2 2.25-3.92 4.02-5.66 3.33-3.28 8.76-6.42 14.88-9.69 6.11-3.27 13-6.88 18.65-12.98 4.33-4.68 7.44-10.8 8.74-18.43z" fill-rule="evenodd" fill="white"/></svg>')
no-repeat center center;
background-size: cover;
height: 100%;
}
.book-svg {
background: url('data:image/svg+xml;utf8,<svg viewBox="0 0 1200 1200" xmlns="http://www.w3.org/2000/svg"><path d="M588.37 883.92V309.1c-39.1-33.66-97.6-56.63-161.72-71.53-84.28-19.6-177.71-25.03-250.69-22.22v583.22c75.19-2.81 171.19 2.86 257.95 23.06 58.31 13.55 112.69 33.7 154.4 62.35zm32.72-571.26v574.13c40.92-29.16 94.83-49.73 152.68-63.7 84.14-20.3 177.14-26.68 250.22-24.94V214.89c-70.83-1.78-161.11 4.36-242.53 24-64.08 15.47-122.3 39.19-160.31 73.78zm502.36 604.92c-95.72 5.48-198.61 16.36-294.32 34.97-79.83 15.52-154.55 36.42-215.63 64.08a16.47 16.47 0 0 1-7.5 1.4c-.38.05-.8.05-1.22.05a16.3 16.3 0 0 1-11.06-4.31c-64.88-28.55-140.26-49.83-220.31-65.25-95.63-18.42-197.68-28.46-296.44-32.58h-.61A16.34 16.34 0 0 1 60 899.58V303.71c0-6.42 3.7-11.95 9.1-14.67 14.38-8.53 27.74-20.53 40.12-35.95 12.98-16.22 24.84-36.24 35.58-60.05a16.27 16.27 0 0 1 14.67-9.61c77.3-4.36 181.26.6 274.55 22.27 67.26 15.65 129.32 40.07 172.78 76.17 42.23-35.06 102.14-59.06 167.02-74.72 90.33-21.8 190.87-27.56 265.97-24.38h.56c6.99 0 12.94 4.36 15.28 10.55 10.64 23.44 22.36 43.13 35.16 59.16 12.6 15.75 26.3 27.89 41.01 36.47 5.02 2.9 7.93 8.1 8.16 13.5.05.42.05.84.05 1.26v597.47c0 9.05-7.32 16.36-16.36 16.36h-.19zm-1030.7-48a201.2 201.2 0 0 0 24.1-20.53c10.77-10.88 20.1-23.16 26.43-36.84l.05-550.14a222.6 222.6 0 0 1-8.67 11.49c-12.85 16.03-26.82 29.1-41.91 39.19zm77.53-38.1c73.73-3.34 169.92 1.82 256.45 21.93 64.13 14.9 122.58 37.92 161.72 71.53v51.05c-62.86-25.7-133.97-45.2-208.87-59.58-82.08-15.8-168.89-25.55-254.44-30.7a215.47 215.47 0 0 0 14.9-13.7c11.96-12.04 22.41-25.54 30.29-40.54zm907.26 56.38c-84.14 6.19-171.98 16.55-254.53 32.58-73.31 14.25-142.64 33-201.84 57.28v-49.17c38.02-34.64 96.28-58.31 160.31-73.78 83.58-20.16 176.44-26.11 248.02-23.81 7.88 15.23 18.47 28.96 30.56 41.15a221.72 221.72 0 0 0 17.49 15.8zm-20.81-75.65c6.37 13.64 15.65 25.92 26.44 36.84a196.9 196.9 0 0 0 24.09 20.53V312.05c-15.1-10.08-29.06-23.16-41.9-39.19-2.96-3.65-5.82-7.5-8.68-11.48V812.2zm-540-465.74a16.34 16.34 0 0 1-11.86 30.42c-34.97-13.74-74.06-23.95-114.14-31.27-46.36-8.44-94.22-13.03-138.9-14.72a16.3 16.3 0 1 1 1.18-32.57c46.08 1.73 95.48 6.46 143.48 15.23 42.33 7.69 83.48 18.47 120.28 32.95zm430.18-47.63a16.3 16.3 0 1 1 1.54 32.58c-45.23 2.3-93.6 7.64-140.1 16.97-40.04 8.1-78.66 19.17-112.65 33.84a16.3 16.3 0 0 1-12.94-29.9c36.2-15.66 77.02-27.38 119.17-35.86 48.32-9.75 98.34-15.28 144.94-17.63zM516.73 442.7a16.34 16.34 0 0 1-11.86 30.42c-34.97-13.73-74.06-23.95-114.14-31.26-46.36-8.44-94.22-13.03-138.9-14.72a16.3 16.3 0 1 1 1.18-32.58c46.08 1.73 95.48 6.47 143.48 15.23 42.33 7.7 83.48 18.47 120.28 32.96zm430.18-47.62a16.3 16.3 0 1 1 1.54 32.57c-45.23 2.3-93.6 7.64-140.1 16.97-39.9 8.07-78.47 19.13-112.65 33.9a16.35 16.35 0 1 1-12.89-30.05c36-15.57 76.83-27.28 119.16-35.82 48.33-9.75 98.35-15.28 144.94-17.62zM516.73 538.94a16.34 16.34 0 0 1-11.86 30.42c-34.97-13.74-74.06-23.95-114.14-31.27-46.36-8.44-94.22-13.03-138.9-14.72a16.3 16.3 0 1 1 1.18-32.57c46.08 1.73 95.48 6.46 143.48 15.23 42.33 7.69 83.48 18.47 120.28 32.95zM946.9 491.3a16.3 16.3 0 1 1 1.54 32.58c-45.23 2.3-93.6 7.64-140.1 16.97-39.9 8.06-78.47 19.12-112.65 33.89a16.35 16.35 0 1 1-12.89-30.05c36-15.56 76.83-27.28 119.16-35.81 48.33-9.75 98.35-15.28 144.94-17.63zM516.73 635.17a16.34 16.34 0 0 1-11.86 30.42c-34.97-13.73-74.06-23.95-114.14-31.26-46.36-8.44-94.22-13.03-138.9-14.72a16.3 16.3 0 1 1 1.18-32.58c46.08 1.73 95.48 6.47 143.48 15.23 42.33 7.7 83.48 18.47 120.28 32.96zm430.18-47.62a16.3 16.3 0 1 1 1.54 32.57c-45.23 2.3-93.6 7.64-140.1 17.02-40.04 8.1-78.66 19.17-112.65 33.84a16.3 16.3 0 0 1-12.94-29.9c36.2-15.66 77.02-27.38 119.17-35.86 48.32-9.75 98.34-15.28 144.94-17.63zM516.73 731.4a16.34 16.34 0 0 1-11.86 30.42c-34.97-13.74-74.06-23.95-114.14-31.27-46.36-8.44-94.22-13.03-138.9-14.72a16.3 16.3 0 1 1 1.18-32.57c46.08 1.73 95.48 6.46 143.48 15.23 42.33 7.69 83.48 18.47 120.28 32.95zm430.18-47.63a16.3 16.3 0 1 1 1.54 32.58c-45.23 2.3-93.6 7.64-140.1 17.01-40.04 8.11-78.66 19.18-112.65 33.85a16.3 16.3 0 0 1-12.94-29.9c36.2-15.66 77.02-27.38 119.17-35.87 48.32-9.75 98.34-15.28 144.94-17.62z" fill-rule="evenodd" fill="white"/></svg>')
no-repeat center center;
background-size: cover;
height: 90%;
}
.block > * {
display: block;
}
</style>