UltimateHealth Web — Release Notes v2.1.0
Version:
2.1.0
Branch:web
Base tag:web-release-2.0.0
Release date: 5th June, 2026
Commits: 52 upstream + local regression fixes
Build: Next.js 16.2.6 — all 11 pages compiled and type-checked successfully
Contributors
| GitHub Handle | Name | Contributions |
|---|---|---|
| @SB2318 | S. B. (Maintainer) | CI workflow, lockfile cleanup, repo maintenance |
| @saurabhhhcodes | Saurabh Kumar Bajpai | Medical Glossary page, glossary screenshots |
| @InukaWijerathna | Inuka Wijerathna | GlossaryTooltip component |
| @dedeepya-sri | Sri Dedeepya Singampalli | Contribute page UI fix, navigation routing fix |
| @Vaishnavi10706 | Vaishnavi10706 | Hamburger menu aria-label accessibility fix |
| @Krishnx21 | Krishna Kumar | Launching Soon modal fix, misc fixes |
| @RangeR107 | RangeR107 | Skeleton and Spinner loader components, rebase conflict fixes |
| @Xenon010101 | Xenon010101 | Performance: transition-colors in Badge (#996) |
| @yashikasharmays1511-prog | Yashika Sharma | Hero section fix, accessibility review, cleanup |
| @Shikhar-404exe | Shikhar Prajapati | Refactor: remove duplicate typography in globals.css |
| @sanju-rajak | Sanju Rajak | Security headers, CSP middleware, proxy implementation |
| @Rishi04singh | Rishi Singh | Responsive layout system (PageWrapper, Section) |
| @CIPHERS-hackathon | CIPHERS Hackathon Team | Replace emojis with Font Awesome icons (#732), web sync |
New Features
Medical Glossary Page (/medical-glossary)
- Full Medical Glossary Explorer with 100+ medical terms
- A-Z alphabetical filter bar with per-letter availability detection
- Full-text search across term, definition, category, and related terms
aria-live="polite"live result count announcementsGlossaryTooltipcomponent for inline medical term definitions on any page- Navigation link added to desktop nav and mobile nav
- SEO: Metadata title and description on the page
Hero and Download Section Redesign (HeroAndDownload)
- Premium animated hero section replacing the legacy static layout
- Live dashboard phone mockup with weekly stats chart
- Floating badges: Podcasts, Wellness, Community, Health
- Stats row: 50K+ Active Users, 100+ Articles, Global Community
- Redesigned download cards with MiniPhone mockup, platform feature list, animated pulse badges
AndroidStoreButtonsandIosStoreButtonssub-components- TestFlight CTA wired to
onJoinTestFlightprop
Responsive Layout System
PageWrapper— standardises container width and horizontal paddingSection— standardises vertical spacing (py-12 md:py-16 lg:py-24)- All major page sections migrated to
Section + PageWrapperpattern - Feature grids converted to Tailwind responsive grid utilities
Contribute Page (/contribute) — Full Redesign
- Animated hero with glassmorphism card and floating badges (GSSoC 2026, Beginner Friendly)
- Why Contribute, Ways to Contribute (5 cards), 9-step contribution workflow
- Copyable bash code block with Clipboard API and fallback
- FAQ accordion with Framer Motion AnimatePresence expand/collapse
- Community links: GitHub Issues, Contribution Guide, Email Support
- Full Framer Motion scroll-reveal animations
Contributors Page (/contributors)
- SSR page fetching live GitHub contributors via GitHub API
- ISR with 24-hour
revalidateto avoid rate limiting - Role badges: Maintainer (100+), Core Contributor (50+), Contributor (10+), Community Member
- Live stats: total contributors, total commits, program count
- Bots filtered out (
github-actions[bot],dependabot[bot])
Skeleton and Spinner Loader Components
Skeleton:full(thumbnail + content) andcompact(content-only) card variants- Skeleton also supports shadcn/ui simple-element mode (accepts
style,data-*, all HTML div props) Spinner: sm/md/lg sizes, optional fullPage overlay, configurable zIndex- Features section shows skeleton loaders on initial render
basePath Utility (/lib/basePath.ts)
withBasePath(path)helper for subdirectory-aware internal links- Applied across page.tsx, medical-glossary/page.tsx, contribute/page.tsx
Security Middleware (proxy.ts)
- CSP nonce-based
strict-dynamicfor production - Dev mode: relaxed CSP for HMR compatibility
- Headers:
X-Frame-Options: DENY,X-Content-Type-Options: nosniff,Referrer-Policy,Permissions-Policy, 2-year HSTS,Cross-Origin-Opener-Policy,Cross-Origin-Resource-Policy
CI — Update Contributors Workflow
- GitHub Actions workflow to auto-update contributor list on web PR merge
Contact and Newsletter Forms
- Contact form POSTs to
NEXT_PUBLIC_API_BASE_URL/api/contact/sendwith mailto fallback - Newsletter form POSTs to
NEXT_PUBLIC_API_BASE_URL/api/newsletter/subscribe - Loading/success/error states, field reset on success
Active Section Tracking
- IntersectionObserver highlights active nav link per scroll position
aria-current="location"on active section link
Bug Fixes
| Commit | Author | Fix |
|---|---|---|
675ffce |
@Krishnx21 | Fixed unreachable Launching Soon modal — Admin Closed Testing button was not wired |
65b9494 |
@dedeepya-sri | Resolved navigation routing issue causing 404s |
48e7ff7 |
@dedeepya-sri | Fixed contribute page UI broken after rebase |
25f2915 |
@yashikasharmays1511-prog | Fixed hero section display issue |
baa3bd8 |
@Krishnx21 | Fixed merge conflict residue |
e05c6b8 |
@sanju-rajak | Hardened CSP and migrated security logic into proxy |
7061ebb |
@Vaishnavi10706 | Added accessible label to mobile hamburger menu |
dcb3b46 |
@yashikasharmays1511-prog | Addressed accessibility review comments |
487dc18 |
@CIPHERS-hackathon | Replaced emojis with Font Awesome icons in features section |
579c509 |
@RangeR107 | Resolved rebase conflicts and corrected JSX tag mismatches |
Functional Regressions Fixed (Local — v2.1.0)
These regressions were introduced during development and fixed as part of this release preparation.
Build verified: all 11 pages compiled, TypeScript passed.
| # | File | Regression | Fix |
|---|---|---|---|
| 1 | page.tsx |
RefObject imported twice from React — compile error |
Removed duplicate import |
| 2 | page.tsx |
ScrollToTop imported twice — compile error |
Removed duplicate import |
| 3 | page.tsx |
Section and PageWrapper used but never imported |
Added missing imports |
| 4 | page.tsx |
Old legacy hero section and old download cards rendered alongside new HeroAndDownload — duplicate download section visible | Removed legacy blocks; kept only HeroAndDownload |
| 5 | page.tsx |
Closing ); and } malformed from bad merge — function body not closed | Fixed indentation and structure |
| 6 | page.tsx |
Hamburger static aria-label never announced close state | Changed to dynamic label plus added aria-expanded |
| 7 | medical-glossary/page.tsx |
Hardcoded href="/" and href="/contribute" break under subdirectory deployments | Replaced with withBasePath() |
| 8 | login/page.tsx |
Imported Section/PageWrapper but JSX opened with div and closed with wrong tags — parse error | Removed unused import, restored correct closing divs |
| 9 | login-admin/page.tsx |
Same broken closing tag pattern as login/page.tsx | Same fix applied |
| 10 | skeleton.tsx |
SkeletonProps did not accept style or data-* — sidebar.tsx (shadcn/ui) failed TypeScript check | Extended SkeletonProps to inherit React.HTMLAttributes; simple-element mode renders shadcn-compatible animated div |
Performance
| Commit | Author | Change |
|---|---|---|
c6ce522 |
@Xenon010101 | Replaced transition-all with transition-colors in Badge — reduces style recalculation on hover |
Refactoring
| Commit | Author | Change |
|---|---|---|
74e82f7 |
@RangeR107 | Review feedback fixes for Skeleton and Spinner components |
b3bdb1e |
@Shikhar-404exe | Removed duplicate typography definitions from globals.css |
579c509 |
@RangeR107 | Resolved rebase conflicts and corrected JSX tag mismatches |
Security
- Nonce-based CSP with
strict-dynamicprevents XSS in production - Dev CSP allows HMR websockets scoped to NODE_ENV=development
- HSTS: 2-year max-age with includeSubDomains
X-Frame-Options: DENYprevents clickjackingCross-Origin-Opener-Policy: same-origin- Permissions-Policy restricts camera, microphone, geolocation
Accessibility
- Hamburger: dynamic aria-label (Open/Close) plus aria-expanded state
- Coming Soon modal: role="dialog", aria-modal, aria-labelledby, aria-hidden toggle
- Screenshot modal: keyboard nav (Escape, left/right arrows), aria-label on all controls
- Medical Glossary: aria-live result count, aria-labelledby sections, aria-label on search
- Nav links: aria-current="location" on active section
- Skeleton cards: aria-hidden="true" so screen readers skip placeholders
- Spinner: role="status" plus configurable aria-label
- Contributors page: role="list" and role="listitem" on contributor grid
Documentation
| Commit | Author | Change |
|---|---|---|
e3d5cc7 |
@saurabhhhcodes | Added medical glossary screenshots to docs/screenshots/ |
4204be0 |
@SB2318 | CI workflow to auto-update contributors on web PR merge |
| — | — | contact_newsletter_guide.md — backend API implementation guide |
| — | — | CONTRIBUTING.md added to repo root |
Removed / Cleaned Up
| Commit | Author | Change |
|---|---|---|
1251046 |
@SB2318 | Deleted web/package-lock.json (maintainer policy) |
ec52d40 |
@yashikasharmays1511-prog | Removed stale web/package-lock.json |
61b5a11 |
@yashikasharmays1511-prog | Removed root package-lock.json |
aa37798 |
@yashikasharmays1511-prog | Removed unnecessary page.zip artifact |
Dependency Changes
| Package | Change |
|---|---|
framer-motion |
Added — Contribute page animations |
lucide-react |
Added — Icon set for Contribute and Glossary pages |
@radix-ui/* |
Added — Backing shadcn/ui components |
tailwindcss |
Added dedicated web/tailwind.config.ts |
Configuration Changes
| File | Change |
|---|---|
web/next.config.ts |
basePath from env var; image/avif + image/webp formats; qualities array |
web/components.json |
shadcn/ui configuration |
web/tailwind.config.ts |
Tailwind configuration for UI components |
Build Output (v2.1.0)
Next.js 16.2.6 (Turbopack)
Compiled successfully in 15.4s
TypeScript passed in 16.8s
11/11 static pages generated
Route (app) Revalidate Expire
/ ................................ static
/_not-found ...................... static
/admin-agreement ................. static
/contribute ...................... static
/contributors .................... 1d 1y
/goodbye ......................... static
/login ........................... static
/login-admin ..................... static
/medical-glossary ................ static
Proxy (Middleware) — CSP + security headers active on all routes
Verification Checklist
- Build passes — zero TypeScript errors, zero compile errors
- All 11 routes generated successfully
- CSP proxy middleware active
- No duplicate download section on home page
- Hamburger announces "Close navigation menu" when open
- Medical Glossary nav links work correctly
- Launching Soon modal opens via Admin Closed Testing button
- Navigation routing has no 404s on /contribute and /medical-glossary
- Skeleton loaders appear briefly in features section on first load
- Contact form sends or falls back to mailto
- Contributors page shows live GitHub data
Related PRs
| PR | Author | Description |
|---|---|---|
| #1035 | @CIPHERS-hackathon | Web branch sync |
| #1112 | @Vaishnavi10706 | Hamburger menu aria-label |
| #1024 | @saurabhhhcodes | Medical glossary page |
| #1105 | @dedeepya-sri | Contribute page UI fix |
| #1037 | @Shikhar-404exe | Misc fixes |
| #1036 | @Krishnx21 | Routing fix |
| #1031 | @InukaWijerathna | GlossaryTooltip component |
| #968 | @RangeR107 | Skeleton and Spinner loader components |
| #977 | @yashikasharmays1511-prog | Web branch sync |
| #1052 | @Xenon010101 | transition-colors in Badge |
| #942 | @Rishi04singh | Responsive layout system |
| #917 | @sanju-rajak | Security headers and proxy middleware |