Skip to content

Commit ec6f7b7

Browse files
JacobCoffeeclaude
andcommitted
feat: render dashboard directly at / instead of redirect
🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <[email protected]>
1 parent ad1d550 commit ec6f7b7

File tree

1 file changed

+57
-5
lines changed

1 file changed

+57
-5
lines changed

src/scribbl_py/app.py

Lines changed: 57 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -204,11 +204,63 @@ def create_app(
204204
)
205205
)
206206

207-
# Root redirect handler
207+
# Dashboard at root
208+
from scribbl_py.auth.db_service import DatabaseAuthService # noqa: E402, PLC0415
209+
from scribbl_py.services.game import GameService # noqa: E402, PLC0415
210+
208211
@get("/", include_in_schema=False)
209-
async def root_redirect() -> Redirect:
210-
"""Redirect root to Canvas Clash game."""
211-
return Redirect(path="/canvas-clash/")
212+
async def dashboard(
213+
game_service: GameService,
214+
auth_service: DatabaseAuthService,
215+
request: Request,
216+
) -> Template:
217+
"""Render the main dashboard/home page."""
218+
from litestar.response import Template # noqa: PLC0415
219+
220+
# Get available lobby rooms
221+
lobby_rooms = game_service.get_lobby_rooms()
222+
active_games = game_service.get_active_games()
223+
is_debug = getattr(request.app, "debug", False)
224+
225+
# Get logged-in user info
226+
username = None
227+
session_id = request.cookies.get(auth_service._config.session_cookie_name)
228+
if session_id:
229+
session = await auth_service.get_session(session_id)
230+
if session and session.user_id:
231+
user = await auth_service.get_user(session.user_id)
232+
if user:
233+
username = user.username
234+
235+
return Template(
236+
template_name="canvas_clash_home.html",
237+
context={
238+
"rooms": [
239+
{
240+
"id": str(r.id),
241+
"code": r.room_code,
242+
"name": r.name,
243+
"player_count": len(r.active_guessers()),
244+
"max_players": r.settings.max_players,
245+
}
246+
for r in lobby_rooms
247+
],
248+
"active_games": [
249+
{
250+
"id": str(r.id),
251+
"code": r.room_code,
252+
"name": r.name,
253+
"player_count": len(r.active_guessers()),
254+
"spectator_count": len(r.spectators()),
255+
"current_round": r.current_round_number,
256+
"total_rounds": r.settings.rounds_per_game,
257+
}
258+
for r in active_games
259+
],
260+
"debug_mode": is_debug,
261+
"username": username,
262+
},
263+
)
212264

213265
# Favicon redirect
214266
@get("/favicon.ico", include_in_schema=False)
@@ -222,7 +274,7 @@ async def profile_redirect() -> Redirect:
222274
"""Redirect /profile to auth profile page."""
223275
return Redirect(path="/auth/profile")
224276

225-
route_handlers = [root_redirect, favicon_redirect, profile_redirect, HealthController] if enable_ui else [HealthController]
277+
route_handlers = [dashboard, favicon_redirect, profile_redirect, HealthController] if enable_ui else [HealthController]
226278

227279
# Configure templates if UI is enabled (must be before Litestar init for VitePlugin)
228280
template_config = None

0 commit comments

Comments
 (0)