Data Visualization Templates: The Fast Track to Professional Dashboards

Cover Image

Data Visualization Templates: The Fast Track to Professional Dashboards

Introduction

Here's a scenario every developer knows: Monday morning, stakeholder wants a "simple" dashboard by Friday. You open your IDE, stare at a blank canvas, and think—where do I even start? Line charts, bar charts, pie charts, heatmaps... each one needs careful scaling, tooltips, legends, responsive handling. By Thursday, you've rewritten your axis formatting logic four times.

What if you didn't have to start from scratch?

Data visualization templates are the secret weapon of developers who ship dashboards fast. They provide battle-tested starting points—complete with proper scaling, accessibility, animations, and responsive behavior—so you can focus on what the data means, not how to draw a rectangle.

In this post, you'll discover what makes a great visualization template, explore ready-to-use options across popular frameworks, and learn how to build your own reusable templates. By the end, you'll have a toolkit that cuts your dashboard development time in half.

Why Templates Matter in Data Visualization

The Hidden Complexity of Charts

At first glance, a bar chart seems simple: bars of varying heights. But dig deeper and you'll find a maze of edge cases:

  • Responsive sizing: How does the chart behave when the container shrinks from 1200px to 400px?
  • Data gaps: What happens when a time series has missing values?
  • Accessibility: Are colors distinguishable for colorblind users? Can screen readers interpret the chart?
  • Tooltip behavior: Should tooltips follow the mouse? Click to select? Show on hover?
  • Axis formatting: When does "1000" become "1K"? How do you handle negative values in a log scale?

A single "simple" chart can easily require 200+ lines of defensive code to handle all scenarios properly. Now multiply that by ten chart types, and suddenly your dashboard project has become a maintenance nightmare.

What Templates Provide

Templates solve this by encapsulating best practices into drop-in components. A good template gives you:

  1. Consistent styling: Unified color palettes, fonts, and spacing across all charts
  2. Built-in responsiveness: Charts that adapt to their containers without extra work
  3. Interaction patterns: Standardized tooltips, legends, and drill-down behaviors
  4. Type safety: TypeScript definitions that catch errors before runtime
  5. Accessibility hooks: ARIA labels, keyboard navigation, and color-blind safe palettes

Think of visualization templates like design system components—they give you professional quality out of the box while remaining customizable for edge cases.

Popular Data Visualization Templates by Framework

Let's explore the best template options across the most popular JavaScript visualization libraries.

Recharts Templates (React)

Recharts is React's most beloved charting library. Its composable nature makes it perfect for template creation.

Basic Line Chart Template:

                                                // templates/LineChartTemplate.tsx
                                                  import { ResponsiveContainer, LineChart, Line, XAxis, YAxis, CartesianGrid, Tooltip, Legend } from 'recharts';
                                                    interface DataPoint {
                                                      name: string;
                                                        value: number;
                                                          [key: string]: string | number;
                                                            }
                                                              interface LineChartTemplateProps {
                                                                data: DataPoint[];
                                                                  dataKey: string;
                                                                    color?: string;
                                                                      title?: string;
                                                                        height?: number;
                                                                          }
                                                                            export function LineChartTemplate({
                                                                              data,
                                                                                dataKey,
                                                                                  color = '#3b82f6',
                                                                                    title,
                                                                                      height = 300
                                                                                        }: LineChartTemplateProps) {
                                                                                          return (
                                                                                            

                                                                                              {title && 

{title}

}
                                                                                                
                                                                                                  
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                    
                                                                                                        
                                                                                                        
                                                                                                                    
                                                                                                                  
                                                                                                                

                                                                                                                );
                                                                                                                  }
                                                                                                                  

Usage:

                                                                                                                    import { LineChartTemplate } from './templates/LineChartTemplate';
                                                                                                                      const salesData = [
                                                                                                                        { name: 'Jan', value: 4000 },
                                                                                                                          { name: 'Feb', value: 3000 },
                                                                                                                            { name: 'Mar', value: 2000 },
                                                                                                                              { name: 'Apr', value: 2780 },
                                                                                                                                { name: 'May', value: 1890 },
                                                                                                                                  ];
                                                                                                                                    export function Dashboard() {
                                                                                                                                      return (
                                                                                                                                        
                                                                                                                                                  );
                                                                                                                                                    }
                                                                                                                                                    
💡 Tip: Create a ChartTheme object that exports your brand colors, default margins, and tooltip styles. Import it across all your chart templates for consistency.

Chart.js Templates (Vanilla JS + React)

Chart.js works everywhere—React, Vue, Angular, or plain HTML. Its configuration-based approach lends itself well to template factories.

Reusable Configuration Template:

                                                                                                                                                          // templates/chartConfig.js
                                                                                                                                                            // Brand color palette
                                                                                                                                                              export const brandColors = {
                                                                                                                                                                primary: '#3b82f6',
                                                                                                                                                                  secondary: '#8b5cf6',
                                                                                                                                                                    success: '#10b981',
                                                                                                                                                                      warning: '#f59e0b',
                                                                                                                                                                        danger: '#ef4444',
                                                                                                                                                                          gray: '#6b7280',
                                                                                                                                                                            };
                                                                                                                                                                              // Base options applied to all charts
                                                                                                                                                                                export const baseOptions = {
                                                                                                                                                                                  responsive: true,
                                                                                                                                                                                    maintainAspectRatio: false,
                                                                                                                                                                                      plugins: {
                                                                                                                                                                                        legend: {
                                                                                                                                                                                          position: 'bottom',
                                                                                                                                                                                            labels: {
                                                                                                                                                                                              padding: 20,
                                                                                                                                                                                                usePointStyle: true,
                                                                                                                                                                                                  font: { family: 'Inter, sans-serif', size: 12 },
                                                                                                                                                                                                    },
                                                                                                                                                                                                      },
                                                                                                                                                                                                        tooltip: {
                                                                                                                                                                                                          backgroundColor: 'rgba(0, 0, 0, 0.8)',
                                                                                                                                                                                                            titleFont: { family: 'Inter, sans-serif', size: 14 },
                                                                                                                                                                                                              bodyFont: { family: 'Inter, sans-serif', size: 13 },
                                                                                                                                                                                                                cornerRadius: 8,
                                                                                                                                                                                                                  padding: 12,
                                                                                                                                                                                                                    },
                                                                                                                                                                                                                      },
                                                                                                                                                                                                                        scales: {
                                                                                                                                                                                                                          x: {
                                                                                                                                                                                                                            grid: { display: false },
                                                                                                                                                                                                                              ticks: { font: { family: 'Inter, sans-serif', size: 11 } },
                                                                                                                                                                                                                                },
                                                                                                                                                                                                                                  y: {
                                                                                                                                                                                                                                    grid: { color: '#f3f4f6' },
                                                                                                                                                                                                                                      ticks: { font: { family: 'Inter, sans-serif', size: 11 } },
                                                                                                                                                                                                                                        },
                                                                                                                                                                                                                                          },
                                                                                                                                                                                                                                            };
                                                                                                                                                                                                                                              // Factory function to create chart configs
                                                                                                                                                                                                                                                export function createLineConfig(data, label, color = brandColors.primary) {
                                                                                                                                                                                                                                                  return {
                                                                                                                                                                                                                                                    type: 'line',
                                                                                                                                                                                                                                                      data: {
                                                                                                                                                                                                                                                        labels: data.map(d => d.label),
                                                                                                                                                                                                                                                          datasets: [{
                                                                                                                                                                                                                                                            label,
                                                                                                                                                                                                                                                              data: data.map(d => d.value),
                                                                                                                                                                                                                                                                borderColor: color,
                                                                                                                                                                                                                                                                  backgroundColor: `${color}20`, // 20% opacity
                                                                                                                                                                                                                                                                    fill: true,
                                                                                                                                                                                                                                                                      tension: 0.4, // Smooth curves
                                                                                                                                                                                                                                                                        pointRadius: 4,
                                                                                                                                                                                                                                                                          pointHoverRadius: 6,
                                                                                                                                                                                                                                                                            }],
                                                                                                                                                                                                                                                                              },
                                                                                                                                                                                                                                                                                options: baseOptions,
                                                                                                                                                                                                                                                                                  };
                                                                                                                                                                                                                                                                                    }
                                                                                                                                                                                                                                                                                      export function createBarConfig(data, label, color = brandColors.primary) {
                                                                                                                                                                                                                                                                                        return {
                                                                                                                                                                                                                                                                                          type: 'bar',
                                                                                                                                                                                                                                                                                            data: {
                                                                                                                                                                                                                                                                                              labels: data.map(d => d.label),
                                                                                                                                                                                                                                                                                                datasets: [{
                                                                                                                                                                                                                                                                                                  label,
                                                                                                                                                                                                                                                                                                    data: data.map(d => d.value),
                                                                                                                                                                                                                                                                                                      backgroundColor: color,
                                                                                                                                                                                                                                                                                                        borderRadius: 6,
                                                                                                                                                                                                                                                                                                          barThickness: 40,
                                                                                                                                                                                                                                                                                                            }],
                                                                                                                                                                                                                                                                                                              },
                                                                                                                                                                                                                                                                                                                options: {
                                                                                                                                                                                                                                                                                                                  ...baseOptions,
                                                                                                                                                                                                                                                                                                                    scales: {
                                                                                                                                                                                                                                                                                                                      ...baseOptions.scales,
                                                                                                                                                                                                                                                                                                                        y: { ...baseOptions.scales.y, beginAtZero: true },
                                                                                                                                                                                                                                                                                                                          },
                                                                                                                                                                                                                                                                                                                            },
                                                                                                                                                                                                                                                                                                                              };
                                                                                                                                                                                                                                                                                                                                }
                                                                                                                                                                                                                                                                                                                                

Usage in React:

                                                                                                                                                                                                                                                                                                                                  import { Chart } from 'react-chartjs-2';
                                                                                                                                                                                                                                                                                                                                    import { createLineConfig, brandColors } from '../templates/chartConfig';
                                                                                                                                                                                                                                                                                                                                      const revenueData = [
                                                                                                                                                                                                                                                                                                                                        { label: 'Q1', value: 45000 },
                                                                                                                                                                                                                                                                                                                                          { label: 'Q2', value: 52000 },
                                                                                                                                                                                                                                                                                                                                            { label: 'Q3', value: 48000 },
                                                                                                                                                                                                                                                                                                                                              { label: 'Q4', value: 61000 },
                                                                                                                                                                                                                                                                                                                                                ];
                                                                                                                                                                                                                                                                                                                                                  export function RevenueChart() {
                                                                                                                                                                                                                                                                                                                                                    const config = createLineConfig(revenueData, 'Revenue', brandColors.success);
                                                                                                                                                                                                                                                                                                                                                      return ;
                                                                                                                                                                                                                                                                                                                                                        }
                                                                                                                                                                                                                                                                                                                                                        

D3.js Templates (Advanced)

D3.js offers maximum flexibility but requires more setup. For complex visualizations, templates are essential.

Responsive Scatter Plot Template:

                                                                                                                                                                                                                                                                                                                                                              // templates/ResponsiveScatterPlot.js
                                                                                                                                                                                                                                                                                                                                                                import * as d3 from 'd3';
                                                                                                                                                                                                                                                                                                                                                                  export function createScatterPlot(container, data, options = {}) {
                                                                                                                                                                                                                                                                                                                                                                    const {
                                                                                                                                                                                                                                                                                                                                                                      width = 600,
                                                                                                                                                                                                                                                                                                                                                                        height = 400,
                                                                                                                                                                                                                                                                                                                                                                          margin = { top: 20, right: 20, bottom: 40, left: 50 },
                                                                                                                                                                                                                                                                                                                                                                            xKey = 'x',
                                                                                                                                                                                                                                                                                                                                                                              yKey = 'y',
                                                                                                                                                                                                                                                                                                                                                                                color = '#3b82f6',
                                                                                                                                                                                                                                                                                                                                                                                  radius = 6,
                                                                                                                                                                                                                                                                                                                                                                                    } = options;
                                                                                                                                                                                                                                                                                                                                                                                      // Clear previous chart
                                                                                                                                                                                                                                                                                                                                                                                        d3.select(container).selectAll('*').remove();
                                                                                                                                                                                                                                                                                                                                                                                          const svg = d3.select(container)
                                                                                                                                                                                                                                                                                                                                                                                            .append('svg')
                                                                                                                                                                                                                                                                                                                                                                                              .attr('viewBox', `0 0 ${width} ${height}`)
                                                                                                                                                                                                                                                                                                                                                                                                .attr('preserveAspectRatio', 'xMidYMid meet')
                                                                                                                                                                                                                                                                                                                                                                                                  .style('width', '100%')
                                                                                                                                                                                                                                                                                                                                                                                                    .style('height', 'auto');
                                                                                                                                                                                                                                                                                                                                                                                                      const innerWidth = width - margin.left - margin.right;
                                                                                                                                                                                                                                                                                                                                                                                                        const innerHeight = height - margin.top - margin.bottom;
                                                                                                                                                                                                                                                                                                                                                                                                          const g = svg.append('g')
                                                                                                                                                                                                                                                                                                                                                                                                            .attr('transform', `translate(${margin.left},${margin.top})`);
                                                                                                                                                                                                                                                                                                                                                                                                              // Scales
                                                                                                                                                                                                                                                                                                                                                                                                                const xScale = d3.scaleLinear()
                                                                                                                                                                                                                                                                                                                                                                                                                  .domain([0, d3.max(data, d => d[xKey]) * 1.1])
                                                                                                                                                                                                                                                                                                                                                                                                                    .range([0, innerWidth]);
                                                                                                                                                                                                                                                                                                                                                                                                                      const yScale = d3.scaleLinear()
                                                                                                                                                                                                                                                                                                                                                                                                                        .domain([0, d3.max(data, d => d[yKey]) * 1.1])
                                                                                                                                                                                                                                                                                                                                                                                                                          .range([innerHeight, 0]);
                                                                                                                                                                                                                                                                                                                                                                                                                            // Axes
                                                                                                                                                                                                                                                                                                                                                                                                                              g.append('g')
                                                                                                                                                                                                                                                                                                                                                                                                                                .attr('transform', `translate(0,${innerHeight})`)
                                                                                                                                                                                                                                                                                                                                                                                                                                  .call(d3.axisBottom(xScale).ticks(5))
                                                                                                                                                                                                                                                                                                                                                                                                                                    .attr('font-family', 'Inter, sans-serif');
                                                                                                                                                                                                                                                                                                                                                                                                                                      g.append('g')
                                                                                                                                                                                                                                                                                                                                                                                                                                        .call(d3.axisLeft(yScale).ticks(5))
                                                                                                                                                                                                                                                                                                                                                                                                                                          .attr('font-family', 'Inter, sans-serif');
                                                                                                                                                                                                                                                                                                                                                                                                                                            // Data points
                                                                                                                                                                                                                                                                                                                                                                                                                                              g.selectAll('circle')
                                                                                                                                                                                                                                                                                                                                                                                                                                                .data(data)
                                                                                                                                                                                                                                                                                                                                                                                                                                                  .enter()
                                                                                                                                                                                                                                                                                                                                                                                                                                                    .append('circle')
                                                                                                                                                                                                                                                                                                                                                                                                                                                      .attr('cx', d => xScale(d[xKey]))
                                                                                                                                                                                                                                                                                                                                                                                                                                                        .attr('cy', d => yScale(d[yKey]))
                                                                                                                                                                                                                                                                                                                                                                                                                                                          .attr('r', radius)
                                                                                                                                                                                                                                                                                                                                                                                                                                                            .attr('fill', color)
                                                                                                                                                                                                                                                                                                                                                                                                                                                              .attr('opacity', 0.7)
                                                                                                                                                                                                                                                                                                                                                                                                                                                                .on('mouseenter', function(event, d) {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                  d3.select(this).attr('r', radius * 1.5).attr('opacity', 1);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                    })
                                                                                                                                                                                                                                                                                                                                                                                                                                                                      .on('mouseleave', function() {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                        d3.select(this).attr('r', radius).attr('opacity', 0.7);
                                                                                                                                                                                                                                                                                                                                                                                                                                                                          });
                                                                                                                                                                                                                                                                                                                                                                                                                                                                            return { svg, xScale, yScale };
                                                                                                                                                                                                                                                                                                                                                                                                                                                                              }
                                                                                                                                                                                                                                                                                                                                                                                                                                                                              
🚀 Pro tip: D3 templates shine for custom visualizations. Build templates for your organization's specific chart types (funnel charts, sankey diagrams, treemaps) and centralize them in a shared package.

Building Your Own Template Library

Template Architecture Patterns

As your template library grows, structure it for maintainability:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                src/
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  ├── charts/
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    │   ├── index.ts          # Export all templates
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      │   ├── types.ts          # TypeScript interfaces
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        │   ├── theme.ts          # Shared styling constants
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          │   ├── LineChart.tsx
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            │   ├── BarChart.tsx
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              │   ├── AreaChart.tsx
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                │   └── index.ts
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  ├── layouts/
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    │   ├── DashboardGrid.tsx
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      │   └── ChartCard.tsx
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        └── hooks/
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          ├── useChartData.ts
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            └── useResizeObserver.ts
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            

The Template Props Contract

Every template should expose a consistent interface:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              // charts/types.ts
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                export interface BaseChartProps {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  /** Chart title displayed above the chart */
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    title?: string;
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      /** Subtitle or description */
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        subtitle?: string;
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          /** Container height in pixels */
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            height?: number;
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              /** Loading state */
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                loading?: boolean;
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  /** Error message to display */
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    error?: string;
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      /** Show or hide legend */
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        showLegend?: boolean;
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          /** Custom className for additional styling */
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            className?: string;
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              }
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                export interface DataChartProps extends BaseChartProps {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  /** Chart data array */
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    data: Record[];
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      /** Key to use for X-axis */
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        xKey: string;
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          /** Key(s) to use for data values */
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            dataKeys: string[];
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              }
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              

This contract ensures every chart component handles loading, errors, and styling consistently—users get a unified API across all chart types.

Testing Templates

Templates deserve the same testing rigor as any core component:

                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                // __tests__/LineChart.test.tsx
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  import { render, screen } from '@testing-library/react';
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    import { LineChartTemplate } from '../charts/LineChart';
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      const mockData = [
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        { name: 'A', value: 10 },
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          { name: 'B', value: 20 },
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            ];
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              describe('LineChartTemplate', () => {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                it('renders title when provided', () => {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  render();
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    expect(screen.getByText('Test Chart')).toBeInTheDocument();
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      });
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        it('renders loading state', () => {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                          render();
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                            expect(screen.getByText(/loading/i)).toBeInTheDocument();
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                              });
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                it('renders error message', () => {
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                  render();
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                    expect(screen.getByText('Failed to load')).toBeInTheDocument();
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      });
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        });
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                        
⚠️ Warning: Always test templates with edge cases: empty data arrays, single data points, extremely large values (does "1,000,000" render correctly?), and missing keys.

Conclusion

Data visualization templates aren't about cutting corners—they're about not reinventing the wheel on problems solved thousands of times before. By building (or adopting) a solid template library, you get:

  • Faster development: Drop in a chart component instead of writing 200 lines from scratch
  • Consistent UX: Users get familiar interaction patterns across your entire dashboard
  • Maintainability: Fix bugs once in the template, and every chart benefits
  • Accessibility: Built-in a11y features that you'd otherwise have to research yourself

Start small: pick one chart type you use frequently, build a reusable template for it, and use it in your next project. You'll immediately feel the difference—and wonder how you ever worked without templates.

Ready to level up your dashboard development? Check out our guide on building accessible data visualizations or explore React chart component best practices.

Follow-up options:

  • Want me to generate social media snippets (Twitter/LinkedIn) for this post?
  • Should I create a content brief or outline for a follow-up post?

Author

Hai Ninh

Author

Hai Ninh

Software Engineer

Love the simply thing and trending tek