Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
173 commits
Select commit Hold shift + click to select a range
dcd0b6d
Perf: tier-1 bundle + third-party-script wins
gregv Apr 21, 2026
1842b77
Fixes small email sending bug
gregv Apr 23, 2026
27595ad
Merge pull request #278 from opportunity-hack/fix/admin-contact-reado…
gregv Apr 23, 2026
f5a668a
[SEO] PR1: H1 tags, meta refresh on top pages, noindex on third-party…
gregv Apr 25, 2026
c597d9c
[SEO] PR3: Consolidate 6 judge pages → 1 canonical (/hackathon-judge-…
gregv Apr 25, 2026
fb614cd
[SEO] PR4: New /coding-for-nonprofits pillar page (~2.2k words, FAQPa…
gregv Apr 26, 2026
8396a96
fix: add missing Typography import to src/pages/index.js
Copilot Apr 26, 2026
a10cb01
Merge pull request #280 from opportunity-hack/seo-improvements-q2-2026
gregv Apr 26, 2026
d0331b8
Merge pull request #281 from opportunity-hack/seo-judge-consolidation
gregv Apr 26, 2026
fb64a79
Merge develop into seo-coding-for-nonprofits: resolve import conflict…
Copilot Apr 26, 2026
1daf2a8
Merge pull request #282 from opportunity-hack/seo-coding-for-nonprofits
gregv Apr 26, 2026
5a3b990
[SEO] PR5: Global Organization schema + FAQPage on /about/judges
gregv Apr 26, 2026
4da3938
[SEO] PR7: New /hackathon-judging-criteria authoritative resource page
gregv Apr 26, 2026
c4570c0
[SEO] PR6: New /hackathon-for-social-good + /hackathons/arizona landi…
gregv Apr 26, 2026
2b6fbb1
[SEO] Add 8 mentor FAQs + FAQPage schema to /about/mentors
gregv Apr 26, 2026
11731f7
[SEO] New /12-years-of-social-good — long-form data field report
gregv Apr 26, 2026
b968d28
Heart cert FAQ for mentors
gregv Apr 26, 2026
f03fdd4
Fix chart.js controller registration on /12-years-of-social-good
gregv Apr 26, 2026
6c8b603
Merge seo-12-years-report: 12-years page, mentor FAQs, hackathon-for-…
gregv Apr 26, 2026
ce2e044
[ClaudeCode] Large update
gregv Apr 27, 2026
f43caec
Update to handle hack urls with dashes
gregv May 4, 2026
33be16a
[admin] Fix problem rendering
gregv May 8, 2026
0503eaa
[ClaudeCode] Add hackathon planning board — /hack/[event_id]/plan
gregv May 8, 2026
4909cd1
Merge pull request #288 from opportunity-hack/claude/xenodochial-enge…
gregv May 8, 2026
2c98f5e
[Planning] Trello-style board layout: full-viewport workspace + edge-…
gregv May 9, 2026
a108729
[Planning] Roomier board header bar — py 1 → 1.75, px 2 → 2.5
gregv May 9, 2026
5833f9e
[Planning] Editors picker: searchable Autocomplete with avatars
gregv May 9, 2026
2750dc0
[Planning] Fix admin detection — use userClass.getOrgByName, not orgH…
gregv May 9, 2026
941e9d7
[Planning] Card dialog: always show the live card from the board
gregv May 9, 2026
9ea1326
[Planning] Wire budget widget toggle to public event page
gregv May 9, 2026
5cd780d
[Planning] Self-assign + status indicator + dark mode for the board
gregv May 9, 2026
210941f
[Planning] Comment composer + renderer support @-mentions
gregv May 9, 2026
d6ded83
[Planning] Assignee avatars link to profile + dark-mode TextField fix
gregv May 9, 2026
299978e
[Docs] CLAUDE.md: capture session learnings as a Gotchas section
gregv May 9, 2026
5ee1d55
[Planning] Card permalinks + UX cleanup (one notice, copy link, calme…
gregv May 9, 2026
11b690a
[Planning] Header breathing room + admin editors show real names
gregv May 9, 2026
8e72a13
[Docs] CLAUDE.md: three more frontend gotchas from planning-board work
gregv May 9, 2026
8753961
[Planning] Surface Slack send success/error in admin UI
gregv May 9, 2026
48ee100
[Planning] Drop redundant Save Slack button + fix URL card "popping b…
gregv May 9, 2026
cd576c7
[Planning] URL always reflects the open card — full nav off SSR perma…
gregv May 9, 2026
2a1abc2
[Planning] Inline budget editor on cards — wires up the event-page wi…
gregv May 10, 2026
af5f323
[Hacker App] Cleaner location step, drop tax-credit ask, perf fixes
gregv May 11, 2026
5946758
[Hacker App] Modular refactor — split into per-step components
gregv May 11, 2026
a02deeb
[Admin] Hacker deposit refund UI on /admin/volunteer tab 3
gregv May 13, 2026
9ebd3d7
[Admin] Bulk refund button + webhook-friendly checkout metadata
gregv May 13, 2026
7ce04e0
[Stripe] Rename webhook env vars so store + hacker-deposit don't collide
gregv May 13, 2026
630ef12
[Admin] Replace Edit Hackathon modal with deep-linkable per-event page
gregv May 15, 2026
944bf77
Merge pull request #289 from opportunity-hack/claude/gifted-cerf-8a9e1e
gregv May 15, 2026
f336cc3
[Admin] Meals — vendor menu catalog + cost estimator
gregv May 15, 2026
57abc42
Merge pull request #290 from opportunity-hack/claude/gifted-cerf-8a9e1e
gregv May 15, 2026
0eedb99
Hackathon Funnel
gregv May 15, 2026
9c17854
Updated funnel display
gregv May 15, 2026
a094245
Added .claude/ to .gitignore
gregv May 15, 2026
1dadbbf
[Admin] Reimagined /admin/profile — URL-driven search + ohadmin shortcut
gregv May 15, 2026
b4ccb4c
Merge pull request #291 from opportunity-hack/claude/romantic-wozniak…
gregv May 15, 2026
eb7e7d4
[Teams] Team demo videos + /admin/teams polish
gregv May 16, 2026
526e98c
Merge pull request #292 from opportunity-hack/claude/zen-franklin-371740
gregv May 16, 2026
7dbfb56
[bugfix] allow for nonprofit to be set manually
gregv May 16, 2026
c04d293
[Blog] /admin/blog — full CMS with markdown, SEO, drafts
gregv May 17, 2026
643a952
Merge pull request #293 from opportunity-hack/claude/dazzling-faraday…
gregv May 17, 2026
cd1ba8f
[Blog] /blog index uses explicit tags, featured_image, author
gregv May 17, 2026
1d35c2b
Merge pull request #294 from opportunity-hack/claude/dazzling-faraday…
gregv May 17, 2026
223d5f7
link fix
gregv May 17, 2026
5434de5
Fix link render within markdown to be a nice blue
gregv May 19, 2026
c1464c8
[Admin] [Team] Add autocomplete to find hackathon quickly
gregv May 19, 2026
72a196f
[Bug] Handle null for older hackathons
gregv May 19, 2026
cb0882c
Get rid of ugly nonprofit placeholder image
gregv May 19, 2026
2307163
[Admin] Move all hackathon functionality into hackathon admin
gregv May 19, 2026
4aab1f3
[Admin] Hackathon edit — consistent section frame width
gregv May 21, 2026
3196fa5
Merge pull request #295 from opportunity-hack/claude/admin-section-wi…
gregv May 21, 2026
111455d
Redesign /hack page for faster event discovery and scannable archive
gregv May 22, 2026
c7cf592
Merge pull request #296 from opportunity-hack/redesign-hack-page-vert…
gregv May 22, 2026
4f4fac3
Initial plan
Copilot May 22, 2026
68cd64f
feat: add /hack/[event_id]/team/[team_id] page for direct team linking
Copilot May 22, 2026
912e97a
fix: address review feedback - use NextLink, fix optional chaining
Copilot May 22, 2026
d7c8a52
fix: use notFound in catch block, revert unintentional package-lock c…
Copilot May 22, 2026
b180084
Merge pull request #298 from opportunity-hack/copilot/add-link-to-tea…
gregv May 22, 2026
23d5171
Initial plan
Copilot May 22, 2026
b563a70
Fix RangeError: Invalid time value on /hack page
Copilot May 22, 2026
c798923
Merge pull request #300 from opportunity-hack/copilot/fix-frontend-er…
gregv May 22, 2026
5fe7195
Initial plan
Copilot May 22, 2026
f4f2fe1
Fix team detail page showing "Unnamed Team" by extracting nested team…
Copilot May 22, 2026
c248751
Enhance team detail page with video embed, problem statement titles, …
Copilot May 22, 2026
2d02d02
Fix nonprofit name resolution: API returns { nonprofits: { name } } n…
Copilot May 22, 2026
48d7666
Merge pull request #302 from opportunity-hack/copilot/fix-unnamed-tea…
gregv May 22, 2026
a370482
[Teams] Add project-completion checklist + fix team-page bugs
gregv May 27, 2026
782368e
Merge pull request #303 from opportunity-hack/claude/team-completion-…
gregv May 27, 2026
61d33a3
Fix /hack horizontal overflow on mobile
gregv May 27, 2026
1330820
[Mentors] Per-team mentor support panel + /about/mentors live preview
gregv May 27, 2026
e6900f1
[Mentors] /about/mentors polish + Accessibility criterion
gregv May 28, 2026
75bf8c0
Merge pull request #304 from opportunity-hack/fix-hack-mobile-strip-o…
gregv May 28, 2026
e623d35
Merge pull request #305 from opportunity-hack/claude/mentor-team-panel
gregv May 28, 2026
668df13
[Mentors] At-a-glance mentor support + judging readiness on team list…
gregv May 28, 2026
24619cc
[Bugfix] /hack nav on mobile
gregv May 28, 2026
fe05c1e
Merge pull request #306 from opportunity-hack/claude/mentor-team-panel
gregv May 28, 2026
f5404be
[Letters] Self-service volunteer letter generator at /hack/[event_id]…
gregv May 30, 2026
fd98345
Merge pull request #307 from opportunity-hack/claude/volunteer-letter…
gregv May 30, 2026
9de5aa2
[Teams] Gate join to approved hackers + unified nonprofit select/rank
gregv May 30, 2026
b62d165
[Apps] Fix Slack/social unfurl on application pages (SSR Head + env var)
gregv May 30, 2026
e77c478
[Bugfix] Recall hacker required-question answers from saved application
gregv May 30, 2026
37fac61
Merge pull request #308 from opportunity-hack/claude/team-creation-flow
gregv May 30, 2026
1379c89
Merge pull request #309 from opportunity-hack/claude/application-og-u…
gregv May 30, 2026
3f01722
Merge pull request #310 from opportunity-hack/fix/hacker-required-que…
gregv May 30, 2026
d9aa32c
[Fix] Render markdown in upcoming event descriptions as clean text
gregv May 31, 2026
926bcbc
MASSIVE SITE DESIGN UPDATE
gregv May 31, 2026
d75d1c4
Merge pull request #311 from opportunity-hack/fix/event-description-m…
gregv May 31, 2026
40c87f7
MASSIVE THEME UPDATE PART DEUX
gregv Jun 1, 2026
8a68bac
small update
gregv Jun 1, 2026
8c16a08
Facelift for mentor and hacker apps
gregv Jun 2, 2026
29a647a
Fix truncated stat labels in Hackathon Leaderboard
gregv Jun 3, 2026
b99e3b8
Refine feedback + team pages, table-ify mentor availability, fix /hac…
gregv Jun 3, 2026
7425d0c
Merge pull request #313 from opportunity-hack/refined-feedback-team-m…
gregv Jun 3, 2026
d7398bd
fixed misaligned links in footer
tarun-katal Jun 5, 2026
d779d5d
[Admin] [Email Templates] Don't hardcode use the backend for CRUD
gregv Jun 10, 2026
9a7a40c
[bugfix][admin] auth session render issue
gregv Jun 10, 2026
074d393
[bugfix] media that shows images was overlapping with the Photo credi…
gregv Jun 10, 2026
9df8040
[Feat] Improve image carousel
gregv Jun 10, 2026
ec0d89a
[bugfix] Show markdown on application pages
gregv Jun 10, 2026
e38ba37
[feat] Media updates for hackathons
gregv Jun 10, 2026
debceea
Markdown support
gregv Jun 10, 2026
a001ea6
[Admin] make email fetch smarter
gregv Jun 10, 2026
d2504d7
Claude.md context updates
gregv Jun 10, 2026
060b680
Formatting
gregv Jun 11, 2026
0403be8
[feat][Admin] Improve ability to send and resend emails
gregv Jun 11, 2026
48ed229
Simplify + optimize team page
gregv Jun 11, 2026
70f6679
[Perf] Improve manage team and hack pages
gregv Jun 11, 2026
1349882
[SEO] Restore site-wide SSR + canonical sweep, redirects, server-site…
gregv Jun 12, 2026
571a29d
[GA4] Fix double page_view fire + filter shallow-route spam
gregv Jun 12, 2026
78ef5ab
Merge pull request #312 from opportunity-hack/fix/leaderboard-stat-la…
gregv Jun 12, 2026
7fe3aee
fix: add missing isLoggedIn from useAuthInfo in TeamCompletionChecklist
gregv Jun 12, 2026
a8a3b95
Merge pull request #318 from opportunity-hack/perf/pr5-ga4-tracking-f…
gregv Jun 12, 2026
fe48cd8
[Refined] Refactor /nonprofits/apply to civic-editorial design system
gregv Jun 12, 2026
7d98b78
Merge pull request #319 from opportunity-hack/perf/pr5-ga4-tracking-f…
gregv Jun 12, 2026
342fbf0
Merge pull request #314 from tarun-katal/fix-footer-social-links
gregv Jun 13, 2026
1a3a7b9
[SEO] Fix Event schema on /hack — add missing required fields
gregv Jun 13, 2026
69fc2d2
Merge pull request #320 from opportunity-hack/seo/fix-hack-event-schema
gregv Jun 13, 2026
7f87283
[Refined] Student-first /hack/request + refine /office-hours
gregv Jun 14, 2026
ace4798
Merge pull request #321 from opportunity-hack/refined/hack-request-of…
gregv Jun 14, 2026
358234f
[UX] Improve signup look and feeel
gregv Jun 15, 2026
6261594
[Hacker Application] Allow to force them on to take late applicants
gregv Jun 16, 2026
b1ca06a
New UI to display Community Champs
Jun 19, 2026
f041bcb
[Hack] Improve leaderboard flag for teams
gregv Jun 20, 2026
b6fe23b
Merge pull request #323 from opportunity-hack/refined/hack-request-of…
gregv Jun 20, 2026
210de7b
Merge pull request #322 from AndrewHUNGNguyen/UI-comm-champs-improve
gregv Jun 20, 2026
e765fd2
[Profile] Fix linkedin url
gregv Jun 20, 2026
0d32007
[Public Profile] Add praise link
gregv Jun 20, 2026
e13c942
[Profile] Conform to new theme
gregv Jun 20, 2026
fbd7195
[Mentor and Teams] Massive overhaul
gregv Jun 20, 2026
05137d1
[Mentor] Add AI question to application per ASU meeting
gregv Jun 22, 2026
fb8ff69
[Nonprofit + Problem] Style uplift
gregv Jun 22, 2026
bc4f38c
[Mentor] Show actionable notice when check-in has no Slack announcement
gregv Jun 24, 2026
a958519
[Volunteer Admin] Mobile, LinkedIn visibility, OHack profile link, al…
gregv Jun 24, 2026
cb845e7
Merge pull request #324 from opportunity-hack/fix/mentor-checkin-ui
gregv Jun 25, 2026
0af471a
Merge pull request #325 from opportunity-hack/feat/volunteer-admin-im…
gregv Jun 25, 2026
6cb5ab4
Plans
gregv Jun 25, 2026
249b765
app fix for deposit
gregv Jun 25, 2026
94e3f4c
Merge pull request #326 from opportunity-hack/feat/volunteer-admin-im…
gregv Jun 25, 2026
cf00504
Add recruitment page for recruiters since we've never had this before
gregv Jun 27, 2026
695dbaf
Update mentor checklist functionality
gregv Jun 27, 2026
3c0f359
Add event feedback survey pages (/hack/[event_id]/survey + /feedback)
gregv Jun 28, 2026
ab2f09e
Scope role selector to selected role(s); reveal onboarding follow-up …
gregv Jun 29, 2026
215c072
Reword mentor_role_clarity to 'time commitments'
gregv Jun 29, 2026
b7fc0c7
Add discoverability CTAs linking to the event feedback survey
gregv Jun 29, 2026
709d8e8
Add /admin/feedback review dashboard + survey textarea focus fix
gregv Jun 30, 2026
20fe7c6
Refine /volunteer/track + fix tracking accuracy and the load bug
gregv Jun 30, 2026
d030dba
Merge pull request #327 from opportunity-hack/feat/event-feedback-sur…
gregv Jun 30, 2026
e80540e
Merge pull request #328 from opportunity-hack/fix/volunteer-track-ref…
gregv Jun 30, 2026
9ea29ef
Add GA Comm Champs
Jul 11, 2026
0b9df33
Merge pull request #329 from AndrewHUNGNguyen/UI-comm-champs-improve
gregv Jul 11, 2026
de5e4b6
[Slackbot Config] Allow us to configure the Slackbot from admin inste…
gregv Jul 12, 2026
a3bbfa1
[Slackbot] Fix calendar link
gregv Jul 13, 2026
9d12a51
Hide "Want to help?" toggle on production-status projects
gregv Jul 23, 2026
dffd1a9
Merge pull request #331 from opportunity-hack/feature/hide-help-toggl…
gregv Jul 23, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
5 changes: 5 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -10,3 +10,8 @@ sitemap*.xml
**/robots.txt
test-results/.last-run.json
test-scroll-behavior.sh
.claude/
.env

# Playwright MCP screenshot/console artifacts
.playwright-mcp/
650 changes: 643 additions & 7 deletions CLAUDE.md

Large diffs are not rendered by default.

16 changes: 14 additions & 2 deletions EMAIL_API_ENDPOINTS.md
Original file line number Diff line number Diff line change
@@ -1,16 +1,19 @@
# Email API Endpoint Usage

## Overview

The system now supports two different API endpoints for sending emails, automatically choosing the correct one based on recipient type.

## API Endpoints

### 1. User ID Endpoint (Registered Users)

**Endpoint:** `POST /api/admin/{user.id}/message`

**Used for:** Recipients who have user accounts in the system (have a user ID)

**Request Body:**

```json
{
"message": "Email content here",
Expand All @@ -21,11 +24,13 @@ The system now supports two different API endpoints for sending emails, automati
```

### 2. Email-Only Endpoint (Non-Registered Recipients)

**Endpoint:** `POST /api/admin/email/send`

**Used for:** Recipients who only have email addresses (no user account)

**Request Body:**

```json
{
"email": "user@example.com",
Expand All @@ -41,26 +46,32 @@ The system now supports two different API endpoints for sending emails, automati
The system automatically detects which endpoint to use based on these criteria:

```javascript
const isEmailOnlyRecipient = !user.id || user.source === 'custom' || user.source === 'csv';
const isEmailOnlyRecipient =
!user.id || user.source === "custom" || user.source === "csv";
```

**Email-only endpoint used when:**

- User has no ID (`!user.id`)
- User source is 'custom' (manually added email)
- User source is 'csv' (imported from CSV file)

**User ID endpoint used when:**

- User has a valid ID from the database
- User was fetched from Slack/volunteer system

## Updated Components

### BatchEmailService (`src/lib/batchEmailService.js`)

- **Enhanced:** `sendEmailToUser()` method now detects recipient type
- **Added:** Endpoint tracking for debugging (`result.endpoint`)
- **Improved:** Error messages include endpoint context
- **Performance:** `sendBatchEmails()` uses bounded parallelism (`MAX_PARALLEL_SENDS = 8`) instead of sending every request strictly one-by-one

### VolunteerCommunication (`src/components/admin/VolunteerCommunication.js`)

- **Enhanced:** `handleSendMessage()` method now uses dual-endpoint logic
- **Maintained:** All existing functionality and UI behavior

Expand All @@ -83,7 +94,8 @@ When using `/admin/social-media`:
## Error Handling

Enhanced error messages now include endpoint context:

- `"Error message (via user-ID endpoint)"`
- `"Error message (via email-only endpoint)"`

This helps with debugging API issues and understanding which type of recipient failed.
This helps with debugging API issues and understanding which type of recipient failed.
Loading
Loading