ModularAdmin: Free Bootstrap 4 Dashboard Theme
HTML version
ModularAdmin is an open source dashboard theme built in a modular way. That makes it easy to scale, modify and maintain.
Heads up for the Modular Material Admin + React!
Currently I work on the Modular Admin ReactJS version, which uses React, MaterialUI, Redux and TypeScript. Star the project or follow me on Twitter to stay up to date!
Support me on pateron to make this happen!
Getting Started
Note: If you don't want to re-build the project, you may just clone this branch directly
https://github.com/modularcode/modular-admin-html/tree/gh-pages
1. Download ZIP or Git Clone
git clone https://github.com/modularcode/modular-admin-html.git
2. Build the project
The cloned/downloaded repository doesn't contain prebuilt version of the project and you need to build it. You need to have NodeJs (v8+) with npm (v3+) installed.
Install npm dependencies
npm install
Build the project and start local web server
npm start
Open the project http://localhost:4000.
Warning! all changes made in dist/ folder would be overwriten on application build.
You can also run the project in docker thanks to @japrogramer
Folder Structure
+-- build/ # app build tasks and tools
+-- config/ # build configs and paths definitions
+-- dist/ # compiled result
+-- node_modules/ # node dependencies
+-- src/ # source files
+-- package.json # npm configuration file
config/ folder
This folder contains application build configurations and paths definitions.
For adding/removing NPM dependencies you need to manually define the paths in config/index.js file after the module installation.
build/ folder
This folder contains files related to our application compilation. That can be styles preprocessing (LESS,SASS,PostCSS) and template engine compilation, script file concatenation and minification and other related tasks.
+-- tasks/ # tasks folder
| +-- {different tasks} # each file represents a single build task
+-- utils/ # some utils
+-- gulpfile.js # main build file for gulp build system
src/ folder
This folder contains our application source files. The folder structure reflects the app component structure.
Each non-underscored folder represents a single component module. Modules can be nested inside each other.
There are also special folders which start with an underscore.
For example _common/ folder contains common components that are used by other components at the same level.
This file structuring makes our app file organization very semantic and scalable. Also It's very easy to work on separate components even if you're developing large-scale applications.
+-- _assets/ # application assets
+-- _common/ # common components
| +-- helpers/ # handlebars helpers
| +-- styles/ # application common styles
+-- _themes/ # different theme versions
+-- app/ # app module (dashboard view)
| +-- _common/ # app common components
| | +-- editor/ # wysiwyg editor files
| | +-- footer/ # footer files
| | +-- header/ # header files
| | +-- modals/ # common modal dialogs (confirm, image library, etc)
| | +-- sidebar/ # sidebar files
| +-- {different modules}
| +-- app-layout.hbs # app view layout
| +-- app.scss # main app view styles
+-- auth/ # auth module (login/signup/recover)
| +-- {different modules}
| +-- auth-layout.hbs # auth view layout
| +-- auth.scss # main auth view styles
+-- _context.js # main handlebars variables
+-- _main.scss # main styles
+-- _variables.scss # variables
+-- config.js # javascript configs
+-- main.js # main script file
dist/ folder
Compiled state of our app with processed styles, templates, scripts and assets.
Warning! Never work inside this folder, because your changes would be overwritten on every build
File Types
Our app consists of different file types.
Styles (*.scss)
We use SASS as CSS preprocessor language.
Main variables are defined in src/_variables.scss folder.
For making life easier we broke down styles into components, and on build we're just merging all .scss files together and processing it to dist/css/app.css file. Style files are merged in the following order
{variables.scss}
{bootstrap variables}
{bootstrap mixins}
{rest style files}
The remaining style files are merged in the alphabetical order.
There are also different theme variations located in src/_themes/ folder, where you can change the main variables to get different themes. There are a few predefined themes built in. You can add new themes by adding a new file in src/_themes/ folder. The file name must end with -theme.scss.
Scripts (*.js)
We separate application's scripts across its components. For simplicity we use ES5 in this version, and just wrap each component's script in jQuery $(function() { }). JS configurations are defined in src/config.js file. On build, application script files are merged together and copied to dist/js/app.js folder. The script files are merged in the following order.
{config.js}
{all .js files except main.js}
{main.js}
Templates (*.hbs)
Templates are pieces of HTML files written in template engine language. We use Handlebars, which allows to have conditions in HTML, reuse partials in different pages (e.g. sidebars, footers), use loops, layouts etc.
Pages (*-page.hbs)
Templates themselves are just parts of the markup, and aren't compiled as separate files. What we really want in the final output is a .html page in the dist/ folder. There are special handlebar templates for it, their filenames ending with -page.hbs. Each {pagename}-page.hbs file would be compiled to dist/{pagename}.html page with a flatened file structure.
Pages can consist of different templates (partials) which can be included thanks to handlebars partial including feature. Also each page has its context, which is a data passed into the template on rendering. That data is used in template expressions and variables. page contexts can be defined in two ways:
YAML headers (example)
---
foo: bar
list:
- One
- Two
- Three
---
and _context.js files.
module.exports = {
foo: 'bar',
foo2: function() {
// do some magic, return some string
},
list: [
'One', 'Two', 'Three'
]
}