Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
102 commits
Select commit Hold shift + click to select a range
109d3f1
Merge pull request #105 from techstartucalgary/main
rxmox Apr 10, 2026
8c50067
Add bingo table AI generation
youssefibrahim3 Apr 10, 2026
5dc9edd
Merge branch 'frontend/home-page' of https://github.com/techstartucal…
youssefibrahim3 Apr 10, 2026
cde7803
fix errors
youssefibrahim3 Apr 10, 2026
a4c5c46
Add LinkedIn account linking for guest users
rxmox Apr 10, 2026
ae27592
fix api call
youssefibrahim3 Apr 10, 2026
2be0e93
Allow local accounts to link LinkedIn profile
rxmox Apr 10, 2026
7e5fa89
(Update) Swapped Social Link Formatting
keeryn04 Apr 10, 2026
892c589
Added visuals for fetching from bingo generation API
youssefibrahim3 Apr 10, 2026
be74783
fix bingo table display on dashboard
youssefibrahim3 Apr 11, 2026
4fa489e
Enhance EventSpotlight and EventPage with leaderboard functionality
jktieh Apr 16, 2026
a4620c6
(Progress) Added LinkedIn Linking to UpdateProfile
keeryn04 Apr 22, 2026
d3ad9f8
Merge branch 'mobile-linkedin-link' into mobile-social-link-refactor
keeryn04 Apr 22, 2026
046916f
Merge branch 'main' into frontend/home-page
lnqminh3003 Apr 30, 2026
8b69da5
Add bingo tags input
youssefibrahim3 Apr 30, 2026
99d154d
Update styling of tag entry
youssefibrahim3 Apr 30, 2026
5e899bd
update event pusher
lnqminh3003 Apr 30, 2026
282af1a
Add cell selection
youssefibrahim3 Apr 30, 2026
d38959a
Fix text input for cells
youssefibrahim3 Apr 30, 2026
f9a3ce1
Change maximum tags
youssefibrahim3 Apr 30, 2026
bd73051
Add bingo leaderboard API with live Pusher updates
rxmox Apr 6, 2026
14c3bac
Merge branch 'STR-112-Generate-Individual-Bingo-Game-questions' of ht…
rodolfo-gp Apr 30, 2026
14d3b11
Update tag text
youssefibrahim3 Apr 30, 2026
216ea0e
Fix generation bugs
youssefibrahim3 Apr 30, 2026
11e3e20
fix create an event
lnqminh3003 Apr 30, 2026
4f41bc8
Merge branch 'frontend/home-page' of github.com:techstartucalgary/Net…
lnqminh3003 Apr 30, 2026
a051a3c
Remove description input from bingo, use only tags and description fr…
youssefibrahim3 Apr 30, 2026
4c0801c
Merge branch 'frontend/home-page'
lnqminh3003 Apr 30, 2026
37a17fa
Add tags functionality
youssefibrahim3 Apr 30, 2026
206b742
Update tag input
youssefibrahim3 Apr 30, 2026
0f72b4c
Fix bingotable with dashboard
youssefibrahim3 Apr 30, 2026
0f31249
fix react error
youssefibrahim3 Apr 30, 2026
ac12bef
fix bingotable
youssefibrahim3 Apr 30, 2026
cb44e9f
fix dashboard events (please)
youssefibrahim3 Apr 30, 2026
3a95e0d
Add more padding to bingo table cells
youssefibrahim3 Apr 30, 2026
43978b2
Allow multiple 'other' social links on user profile
rxmox Apr 30, 2026
d85876f
Add labelling
youssefibrahim3 Apr 30, 2026
dc07e38
Merge pull request #109 from techstartucalgary/backend-social-links-o…
rxmox Apr 30, 2026
5d18a42
Merge pull request #108 from techstartucalgary/feature/linkedin-guest…
rxmox Apr 30, 2026
c671b93
fix labelling
youssefibrahim3 Apr 30, 2026
6a903cf
Merge pull request #110 from techstartucalgary/backend
rxmox Apr 30, 2026
36350bc
(Update) Link Linkedin to Existing User
keeryn04 Apr 30, 2026
341de7c
Merge pull request #112 from techstartucalgary/mobile-social-link-ref…
keeryn04 Apr 30, 2026
57af1f7
Created New bingo Route to generate single questions, added route in …
rodolfo-gp Apr 30, 2026
014c142
Adjust bingo table styling
youssefibrahim3 Apr 30, 2026
422fa6e
(Update) Removed LinkedIn Auth in Update Profile
keeryn04 Apr 30, 2026
f2e642d
Log jwt error details when LinkedIn state verification fails
rxmox Apr 30, 2026
f0ce3db
added documentation for the API Routes
rodolfo-gp Apr 30, 2026
d0a3597
Updated documentation
rodolfo-gp Apr 30, 2026
ec4838b
update bingotable styling
youssefibrahim3 Apr 30, 2026
d312733
Change socialLinks.other to array of {label, url} entries
rxmox Apr 30, 2026
7714a92
Merge pull request #117 from techstartucalgary/backend-social-links-o…
rxmox Apr 30, 2026
ea09038
Merge pull request #118 from techstartucalgary/backend-linkedin-state…
rxmox Apr 30, 2026
2c4716f
Merge pull request #119 from techstartucalgary/backend
rxmox Apr 30, 2026
11dcdde
table styling
youssefibrahim3 Apr 30, 2026
e091202
(Update) Changed Links to Label Display
keeryn04 Apr 30, 2026
f77680f
Finish styling for bingo cells
youssefibrahim3 Apr 30, 2026
6f3f93a
Updated generateBingo route to split context param into 2 separate on…
rodolfo-gp Apr 30, 2026
bf93aed
Updated Documentation for generating full bingo game api route
rodolfo-gp Apr 30, 2026
a42e893
(Fix) Can View Previous Game State from Event Page
keeryn04 Apr 30, 2026
cf96309
Merge pull request #116 from techstartucalgary/STR-112-Generate-Indiv…
lnqminh3003 Apr 30, 2026
ef81bb3
Update font color for styling, update GenerateQuestions
youssefibrahim3 Apr 30, 2026
cdd5e84
Change bingotable
youssefibrahim3 Apr 30, 2026
52b3035
Merge pull request #114 from techstartucalgary/mobile
keeryn04 Apr 30, 2026
924c2da
(Fix) Added LinkedIn Logging
keeryn04 Apr 30, 2026
365832e
leaderbord fronttend
lnqminh3003 Apr 30, 2026
4ca3f0e
Merge branch 'frontend/home-page'
lnqminh3003 Apr 30, 2026
7c707f2
Merge pull request #120 from techstartucalgary/backend
rxmox Apr 30, 2026
5c5ef22
update leaderboard websocket
lnqminh3003 Apr 30, 2026
e13b1cb
Merge branch 'frontend/home-page'
lnqminh3003 Apr 30, 2026
9444900
Updated single question generation to accept a list of questions. Add…
rodolfo-gp Apr 30, 2026
4238b78
Merge pull request #121 from techstartucalgary/STR-112-Generate-Indiv…
lnqminh3003 Apr 30, 2026
b934c52
Merge branch 'backend'
lnqminh3003 Apr 30, 2026
c3f2a45
Change frontend requesting to use GenerateIndividualQuestions
youssefibrahim3 Apr 30, 2026
e3ecd41
Merge branch 'frontend/home-page' of https://github.com/techstartucal…
youssefibrahim3 Apr 30, 2026
dc07bc9
Fix leaderboard live updates across connection and bingo flows
rxmox Apr 30, 2026
1d46083
Merge pull request #122 from techstartucalgary/leaderboard-pusher-fixes
rxmox Apr 30, 2026
a90c06b
(Update) Better Social Links
keeryn04 Apr 30, 2026
b7f47dc
Merge pull request #123 from techstartucalgary/frontend/home-page
rxmox Apr 30, 2026
1016258
Merge pull request #124 from techstartucalgary/mobile
keeryn04 Apr 30, 2026
42cbc78
Merge pull request #125 from techstartucalgary/main
rxmox Apr 30, 2026
66fe5c8
(Update) Hide Nav Bar with Keyboard
keeryn04 Apr 30, 2026
f8bd872
fix logo
lnqminh3003 Apr 30, 2026
3642c38
joincode is now 4 digit number
rodolfo-gp Apr 30, 2026
3509623
Merge pull request #127 from techstartucalgary/STR-113-Reduce-bingo-g…
rodolfo-gp Apr 30, 2026
d69c8ce
Configure EAS build and TestFlight deployment
rxmox Apr 30, 2026
584e337
fix websocket
lnqminh3003 May 1, 2026
e1d01d7
Use EXPO_PUBLIC_ prefix for Pusher env vars
rxmox May 1, 2026
039bb98
Set display name to Shatter and disable unused microphone permission
rxmox May 1, 2026
e3d5567
Remove unused RECORD_AUDIO Android permission
rxmox May 1, 2026
5aabb44
(Update) Styling Changes for Web
keeryn04 May 1, 2026
8b9da80
Merge branch 'main' into mobile
keeryn04 May 1, 2026
c12ed1e
Merge pull request #128 from techstartucalgary/mobile
keeryn04 May 1, 2026
54d6840
Support mobile deep-link redirect for LinkedIn OAuth
rxmox May 1, 2026
ccf8cce
Merge branch 'main' into eas-testflight-setup
rxmox May 1, 2026
6ffb43f
Merge pull request #129 from techstartucalgary/eas-testflight-setup
rxmox May 1, 2026
92f4be9
Parse LinkedIn deep-link with expo-linking instead of new URL
rxmox May 1, 2026
8e3314a
update images
rxmox May 1, 2026
df66205
Merge pull request #130 from techstartucalgary/eas-testflight-setup
rxmox May 1, 2026
dc2146d
Merge pull request #131 from techstartucalgary/main
tahaminachy43 May 1, 2026
9e8f7f6
revert the merge for moon
lnqminh3003 May 2, 2026
e2421d2
Join event page styling
tahaminachy43 May 2, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
163 changes: 149 additions & 14 deletions shatter-backend/docs/API_REFERENCE.md
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
- [POST `/api/auth/signup`](#post-apiauthsignup)
- [POST `/api/auth/login`](#post-apiauthlogin)
- [GET `/api/auth/linkedin`](#get-apiauthlinkedin)
- [GET `/api/auth/linkedin/link`](#get-apiauthlinkedinlink)
- [GET `/api/auth/linkedin/callback`](#get-apiauthlinkedincallback)
- [POST `/api/auth/exchange`](#post-apiauthexchange)
- [Users (`/api/users`)](#users-apiusers)
Expand Down Expand Up @@ -45,7 +46,8 @@
- [POST `/api/bingo/createBingo`](#post-apibingocreatebingo)
- [GET `/api/bingo/getBingo/:eventId`](#get-apibingogetbingoeventid)
- [PUT `/api/bingo/updateBingo`](#put-apibingoupdatebingo)
- [POST `/api/bingo/generate`](#post-apibingogenerate)
- [POST `/api/bingo/generateBingo`](#post-apibingogeneratebingo)
- [POST `/api/bingo/generate/individual`](#post-apibingogenerateindividual)
- [Participant Connections (`/api/participantConnections`)](#participant-connections-apiparticipantconnections)
- [POST `/api/participantConnections/`](#post-apiparticipantconnections)
- [POST `/api/participantConnections/by-emails`](#post-apiparticipantconnectionsby-emails)
Expand Down Expand Up @@ -74,6 +76,7 @@ Quick reference of all implemented endpoints. See detailed sections below for re
| POST | `/api/auth/signup` | Public | Create new user account |
| POST | `/api/auth/login` | Public | Log in with email + password |
| GET | `/api/auth/linkedin` | Public | Initiate LinkedIn OAuth flow |
| GET | `/api/auth/linkedin/link` | Protected | Link LinkedIn to existing account (guest or local) |
| GET | `/api/auth/linkedin/callback` | Public | LinkedIn OAuth callback (not called directly) |
| POST | `/api/auth/exchange` | Public | Exchange OAuth auth code for JWT |
| GET | `/api/users` | Public | List all users |
Expand Down Expand Up @@ -243,12 +246,32 @@ Initiate LinkedIn OAuth flow. Redirects the browser to LinkedIn's authorization

---

### GET `/api/auth/linkedin/link`

Initiate LinkedIn OAuth flow for linking a LinkedIn account to an existing user. Redirects to LinkedIn's authorization page with the user's identity encoded in the state token.

- **Auth:** Protected (guest or local users only)
- **Response:** 302 redirect to LinkedIn

**Error Responses:**

| Status | Condition |
|--------|-----------|
| 401 | Missing or invalid JWT |
| 403 | Account is already a LinkedIn account |
| 404 | User not found |
| 409 | LinkedIn account already linked |

**Flow:** After LinkedIn authorization, the callback detects the linking context from the state token and attaches the LinkedIn profile to the existing user. Guest users get upgraded to `authProvider: 'linkedin'`. Local users keep `authProvider: 'local'` (preserves password login) and gain LinkedIn profile data.

---

### GET `/api/auth/linkedin/callback`

LinkedIn OAuth callback. Not called directly by frontend LinkedIn redirects here after user authorization.
LinkedIn OAuth callback. Not called directly by frontend - LinkedIn redirects here after user authorization.

- **Auth:** Public (called by LinkedIn)
- **Flow:** Verifies CSRF state exchanges code for access token fetches LinkedIn profile upserts user creates single-use auth code redirects to frontend with `?code=<authCode>`
- **Flow:** Verifies CSRF state -> exchanges code for access token -> fetches LinkedIn profile -> upserts user (or links to guest account) -> creates single-use auth code -> redirects to frontend with `?code=<authCode>`

**Redirect on success:** `{FRONTEND_URL}/auth/callback?code=<authCode>`
**Redirect on error:** `{FRONTEND_URL}/auth/error?message=<error>`
Expand Down Expand Up @@ -537,7 +560,7 @@ Update a user's profile. Users can only update their own profile.
| `password` | string | Minimum 8 characters |
| `bio` | string | |
| `profilePhoto` | string | URL |
| `socialLinks` | object | `{ linkedin?, github?, other? }` |
| `socialLinks` | object | `{ linkedin?: string, github?: string, other?: Array<{ label: string, url: string }> }` — each `other` entry has a required `label` and `url`; the array fully replaces the previous one on update |
| `organization` | string | Where the user works/studies |
| `title` | string | Job title or role |

Expand Down Expand Up @@ -831,7 +854,7 @@ Join an event as a guest (no account required).
| `socialLinks` | object | No* | Social links |
| `socialLinks.linkedin` | string | No | LinkedIn URL |
| `socialLinks.github` | string | No | GitHub URL |
| `socialLinks.other` | string | No | Other URL |
| `socialLinks.other` | `Array<{label, url}>` | No | Additional labeled social/profile links. Each entry requires both `label` (display name) and `url`. |
| `organization` | string | No* | Where the guest works/studies |
| `title` | string | No | Job title or role |

Expand Down Expand Up @@ -1287,30 +1310,33 @@ Update a bingo game.

### POST `/api/bingo/generateBingo`

Generate an AI-powered bingo grid based on a given context.
Generate an AI-powered bingo grid based on a given event description and attendee tags.

- **Auth:** Protected
- **Auth:** Not Protected

**Request Body:**

| Field | Type | Required | Notes |
|-----------|--------|----------|-------|
| `context` | string | Yes | Context used to generate bingo content |
| `n_rows` | number | Yes | Number of rows (1–5) |
| `n_cols` | number | Yes | Number of columns (1–5) |
| Field | Type | Required | Notes |
|---|---|---|---|
| `event_description` | string | Yes | General information about what the event is about. Cannot be empty |
| `tags` | string[] | Yes | List of professional types, roles, job titles, specializations, or departments attending the event. Can be an empty array |
| `n_rows` | number | Yes | Number of rows (1–5) |
| `n_cols` | number | Yes | Number of columns (1–5) |

**Example Request:**

```json
{
"context": "Software engineer networking event where developers meet, discuss tech stacks, exchange ideas, talk about startups, open source, AI, and career opportunities",
"event_description": "Software engineer networking event where developers meet, discuss tech stacks, exchange ideas, talk about startups, open source, AI, and career opportunities",
"tags": ["software engineers", "frontend developers", "backend developers", "startup founders", "product managers"],
"n_rows": 2,
"n_cols": 2
}
```

**Example Response:**
```

```json
{
"status": true,
"bingo_grid": [
Expand Down Expand Up @@ -1338,6 +1364,115 @@ Generate an AI-powered bingo grid based on a given context.
}
```

**Validation Errors:**

Missing or invalid `event_description`:

```json
{
"status": false,
"msg": "event_description is required and must be a non-empty string"
}
```

Missing or invalid `tags`:

```json
{
"status": false,
"msg": "tags is required and must be an array of strings"
}
```

Missing or invalid `n_rows` or `n_cols`:

```json
{
"status": false,
"msg": "n_rows and n_cols must be numbers where 0 < value <= 5"
}
```

### POST `/api/bingo/generate/individual`

Generate replacement AI-powered bingo questions for one or more target questions in an existing bingo grid.

The newly generated questions should:
- Match the provided event context
- Be different from the existing questions in the bingo grid
- Be different from each other
- Include both the full question and a short version

- **Auth:** Not Protected

**Request Body:**

| Field | Type | Required | Notes |
|---|---|---|---|
| `event_description` | string | Yes | Event context used to generate the new bingo questions. Cannot be empty |
| `tags` | string[] | Yes | Types or roles of people attending the event. Can be an empty array |
| `bingo_grid` | string[][] | Yes | Existing bingo grid containing the full question strings |
| `bingo_question_target` | string[] | Yes | List of questions intended to be regenerated/replaced. Must be a non-empty array of non-empty strings with no duplicates |

**Example Request:**

```json
{
"event_description": "A networking event for software engineers, product managers, startup founders, designers, and AI researchers focused on building practical AI products.",
"tags": [
"software engineer",
"product manager",
"startup founder",
"designer",
"AI researcher"
],
"bingo_grid": [
[
"Shows a demo on their phone",
"Mentions their team is hiring",
"Explains a project they built"
],
[
"Has stickers all over their laptop",
"Recently switched jobs",
"Sketches an idea while talking"
],
[
"Arrives straight from work",
"Recognizes someone from LinkedIn",
"Talks about scaling an AI product"
]
],
"bingo_question_target": [
"Mentions their team is hiring",
"Recently switched jobs",
"Talks about scaling an AI product"
]
}
```

**Example Response:**

```json
{
"status": true,
"new_questions": [
{
"question": "References a specific AI framework",
"shortQuestion": "AI Framework"
},
{
"question": "Wears apparel from their startup",
"shortQuestion": "Startup Merch"
},
{
"question": "Shows a code snippet on their phone",
"shortQuestion": "Code Snippet"
}
]
}
```

## Participant Connections (`/api/participantConnections`)

### POST `/api/participantConnections/`
Expand Down
2 changes: 1 addition & 1 deletion shatter-backend/docs/DATABASE_SCHEMA.md
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,7 @@
| `title` | String | No | — | Trimmed |
| `bio` | String | No | — | Trimmed |
| `profilePhoto` | String | No | — | |
| `socialLinks` | Object | No | — | `{ linkedin?: String, github?: String, other?: String }` |
| `socialLinks` | Object | No | — | `{ linkedin?: String, github?: String, other?: Array<{ label: String, url: String }> }` — each `other` entry has a required `label` and `url` so users can add multiple labeled miscellaneous links |
| `authProvider` | String (enum) | Yes | `'local'` | One of: `'local'`, `'linkedin'`, `'guest'` |
| `lastLogin` | Date | No | `null` | |
| `passwordChangedAt`| Date | No | `null` | |
Expand Down
Loading
Loading