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
12 changes: 11 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -57,7 +57,7 @@ CI rejects JavaScript or CSS growth beyond the limits in
the current production build and should be raised only with an explanation in
the pull request.

Lighthouse runs three times against both generated pages. Accessibility, SEO,
Lighthouse runs three times against all five generated pages. Accessibility, SEO,
layout stability, blocking time, and best-practice regressions fail CI;
performance-score and largest-contentful-paint regressions initially warn while
the project establishes a stable baseline.
Expand All @@ -72,3 +72,13 @@ The Cloudflare Pages project should use:

Do not set `SKIP_DEPENDENCY_INSTALL`. Cloudflare copies `public/_headers` into
the production build and applies those response headers to static assets.

## Competition editions

The homepage is the current 2026 competition. Past editions live at
`/competitions/2024/` and `/competitions/2025/`; organization content lives at
`/about/`. Competition-specific sponsors, photos, and results are assigned in
`src/data/competitions.ts`, with shared logo definitions in `src/data/sponsors.ts`.
Archives only display available historical content, never current registration
information. New editions need a static HTML entry, Vite input, sitemap entry,
and Lighthouse URL in addition to their competition data.
112 changes: 112 additions & 0 deletions about/index.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,112 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>About MACSO | Massachusetts Computer Science Olympiad</title>
<meta
name="description"
content="Meet the MACSO team, explore practice resources, and discover our partner competitions."
/>
<link rel="canonical" href="https://macso.org/about/" />
<meta name="author" content="Lucas Chen, Mikhail Zhernevskii" />
<meta name="theme-color" content="#fbfcff" />
<meta name="msapplication-TileColor" content="#1f2c5c" />
<script>
try {
const theme = localStorage.getItem('macso-theme')
document.documentElement.dataset.theme =
theme === 'light' || theme === 'dark'
? theme
: matchMedia('(prefers-color-scheme: dark)').matches
? 'dark'
: 'light'
} catch {}
</script>
<meta
property="og:title"
content="About MACSO | Massachusetts Computer Science Olympiad"
/>
<meta
property="og:description"
content="Meet the MACSO team, explore practice resources, and discover our partner competitions."
/>
<meta property="og:type" content="website" />
<meta property="og:url" content="https://macso.org/about/" />
<meta property="og:site_name" content="MACSO" />
<meta property="og:locale" content="en_US" />
<meta
property="og:image"
content="https://macso.org/images/brand/og-image.png"
/>
<meta property="og:image:width" content="1200" />
<meta property="og:image:height" content="630" />
<meta
property="og:image:alt"
content="MACSO: Massachusetts Computer Science Olympiad logo pinned on notebook paper"
/>
<meta name="twitter:card" content="summary_large_image" />
<meta
name="twitter:title"
content="About MACSO | Massachusetts Computer Science Olympiad"
/>
<meta
name="twitter:description"
content="Meet the MACSO team, explore practice resources, and discover our partner competitions."
/>
<meta
name="twitter:image"
content="https://macso.org/images/brand/og-image.png"
/>

<link
rel="apple-touch-icon"
sizes="180x180"
href="/images/icons/apple-touch-icon.png"
/>
<link
rel="icon"
type="image/png"
sizes="32x32"
href="/images/icons/favicon-32x32.png"
/>
<link
rel="icon"
type="image/png"
sizes="16x16"
href="/images/icons/favicon-16x16.png"
/>
<link rel="shortcut icon" href="/images/icons/favicon.ico" />
<link rel="manifest" href="/site.webmanifest" />
<link
rel="mask-icon"
href="/images/icons/safari-pinned-tab.svg"
color="#1f2c5c"
/>

<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=Kalam:wght@400;700&family=Atkinson+Hyperlegible:ital,wght@0,400;0,700;1,400&display=swap"
rel="stylesheet"
/>

<script
async
src="https://www.googletagmanager.com/gtag/js?id=G-TLJQ89CY7W"
></script>
<script>
window.dataLayer = window.dataLayer || []
function gtag() {
dataLayer.push(arguments)
}
gtag('js', new Date())
gtag('config', 'G-TLJQ89CY7W')
</script>
</head>
<body>
<div id="root"></div>
<script type="module" src="/src/entries/about.tsx"></script>
</body>
</html>
112 changes: 112 additions & 0 deletions competitions/2024/index.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,112 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>MACSO 2024 Archive | Massachusetts Computer Science Olympiad</title>
<meta
name="description"
content="Explore MACSO 2024 final standings, competition photos, and sponsors."
/>
<link rel="canonical" href="https://macso.org/competitions/2024/" />
<meta name="author" content="Lucas Chen, Mikhail Zhernevskii" />
<meta name="theme-color" content="#fbfcff" />
<meta name="msapplication-TileColor" content="#1f2c5c" />
<script>
try {
const theme = localStorage.getItem('macso-theme')
document.documentElement.dataset.theme =
theme === 'light' || theme === 'dark'
? theme
: matchMedia('(prefers-color-scheme: dark)').matches
? 'dark'
: 'light'
} catch {}
</script>
<meta
property="og:title"
content="MACSO 2024 Archive | Massachusetts Computer Science Olympiad"
/>
<meta
property="og:description"
content="Explore MACSO 2024 final standings, competition photos, and sponsors."
/>
<meta property="og:type" content="website" />
<meta property="og:url" content="https://macso.org/competitions/2024/" />
<meta property="og:site_name" content="MACSO" />
<meta property="og:locale" content="en_US" />
<meta
property="og:image"
content="https://macso.org/images/brand/og-image.png"
/>
<meta property="og:image:width" content="1200" />
<meta property="og:image:height" content="630" />
<meta
property="og:image:alt"
content="MACSO: Massachusetts Computer Science Olympiad logo pinned on notebook paper"
/>
<meta name="twitter:card" content="summary_large_image" />
<meta
name="twitter:title"
content="MACSO 2024 Archive | Massachusetts Computer Science Olympiad"
/>
<meta
name="twitter:description"
content="Explore MACSO 2024 final standings, competition photos, and sponsors."
/>
<meta
name="twitter:image"
content="https://macso.org/images/brand/og-image.png"
/>

<link
rel="apple-touch-icon"
sizes="180x180"
href="/images/icons/apple-touch-icon.png"
/>
<link
rel="icon"
type="image/png"
sizes="32x32"
href="/images/icons/favicon-32x32.png"
/>
<link
rel="icon"
type="image/png"
sizes="16x16"
href="/images/icons/favicon-16x16.png"
/>
<link rel="shortcut icon" href="/images/icons/favicon.ico" />
<link rel="manifest" href="/site.webmanifest" />
<link
rel="mask-icon"
href="/images/icons/safari-pinned-tab.svg"
color="#1f2c5c"
/>

<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=Kalam:wght@400;700&family=Atkinson+Hyperlegible:ital,wght@0,400;0,700;1,400&display=swap"
rel="stylesheet"
/>

<script
async
src="https://www.googletagmanager.com/gtag/js?id=G-TLJQ89CY7W"
></script>
<script>
window.dataLayer = window.dataLayer || []
function gtag() {
dataLayer.push(arguments)
}
gtag('js', new Date())
gtag('config', 'G-TLJQ89CY7W')
</script>
</head>
<body>
<div id="root"></div>
<script type="module" src="/src/entries/archive2024.tsx"></script>
</body>
</html>
114 changes: 114 additions & 0 deletions competitions/2025/index.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,114 @@
<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>
MACSO Fall 2025 Archive | Massachusetts Computer Science Olympiad
</title>
<meta
name="description"
content="Look back at MACSO Fall 2025 with competition photos and sponsors."
/>
<link rel="canonical" href="https://macso.org/competitions/2025/" />
<meta name="author" content="Lucas Chen, Mikhail Zhernevskii" />
<meta name="theme-color" content="#fbfcff" />
<meta name="msapplication-TileColor" content="#1f2c5c" />
<script>
try {
const theme = localStorage.getItem('macso-theme')
document.documentElement.dataset.theme =
theme === 'light' || theme === 'dark'
? theme
: matchMedia('(prefers-color-scheme: dark)').matches
? 'dark'
: 'light'
} catch {}
</script>
<meta
property="og:title"
content="MACSO Fall 2025 Archive | Massachusetts Computer Science Olympiad"
/>
<meta
property="og:description"
content="Look back at MACSO Fall 2025 with competition photos and sponsors."
/>
<meta property="og:type" content="website" />
<meta property="og:url" content="https://macso.org/competitions/2025/" />
<meta property="og:site_name" content="MACSO" />
<meta property="og:locale" content="en_US" />
<meta
property="og:image"
content="https://macso.org/images/brand/og-image.png"
/>
<meta property="og:image:width" content="1200" />
<meta property="og:image:height" content="630" />
<meta
property="og:image:alt"
content="MACSO: Massachusetts Computer Science Olympiad logo pinned on notebook paper"
/>
<meta name="twitter:card" content="summary_large_image" />
<meta
name="twitter:title"
content="MACSO Fall 2025 Archive | Massachusetts Computer Science Olympiad"
/>
<meta
name="twitter:description"
content="Look back at MACSO Fall 2025 with competition photos and sponsors."
/>
<meta
name="twitter:image"
content="https://macso.org/images/brand/og-image.png"
/>

<link
rel="apple-touch-icon"
sizes="180x180"
href="/images/icons/apple-touch-icon.png"
/>
<link
rel="icon"
type="image/png"
sizes="32x32"
href="/images/icons/favicon-32x32.png"
/>
<link
rel="icon"
type="image/png"
sizes="16x16"
href="/images/icons/favicon-16x16.png"
/>
<link rel="shortcut icon" href="/images/icons/favicon.ico" />
<link rel="manifest" href="/site.webmanifest" />
<link
rel="mask-icon"
href="/images/icons/safari-pinned-tab.svg"
color="#1f2c5c"
/>

<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=Kalam:wght@400;700&family=Atkinson+Hyperlegible:ital,wght@0,400;0,700;1,400&display=swap"
rel="stylesheet"
/>

<script
async
src="https://www.googletagmanager.com/gtag/js?id=G-TLJQ89CY7W"
></script>
<script>
window.dataLayer = window.dataLayer || []
function gtag() {
dataLayer.push(arguments)
}
gtag('js', new Date())
gtag('config', 'G-TLJQ89CY7W')
</script>
</head>
<body>
<div id="root"></div>
<script type="module" src="/src/entries/archive2025.tsx"></script>
</body>
</html>
Loading
Loading