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
2 changes: 1 addition & 1 deletion site/assets/theme.css

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

5 changes: 0 additions & 5 deletions site/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -81,39 +81,34 @@ <h2 id="team-title">Team</h2>
<img class="roster-avatar" src="/brand/team/spookymoo.png" alt="" width="128" height="128" loading="lazy" decoding="async">
<div class="roster-identity">
<h3>SHOOTTHEMESSENGER/Moo</h3>
<p class="roster-handle">spookymoo</p>
<ul class="roster-events"><li>Kaspersky{CTF} 2026</li><li>Cyber Apocalypse 2026 (1337_PwnSp4c3)</li><li>BushBash CTF 2026 (1337_PwnSp4c3)</li></ul>
</div>
</li>
<li class="roster-member">
<img class="roster-avatar" src="/brand/team/hoxed.png" alt="" width="128" height="128" loading="lazy" decoding="async">
<div class="roster-identity">
<h3>Hoxed</h3>
<p class="roster-handle">hoxed</p>
<ul class="roster-events"><li>Kaspersky{CTF} 2026</li></ul>
</div>
</li>
<li class="roster-member">
<img class="roster-avatar" src="/brand/team/romil1998.png" alt="" width="128" height="128" loading="lazy" decoding="async">
<div class="roster-identity">
<h3>romil0xsec</h3>
<p class="roster-handle">romil1998</p>
<ul class="roster-events"><li>Kaspersky{CTF} 2026</li><li>Cyber Apocalypse 2026 (1337_PwnSp4c3)</li><li>BushBash CTF 2026 (1337_PwnSp4c3)</li></ul>
</div>
</li>
<li class="roster-member">
<img class="roster-avatar" src="/brand/team/deva_rp.png" alt="" width="128" height="128" loading="lazy" decoding="async">
<div class="roster-identity">
<h3>Deva_RP</h3>
<p class="roster-handle">deva_rp</p>
<ul class="roster-events"><li>Kaspersky{CTF} 2026</li></ul>
</div>
</li>
<li class="roster-member">
<img class="roster-avatar" src="/brand/team/antsyy_.png" alt="" width="128" height="128" loading="lazy" decoding="async">
<div class="roster-identity">
<h3>Antsy</h3>
<p class="roster-handle">antsyy_</p>
<ul class="roster-events"><li>Kaspersky{CTF} 2026</li><li>Cyber Apocalypse 2026 (1337_PwnSp4c3)</li><li>BushBash CTF 2026 (1337_PwnSp4c3)</li></ul>
</div>
</li>
Expand Down
5 changes: 0 additions & 5 deletions site/team/index.html
Original file line number Diff line number Diff line change
Expand Up @@ -37,39 +37,34 @@ <h2 id="roster-title">Roster</h2>
<img class="roster-avatar" src="/brand/team/spookymoo.png" alt="" width="128" height="128" loading="lazy" decoding="async">
<div class="roster-identity">
<h3>SHOOTTHEMESSENGER/Moo</h3>
<p class="roster-handle">spookymoo</p>
<ul class="roster-events"><li>Kaspersky{CTF} 2026</li><li>Cyber Apocalypse 2026 (1337_PwnSp4c3)</li><li>BushBash CTF 2026 (1337_PwnSp4c3)</li></ul>
</div>
</li>
<li class="roster-member">
<img class="roster-avatar" src="/brand/team/hoxed.png" alt="" width="128" height="128" loading="lazy" decoding="async">
<div class="roster-identity">
<h3>Hoxed</h3>
<p class="roster-handle">hoxed</p>
<ul class="roster-events"><li>Kaspersky{CTF} 2026</li></ul>
</div>
</li>
<li class="roster-member">
<img class="roster-avatar" src="/brand/team/romil1998.png" alt="" width="128" height="128" loading="lazy" decoding="async">
<div class="roster-identity">
<h3>romil0xsec</h3>
<p class="roster-handle">romil1998</p>
<ul class="roster-events"><li>Kaspersky{CTF} 2026</li><li>Cyber Apocalypse 2026 (1337_PwnSp4c3)</li><li>BushBash CTF 2026 (1337_PwnSp4c3)</li></ul>
</div>
</li>
<li class="roster-member">
<img class="roster-avatar" src="/brand/team/deva_rp.png" alt="" width="128" height="128" loading="lazy" decoding="async">
<div class="roster-identity">
<h3>Deva_RP</h3>
<p class="roster-handle">deva_rp</p>
<ul class="roster-events"><li>Kaspersky{CTF} 2026</li></ul>
</div>
</li>
<li class="roster-member">
<img class="roster-avatar" src="/brand/team/antsyy_.png" alt="" width="128" height="128" loading="lazy" decoding="async">
<div class="roster-identity">
<h3>Antsy</h3>
<p class="roster-handle">antsyy_</p>
<ul class="roster-events"><li>Kaspersky{CTF} 2026</li><li>Cyber Apocalypse 2026 (1337_PwnSp4c3)</li><li>BushBash CTF 2026 (1337_PwnSp4c3)</li></ul>
</div>
</li>
Expand Down
12 changes: 10 additions & 2 deletions tests/site-contract.test.mjs
Original file line number Diff line number Diff line change
Expand Up @@ -226,9 +226,8 @@ test("the roster is published on the homepage and the team page", () => {
for (const [index, [file, name, played]] of members.entries()) {
assert.ok(html.includes(`src="/brand/team/${file}.png"`), `${page} is missing the ${file} avatar`);
assert.ok(html.includes(`<h3>${name}</h3>`), `${page} is missing the name ${name}`);
assert.ok(html.includes(`<p class="roster-handle">${file}</p>`), `${page} is missing the handle ${file}`);
const card = cards[index];
assert.ok(card.includes(file), `${page} card order drifted at ${file}`);
assert.ok(card.includes(`/brand/team/${file}.png`), `${page} card order drifted at ${file}`);
assert.deepEqual(
[...card.matchAll(/<li>([^<]+)<\/li>/g)].map((m) => m[1]),
played,
Expand All @@ -240,6 +239,14 @@ test("the roster is published on the homepage and the team page", () => {
assert.match(match[0], /width="128"[^>]*height="128"/, "avatars need intrinsic dimensions");
}
assert.equal(html.includes("Romil Patel"), false, `${page} must not publish a real name`);
assert.equal(html.includes("roster-handle"), false, `${page} must not publish Discord usernames`);
for (const [file] of members) {
assert.equal(
new RegExp(`>[^<]*\b${file}\b[^<]*<`).test(html),
false,
`${page} still shows the Discord username ${file} as visible text`,
);
}
assert.equal(html.includes("sp4reparts"), false, `${page} lists only the five players`);
assert.equal(html.includes("cdn.discordapp.com"), false, `${page} must self-host avatars`);
}
Expand Down Expand Up @@ -279,6 +286,7 @@ test("the canonical stylesheet contains the current archive theme", () => {
assert.match(css, /\.ready-archive-page \.crew-nav a,\.ready-archive-page \.crew-nav button\{[^}]*display:inline-flex/);
assert.match(css, /\.ready-archive-page \.roster\{[^}]*display:grid/);
assert.match(css, /\.ready-archive-page \.roster-avatar\{[^}]*object-fit:cover/);
assert.equal(css.includes("roster-handle"), false, "the Discord username style is retired");
for (const marker of forbiddenThemeMarkers) {
assert.equal(css.includes(marker), false, `theme.css contains retired marker ${marker}`);
}
Expand Down