Hacklytics Digital Bloom, Slack bot hosting, and dependency bumps - #371
Hacklytics Digital Bloom, Slack bot hosting, and dependency bumps#371aamoghS wants to merge 13 commits into
Conversation
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>
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>
Dependency ReviewThe following issues were found:
|
|
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>
|
| 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)); |
There was a problem hiding this comment.
What this combines
One branch for the open Hacklytics / Slack / Dependabot work instead of nine separate PRs.
mainvia hotfix #367 — no extra diffHacklytics 2027
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
@query/dsgt-slackworkspace package andPOST /api/webhooks/slackon mainweb.SLACK_BOT_TOKEN/SLACK_SIGNING_SECRET.event_callbackbeforechat.postMessage, keep the work alive with Next.jsafter(), and skip duplicateevent_idretries so Slack timeouts do not double-post.Dependencies
Same version targets as the open Dependabot PRs.
@typescript-eslint/eslint-pluginand parser intooling/eslintstay on 8.67.0 with thetypescript-eslintmeta package. Two existing files needed lint fixes after that bump (no-useless-assignmentin attendee CSV export, type-only import in registration controls).Verified
pnpm test: 726 passed<form>/ email fields; every Notify me href is the portal login handoff; mobile menu still exposes Notify meFollow-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.