feat: skeleton loaders, Sentry source maps, auto-deploy via webhook

RoomSkeleton: shimmer skeleton matching Room header/timeline/input layout,
  used as Suspense fallback for all three Room routes (home/direct/space)

Sentry source maps: @sentry/vite-plugin uploads 72 hidden source map files
  to Sentry on each build then deletes them from dist — stack traces now show
  real file/line numbers instead of minified bundle positions.
  Auth token loaded from /etc/lotus-deploy.env (not in git).

Auto-deploy: webhook receiver on port 9001, nginx proxies
  /hooks/lotus-deploy, HMAC-SHA256 verified, triggers on lotus branch push.
  Deploy script: git reset --hard + npm ci + npm run build + rsync to webroot.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Lotus Bot
2026-05-21 20:30:44 -04:00
parent 35e4c1fb22
commit 3e9ca27761
5 changed files with 484 additions and 6 deletions
+4 -3
View File
@@ -1,4 +1,5 @@
import React from 'react';
import { RoomSkeleton } from '../components/RoomSkeleton';
import {
Outlet,
Route,
@@ -186,7 +187,7 @@ export const createRouter = (clientConfig: ClientConfig, screenSize: ScreenSize)
path={_ROOM_PATH}
element={
<HomeRouteRoomProvider>
<React.Suspense fallback={null}>
<React.Suspense fallback={<RoomSkeleton />}>
<Room />
</React.Suspense>
</HomeRouteRoomProvider>
@@ -213,7 +214,7 @@ export const createRouter = (clientConfig: ClientConfig, screenSize: ScreenSize)
path={_ROOM_PATH}
element={
<DirectRouteRoomProvider>
<React.Suspense fallback={null}>
<React.Suspense fallback={<RoomSkeleton />}>
<Room />
</React.Suspense>
</DirectRouteRoomProvider>
@@ -255,7 +256,7 @@ export const createRouter = (clientConfig: ClientConfig, screenSize: ScreenSize)
path={_ROOM_PATH}
element={
<SpaceRouteRoomProvider>
<React.Suspense fallback={null}>
<React.Suspense fallback={<RoomSkeleton />}>
<Room />
</React.Suspense>
</SpaceRouteRoomProvider>