{"app":"Astravu backend","routes":{"GET /api/health":"Backend health check","POST /api/analytics/page-view":"Page-view beacon (public, rate-limited): body { page, referrer?, sessionId?, timeOnPageMs? } → ActivityLog PAGE_VIEW","POST /api/auth/register":"Register user (body: name, email, password)","POST /api/auth/login":"Login (body: email, password)","GET /api/auth/google/redirect-config":"Google redirect sign-in: callback URI + whether GOOGLE_CLIENT_SECRET set","GET /api/auth/google/start":"Start Google OAuth redirect (needs GOOGLE_CLIENT_SECRET + redirect URI in GCP)","GET /api/auth/google/callback":"Google OAuth callback → redirects to frontend /auth/google-callback","GET /api/auth/me":"Current user (header: Authorization Bearer <token>)","GET /api/admin/stats":"Admin: dashboard user counts (admin:users:list)","GET /api/admin/users":"Admin: list users (permission admin:users:list)","GET /api/admin/users/:id":"Admin: get user (admin:users:read)","PATCH /api/admin/users/:id":"Admin: update role|status (admin:users:update)","DELETE /api/admin/users/:id":"Admin: delete user + related matrimony rows (admin:users:delete)","GET /api/admin/activity-logs/summary":"Admin: activity log summary + action list (admin:activity:read)","GET /api/admin/activity-logs/analytics":"Admin: VOIZE-style aggregates — query view + same filters as activity-logs (admin:activity:read)","GET /api/admin/activity-logs":"Admin: audit log — filters: action, userName, startDate, endDate, sortBy, sortOrder (admin:activity:read)","GET /api/admin/matrimony-profiles":"Admin: list matrimony profiles (admin:matrimony:list)","GET /api/learn/media":"Public: published learn media items (video, audio, docs, links)","GET /api/learn/page":"Public: /learn landing page CMS fields (merge with frontend defaults)","GET /api/learn/topics/:category":"Public: list topic entries (nakshatra|lagna|yoga); empty → use static bundles","GET /api/learn/topics/:category/:slug":"Public: one topic for detail page; 404 data → static fallback on client","GET /api/admin/learn-media":"Admin: list learn media (admin:learn:media)","GET /api/admin/learn-media/page":"Admin: get /learn landing CMS (admin:learn:media)","PUT /api/admin/learn-media/page":"Admin: save /learn landing CMS (admin:learn:media)","GET /api/admin/learn-media/topics":"Admin: list topic entries (?category=nakshatra|lagna|yoga)","POST /api/admin/learn-media/topics":"Admin: create topic entry","POST /api/admin/learn-media/topics/bulk":"Admin: replace all entries for a category","PATCH /api/admin/learn-media/topics/entry/:id":"Admin: update topic entry","DELETE /api/admin/learn-media/topics/entry/:id":"Admin: delete topic entry","POST /api/admin/learn-media":"Admin: create (JSON link or multipart file upload)","PATCH /api/admin/learn-media/:id":"Admin: update metadata","POST /api/admin/learn-media/:id/replace-file":"Admin: replace uploaded file","DELETE /api/admin/learn-media/:id":"Admin: delete item + S3 file if applicable","POST /api/auth/forgot-password":"Password reset email (SMTP or dev log)","POST /api/auth/reset-password":"Complete reset with token + new password","PATCH /api/auth/profile":"Update name/email (Bearer + active user)","POST /api/auth/change-password":"Change password (Bearer)","GET /api/user/astrology-profiles":"List saved birth profiles (max 5) for chart/dasha sync — audit via timestamps (Bearer)","POST /api/user/astrology-profiles":"Create profile: name, formValues, locationData, useTopocentric? (Bearer)","PATCH /api/user/astrology-profiles/:id":"Update saved profile fields (Bearer)","DELETE /api/user/astrology-profiles/:id":"Delete saved profile (Bearer)","POST /api/user/astrology-profiles/:id/last-used":"Touch lastUsedAt when applying a profile (Bearer)","GET /api/notifications/vapid-public-key":"Web Push VAPID public key (for PushManager.subscribe)","POST /api/notifications/subscribe":"Save Web Push subscription + optional notification prefs (Bearer)","DELETE /api/notifications/subscribe":"Remove Web Push subscription (Bearer)","GET /api/matrimony/profile/me":"Matrimony profile (Bearer); 404 if none. Also: matches, interests, prospects, upload-photo","GET /api/compatibility/path/:userId":"Matrimony social graph stub (Bearer): connection degree/path — currently path null until graph is built","POST /api/astrology/timezone":"Google TZ (body: latitude, longitude, date YYYY-MM-DD, time HH:MM; needs GOOGLE_MAPS_API_KEY)","POST /api/astrology/panchang":"Single-day panchang (body: date, latitude, longitude, timezone)","POST /api/astrology/celestial-events":"Celestial events (query: date, monthsAhead; body: latitude, longitude, timezone)","GET /api/astrology/eclipses/global":"Global solar+lunar eclipses (query: years, optional startDate; optional peak place via GOOGLE_MAPS_API_KEY)","POST /api/astrology/panchang/monthly":"Monthly panchang (query: year, month; body: latitude, longitude, timezone)","POST /api/astrology/panchang/festivals-year":"Major festivals (Hindu/Islamic/Christian/Jain/Buddhist/Sikh) for a Gregorian year (query: year; body: lat, lng, tz) — Panchang Festivals tab filter","POST /api/astrology/dashas":"Vimshottari dashas (body: birthData, ayanamsa, …)","POST /api/astrology/sade-sati":"Shani Sade Sati windows (body: same as chart calculate — y/m/d, time, lat, lng, timezone, ayanamsa, config)","POST /api/astrology/dashas/children":"Expand antar/pratyantar… (body: parentLevel, parentPeriod, enhancedContext)","POST /api/astrology/calculate":"Birth chart (body: year, month, date, hours, minutes, lat, lng, timezone, ayanamsa)","POST /api/astrology/varshphal":"Varshaphal (annual solar return) + Masa Pravesh (12 monthly charts) — async job (body: birthData, asOfDate)","GET /api/astrology/varshphal/:jobId":"Varshaphal job status/result (polling): progress + varshphalData","GET /api/astrology/current-positions":"Transits now (query: latitude, longitude; optional ayanamsa, observation_point)","GET /api/astrology/interpretations":"Static interpretation maps for Rasi interpretations page (planetary/house/aspect/dignities/combinations)","POST /api/astrology/chat":"Rule-based astrology assistant (optional Bearer): body { message, context?: { date, latitude, longitude, timezone, profileId, topicId, subtopicId } }","GET /api/astrology/chat/hints":"Hierarchical prompt catalog (Topic → Subtopic → Prompt): topics[] + subtopicsByTopic{} + promptsBySubtopic{}"}}