Concept is built with customization in mind. This guide provides an overview of all the ways you can make the template your own.
The fastest way to customize Concept is through Sass variables:
// src/scss/_variables.scss
$primary: #5969ff;
$secondary: #6c757d;
$success: #28a745;
$font-family-base: 'Inter', sans-serif;
$border-radius: 0.375rem;
Override specific components without modifying core files:
// src/scss/custom/_buttons.scss
.btn-primary {
background: linear-gradient(45deg, $primary, lighten($primary, 10%));
border: none;
box-shadow: 0 4px 6px rgba($primary, 0.3);
}
Customize the overall layout structure:
// src/config/layout.js
export const layoutConfig = {
sidebar: {
width: '260px',
collapsed: '70px',
dark: true
},
header: {
height: '70px',
fixed: true
}
};
_variables.scss - Global Sass variablesmain.scss - Main stylesheet entrycustom/ - Your custom styles directoryconfig/ - Configuration filesjs/custom/ - Custom JavaScript modulesapp.js - Main application logicpartials/layouts/ - Layout templatespartials/components/ - Reusable componentspages/ - Page templatesBefore starting, identify:
Create a custom directory structure:
src/
├── scss/
│ └── custom/
│ ├── _variables.scss # Your variables
│ ├── _components.scss # Component overrides
│ └── _theme.scss # Theme customizations
└── js/
└── custom/
├── theme.js # Theme switcher
└── components.js # Custom components
Always override rather than modify core files:
// DO: Create custom/_buttons.scss
.btn-primary {
// Your customizations
}
// DON'T: Modify components/_buttons.scss directly
// src/scss/_variables.scss
$primary: #7c3aed; // Purple instead of blue
// src/scss/_variables.scss
$font-family-base: 'Roboto', sans-serif;
// Add font import
@import url('https://fonts.googleapis.com/css2?family=Roboto:wght@300;400;500;700&display=swap');
// src/scss/custom/_layout.scss
.sidebar {
width: 280px; // Instead of 260px
&.collapsed {
width: 80px; // Instead of 70px
}
}
// src/js/custom/theme.js
export function initThemeSwitcher() {
const toggle = document.getElementById('darkModeToggle');
toggle?.addEventListener('click', () => {
document.body.classList.toggle('dark-mode');
localStorage.setItem('theme',
document.body.classList.contains('dark-mode') ? 'dark' : 'light'
);
});
}
// src/js/custom/theme-manager.js
class ThemeManager {
constructor() {
this.themes = {
default: { primary: '#5969ff', secondary: '#6c757d' },
dark: { primary: '#1a1a1a', secondary: '#2d2d2d' },
corporate: { primary: '#003366', secondary: '#0066cc' }
};
}
applyTheme(themeName) {
const theme = this.themes[themeName];
Object.entries(theme).forEach(([key, value]) => {
document.documentElement.style.setProperty(`--${key}`, value);
});
}
}
// vite.config.custom.js
import { defineConfig } from 'vite';
import customPlugin from './plugins/custom';
export default defineConfig({
plugins: [
customPlugin({
// Your custom options
})
]
});
main.scssDive deeper into specific customization topics:
Remember: Good customization maintains the template's quality while adding your unique touch. Start small, test often, and build incrementally! 🎨