Skip to content

[#523] Archive legacy hackathon sites in Forge - #524

Merged
DVidal1205 merged 6 commits into
mainfrom
repo/legacy-hackathon-archives
Aug 28, 2026
Merged

[#523] Archive legacy hackathon sites in Forge#524
DVidal1205 merged 6 commits into
mainfrom
repo/legacy-hackathon-archives

Conversation

@DVidal1205

@DVidal1205 DVidal1205 commented Aug 28, 2026

Copy link
Copy Markdown
Contributor

Why

The 2020, 2021, 2023, and 2024 hackathon sites are split across old repositories and Cloudflare Pages projects. Some still contain registration, authentication, dashboard, upload, or database code that no longer works. This makes the public history hard to maintain and leaves the 2024 site broken.

What

Closes: #523

  • Adds static Next.js archives for 2020, 2021, 2023, and 2024 using pinned upstream source and locally owned assets.
  • Removes historical application, registration, authentication, dashboard, upload, and database behavior. Retired workflow routes return a styled HTTP 410; unknown routes return 404.
  • Excludes the abandoned 2022 prototype because the official club history and internal records show no 2022 event.
  • Adds one Turbo-pruned Dockerfile per archive with an unprivileged nginx runtime. Final images are 26.8 MB to 45.3 MB and contain no source tree or node_modules.
  • Keeps the archived and retired sites out of the default pnpm dev task while preserving pnpm dev:all and aggregate builds.
  • Adds production-image Playwright coverage and deterministic cleanup for temporary test containers.
  • Renames the active KH IX workspace from apps/khix / @forge/khix to apps/2026 / @forge/2026, while preserving KH IX branding and runtime identifiers.
  • Records source, hosting, compatibility, sponsor-logo provenance, image sizing, route checks, and deployment gates in the feature bundle.

This PR does not change Coolify or Cloudflare. After approval, the four deployments will be created one at a time. Before each hostname cutover, Cloudflare DNS will be checked for conflicting A, AAAA, and CNAME records. There will be no 2022 deployment. The existing KH IX Coolify source path will be changed to apps/2026 during that later deployment slice.

Test Plan

  • pnpm verify:precommit
  • pnpm verify:push
  • pnpm --filter @forge/2020 e2e
  • pnpm --filter @forge/2021 e2e
  • pnpm --filter @forge/2023 e2e
  • pnpm --filter @forge/2024 e2e
  • pnpm --filter @forge/2026 test
  • pnpm --filter @forge/2026 lint
  • pnpm --filter @forge/2026 typecheck
  • pnpm --filter @forge/2026 build
  • Complete 21-task workspace build with CI-safe test environment values.
  • 19/19 archive Playwright tests passed against the production Docker/nginx images.
  • A Turbo cache-hit restoration recreated apps/2020/out/index.html after the output directory was moved aside.
  • All four archive images were inspected for size, runtime contents, health, route status, browser errors, overflow, and external service traffic. Full evidence is in .forge/features/legacy-hackathon-archives/status.md.
  • The renamed KH IX Docker image was built, inspected at 116,905,476 bytes, run from /app/apps/2026, and verified on / and /apply.

Checklist

  • Database: No schema changes, OR I ran pnpm db:generate and committed the generated files in packages/db/drizzle/
  • Environment Variables: No environment variables changed, OR I have contacted the Development Lead to modify them on Coolify BEFORE merging.

Co-authored-by: Codex <codex@openai.com>
@DVidal1205
DVidal1205 requested a review from a team as a code owner August 28, 2026 20:01
@DVidal1205 DVidal1205 added Feature New Feature or Request Major Big change - 2+ reviewers required Hack Sites Change modifies code in a Hackathon app (ex. 2025) labels Aug 28, 2026
@DVidal1205 DVidal1205 self-assigned this Aug 28, 2026
Co-authored-by: Codex <codex@openai.com>
@coderabbitai

coderabbitai Bot commented Aug 28, 2026

Copy link
Copy Markdown

Review Change Stack

Important

Approval pending

CodeRabbit has no unresolved comments, but it could not review the latest commit because the review limit was reached. Follow the review guidance in this comment to continue.

📝 Walkthrough

Walkthrough

Adds static Knight Hacks archive applications for 2020, 2021, 2023, and 2024. Each archive preserves public historical content, removes legacy workflows and backend traffic, and defines 404/410 route handling. The change adds responsive pages, local sponsor data, Playwright coverage, static Next.js builds, Docker images, nginx serving, E2E container scripts, and repository development wiring.

Merge Risk: 🟡 Moderate · up to a6440

The PR replaces four legacy applications with static archives and retires their workflows. It is not merge-ready until the multi-application scope is split or explicitly approved, and the 2020 image’s generated public files should be verified before hostname cutover; the remaining archive-content, layout, documentation, and test-harness issues are bounded.

🚥 Pre-merge checks | ✅ 6 | ❌ 2

❌ Failed checks (2 warnings)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 37 functions across 37 files. (33 skipped:… Write docstrings for the functions missing them to satisfy the coverage threshold.
Validated Env Access ⚠️ Warning scripts/stop-archive-e2e-container.ts:4 directly reads process.env.ARCHIVE_E2E_CONTAINER. This new file is neither env.ts nor a *.config.* file. The four other new raw accesses are in Playwrig… Remove the raw environment read from scripts/stop-archive-e2e-container.ts. Pass the container name from the Playwright config to stopArchiveE2EContainer(containerName), or read it through a validated env.ts module.
✅ Passed checks (6 passed)
Check name Status Explanation
Linked Issues check ✅ Passed The changes address issue #523 by adding static archives for the 2020, 2021, 2023, and 2024 hackathon sites and excluding the abandoned 2022 prototype.
Out of Scope Changes check ✅ Passed The documented applications, Dockerfiles, nginx routing, development workflow updates, tests, and feature documents support the archive objective. No unrelated code changes are evident.
No Hardcoded Secrets ✅ Passed No hardcoded secrets were found in the 207 changed files. Scans found no known API-key or token formats, private-key blocks, bearer tokens, or security-named string assignments. Environment references…
No Typescript Escape Hatches ✅ Passed No TypeScript escape hatches were added. The PR's changed TypeScript and TSX files contain no any type, @ts-ignore, @ts-expect-error, or non-null assertion. Existing any types are in unchanged…
Title check ✅ Passed The title starts with the required issue number format, describes the archive change, and is 46 characters long.
Description check ✅ Passed The description directly explains the archive implementations, route behavior, deployment scope, and validation performed.
Full details: Docstring Coverage

Explanation

Docstring coverage is 0.00% which is insufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 37 functions across 37 files. (33 skipped: 33 unsupported.)

Full details: No Hardcoded Secrets

Explanation

No hardcoded secrets were found in the 207 changed files. Scans found no known API-key or token formats, private-key blocks, bearer tokens, or security-named string assignments. Environment references are limited to test-container variables such as ARCHIVE_E2E_PORT and ARCHIVE_E2E_CONTAINER.

Full details: Validated Env Access

Explanation

scripts/stop-archive-e2e-container.ts:4 directly reads process.env.ARCHIVE_E2E_CONTAINER. This new file is neither env.ts nor a *.config.* file. The four other new raw accesses are in Playwright config files and are allowed.

Full details: No Typescript Escape Hatches

Explanation

No TypeScript escape hatches were added. The PR's changed TypeScript and TSX files contain no any type, @ts-ignore, @ts-expect-error, or non-null assertion. Existing any types are in unchanged scripts/analyze-react*.ts files.

  • Fix all pre-merge checks with AI
✨ Finishing Touches 💡 2
📝 Generate docstrings 💡
  • Create stacked PR
  • Commit on current branch
🛠️ Fix failing CI checks 💡
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch repo/legacy-hackathon-archives

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

Co-authored-by: Codex <codex@openai.com>

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

Note

Quiet mode is enabled, so only the most important comments were posted inline. Other review comments are grouped below.

🟡 Other comments (8)
apps/2024/src/app/page.tsx-67-68 (1)

67-68: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Correct the FAQ duration.

Friday at 5 PM through Sunday at 6 PM spans 49 hours. Update either 36-hour or the stated times to match the archived 2024 schedule.

apps/2021/src/data/schedule.json-151-159 (1)

151-159: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Render Saturday events in chronological order.

Move Tech Industry AMA before Introduction to Geospatial Data Science.

apps/2023/src/styles/archive.css-420-422 (1)

420-422: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Keep .past-event clear of the MLH badge.

At 320px, the 85px badge overlays the right side of .past-event because the badge has a higher stacking order. Reserve badge space in the mobile navigation.

Proposed fix
 `@media` (max-width: 600px) {
   .archive-nav {
     top: 12px;
     left: 2.5%;
     width: 95%;
     padding-left: 7px;
+    padding-right: 96px;
     border-radius: 10px;
   }

Also applies to: 478-492

.forge/features/legacy-hackathon-archives/status.md-212-215 (1)

212-215: 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

Reconcile the push gate with the recorded branch state.

The checklist still requires human approval before push, but this file records the branch and PR as already pushed. Update the checklist to document the approved exception, or remove the push and PR records until approval is complete.

As per coding guidelines, keep status.md current and challenge missing requirements.

Also applies to: 275-277

Source: Coding guidelines

apps/2020/e2e/archive.spec.ts-22-23 (1)

22-23: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick win

Check forbidden links as well as buttons.

The current assertions can miss a Register, Apply, or Dashboard link. Assert forbidden names across both link and button roles.

Also applies to: 53-53

scripts/stop-archive-e2e-container.ts-7-11 (1)

7-11: 🩺 Stability & Availability | 🟡 Minor | ⚡ Quick win

Propagate unexpected Docker stop failures.

The broad catch hides permission errors, daemon failures, and other stop failures. Teardown can report success while the container remains running. Ignore only the expected missing-container case and rethrow other errors.

scripts/stop-archive-e2e-container.ts-4-4 (1)

4-4: 📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

Use the validated environment boundary.

process.env.ARCHIVE_E2E_CONTAINER bypasses the repository's validated environment access. Add this variable to the validated schema and read it through the shared env boundary.

As per coding guidelines, the codebase uses validated env imports instead of raw process.env access.

Source: Coding guidelines

apps/2020/src/components/archive-2020.tsx-480-485 (1)

480-485: 🚀 Performance & Scalability | 🟡 Minor | ⚡ Quick win

Render only the active responsive layout.

Archive2020 mounts both layouts, and CSS only hides one. Both mounted trees initialize AnimatedBoat, which can start a looping Lottie animation. Gate the subtrees with the stylesheet’s (min-width: 900px) and (min-height: 500px) condition so each viewport mounts one instance.


ℹ️ Review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yml

Review profile: QUIET

Plan: Pro Plus

Run ID: 457a8225-e556-4590-8a66-a4231af9c54e

📥 Commits

Reviewing files that changed from the base of the PR and between a0800c6 and a644051.

⛔ Files ignored due to path filters (133)
  • apps/2020/public/assets/About-Page-Moon-Right.jpg is excluded by !**/*.jpg
  • apps/2020/public/assets/About-Page.png is excluded by !**/*.png
  • apps/2020/public/assets/Castle.png is excluded by !**/*.png
  • apps/2020/public/assets/Discord-Black.png is excluded by !**/*.png
  • apps/2020/public/assets/Discord-White.png is excluded by !**/*.png
  • apps/2020/public/assets/FAQ-Glacier.png is excluded by !**/*.png
  • apps/2020/public/assets/FAQ-Page.png is excluded by !**/*.png
  • apps/2020/public/assets/Facebook-Black.png is excluded by !**/*.png
  • apps/2020/public/assets/Facebook-White.svg is excluded by !**/*.svg
  • apps/2020/public/assets/Home-Clouds.png is excluded by !**/*.png
  • apps/2020/public/assets/Home-Page.png is excluded by !**/*.png
  • apps/2020/public/assets/Home-Sun.png is excluded by !**/*.png
  • apps/2020/public/assets/Home-Water.png is excluded by !**/*.png
  • apps/2020/public/assets/Instagram-Black.png is excluded by !**/*.png
  • apps/2020/public/assets/Instagram-White.svg is excluded by !**/*.svg
  • apps/2020/public/assets/Logo.svg is excluded by !**/*.svg
  • apps/2020/public/assets/Register-Page.png is excluded by !**/*.png
  • apps/2020/public/assets/Schedule-Glacier.png is excluded by !**/*.png
  • apps/2020/public/assets/Schedule-Page.png is excluded by !**/*.png
  • apps/2020/public/assets/Sponsor-Page.png is excluded by !**/*.png
  • apps/2020/public/assets/Twitter-Black.png is excluded by !**/*.png
  • apps/2020/public/assets/Twitter-White.svg is excluded by !**/*.svg
  • apps/2020/public/assets/boats/Capital-One-Boat.png is excluded by !**/*.png
  • apps/2020/public/assets/boats/Disney-Boat.png is excluded by !**/*.png
  • apps/2020/public/assets/boats/EA-Boat.png is excluded by !**/*.png
  • apps/2020/public/assets/boats/FB-Boat.png is excluded by !**/*.png
  • apps/2020/public/assets/boats/Google-Cloud-Boat.png is excluded by !**/*.png
  • apps/2020/public/assets/boats/Microsoft-Boat.png is excluded by !**/*.png
  • apps/2020/public/assets/boats/NSIN-Boat.png is excluded by !**/*.png
  • apps/2020/public/assets/boats/Oracle-Boat.png is excluded by !**/*.png
  • apps/2020/public/assets/boats/PWC-Boat.png is excluded by !**/*.png
  • apps/2020/public/assets/boats/RBC-Boat.png is excluded by !**/*.png
  • apps/2020/public/assets/mlh-trust-badge-2020-white.svg is excluded by !**/*.svg
  • apps/2020/public/assets/sponsors/Capital-Logo.png is excluded by !**/*.png
  • apps/2020/public/assets/sponsors/Disney-Logo.png is excluded by !**/*.png
  • apps/2020/public/assets/sponsors/EA-Logo.png is excluded by !**/*.png
  • apps/2020/public/assets/sponsors/FB-Logo.png is excluded by !**/*.png
  • apps/2020/public/assets/sponsors/Google-Cloud-Logo.png is excluded by !**/*.png
  • apps/2020/public/assets/sponsors/Microsoft-Logo.png is excluded by !**/*.png
  • apps/2020/public/assets/sponsors/NSIN-Logo.png is excluded by !**/*.png
  • apps/2020/public/assets/sponsors/Oracle-Logo.svg is excluded by !**/*.svg
  • apps/2020/public/assets/sponsors/PWC-Logo.png is excluded by !**/*.png
  • apps/2020/public/assets/sponsors/RBC-Logo.png is excluded by !**/*.png
  • apps/2020/public/favicon.ico is excluded by !**/*.ico
  • apps/2021/public/assets/background-music.mp3 is excluded by !**/*.mp3
  • apps/2021/public/assets/fonts/Palanquin-Bold.ttf is excluded by !**/*.ttf
  • apps/2021/public/assets/fonts/Palanquin-ExtraLight.ttf is excluded by !**/*.ttf
  • apps/2021/public/assets/fonts/Palanquin-Light.ttf is excluded by !**/*.ttf
  • apps/2021/public/assets/fonts/Palanquin-Medium.ttf is excluded by !**/*.ttf
  • apps/2021/public/assets/fonts/Palanquin-Regular.ttf is excluded by !**/*.ttf
  • apps/2021/public/assets/fonts/Palanquin-SemiBold.ttf is excluded by !**/*.ttf
  • apps/2021/public/assets/fonts/Palanquin-Thin.ttf is excluded by !**/*.ttf
  • apps/2021/public/assets/fonts/Sansita-Black.ttf is excluded by !**/*.ttf
  • apps/2021/public/assets/fonts/Sansita-BlackItalic.ttf is excluded by !**/*.ttf
  • apps/2021/public/assets/fonts/Sansita-Bold.ttf is excluded by !**/*.ttf
  • apps/2021/public/assets/fonts/Sansita-BoldItalic.ttf is excluded by !**/*.ttf
  • apps/2021/public/assets/fonts/Sansita-ExtraBold.ttf is excluded by !**/*.ttf
  • apps/2021/public/assets/fonts/Sansita-ExtraBoldItalic.ttf is excluded by !**/*.ttf
  • apps/2021/public/assets/fonts/Sansita-Italic.ttf is excluded by !**/*.ttf
  • apps/2021/public/assets/fonts/Sansita-Regular.ttf is excluded by !**/*.ttf
  • apps/2021/public/assets/knight-hacks-dark.png is excluded by !**/*.png
  • apps/2021/public/assets/knight-hacks-white.png is excluded by !**/*.png
  • apps/2021/public/assets/mlh-trust-badge-2022-gray.svg is excluded by !**/*.svg
  • apps/2021/public/assets/sponsors/CECS.png is excluded by !**/*.png
  • apps/2021/public/assets/sponsors/EA.png is excluded by !**/*.png
  • apps/2021/public/assets/sponsors/GSPrimary.jpg is excluded by !**/*.jpg
  • apps/2021/public/assets/sponsors/GoogleCloud.png is excluded by !**/*.png
  • apps/2021/public/assets/sponsors/Learner.png is excluded by !**/*.png
  • apps/2021/public/assets/sponsors/Mantech.png is excluded by !**/*.png
  • apps/2021/public/assets/sponsors/NSIN.png is excluded by !**/*.png
  • apps/2021/public/assets/sponsors/TexasInstruments.png is excluded by !**/*.png
  • apps/2021/public/assets/sponsors/UCF.png is excluded by !**/*.png
  • apps/2021/public/assets/sponsors/echo3Dwhite.png is excluded by !**/*.png
  • apps/2021/public/assets/sponsors/microsoft.png is excluded by !**/*.png
  • apps/2021/public/assets/sponsors/miniFB.png is excluded by !**/*.png
  • apps/2021/public/assets/sponsors/stickermule-stacked.png is excluded by !**/*.png
  • apps/2021/public/assets/sponsors/synopsys.png is excluded by !**/*.png
  • apps/2021/public/favicon.ico is excluded by !**/*.ico
  • apps/2023/public/assets/background.png is excluded by !**/*.png
  • apps/2023/public/assets/banner.png is excluded by !**/*.png
  • apps/2023/public/assets/crystal.png is excluded by !**/*.png
  • apps/2023/public/assets/dagger.png is excluded by !**/*.png
  • apps/2023/public/assets/dice.png is excluded by !**/*.png
  • apps/2023/public/assets/dice1.png is excluded by !**/*.png
  • apps/2023/public/assets/dice2.png is excluded by !**/*.png
  • apps/2023/public/assets/geico.png is excluded by !**/*.png
  • apps/2023/public/assets/lockheed.png is excluded by !**/*.png
  • apps/2023/public/assets/logo.png is excluded by !**/*.png
  • apps/2023/public/assets/microsoft.png is excluded by !**/*.png
  • apps/2023/public/assets/morganmorgan.png is excluded by !**/*.png
  • apps/2023/public/assets/rbc.png is excluded by !**/*.png
  • apps/2023/public/assets/siemens.png is excluded by !**/*.png
  • apps/2023/public/assets/spellbook.png is excluded by !**/*.png
  • apps/2023/public/assets/toolcharm.png is excluded by !**/*.png
  • apps/2023/public/favicon.ico is excluded by !**/*.ico
  • apps/2023/public/post.png is excluded by !**/*.png
  • apps/2023/public/story.png is excluded by !**/*.png
  • apps/2024/public/LinkTree.svg is excluded by !**/*.svg
  • apps/2024/public/about.svg is excluded by !**/*.svg
  • apps/2024/public/algae.svg is excluded by !**/*.svg
  • apps/2024/public/algae1.svg is excluded by !**/*.svg
  • apps/2024/public/algae2.svg is excluded by !**/*.svg
  • apps/2024/public/algae3.svg is excluded by !**/*.svg
  • apps/2024/public/bottom-ocean.svg is excluded by !**/*.svg
  • apps/2024/public/cloud.svg is excluded by !**/*.svg
  • apps/2024/public/discord.svg is excluded by !**/*.svg
  • apps/2024/public/favicon.ico is excluded by !**/*.ico
  • apps/2024/public/header.svg is excluded by !**/*.svg
  • apps/2024/public/instagram.svg is excluded by !**/*.svg
  • apps/2024/public/island.svg is excluded by !**/*.svg
  • apps/2024/public/kh-logo.svg is excluded by !**/*.svg
  • apps/2024/public/large-bubble.svg is excluded by !**/*.svg
  • apps/2024/public/medium-bubble.svg is excluded by !**/*.svg
  • apps/2024/public/mlh-badge.svg is excluded by !**/*.svg
  • apps/2024/public/ocean.svg is excluded by !**/*.svg
  • apps/2024/public/sand.svg is excluded by !**/*.svg
  • apps/2024/public/scuba.svg is excluded by !**/*.svg
  • apps/2024/public/ship.svg is excluded by !**/*.svg
  • apps/2024/public/skull.svg is excluded by !**/*.svg
  • apps/2024/public/sky.svg is excluded by !**/*.svg
  • apps/2024/public/small-bubble.svg is excluded by !**/*.svg
  • apps/2024/public/sponsors.svg is excluded by !**/*.svg
  • apps/2024/public/sponsors/bny.svg is excluded by !**/*.svg
  • apps/2024/public/sponsors/geico.svg is excluded by !**/*.svg
  • apps/2024/public/sponsors/ibm.svg is excluded by !**/*.svg
  • apps/2024/public/sponsors/impress-ink.png is excluded by !**/*.png
  • apps/2024/public/sponsors/kinde.svg is excluded by !**/*.svg
  • apps/2024/public/sponsors/nextera-energy.svg is excluded by !**/*.svg
  • apps/2024/public/sponsors/servicenow.svg is excluded by !**/*.svg
  • apps/2024/public/sponsors/siemens-energy.png is excluded by !**/*.png
  • apps/2024/public/sponsors/synopsys.svg is excluded by !**/*.svg
  • apps/2024/public/treasure.svg is excluded by !**/*.svg
  • pnpm-lock.yaml is excluded by !**/pnpm-lock.yaml, !pnpm-lock.yaml
📒 Files selected for processing (74)
  • .forge/features/legacy-hackathon-archives/spec.md
  • .forge/features/legacy-hackathon-archives/srd.md
  • .forge/features/legacy-hackathon-archives/status.md
  • .forge/features/legacy-hackathon-archives/test-cases.md
  • .gitignore
  • apps/2020/e2e/archive.spec.ts
  • apps/2020/eslint.config.js
  • apps/2020/next.config.js
  • apps/2020/package.json
  • apps/2020/playwright.config.ts
  • apps/2020/public/archive-ended.html
  • apps/2020/public/assets/boat-characters.json
  • apps/2020/src/app/layout.tsx
  • apps/2020/src/app/page.tsx
  • apps/2020/src/components/animated-boat.tsx
  • apps/2020/src/components/archive-2020.tsx
  • apps/2020/src/styles/archive.css
  • apps/2020/src/styles/legacy.css
  • apps/2020/tsconfig.json
  • apps/2020/turbo.json
  • apps/2021/e2e/archive.spec.ts
  • apps/2021/eslint.config.js
  • apps/2021/next.config.js
  • apps/2021/package.json
  • apps/2021/playwright.config.ts
  • apps/2021/public/archive-ended.html
  • apps/2021/public/assets/lotties/dark-mode.json
  • apps/2021/public/assets/lotties/light-mode.json
  • apps/2021/src/app/about/page.tsx
  • apps/2021/src/app/attributions/page.tsx
  • apps/2021/src/app/faq/page.tsx
  • apps/2021/src/app/layout.tsx
  • apps/2021/src/app/page.tsx
  • apps/2021/src/app/schedule/page.tsx
  • apps/2021/src/app/sponsors/page.tsx
  • apps/2021/src/components/archive-shell.tsx
  • apps/2021/src/data/schedule.json
  • apps/2021/src/styles/archive.css
  • apps/2021/src/styles/legacy.css
  • apps/2021/tsconfig.json
  • apps/2021/turbo.json
  • apps/2023/e2e/archive.spec.ts
  • apps/2023/eslint.config.js
  • apps/2023/next.config.js
  • apps/2023/package.json
  • apps/2023/playwright.config.ts
  • apps/2023/public/archive-ended.html
  • apps/2023/src/app/layout.tsx
  • apps/2023/src/app/page.tsx
  • apps/2023/src/app/social/page.tsx
  • apps/2023/src/components/archive-home.tsx
  • apps/2023/src/components/faq.tsx
  • apps/2023/src/styles/archive.css
  • apps/2023/tsconfig.json
  • apps/2023/turbo.json
  • apps/2024/e2e/archive.spec.ts
  • apps/2024/eslint.config.js
  • apps/2024/next.config.js
  • apps/2024/package.json
  • apps/2024/playwright.config.ts
  • apps/2024/public/archive-ended.html
  • apps/2024/src/app/layout.tsx
  • apps/2024/src/app/page.tsx
  • apps/2024/src/app/styles.css
  • apps/2024/tsconfig.json
  • apps/2024/turbo.json
  • deploy/dockerfiles/kh2020.Dockerfile
  • deploy/dockerfiles/kh2021.Dockerfile
  • deploy/dockerfiles/kh2023.Dockerfile
  • deploy/dockerfiles/kh2024.Dockerfile
  • deploy/nginx/archive.conf.template
  • package.json
  • scripts/run-archive-e2e-server.sh
  • scripts/stop-archive-e2e-container.ts

Included review availability: Your plan provides up to 1 included review per hour; 0 remain after this review.

Comment thread apps/2024/src/app/page.tsx
Co-authored-by: Codex <codex@openai.com>
@DVidal1205

Copy link
Copy Markdown
Contributor Author

CodeRabbit review follow-up in e2a79b3:

  • Recorded the user-approved exception for one four-archive PR and reconciled the push checklist with the approved branch state.
  • Corrected the 2024 event-duration copy using the archived Friday check-in/opening and Sunday end times.
  • Restored chronological ordering for the 2021 Saturday schedule.
  • Reserved mobile navigation space around the 2023 MLH badge and verified 320px and 768px layouts without overflow.
  • Expanded 2020 forbidden-action coverage to both link and button roles on desktop and mobile.
  • Made 2020 mount only the active responsive layout, leaving one AnimatedBoat instance.
  • Reworked archive teardown to receive the container name through Playwright metadata, ignore only a missing container, and propagate other Docker failures.
  • Evaluated the generic docstring-coverage warning. The affected code is static React view/configuration code with self-describing names, and Forge has no docstring gate. I did not add mechanical comments that would restate the implementation.

Local validation passed: both repository gates, all four package format/lint/typecheck/unit checks, production-container E2E (5/5, 5/5, 5/5, 4/4), responsive browser QA, Docker teardown failure-path checks, and git diff checks.

Dylan Vidal and others added 2 commits August 28, 2026 16:49
Co-authored-by: Codex <codex@openai.com>
Co-authored-by: Codex <codex@openai.com>
@DVidal1205

Copy link
Copy Markdown
Contributor Author

KH IX workspace naming is now standardized in code:

  • apps/khixapps/2026
  • @forge/khix@forge/2026
  • KH IX branding, KHIX_* variables, OAuth client ID, and asset paths remain unchanged
  • kh9.Dockerfile prune/build/runtime paths now target 2026

Validation: both Forge repository gates pass; all 14 KH IX tests pass; the filtered production build passes; the 116,905,476-byte pruned image runs from /app/apps/2026 and serves / and /apply; the complete 21-task workspace build passes with CI-safe environment values. No Coolify or Cloudflare configuration was changed.

@DVidal1205
DVidal1205 merged commit 0e85e69 into main Aug 28, 2026
13 checks passed
@DVidal1205
DVidal1205 deleted the repo/legacy-hackathon-archives branch August 28, 2026 21:00
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Feature New Feature or Request Hack Sites Change modifies code in a Hackathon app (ex. 2025) Major Big change - 2+ reviewers required

Projects

None yet

Development

Successfully merging this pull request may close these issues.

archive legacy hackathon sites in Forge

1 participant