VOOZH about

URL: https://deepwiki.com/hypervel/telescope/6-web-interface

⇱ Web Interface | hypervel/telescope | DeepWiki


Loading...
Last indexed: 7 February 2026 (146f77)
Menu

Web Interface

This document covers Telescope's web-based user interface, which provides visual access to recorded application events. The interface is implemented as a Vue.js Single-Page Application (SPA) that communicates with backend API routes to display and manage recorded entries.

For detailed information about the Vue.js component structure and routing system, see Frontend Architecture. For asset compilation and versioning, see Asset Management and Build System.

Overview

The Telescope web interface consists of three primary layers:

  1. HTML Shell: A Blade template that bootstraps the Vue application
  2. Vue.js SPA: Client-side routing and dynamic content rendering
  3. Backend API: HTTP routes for data retrieval and management operations

The interface provides access to 18 distinct entry types (requests, commands, queries, jobs, etc.) through a unified navigation structure, along with global controls for managing recording state and entries.

Architecture


Sources: resources/views/layout.blade.php1-237 public/mix-manifest.json1-6

HTML Shell Structure

The base layout is defined in layout.blade.php, which serves as the bootstrapping template for the Vue SPA.

Document Head

The HTML document head includes:

  • Meta tags: Character set, viewport, CSRF token, robots directives
  • Title: "Telescope - {app.name}"
  • Favicon: /vendor/telescope/favicon.ico
  • Fonts: Figtree font family from fonts.bunny.net
  • Stylesheets: CSS loaded via Laravel Mix's mix() helper with cache-busting

Sources: resources/views/layout.blade.php1-18

Vue Root Element

The main application container uses Vue's v-cloak directive to prevent flash of uncompiled content:


This element serves as the mounting point for the Vue application instance.

Sources: resources/views/layout.blade.php20

Alert System

A global alert component is conditionally rendered when alert.type is set:


This provides system-wide notifications and confirmation dialogs.

Sources: resources/views/layout.blade.php21-26

Header and Global Controls

The header contains the Telescope logo and four primary control buttons:


Sources: resources/views/layout.blade.php29-64

Control Buttons

ControlMethodIcon StatePurpose
Toggle RecordingtoggleRecording()Pause (if recording) / Play (if paused)Start/stop data collection
Clear EntriesclearEntries()Trash canDelete all recorded entries
Auto LoadautoLoadNewEntries()Refresh (active state toggle)Enable/disable automatic entry loading
Monitored TagsNavigationEye iconView monitoring configuration

The recording toggle displays different SVG icons based on the recording state variable:

  • Recording (Pause icon): Lines 39-41 - Pause bars SVG path
  • Paused (Play icon): Lines 42-44 - Play triangle SVG path

Sources: resources/views/layout.blade.php38-64

Navigation Sidebar

The sidebar provides navigation to 18 distinct entry type views using Vue Router's <router-link> component with the active-class="active" directive.

Navigation Structure


Sources: resources/views/layout.blade.php67-220

Route List

RouteEntry TypeLines
/requestsHTTP Requests71-76
/commandsConsole Commands79-84
/scheduleScheduled Tasks87-92
/jobsQueue Jobs95-100
/batchesJob Batches105-110
/cacheCache Operations113-119
/dumpsDebug Dumps122-127
/eventsApplication Events130-135
/exceptionsExceptions138-143
/gatesAuthorization Gates146-151
/client-requestsHTTP Client154-159
/logsLog Messages162-168
/mailSent Mail171-177
/modelsModel Operations180-185
/notificationsNotifications188-194
/queriesDatabase Queries197-202
/redisRedis Commands205-210
/viewsRendered Views213-218

Each navigation item includes an inline SVG icon with a semantic viewBox definition for consistent visual presentation.

Sources: resources/views/layout.blade.php71-219

Content Area

The main content area uses Vue Router's <router-view> component for dynamic content injection:


This component renders the appropriate view based on the current route, with each view component responsible for fetching and displaying its specific entry type data.

Sources: resources/views/layout.blade.php223-225

Configuration Injection

Server-side configuration is injected into the client application via a global window.Telescope object:


This object contains:

  • path: The base path for Telescope routes (configured via telescope.path)
  • timezone: Server timezone for timestamp display
  • recording: Current recording state
  • Additional runtime configuration values

The Vue application reads this configuration during initialization to configure its API client and UI behavior.

Sources: resources/views/layout.blade.php231-233

Asset Loading

The compiled JavaScript bundle is loaded using Laravel Mix's cache-busting mechanism:


The mix() helper resolves to the versioned filename from mix-manifest.json:


This ensures browsers load the latest version after deployments by generating unique cache keys based on file content hashes.

Sources: resources/views/layout.blade.php17-235 public/mix-manifest.json1-6

Grid Layout

The interface uses a 12-column Bootstrap-style grid layout:


  • Sidebar: 2 columns (16.67% width)
  • Content: 10 columns (83.33% width)

This layout provides persistent navigation while maximizing content display area.

Sources: resources/views/layout.blade.php28-227

Responsive Considerations

The layout includes viewport meta configuration for responsive behavior:


However, the fixed column widths (col-2 and col-10) suggest the interface is primarily designed for desktop viewports. Mobile optimization is not explicitly implemented in the base layout.

Sources: resources/views/layout.blade.php6

Data Flow


Sources: resources/views/layout.blade.php1-237

Security Features

The layout includes several security-related features:

  1. CSRF Token: Included in meta tags for AJAX requests

    
    
  2. Search Engine Blocking: Prevents indexing of debug data

    
    
  3. Authorization: Backend routes protected by authorization middleware (not visible in layout, handled by TelescopeServiceProvider)

Sources: resources/views/layout.blade.php7-10

Styling System

The interface supports both light and dark themes via separate CSS bundles:

  • Light theme: app.css
  • Dark theme: app-dark.css

The theme selection is determined by the $cssFile variable passed to the view, which is controlled by application configuration or user preference.

Sources: resources/views/layout.blade.php17 public/mix-manifest.json3-4