Lepton Dashboard Data Aggregation: How Language Statistics Are Calculated and Visualized

The Lepton dashboard aggregates your most-used programming languages from saved gists into a radar chart by filtering Redux state tags, sorting by frequency, and limiting results to the top five languages.

The Lepton dashboard provides developers with visual insights into their coding habits through an interactive statistics view. This open-source snippet manager analyzes your saved GitHub gists to generate language statistics that help you understand your coding patterns. Understanding how this data is aggregated and visualized helps users interpret their development trends accurately.

Data Source and State Management

The gistTags Redux State

The dashboard visualization relies on the gistTags state slice, which is maintained in the Redux store. This data structure is a JavaScript object where each key represents a tag string (such as lang@JavaScript or lang@Python) and each value is an array of gist IDs associated with that tag.

When you save gists in Lepton, the application automatically parses file extensions and assigns language tags. These tags populate the gistTags map, which serves as the single source of truth for the dashboard's aggregation logic.

Aggregation Pipeline in the Dashboard Container

Step-by-Step Language Tag Processing

The aggregation logic resides in app/containers/dashboard/index.js, specifically within the dashboard container component. The component processes raw tag data through a six-step pipeline to prepare the radar chart visualization:

  1. Retrieve tags from the Redux store via const { gistTags } = this.props
  2. Filter language tags to keep only keys starting with lang@ while excluding the special lang@All aggregate tag
  3. Sort by popularity in descending order based on the count of gist IDs in each tag array
  4. Limit to top 5 languages using maxNum = 5 to prevent chart overcrowding
  5. Build chart data by mapping tag arrays to counts and stripping the lang@ prefix for display labels
  6. Render conditionally using react-chartjs only when at least three languages exist

Filtering and Sorting Logic

The component extracts language statistics using native JavaScript array methods. The filtering logic specifically targets the lang@ prefix convention used throughout the application:

// Inside Dashboard.renderDashboardSection()
const { gistTags } = this.props;          // from Redux store
const langTags = Object.keys(gistTags)
    .filter(key => key.startsWith('lang@') && key !== 'lang@All')
    .sort((t1, t2) => gistTags[t2].length - gistTags[t1].length);

This code excludes the lang@All tag because it represents a meta-aggregate of all languages rather than a specific programming language. The sort function orders languages by gist count in descending order, ensuring the most frequently used languages appear first.

Limiting Results to Top Languages

To maintain chart readability, the dashboard restricts the visualization to the five most popular languages:

const maxNum = 5;
const rawLabels = langTags.slice(0, Math.min(maxNum, langTags.length));
const data    = rawLabels.map(lang => gistTags[lang].length);
const labels  = rawLabels.map(l => l.substr(6)); // Remove 'lang@' prefix (6 chars)

The slice operation ensures the chart never displays more than five data points, while the map operations transform the raw tag keys into display-friendly labels by removing the lang@ prefix.

Visualizing the Data with react-chartjs

Building the Radar Chart Dataset

The dashboard renders the aggregated statistics using the Radar component from react-chartjs. The chart configuration maps the processed data arrays to Chart.js dataset properties:

<Radar
  data={{
    labels,
    datasets: [{
      label: 'My Language Stats',
      fillColor: 'rgba(81,192,191,0.2)',
      strokeColor: 'rgba(81,192,191,1)',
      pointColor: 'rgba(81,192,191,1)',
      pointStrokeColor: '#C2C4D1',
      data,
    }],
  }}
  options={{ pointLabelFontSize: 12 }}
  width="350"
  height="300"
/>

The radar chart visualization provides an intuitive polygon shape where each vertex represents a programming language, and the distance from the center indicates relative usage frequency.

Handling Empty States

The component implements defensive rendering to prevent chart errors when users have limited data. The dashboard only renders the radar chart when at least three programming languages exist in the aggregated data:

// Conditional rendering logic
if (languages.length >= 3) {
  return <Radar ... />;
} else {
  return <div className="empty-state">Save more gists to see your language stats!</div>;
}

This threshold ensures the radar chart displays a meaningful polygon shape rather than a degenerate visualization with only one or two points.

Personalized Compliments Based on Top Language

Generating the "Master" Message

Beyond the chart visualization, the dashboard provides personalized feedback through the renderCompliments method. This function identifies the user's most frequently used programming language and generates a complimentary message:

// Inside renderCompliments()
const topLanguage = rawLabels[0]; // First element after sorting
const languageName = topLanguage.substr(6); // Remove 'lang@' prefix

return (
  <div className="compliment">
    You're a {languageName} master!
  </div>
);

The compliment system uses the same sorted array from the chart aggregation, ensuring consistency between the visual data and the textual feedback. This feature adds a gamification element that encourages users to save more snippets in their preferred languages.

Dashboard Modal State Management

Visibility Control via Redux

The dashboard appears within a modal window whose visibility is controlled by a dedicated Redux reducer. The app/reducers/reducer_dashboard_modal.js file manages a simple string state that toggles between 'ON' and 'OFF':

// reducer_dashboard_modal.js
const initialState = 'OFF';

export default function dashboardModalStatus(state = initialState, action) {
  switch (action.type) {
    case 'UPDATE_DASHBOARD_MODAL_STATUS':
      return action.payload; // 'ON' or 'OFF'
    default:
      return state;
  }
}

The modal state is combined with other reducers in app/reducers/index.js, making it accessible throughout the application. Action creators in app/actions/index.js provide the updateDashboardModalStatus function to trigger state changes when users open or close the dashboard view.

Summary

  • The Lepton dashboard visualizes programming language usage through a radar chart generated from the gistTags Redux state.
  • Aggregation occurs in app/containers/dashboard/index.js through a six-step pipeline that filters language tags, sorts by gist count, and limits results to the top five languages.
  • The chart requires at least three programming languages to render; otherwise, the dashboard displays an empty-state message encouraging users to save more gists.
  • A personalized compliment message identifies the user's most frequent language and displays a "master" title based on the same aggregated data.
  • Dashboard visibility is controlled by a simple Redux reducer that stores modal state as 'ON' or 'OFF' strings.

Frequently Asked Questions

What data does the Lepton dashboard display?

The Lepton dashboard displays a radar chart showing your most frequently used programming languages across all saved gists. It extracts this information from language tags stored in the Redux gistTags state, where each language is represented as a count of associated gist IDs. The visualization includes up to five languages, with each axis of the radar chart representing relative usage frequency.

How does Lepton determine my top programming languages?

Lepton determines your top programming languages through a client-side aggregation pipeline in app/containers/dashboard/index.js. The process filters the gistTags object to include only keys starting with lang@ (excluding the meta-tag lang@All), then sorts these tags by the length of their gist ID arrays in descending order. The system selects the first five entries from this sorted list to represent your most-used languages.

Why does the dashboard require at least three languages to show the radar chart?

The dashboard enforces a minimum threshold of three programming languages to ensure the radar chart renders a meaningful polygon visualization. With fewer than three data points, a radar chart would produce a degenerate shape (a line or single point) that fails to provide useful visual insight into language distribution. When fewer than three languages exist, the component renders an empty-state message encouraging users to save additional gists.

Where is the dashboard aggregation logic located in the source code?

The dashboard aggregation logic is located in app/containers/dashboard/index.js within the renderDashboardSection method of the Dashboard container component. This file handles the entire pipeline from Redux state extraction through chart data preparation. The resulting visualization is rendered using the Radar component from the react-chartjs library, configured with specific color schemes and dimension constraints defined in the same file.

Have a question about this repo?

These articles cover the highlights, but your codebase questions are specific. Give your agent direct access to the source. Share this with your agent to get started:

Share the following with your agent to get started:
curl -s "https://instagit.com/install.md"

Works with
Claude Codex Cursor VS Code OpenClaw Any MCP Client

Maintain an open-source project? Get it listed too →