Skip to content

fix(frontend): resolve PWA manifest, metadata, and SEO issues#1291

Merged
ogazboiz merged 1 commit into
LabsCrypt:mainfrom
Akanimoh12:fix/seo-frontend-issues
Jun 29, 2026
Merged

fix(frontend): resolve PWA manifest, metadata, and SEO issues#1291
ogazboiz merged 1 commit into
LabsCrypt:mainfrom
Akanimoh12:fix/seo-frontend-issues

Conversation

@Akanimoh12

Copy link
Copy Markdown
Contributor

Summary

Comprehensive fix for four interconnected frontend SEO and PWA configuration issues. All manifest, metadata, and environment variable inconsistencies are now resolved with consolidated site origin handling and proper hreflang language alternates.

Issues Closed

Closes #1240 - PWA manifest references /icons/icon-192x192.png and 512.png but files on disk are .svg

Fix: Updated manifest.webmanifest to reference existing SVG files with correct MIME types.

  • Changed icon paths from /icons/icon-192x192.png/icons/icon-192x192.svg
  • Changed icon paths from /icons/icon-512x512.png/icons/icon-512x512.svg
  • Updated MIME type from image/pngimage/svg+xml
  • ✅ Manifest icon URLs now return 200 (no 404)
  • ✅ Lighthouse PWA installability check passes for icons

Closes #1239 - Sitemap-listed indexable pages kingdom and liquidations have no generateMetadata

Fix: Added generateMetadata exports to both pages following loans/lend pattern.

  • Added to frontend/src/app/[locale]/kingdom/page.tsx:
    • Title: "Kingdom | RemitLend"
    • Description: "Track your lending kingdom progress, achievements, and exclusive rewards through our gamification system."
  • Added to frontend/src/app/[locale]/liquidations/page.tsx:
    • Title: "Liquidations | RemitLend"
    • Description: "Monitor and manage collateral liquidations for undercollateralized loans to protect pool health."
  • ✅ Each page now emits distinct title and canonical link
  • ✅ Pattern matches existing loans/lend approach

Closes #1237 - buildPageMetadata sets canonical but no hreflang alternates

Fix: Extended buildPageMetadata() to generate hreflang language links.

  • Added LOCALES constant: ["en", "es", "tl"]
  • Generated alternates.languages with full URLs for each locale
  • Added x-default fallback pointing to /en variant
  • ✅ Rendered pages now emit hreflang link tags for all language variants
  • ✅ Canonical remains current-locale URL

Closes #1238 - SEO site origin read from two different env vars with mismatched defaults

Fix: Consolidated all SEO environment variables to single NEXT_PUBLIC_APP_URL.

  • Extracted getSiteUrl() helper function in metadata.ts
  • Updated layout.tsx to use getSiteUrl() for metadataBase
  • Updated robots.ts to use getSiteUrl() instead of duplicated logic
  • Updated sitemap.ts to use getSiteUrl() instead of duplicated logic
  • Unified default: https://remitlend.com (production consistent across all files)
  • Documented NEXT_PUBLIC_APP_URL in frontend/.env.example
  • ✅ All four files now resolve site origin from single constant
  • ✅ Canonical/OG URLs and sitemap/robots host are now consistent

Files Modified

  • frontend/public/manifest.webmanifest
  • frontend/src/app/lib/metadata.ts
  • frontend/src/app/layout.tsx
  • frontend/src/app/robots.ts
  • frontend/src/app/sitemap.ts
  • frontend/src/app/[locale]/kingdom/page.tsx
  • frontend/src/app/[locale]/liquidations/page.tsx
  • frontend/.env.example

Code Quality

  • Follows existing RemitLend code patterns and conventions
  • Consistent with Next.js SEO and metadata best practices
  • Ready for CI validation (lint, typecheck, build)

…issues

This commit addresses four interconnected frontend SEO and PWA issues:

1. **PWA Manifest Icons (Issue LabsCrypt#1240)**: Update manifest.webmanifest to reference
   existing .svg icon files (/icons/icon-192x192.svg and /icons/icon-512x512.svg)
   with correct image/svg+xml MIME type instead of non-existent .png files.

2. **Page Metadata for kingdom & liquidations (Issue LabsCrypt#1239)**: Add generateMetadata
   exports to kingdom/page.tsx and liquidations/page.tsx, following the existing
   loans/lend pattern to ensure unique titles, descriptions, and canonical links
   are emitted for these indexable pages.

3. **hreflang Alternates (Issue LabsCrypt#1237)**: Extend buildPageMetadata to include
   alternates.languages with en/es/tl locale variants and x-default fallback,
   enabling proper search engine association across language versions.

4. **Consolidated Site Origin (Issue LabsCrypt#1238)**: Unify all SEO-related environment
   variable usage to NEXT_PUBLIC_APP_URL with consistent default
   (https://remitlend.com). Extract getSiteUrl() helper in metadata.ts and use
   it across layout.tsx, robots.ts, and sitemap.ts. Document the variable in
   .env.example.

Changes:
- frontend/public/manifest.webmanifest: Icon paths and types corrected
- frontend/src/app/lib/metadata.ts: Added LOCALES constant, getSiteUrl export,
  hreflang alternates, unified env var usage
- frontend/src/app/layout.tsx: Import and use getSiteUrl() for metadataBase
- frontend/src/app/robots.ts: Use shared getSiteUrl() instead of duplicated logic
- frontend/src/app/sitemap.ts: Use shared getSiteUrl() instead of duplicated logic
- frontend/src/app/[locale]/kingdom/page.tsx: Add generateMetadata
- frontend/src/app/[locale]/liquidations/page.tsx: Add generateMetadata
- frontend/.env.example: Document NEXT_PUBLIC_APP_URL with context

Closes LabsCrypt#1240 LabsCrypt#1239 LabsCrypt#1237 LabsCrypt#1238

Co-Authored-By: Remitlend Contributors <open-source@remitlend.com>
@ogazboiz ogazboiz merged commit 76e3929 into LabsCrypt:main Jun 29, 2026
4 of 9 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment