ShakeLog - Web Dashboard
ShakeLog Web Dashboard is the administrative frontend for the ShakeLog bug reporting ecosystem. Built with React and Vite, it provides a responsive interface for development teams to monitor, filter, and manage bug reports submitted from mobile devices.
Key Features
-
Secure Access: Project-based login system using Project ID and Access Codes.
-
Smart Filtering: Filter reports by Status (Open, In Progress, Resolved) and search by content/ID.
-
Detailed Inspection: Expandable rows showing screenshots, device metadata, and user descriptions.
-
Log Management: Generate and download structured
.txtlogs directly from the browser, including deep links to external Logcat files (Firestore). -
Interactive UI: Update report statuses directly from the grid with optimistic UI updates.
-
Theme Support: Fully responsive design with built-in Dark/Light mode.
Technology Stack
-
Framework: React 18
-
Build Tool: Vite
-
Styling: Tailwind CSS
-
Icons: Google Material Symbols
-
State Management: React Context API + Hooks
Getting Started
Follow these instructions to set up the dashboard locally.
Prerequisites
-
Node.js 18+
-
npm or yarn
Installation
-
Clone the repository:
git clone [https://github.com/OmerMel/shakelog-dashboard.git](https://github.com/OmerMel/shakelog-dashboard.git) cd shakelog-dashboard -
Install dependencies:
npm install -
Run the development server:
npm run dev -
Open in Browser:
Navigate to
http://localhost:5173to view the dashboard.
Code Structure & Components
The project is structured to separate view logic, state management, and API services. Below is an overview of the key components in the codebase:
1. Components (src/components)
-
AuthPage.jsx: Handles the entry point of the application. Manages both the Login form (for existing projects) and the Create Project form. It interacts with theAuthContextto store session data. -
Header.jsx: The persistent top navigation bar. It displays the current project name, the API Key (with copy functionality), the Theme Toggle button, and the Logout action. -
StatsOverview.jsx: Computes and displays the top-level metrics (e.g., Number of Open Bugs, Resolved Today). It usesuseMemoto efficiently recalculate stats when the reports array changes. -
ReportTable.jsx: The core component of the dashboard.-
Filtering Logic: Implements client-side filtering based on search terms and status selection.
-
Row Expansion: Handles the "Accordion" logic to show/hide the detailed view (screenshot + metadata).
-
Log Generation: Contains the logic to generate
.txtfiles from breadcrumbs in the browser.
-
-
StatusSelect(Internal): A helper component within the table that renders a custom dropdown for updating report statuses without triggering row expansion events.
2. State Management (src/context)
-
AuthContext.jsx: Provides a global state for the authenticatedproject. It handles:-
Persisting the session to
localStorage. -
Exposing
login,logout, andprojectdata to the entire app tree. -
Protecting routes (ensuring only authenticated users see the dashboard).
-
3. Services (src/services)
-
authService.js: Handles HTTP requests related to authentication (/login-project,/create-project). -
reportService.js: Manages data fetching and updates.-
fetchReports(apiKey): Retrieves the list of bugs. -
updateReportStatus(...): Sends PATCH/POST requests to update the status of a specific bug on the backend.
-
4. Utilities (src/utils)
formatters.js: Contains pure functions for data presentation, such as formatting timestamps, mapping Status Enums to UI colors, and determining battery icons.
Screenshots
1. The Dashboard
2. Report Details & Actions
3. Project Login
License
This project is licensed under the MIT License - see the LICENSE file for details.