Skip to content

Staging - #7

Closed
angelina-ji wants to merge 41 commits into
DIodide:mainfrom
TigerAppsOrg:staging
Closed

Staging#7
angelina-ji wants to merge 41 commits into
DIodide:mainfrom
TigerAppsOrg:staging

Conversation

@angelina-ji

Copy link
Copy Markdown
Collaborator

No description provided.

dependabot Bot and others added 30 commits May 19, 2026 05:10
Bumps [urllib3](https://github.com/urllib3/urllib3) from 2.6.3 to 2.7.0.
- [Release notes](https://github.com/urllib3/urllib3/releases)
- [Changelog](https://github.com/urllib3/urllib3/blob/main/CHANGES.rst)
- [Commits](urllib3/urllib3@2.6.3...2.7.0)

---
updated-dependencies:
- dependency-name: urllib3
  dependency-version: 2.7.0
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
… routes

- New root README.md focused on getting apps/web running (replaces stale SETUP.md)
- Fix DATABASE_URL port 5432 -> 5434 in package .env examples to match docker-compose
- Complete apps/web/.env.local.example with all vars required by src/env.ts
- Remove old /5 /6 /7 /8 design-mockup routes from apps/web
- Add CI guard: PRs into main must come from staging
docs: developer setup README + env example fixes + remove old mockup routes
Release: developer setup README, env fixes, mockup route cleanup
…i/urllib3-2.7.0

chore(deps): bump urllib3 from 2.6.3 to 2.7.0 in /backends/fastapi
- Bump pyasn1, cryptography, pygments, idna, starlette, requests, pytest,
  python-dotenv in backends/fastapi (covers Dependabot PRs #2-#8, #10,
  which conflicted on uv.lock after #1 merged)
- Bump drizzle-orm ^0.38.3 -> ^0.45.2 (high-severity alert, no Dependabot
  PR existed for the bun lockfile) + drizzle-kit ^0.30.4 -> ^0.31.10

Verified: FastAPI app imports and serves on starlette 1.2.1; web app
typechecks and production-builds; drizzle runs queries against live Postgres.
fix(security): resolve all 12 Dependabot alerts + README polish
Release: resolve all Dependabot vulnerabilities + setup docs polish
- Skip events whose title already exists — re-running db:seed no longer
  duplicates all 21 demo events (events have no unique constraint to
  lean on for onConflictDoNothing)
- Seed user_regions (set during onboarding, previously empty)
- Add a pending friend request + matching friend_request notification,
  plus org_new_event and event_reminder notifications with payload
  shapes mirroring apps/web server actions
- Seed interactions (implicit feedback) from the generated RSVPs/saves
  plus views/clicks, using the same weights as logInteraction, so the
  recommendation pipeline has data to work with
- Notifications/interactions have no natural unique key, so they are
  only seeded into an empty table

Tested: ran twice against a scratch database — second run is a no-op
(21 events, 3 notifications, 177 interactions, no duplicates).
feat(seed): make re-runnable and cover newer tables
Release: re-runnable seed with newer-table coverage
# Please enter a commit message to explain why this merge is necessary,
# especially if it merges an updated upstream into a topic branch.
#
# Lines starting with '#' will be ignored, and an empty message aborts
# the commit.
… RSVP'd tab in My Events; add root db:seed script
Aligns the orgs create button/category filters with the forum-cerulean
brand color instead of indigo, adds a cerulean-tinted thin scrollbar
utility, softens the geometric background blur, and nudges spacing on
the explore create-event button and map filter pills.
DIodide and others added 11 commits August 23, 2026 11:14
…pe workshop/academic merge; fix seed.ts imports
… model path resolution and text cleaning, pin scikit-learn
TIG-254: Move selected tagger into backend code (corrected)
TIG-254: Embedding-based event extraction pipeline (staging → main)
…anels

The (app) routes had each hand-rolled their own layout primitives, so the
same element looked different on every page: gutters ranged from px-[8px]
to px-[40px], page headings spanned 20/25/36/40/42/48/52px, and roughly
90 buttons were raw <button> elements with bespoke height, radius and
focus treatment. Orgs and the map had drifted off the palette entirely
onto gray-*/indigo-*/sky-*.

Introduce six shared primitives and move every (app) route onto them:

- PageShell        gutters (20/32/40px) + max width (narrow/content/wide/full)
- PageHeading      one h1 ramp, 34 -> 44 -> 52px, responsive
- SectionHeading   h2 with the cerulean dot
- Panel            content surface: radius, border, padding scale, elevation
- FilterChip       every filter pill
- SearchInput      every search field
- Field            label / hint / error stack

Add forum variants to the shadcn Button (cerulean, solid, coral, soft,
quiet) plus a cta size, so buttons stop being rebuilt per call site.
Raw <button> count drops from ~90 to 25; the rest are structural
(scrubber nodes, carousel dots, popover triggers) where the Button box
model does not apply.

Nav: the rail now collapses to icons and expands on hover. It overlays
rather than pushes, and the shell reserves the expanded width so the
panel never covers page content and nothing reflows on hover. Icons sit
in a fixed 20px slot at the same x in both states, so labels grow beside
a stationary icon.

Map: drop the route's private floating nav and its separate log-out
button, and render it inside the standard shell. It keeps a
non-scrolling main (a map canvas must not live in a scroll container)
but now shares one navigation with every other page.

Fixes found along the way:
- nested <button> inside <button> in the map event list (invalid HTML;
  the inner control was unreachable in some browsers)
- missing accessible names on event-card and map icon buttons
- Friends' remove control was opacity-0 until hover, invisible to
  keyboard users; it now reveals on focus too
- hand-rolled tab bars replaced with the shadcn Tabs line variant, which
  brings real arrow-key navigation and aria-selected
ui: standardize page padding, headings, cards, buttons, filters and panels

Tested locally and overall this looks good to me. The shared UI cleanup/standardization feels like a solid improvement and I didn’t run into any blocking functional issues. I do think there’s still some room for visual polish / closer alignment with the Figma direction on Explore, but I don’t think that needs to block this PR.
Picks up where #40 left off. Covers TIG-247, TIG-248, TIG-249.

The big one is the event card. Explore, My Events, the map rail and org
pages all had their own version, so the same event looked different
depending on where you ran into it. Now there's one card with three
densities (feed / compact / wide) and the actions only show up if you
pass a handler, so the map doesn't need an RSVP button it can't use.

While doing that I found getMyEvents was returning tags: [],
friendsAttending: [], rsvpCount: 0 etc. as literals, so My Events could
never have shown a tag or a friend no matter how it was styled. Fixed
that with batched queries.

RSVP/save/share/hide now all confirm with a toast, and RSVP gets a check
+ colour change — the label flip on its own was way too easy to miss.
Hide used to just drop the event from state with no way back, so it
collapses to a stub with an Unhide now. Turns out hide was never
reachable anyway: the prop existed and Explore passed a handler, but
nothing ever called it. "N attending" is clickable and lists people.
Created events got Edit/Delete with a confirm.

Map: clicking a pin now opens the real thing instead of that cramped
popup (whose carousel arrows sat on top of the start time). One event
opens the card, multiple open the sidebar. Timeline moved below the map
so overlays stop landing on it, and added a ResizeObserver because
Mapbox doesn't watch its own container and was leaving a blank strip
after layout changes.

Nav: rail collapses to icons and expands on hover, pushes content
instead of covering it, and there's a proper bottom tab bar on phones
since hover obviously doesn't work on touch. Responsive is only about
half done — nav, overflow fixes, the event forms and Explore are
sorted, the map isn't yet.

Also fixed a nasty one in db.ts: it made a new Postgres pool on every
hot reload and leaked the old one, so after a long dev session you'd hit
the 100 connection cap and everything died with 53300, including auth.
Cached on globalThis now. Same idea in getMapEvents, which was firing
2N+1 queries at once.

Few other things while I was in there: nested <button> in the map list
(invalid HTML, inner one unreachable in some browsers), two stacked
close buttons on the map modal, and the friends remove button which was
opacity-0 until hover AND #ececec, so basically invisible either way.
TIG-247, TIG-248.

Rebuilt the Explore sidebar to match the Figma — Find My Friends is a real
list now ("Sophia added X to their calendar" + VIEW EVENT), and Upcoming
Events reads "X is happening tomorrow!". Dropped the hand-drawn fake map
that was in there with made-up landmarks and made-up people on it. Nudged
the whole rail down 60px so it lines up with the "Today is..." line rather
than the greeting.

Kept finding the same bug while doing this: getSavedEvents,
getSimilarEvents, getFriendsEvents and getMyEvents were all returning
tags: [], rsvpCount: 0, friendsAttending: [] and isRsvped/isSaved: false
as literals. So those screens could never show a tag or the right button
state no matter what we did to the styling. Pulled the batched queries out
into loadEventEnrichment() and pointed all four at it — was about to write
it a fourth time by hand which felt like a hint. getSimilarEvents also
never bound userId despite authenticating, which is why it couldn't work
out per-user state in the first place.

Needed a real date for "tomorrow" (datetime is a pre-formatted string you
can't parse back) so added rawDatetime + formatRelativeDay, which compares
calendar days rather than hours — a 9am event tomorrow should say tomorrow
even though it's 20 hours out.

Responsive: My Events and Friends tabs shrink so three fit on a phone,
friend request rows wrap, map event list goes full width, timeline drops
its legend and the filter pills scroll sideways.

Landing page: the FORUM wordmark was cut off — -mb-6 inside an
overflow-hidden parent was clipping the letterforms, and at a fixed 130px
it was wider than a phone anyway. It's 28vw now so it still spans the
screen, locked back to 130/160px on desktop. Hero h1 was fixed at 72px and
overflowing too, and the turquoise section had min-h-[200vh] on mobile
which was two screens of mostly nothing.
- Explore no longer swaps in a fake event when the feed comes back empty,
  so the zero-events state can actually render on first load.
- toggleRsvp now returns the post-toggle attendee list along with the
  count. Every caller renders an avatar stack from it, so patching just
  the count left the viewer's own face in the stack after un-RSVPing.
- My Events drops a card from Saved / RSVP'd when the server says it's no
  longer saved / RSVP'd, instead of leaving it sitting in a list it just
  left until you reload.
- getSavedEvents filters to future events. "Upcoming Events" reads from it
  and was happily announcing a past event as happening "yesterday".
- Search placeholder no longer promises people search that the feed query
  doesn't actually do.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants