This is an automated email from the ASF dual-hosted git repository.
morningman pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/doris-website.git
The following commit(s) were added to refs/heads/master by this push:
new 87da96662ba [course] Make the hackathon task pages permanent (#4386)
87da96662ba is described below
commit 87da96662ba3cbe54e8e980a2b332817bcba2dcf
Author: Mingyu Chen (Rayner) <[email protected]>
AuthorDate: Mon Oct 19 17:02:46 2026 +0100
[course] Make the hackathon task pages permanent (#4386)
## What this changes
The Apache Doris Hackathon pages were built for Community over Code 2026
Glasgow. That event is over, so the pages become a permanent, self-paced
set of tasks and no longer reference a date, venue or on-site organiser.
- Copy is event-independent: "start anytime", "no deadline",
"self-paced"; the top bar shows an open-task note instead of the
conference date/room link.
- Help is unified to `#dev` on the Apache Doris Slack; the on-site "ask
Mingyu at the Doris table" wording is gone.
- Submit and badge flow is unchanged: same starter kit, same
`morningman/demo-env` submission PR, same Contributor badge for taking
part. The "show it on site" step becomes "share it in `#dev`".
- Pages move from `/course/hackathon/glasgow-2026/*` to
`/course/hackathon/*`; the old URLs get client redirects (including the
`zh-CN` prefix).
- The starter-kit ZIP and submission folder keep their original
`doris-hackathon-glasgow-2026` names so existing downloads and
participant PRs stay valid.
- Removed the now-unused event ticket/LED styles and dead selectors.
## Validation
- `node --test` for `SlackCommunityNudge.logic.test.js` and
`hackathon.logic.test.js`: 17/17 pass.
- All changed TS/TSX files parse; both changed SCSS files compile with
sass.
- `docusaurus.config.js` passes `node --check`.
- Reviewed locally with `LANDING_ONLY=true yarn start`; all five new
routes return 200.
- Redirects are build-only (`plugin-client-redirects` is inactive in
dev), so they are not exercised by the dev server.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-authored-by: morningman <[email protected]>
Co-authored-by: Claude Code <[email protected]>
---
docusaurus.config.js | 10 ++++
src/components/course/CourseLanding.tsx | 2 +-
.../course/hackathon/HackathonCourseTrack.scss | 69 +---------------------
.../course/hackathon/HackathonCourseTrack.tsx | 38 ++++--------
.../course/hackathon/HackathonTaskPage.scss | 36 +----------
.../course/hackathon/HackathonTaskPage.tsx | 49 ++++++---------
.../course/hackathon/HackathonTrackBPage.tsx | 8 +--
.../course/hackathon/hackathonCommon.tsx | 4 +-
src/components/course/hackathon/hackathonEvent.ts | 29 ++++-----
src/components/course/hackathon/tasks/a2Mcp.tsx | 2 +-
src/components/course/hackathon/tasks/trackB.tsx | 2 +-
.../home-next/SlackCommunityNudge.logic.test.js | 2 +-
.../{glasgow-2026 => }/a1-hybrid-search.tsx | 0
.../course/hackathon/{glasgow-2026 => }/a2-mcp.tsx | 0
.../hackathon/{glasgow-2026 => }/a3-log-search.tsx | 0
.../{glasgow-2026 => }/a4-agent-traces.tsx | 0
.../hackathon/{glasgow-2026 => }/track-b.tsx | 0
17 files changed, 66 insertions(+), 185 deletions(-)
diff --git a/docusaurus.config.js b/docusaurus.config.js
index b10d238fc69..8316730d3fe 100644
--- a/docusaurus.config.js
+++ b/docusaurus.config.js
@@ -89,6 +89,16 @@ function buildRedirectIndex() {
add('/course', '/learning');
add('/zh-CN/course', '/zh-CN/learning');
+ // The hackathon task pages used to live under an event-specific
+ // /course/hackathon/glasgow-2026 prefix. They are permanent now, so the
+ // old URLs (posters, QR codes, bookmarks) redirect to the new ones.
+ for (const locale of ENABLED_LOCALES) {
+ const prefix = locale === 'en' ? '' : `/${locale}`;
+ for (const page of ['a1-hybrid-search', 'a2-mcp', 'a3-log-search',
'a4-agent-traces', 'track-b']) {
+ add(`${prefix}/course/hackathon/${page}`,
`${prefix}/course/hackathon/glasgow-2026/${page}`);
+ }
+ }
+
// /vendors lost its navigation entry in the new-homepage refactor and has
// no obvious successor page, so it lands on the homepage. Its source is
// parked at src/pages/_vendors (underscore = not routed).
diff --git a/src/components/course/CourseLanding.tsx
b/src/components/course/CourseLanding.tsx
index 0bb5542c127..f4d3fde19b5 100644
--- a/src/components/course/CourseLanding.tsx
+++ b/src/components/course/CourseLanding.tsx
@@ -55,7 +55,7 @@ function CoursePath(): JSX.Element {
>
<div className="course-landing__path-header">
<h2 id="course-path-title">Your Doris path</h2>
- <span>6 available · more to come</span>
+ <span>{hackathonOn ? 'Self-paced · open to everyone' : '6
available · more to come'}</span>
</div>
{HACKATHON_COURSE_TRACK_ENABLED ? (
<>
diff --git a/src/components/course/hackathon/HackathonCourseTrack.scss
b/src/components/course/hackathon/HackathonCourseTrack.scss
index e49f2be6a57..4487951c5ec 100644
--- a/src/components/course/hackathon/HackathonCourseTrack.scss
+++ b/src/components/course/hackathon/HackathonCourseTrack.scss
@@ -1,4 +1,4 @@
-// Temporary hackathon track inside the /course "Your Doris path" card: a
+// Permanent hackathon track inside the /course "Your Doris path" card: a
// two-position switch (Doris 101 | Hackathon) and the hackathon panel. Remove
// the switch, the panel and this file and the card is exactly today's card.
@@ -66,16 +66,6 @@
}
}
- // "Live" LED on the hackathon side.
- .hk-switch__led {
- width: 9px;
- height: 9px;
- flex: none;
- border-radius: 50%;
- background: var(--brand-primary);
- box-shadow: 0 0 0 3px var(--brand-primary-soft);
- }
-
.hk-nw {
white-space: nowrap;
}
@@ -106,49 +96,6 @@
text-wrap: balance;
}
- a.hk-ticket {
- display: grid;
- grid-template-columns: auto auto minmax(0, 1fr);
- margin-top: 14px;
- border: 2px solid var(--brand-ink);
- border-radius: 12px;
- background: var(--brand-paper);
- box-shadow: 0 3px 0 var(--brand-ink);
- color: var(--brand-ink);
- text-decoration: none;
- transition:
- transform 0.12s,
- box-shadow 0.12s;
-
- &:hover {
- color: var(--brand-ink);
- text-decoration: none;
- transform: translateY(-1px);
- }
-
- &:active {
- box-shadow: 0 0 0 var(--brand-ink);
- transform: translateY(3px);
- }
-
- span {
- padding: 10px 12px;
- font: 800 12px/1.2 var(--font-mono);
- letter-spacing: 0.06em;
- text-transform: uppercase;
- white-space: nowrap;
-
- + span {
- border-left: 2px dashed var(--brand-border-soft);
- }
- }
-
- i {
- color: var(--brand-primary-deep);
- font-style: normal;
- }
- }
-
.hk-track__sub {
margin: 10px 0 0;
color: var(--brand-ink-soft);
@@ -346,19 +293,6 @@
font-size: 19px;
}
- a.hk-ticket {
- grid-template-columns: auto minmax(0, 1fr);
-
- span:first-child {
- grid-column: 1 / -1;
- border-bottom: 2px dashed var(--brand-border-soft);
- }
-
- span:nth-child(2) {
- border-left: 0;
- }
- }
-
a.hk-pad {
min-height: 100px;
padding: 10px;
@@ -369,7 +303,6 @@
@media (prefers-reduced-motion: reduce) {
.course-landing {
.hk-switch__tab,
- a.hk-ticket,
a.hk-pad,
.hk-pad__code {
transition: none;
diff --git a/src/components/course/hackathon/HackathonCourseTrack.tsx
b/src/components/course/hackathon/HackathonCourseTrack.tsx
index 744443ff673..781cf6a202d 100644
--- a/src/components/course/hackathon/HackathonCourseTrack.tsx
+++ b/src/components/course/hackathon/HackathonCourseTrack.tsx
@@ -11,8 +11,8 @@ import {
} from './hackathonEvent';
import './HackathonCourseTrack.scss';
-// The temporary "Hackathon" track inside the /course "Your Doris path" card.
-// `#hackathon` on the URL selects it, so posters and messages can link to it.
+// The permanent "Hackathon" track inside the /course "Your Doris path" card.
+// `#hackathon` on the URL selects it, so messages can link straight to it.
export type CourseTrack = 'course' | 'hackathon';
@@ -101,12 +101,9 @@ export function CourseTrackSwitch({ track, onSelect }:
CourseTrackSwitchProps):
<small>Free course</small>
</button>
<button {...tabProps('hackathon', 1)}>
- <strong>
- Hackathon
- <i className="hk-switch__led" aria-hidden="true" />
- </strong>
+ <strong>Hackathon</strong>
<small>
- {HACKATHON_EVENT.city} · <span
className="hk-nw">{HACKATHON_EVENT.dateShort}</span>
+ Open tasks · <span className="hk-nw">start anytime</span>
</small>
</button>
</div>
@@ -125,24 +122,12 @@ export function HackathonTrackPanel({ hidden }: { hidden:
boolean }): JSX.Elemen
hidden={hidden}
>
<div className="hk-track__event">
- <p className="hk-track__kicker">
- {HACKATHON_EVENT.conference} · {HACKATHON_EVENT.city} ·
Hackathon
+ <p className="hk-track__kicker">Apache Doris Hackathon</p>
+ <h3 className="hk-track__headline">Build something real on
Apache Doris — at your own pace.</h3>
+ <p className="hk-track__sub">
+ Start any time and work at your own pace: one sitting or a
few evenings. No Doris experience
+ needed.
</p>
- <h3 className="hk-track__headline">Build something real on
Apache Doris — in one afternoon.</h3>
- <a
- className="hk-ticket"
- href={HACKATHON_EVENT.eventUrl}
- target="_blank"
- rel="noopener noreferrer"
- aria-label={`${HACKATHON_EVENT.dateLong} ·
${HACKATHON_EVENT.time} · ${HACKATHON_EVENT.room} (event page, opens in a new
tab)`}
- >
- <span>{HACKATHON_EVENT.dateLong}</span>
- <span>{HACKATHON_EVENT.time}</span>
- <span>
- {HACKATHON_EVENT.room} <i aria-hidden="true">↗</i>
- </span>
- </a>
- <p className="hk-track__sub">Drop in any time. No Doris
experience needed.</p>
</div>
<div className="hk-track__head">
<h4>Track A · Build on Doris</h4>
@@ -172,7 +157,10 @@ export function HackathonTrackPanel({ hidden }: { hidden:
boolean }): JSX.Elemen
</Link>
<div className="hk-track__badge">
<img src={badgeUrl} alt="Apache Doris Contributor badge"
width="52" height="52" />
- <p>Take part in a task, show us at the Doris table, collect
your Contributor badge.</p>
+ <p>
+ Take part in a task, share it in
<code>{HACKATHON_EVENT.slackChannel}</code> on Slack, collect your
+ Contributor badge.
+ </p>
</div>
</section>
);
diff --git a/src/components/course/hackathon/HackathonTaskPage.scss
b/src/components/course/hackathon/HackathonTaskPage.scss
index 242797882b2..2d856cdff4f 100644
--- a/src/components/course/hackathon/HackathonTaskPage.scss
+++ b/src/components/course/hackathon/HackathonTaskPage.scss
@@ -215,7 +215,7 @@
}
// ---------------------------------------------------------------------------
-// Event bar (sticky under the site navbar)
+// Top bar (sticky under the site navbar)
// ---------------------------------------------------------------------------
.hk-task__bar {
@@ -274,7 +274,7 @@
white-space: nowrap;
}
-.hk-task a.hk-task__event {
+.hk-task .hk-task__event {
display: flex;
min-width: 0;
align-items: center;
@@ -282,29 +282,12 @@
color: var(--brand-ink-soft);
font-size: 14px;
line-height: 1.3;
- text-decoration: none;
> span {
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
}
-
- &:hover {
- color: var(--brand-ink);
- text-decoration: none;
-
- > span {
- text-decoration: underline;
- text-underline-offset: 3px;
- }
- }
-
- svg {
- width: 13px;
- height: 13px;
- color: var(--brand-primary-deep);
- }
}
// ---------------------------------------------------------------------------
@@ -2164,10 +2147,6 @@
--hk-wrap: min(720px, calc(100% - 48px));
}
- .hk-task__event-long {
- display: none;
- }
-
.hk-task__grid {
grid-template-columns: minmax(0, 1fr);
}
@@ -2264,7 +2243,7 @@
padding: 10px 0 12px;
}
- .hk-task a.hk-task__event {
+ .hk-task .hk-task__event {
flex: 1 1 100%;
align-items: flex-start;
gap: 6px;
@@ -2272,14 +2251,6 @@
> span {
white-space: normal;
}
-
- svg {
- margin-top: 3px;
- }
- }
-
- .hk-task__event-long {
- display: inline;
}
}
@@ -2310,7 +2281,6 @@
// Phone tap targets: 44px minimum.
.hk-task__btn--sm,
.hk-task a.hk-task__back,
- .hk-task a.hk-task__event,
.hk-task .hk-task__refs a,
.hk-task__copy {
min-height: 44px;
diff --git a/src/components/course/hackathon/HackathonTaskPage.tsx
b/src/components/course/hackathon/HackathonTaskPage.tsx
index 3c06f7974b4..82487f10e44 100644
--- a/src/components/course/hackathon/HackathonTaskPage.tsx
+++ b/src/components/course/hackathon/HackathonTaskPage.tsx
@@ -484,8 +484,8 @@ export function PanelNote({ children }: { children:
ReactNode }): JSX.Element {
);
}
-/** Sticky bar above every hackathon page: back to /course and the event
details. */
-export function HackathonEventBar(): JSX.Element {
+/** Sticky bar above every hackathon page: back to /course and the open-task
note. */
+export function HackathonTopBar(): JSX.Element {
return (
<div className="hk-task__bar">
<div className="hk-task__wrap hk-task__bar-in">
@@ -494,15 +494,9 @@ export function HackathonEventBar(): JSX.Element {
<span>Course</span>
</Link>
<span className="hk-task__tag">{HACKATHON_EVENT.name}</span>
- <a className="hk-task__event" href={HACKATHON_EVENT.eventUrl}
target="_blank" rel="noopener noreferrer">
- <span>
- <span className="hk-task__event-long">
- {HACKATHON_EVENT.conference}
{HACKATHON_EVENT.city} ·{' '}
- </span>
- {HACKATHON_EVENT.dateShort} · {HACKATHON_EVENT.time} ·
{HACKATHON_EVENT.room}
- </span>
- <IconExternal />
- </a>
+ <span className="hk-task__event">
+ <span>Self-paced tasks · start anytime · no sign-up</span>
+ </span>
</div>
</div>
);
@@ -539,8 +533,9 @@ export function HackathonTaskSwitch({ current }: { current:
string }): JSX.Eleme
export function HackathonHelpLine(): JSX.Element {
return (
<p className="hk-task__help">
- <b>Stuck for more than 10 minutes?</b> Come to the Doris table and
ask Mingyu, or post in{' '}
- <code>{HACKATHON_EVENT.slackChannel}</code> on the <a
href={HACKATHON_SLACK_URL}>Apache Doris Slack</a>.
+ <b>Stuck?</b> Ask in <code>{HACKATHON_EVENT.slackChannel}</code>
on the{' '}
+ <a href={HACKATHON_SLACK_URL}>Apache Doris Slack</a>. Maintainers
and other participants are there to
+ help.
</p>
);
}
@@ -559,7 +554,7 @@ export const TRACK_A_SUBMIT_STEPS: ReactNode[] = [
];
/**
- * How to submit and the badge. `steps` says what each track submits; showing
+ * How to submit and the badge. `steps` says what each track submits; sharing
* the work, Slack and the badge rules are the same for both tracks.
*/
export function HackathonSubmit({
@@ -586,25 +581,17 @@ export function HackathonSubmit({
))}
<li>
<p>
- <strong>Show it</strong> at the Doris table (a
2-minute demo is plenty), or at the
- show-and-tell around 14:30.
- </p>
- </li>
- <li>
- <p>
- <strong>
- Join the <a href={HACKATHON_SLACK_URL}>Apache
Doris Slack</a>
- </strong>{' '}
- and say hi in
<code>{HACKATHON_EVENT.slackChannel}</code>: questions, submissions and badges
- are all handled there.
+ <strong>Share it</strong> in
<code>{HACKATHON_EVENT.slackChannel}</code> on the{' '}
+ <a href={HACKATHON_SLACK_URL}>Apache Doris
Slack</a>: a link to your pull request or
+ repository, plus a screenshot or a short demo.
Questions, submissions and badges are all
+ handled there.
</p>
</li>
</ol>
<p className="hk-task__late">
- Everyone who takes part in a task on site gets the
<strong>Apache Doris Contributor badge</strong>:
- no merged pull request to Doris needed. Didn't finish
by 15:00? Keep going — submissions are
- open until {HACKATHON_EVENT.deadline ?? <HackathonTba
name="DEADLINE" />}. Teams are fine, but not
- needed: list every member's GitHub ID in {membersIn}.
+ Everyone who takes part in a task gets the <strong>Apache
Doris Contributor badge</strong>: no
+ merged pull request to Doris needed. There is no deadline,
so take as long as you need. Teams are
+ fine, but not needed: list every member's GitHub ID
in {membersIn}.
</p>
<div className="hk-task__submit-badge">
<Link to="/community/how-to-contribute/community-badges">
@@ -649,10 +636,10 @@ export function HackathonTaskPage({ content }: { content:
HackathonTaskContent }
return (
<LayoutNext
title={`${task.title} · Doris Hackathon`}
- description={`${content.hook} A Track A task for the
${HACKATHON_EVENT.name} at ${HACKATHON_EVENT.conference}
${HACKATHON_EVENT.city}.`}
+ description={`${content.hook} A Track A task in the
${HACKATHON_EVENT.name}: self-paced, with a starter kit and a runnable local
Doris.`}
>
<div className="hk-task">
- <HackathonEventBar />
+ <HackathonTopBar />
<HackathonTaskSwitch current={task.code} />
<div className="hk-task__wrap hk-task__grid">
diff --git a/src/components/course/hackathon/HackathonTrackBPage.tsx
b/src/components/course/hackathon/HackathonTrackBPage.tsx
index 0983c574142..ca14cccbd0f 100644
--- a/src/components/course/hackathon/HackathonTrackBPage.tsx
+++ b/src/components/course/hackathon/HackathonTrackBPage.tsx
@@ -14,13 +14,13 @@ import {
ConnectionCard,
HackathonAllTasks,
HackathonChecklistItem,
- HackathonEventBar,
HackathonHelpLine,
HackathonRow,
HackathonStarterKit,
HackathonSubmit,
HackathonTaskSwitch,
HackathonTermList,
+ HackathonTopBar,
PanelNote,
RowsTable,
START_SNIPPET,
@@ -205,10 +205,10 @@ export function HackathonTrackBPage(): JSX.Element {
return (
<LayoutNext
title={`Track B · ${HACKATHON_TRACK_B.title} · Doris Hackathon`}
- description={`${HACKATHON_TRACK_B.pitch} Track B of the
${HACKATHON_EVENT.name} at ${HACKATHON_EVENT.conference}
${HACKATHON_EVENT.city}.`}
+ description={`${HACKATHON_TRACK_B.pitch} Track B of the
${HACKATHON_EVENT.name}: self-paced, open to everyone.`}
>
<div className="hk-task hk-trackb">
- <HackathonEventBar />
+ <HackathonTopBar />
<HackathonTaskSwitch current={HACKATHON_TRACK_B.code} />
<div className="hk-task__wrap hk-task__grid">
@@ -417,7 +417,7 @@ export function HackathonTrackBPage(): JSX.Element {
<>
The repository's pull
request template (dev + 4.x, English) and one
line that names your task,
e.g.{' '}
- <code>CoC 2026 Glasgow
hackathon · Track B · B1</code>.
+ <code>Apache Doris Hackathon ·
Track B · B1</code>.
</>
),
},
diff --git a/src/components/course/hackathon/hackathonCommon.tsx
b/src/components/course/hackathon/hackathonCommon.tsx
index 774407deaff..6f666718884 100644
--- a/src/components/course/hackathon/hackathonCommon.tsx
+++ b/src/components/course/hackathon/hackathonCommon.tsx
@@ -19,7 +19,7 @@ export const BEFORE_IMAGE_PULLED: HackathonChecklistItem = {
title: 'Docker is running and the Doris image is pulled.',
body: (
<>
- About {HACKATHON_DORIS_DOWNLOAD}, once. Pull it before you arrive:
the venue Wi-Fi is shared. Docker Desktop
+ About {HACKATHON_DORIS_DOWNLOAD}, once. Pull it ahead of time: it
is a large download. Docker Desktop
(macOS) and Docker Engine (Linux) both work.
</>
),
@@ -321,7 +321,7 @@ export const TROUBLE = {
problem: 'Stuck for more than 10 minutes',
fix: (
<>
- Come to the Doris table and ask Mingyu, or post in
<code>{HACKATHON_EVENT.slackChannel}</code> on the{' '}
+ Post in <code>{HACKATHON_EVENT.slackChannel}</code> on the{' '}
<a href={HACKATHON_SLACK_URL}>Apache Doris Slack</a>
</>
),
diff --git a/src/components/course/hackathon/hackathonEvent.ts
b/src/components/course/hackathon/hackathonEvent.ts
index 67d7067e3c2..dff99523ef0 100644
--- a/src/components/course/hackathon/hackathonEvent.ts
+++ b/src/components/course/hackathon/hackathonEvent.ts
@@ -1,24 +1,19 @@
import { buildSlackEntryUrl } from
'@site/src/components/slack-redirect/slack-attribution.logic';
-// Temporary pages for the Apache Doris session at the Community over Code 2026
-// hackathon (Glasgow). The /course entry and the four Track A task pages read
-// everything event-specific from here, so the whole hackathon block can be
-// switched off or removed after the event without touching the course itself.
+// Permanent task pages for the Apache Doris Hackathon. The /course entry and
+// the task pages read everything hackathon-specific from here, so the whole
+// hackathon block can be switched off or changed without touching the course
+// itself. Nothing here is tied to a date or a venue.
/** Shows the "Doris 101 | Hackathon" switch in the /course path card. */
export const HACKATHON_COURSE_TRACK_ENABLED = true;
export const HACKATHON_EVENT = {
name: 'Apache Doris Hackathon',
- conference: 'Community over Code 2026',
- city: 'Glasgow',
- dateLong: 'Tuesday 13 October',
- dateShort: 'Tue 13 Oct',
- time: '11:20–15:00',
- room: 'Wee Dram Room',
- eventUrl:
'https://events.apache.org/events/2026/community-over-code/doris.html',
- basePath: '/course/hackathon/glasgow-2026',
- // Set to null to render a dashed "TBA" placeholder instead.
+ basePath: '/course/hackathon',
+ // Set to null to render a dashed "TBA" placeholder instead. The file and
+ // folder names are the published starter-kit artifact; they keep their
+ // original name so existing downloads and submissions stay valid.
starterKitUrl:
'https://github.com/morningman/demo-env/releases/download/for-hackathon/doris-hackathon-glasgow-2026.zip'
as
string | null,
@@ -27,15 +22,13 @@ export const HACKATHON_EVENT = {
/** Participants open a pull request that adds <their GitHub ID>/ under
this folder. */
submitUrl:
'https://github.com/morningman/demo-env/tree/main/doris-hackathon-glasgow-2026'
as string | null,
submitLabel: 'morningman/demo-env' as string | null,
- deadline: '31 October' as string | null,
/** Apache Doris Slack channel for questions, submissions and badges. */
slackChannel: '#dev',
} as const;
/** Tracked entry to the Apache Doris Slack (see
developer_docs/slack-utm-convention.md). */
export const HACKATHON_SLACK_URL = buildSlackEntryUrl({
- medium: 'event',
- campaign: 'coc2026_hackathon',
+ medium: 'website',
content: 'hackathon_task_page',
});
@@ -63,7 +56,7 @@ export interface HackathonTaskMeta {
slug: string;
title: string;
duration: string;
- /** Poster pitch, used on the task tiles. */
+ /** Short pitch, used on the task tiles. */
pitch: string;
}
@@ -106,7 +99,7 @@ export function getHackathonTask(code: HackathonTaskCode):
HackathonTaskMeta {
return task;
}
-/** Site-relative route of a task page, e.g.
/course/hackathon/glasgow-2026/a1-hybrid-search */
+/** Site-relative route of a task page, e.g.
/course/hackathon/a1-hybrid-search */
export function hackathonTaskPath(task: HackathonTaskMeta): string {
return `${HACKATHON_EVENT.basePath}/${task.slug}`;
}
diff --git a/src/components/course/hackathon/tasks/a2Mcp.tsx
b/src/components/course/hackathon/tasks/a2Mcp.tsx
index 36c98fe3941..72fa42e1383 100644
--- a/src/components/course/hackathon/tasks/a2Mcp.tsx
+++ b/src/components/course/hackathon/tasks/a2Mcp.tsx
@@ -113,7 +113,7 @@ export const A2_MCP: HackathonTaskContent = {
title: 'Python 3.12 or later, with the server installed.',
body: (
<>
- Check with <code>python3 --version</code>. Install the
server before you arrive (milestone 2 has the
+ Check with <code>python3 --version</code>. Install the
server ahead of time (milestone 2 has the
commands): it pulls in about 80 packages.
</>
),
diff --git a/src/components/course/hackathon/tasks/trackB.tsx
b/src/components/course/hackathon/tasks/trackB.tsx
index 4212541484d..9280c918e23 100644
--- a/src/components/course/hackathon/tasks/trackB.tsx
+++ b/src/components/course/hackathon/tasks/trackB.tsx
@@ -246,7 +246,7 @@ export function prTemplate(task: TrackBTask): CodeSnippet {
'',
'(Keep the Docs Checklist from the template and tick what
applies.)',
'',
- `CoC 2026 Glasgow hackathon · Track B · ${task.code}
${task.title}`,
+ `Apache Doris Hackathon · Track B · ${task.code} ${task.title}`,
'',
'The key-features pages exist only in English; both copies get the
same change:',
...docFiles(task).map(file => `- ${file}`),
diff --git a/src/components/home-next/SlackCommunityNudge.logic.test.js
b/src/components/home-next/SlackCommunityNudge.logic.test.js
index 306d4739fce..e40603b3027 100644
--- a/src/components/home-next/SlackCommunityNudge.logic.test.js
+++ b/src/components/home-next/SlackCommunityNudge.logic.test.js
@@ -138,7 +138,7 @@ test('does not show documentation feedback outside docs and
community pages', ()
});
test('does not open on its own on the hackathon task pages', () => {
- ['/course/hackathon',
'/course/hackathon/glasgow-2026/a1-hybrid-search'].forEach(pathname => {
+ ['/course/hackathon',
'/course/hackathon/a1-hybrid-search'].forEach(pathname => {
assert.equal(allowsSlackNudgeAutoOpen(pathname), false, pathname);
});
['/', '/course', '/docs/4.x/key-features/hybrid-search',
'/course/hackathon-other'].forEach(pathname => {
diff --git a/src/pages/course/hackathon/glasgow-2026/a1-hybrid-search.tsx
b/src/pages/course/hackathon/a1-hybrid-search.tsx
similarity index 100%
rename from src/pages/course/hackathon/glasgow-2026/a1-hybrid-search.tsx
rename to src/pages/course/hackathon/a1-hybrid-search.tsx
diff --git a/src/pages/course/hackathon/glasgow-2026/a2-mcp.tsx
b/src/pages/course/hackathon/a2-mcp.tsx
similarity index 100%
rename from src/pages/course/hackathon/glasgow-2026/a2-mcp.tsx
rename to src/pages/course/hackathon/a2-mcp.tsx
diff --git a/src/pages/course/hackathon/glasgow-2026/a3-log-search.tsx
b/src/pages/course/hackathon/a3-log-search.tsx
similarity index 100%
rename from src/pages/course/hackathon/glasgow-2026/a3-log-search.tsx
rename to src/pages/course/hackathon/a3-log-search.tsx
diff --git a/src/pages/course/hackathon/glasgow-2026/a4-agent-traces.tsx
b/src/pages/course/hackathon/a4-agent-traces.tsx
similarity index 100%
rename from src/pages/course/hackathon/glasgow-2026/a4-agent-traces.tsx
rename to src/pages/course/hackathon/a4-agent-traces.tsx
diff --git a/src/pages/course/hackathon/glasgow-2026/track-b.tsx
b/src/pages/course/hackathon/track-b.tsx
similarity index 100%
rename from src/pages/course/hackathon/glasgow-2026/track-b.tsx
rename to src/pages/course/hackathon/track-b.tsx
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]