Skip to content

Hacklytics Digital Bloom, Slack bot hosting, and dependency bumps - #371

Open
aamoghS wants to merge 13 commits into
mainfrom
cursor/combined-platform-fixes-f572
Open

Hacklytics Digital Bloom, Slack bot hosting, and dependency bumps#371
aamoghS wants to merge 13 commits into
mainfrom
cursor/combined-platform-fixes-f572

Conversation

@aamoghS

@aamoghS aamoghS commented Aug 28, 2026

Copy link
Copy Markdown
Member

What this combines

One branch for the open Hacklytics / Slack / Dependabot work instead of nine separate PRs.

Source Status in this PR
#370 Unhide Hacklytics 2027 sections Included
#368 Lock Notify me to the portal Included
#365 Dashboard 404 + portal/hackathon nav Already on main via hotfix #367 — no extra diff
#356 Host @dsgt Slack bot on Firebase App Hosting Included, plus review fixes
#349 typescript-eslint 8.67.0 Included
#348 @eslint/js 10.0.1 Included
#347 @auth/drizzle-adapter 1.11.3 Included
#346 vitest 4.1.10 Included
#345 lucide-react 1.31.0 Included

Hacklytics 2027

  • Tracks, Prizes, Schedule, and Sponsors are on the page again (nav hashes land ~88px under the bar).
  • Sections restyle to Digital Bloom lists: stacked tracks, Best Overall Purse TBA, one schedule board, DS@GT + MLH only.
  • Notify me is still INTEREST_URL (/login?callbackUrl=/hacklytics). Sharp cyan rectangle, no glow soup, no on-site email form.

Hacklytics hero with portal Notify me CTA
Digital Bloom tracks list
Mobile menu Notify me

Slack bot

  • New @query/dsgt-slack workspace package and POST /api/webhooks/slack on mainweb.
  • App Hosting env for SLACK_BOT_TOKEN / SLACK_SIGNING_SECRET.
  • Review fix: ACK event_callback before chat.postMessage, keep the work alive with Next.js after(), and skip duplicate event_id retries so Slack timeouts do not double-post.

Dependencies

Same version targets as the open Dependabot PRs. @typescript-eslint/eslint-plugin and parser in tooling/eslint stay on 8.67.0 with the typescript-eslint meta package. Two existing files needed lint fixes after that bump (no-useless-assignment in attendee CSV export, type-only import in registration controls).

Verified

  • pnpm test: 726 passed
  • Lint: slack bot, auth, api, hacklytics2027, mainweb
  • Browser: desktop nav hashes land on Tracks / Prizes / Schedule / Sponsors / FAQ; zero <form> / email fields; every Notify me href is the portal login handoff; mobile menu still exposes Notify me

Follow-up

The original PRs can be closed as superseded once this lands. #365 can be closed now; its branch is already gone.

To show artifacts inline, enable in settings.

Open in Web Open in Cursor 

aamoghS and others added 12 commits August 17, 2026 16:51
Restore apps/dsgt-slack and serve Slack Events API, slash commands, and
interactivity at /api/webhooks/slack on sites/mainweb. Production uses
HTTP (not Socket Mode) with SLACK_BOT_TOKEN and SLACK_SIGNING_SECRET
from Secret Manager.
The Firebase @dsgt app only answers help, ping, and join. Google Slides,
Forms, and other MCP tools belong on the Grok Bot teammate installed into
the DS@GT Slack workspace.
Replace the polynomial <@[^>]+> matcher with a linear indexOf scan so a
flood of incomplete <@ prefixes cannot backtrack on event text.
Slack rejects Event Subscriptions, Interactivity, and /dsgt when Socket Mode
is off and no Request URL is set. Keep the @dsgt bot user and scopes so the
app can be installed; add those HTTP features in the Slack UI after the
webhook is live.
Every Notify me still opens INTEREST_URL (login → /hacklytics). The shared
pixel-btn drops the 28px glow so the control reads as a cyan rectangle with
black type. Hero copy states the site has no form.

Co-authored-by: Aamogh <aamoghS@users.noreply.github.com>
Tracks, prizes, schedule, and sponsors were compiled but gated behind
SHOW_FUTURE_SECTIONS = false, so navbar anchors went nowhere. Render those
sections, drop last year's prize amounts and sponsor names, and match the
Digital Bloom layout: stacked tracks, Best Overall TBA, one status board,
DS@GT + MLH only, portal-only Notify me, pixel ground strip in the footer.

Co-authored-by: Aamogh <aamoghS@users.noreply.github.com>
Drop the inside-baseball TBA disclaimer, keep Purse TBA visitor-facing,
and stretch the DS@GT / MLH / partner-deck boxes to one height.

Co-authored-by: Aamogh <aamoghS@users.noreply.github.com>
Co-authored-by: Aamogh <aamoghS@users.noreply.github.com>
Keep the Space Grotesk navbar restyle from #370 and the portal-handoff
aria-labels from #368 so Notify me stays locked to INTEREST_URL.

Co-authored-by: Aamogh <aamoghS@users.noreply.github.com>
Host the club Slack bot as an HTTP Events API handler on mainweb via
Firebase App Hosting. Refresh the lockfile for the new workspace package.

Co-authored-by: Aamogh <aamoghS@users.noreply.github.com>
Slack retries when the webhook does not return 200 within about 3 seconds.
Awaiting chat.postMessage (and treating its throw as invalid JSON) caused
duplicate @dsgt replies. ACK immediately, keep the work alive with Next.js
after(), and remember event_id so retries are no-ops.

Co-authored-by: Aamogh <aamoghS@users.noreply.github.com>
…lint

Apply the open Dependabot updates: lucide-react 1.31.0, vitest 4.1.10,
@auth/drizzle-adapter 1.11.3, @eslint/js 10.0.1, and typescript-eslint 8.67.0.
Keep the @typescript-eslint plugin and parser on the same 8.67.0 line.

Co-authored-by: Aamogh <aamoghS@users.noreply.github.com>
@github-actions github-actions Bot added the dependencies Pull requests that update a dependency file label Aug 28, 2026
@github-actions

github-actions Bot commented Aug 28, 2026

Copy link
Copy Markdown
Contributor

Dependency Review

The following issues were found:

  • ✅ 0 vulnerable package(s)
  • ✅ 0 package(s) with incompatible licenses
  • ✅ 0 package(s) with invalid SPDX license definitions
  • ⚠️ 1 package(s) with unknown licenses.
  • ⚠️ 19 packages with OpenSSF Scorecard issues.

View full job summary

@github-actions

github-actions Bot commented Aug 28, 2026

Copy link
Copy Markdown
Contributor

Visit the preview URL for this PR (updated for commit 21d60fe):

https://hacklytics2027--pr-371-9ytr38kt.web.app

(expires Fri, 04 Sep 2026 22:29:58 GMT)

🔥 via Firebase Hosting GitHub Action 🌎

Sign: c48ba34db61581e25fe2978355160b5eefe0e83f

no-useless-assignment flagged the unused [] initializer on the CSV export
buffer, and import/consistent-type-specifier-style wants HackathonStatus
as a separate type import.

Co-authored-by: Aamogh <aamoghS@users.noreply.github.com>
@aamoghS
aamoghS marked this pull request as ready for review August 28, 2026 22:32
@greptile-apps

greptile-apps Bot commented Aug 28, 2026

Copy link
Copy Markdown

Greptile Summary

This PR publishes the Hacklytics 2027 Digital Bloom sections, adds a Slack bot and production webhook to mainweb, and updates several dependencies.

  • Adds signed Slack Events API handling, slash-command responses, local Socket Mode support, deployment configuration, and tests.
  • Restyles and restores the Hacklytics tracks, prizes, schedule, sponsors, and FAQ sections while routing Notify Me links to the portal.
  • Updates Auth.js, ESLint, typescript-eslint, Vitest, and lucide-react dependencies.

Confidence Score: 4/5

The deferred Slack delivery path should be fixed before merging because transient Slack API failures permanently discard acknowledged bot replies.

Event callbacks receive a successful response before chat.postMessage completes, while rejected deferred work has no retry or durable recovery mechanism, so temporary downstream failures become missing user-visible replies.

Files Needing Attention: apps/dsgt-slack/src/http.ts and sites/mainweb/app/(portal)/api/webhooks/slack/route.ts

Important Files Changed

Filename Overview
apps/dsgt-slack/src/http.ts Implements signature verification, request parsing, event deduplication, and asynchronous replies, but downstream posting failures are lost after acknowledgement.
sites/mainweb/app/(portal)/api/webhooks/slack/route.ts Exposes the production Slack webhook and correctly supplies secrets and Next.js post-response work scheduling.
apps/dsgt-slack/src/replies.ts Adds deterministic intent matching and FAQ, health, help, and default reply text.
sites/hacklytics2027/components/HomeSections.tsx Restores the previously hidden Hacklytics content sections in the intended page order.
sites/hacklytics2027/components/Navbar.tsx Updates desktop and mobile navigation styling while retaining section links and the portal handoff.
pnpm-lock.yaml Resolves the new Slack workspace dependencies and the requested dependency upgrades.

Reviews (1): Last reviewed commit: "Fix ESLint 8.67 findings in attendee exp..." | Re-trigger Greptile

if (event) {
// ACK first. Slack retries after ~3s; awaiting chat.postMessage here
// (especially after a cold start) duplicates the reply.
defer(handleEvent(event, client));

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

P1 Deferred replies are permanently dropped

When chat.postMessage fails after an event callback is acknowledged, the deferred rejection cannot change the HTTP 200 response and no queue or retry path retains the reply, causing the user to receive no bot response.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

dependencies Pull requests that update a dependency file

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants