The easiest way to get up and running is using Docker. Once the Docker CLI is installed from [https://www.docker.com/get-docker](https://www.docker.com/get-docker).
You can add your own custom CSS into the `Custom CSS` box. This will be minified and added to each page.
##### Footer
You can add your own custom HTML footer which may have contact details, social media links etc into the `Footer HTML` box. This will be added to bottom of each page.
### Products
Adding of new products is done via `/admin/product/new`.
##### Product price
Set this value to a full 2 decimal value with no commas or currency symbols.
A permalink is a nice link to your product which is normally shown in search engine rankings. By default, a no Permalink value is set when adding a product one will be generated using the Product title with spaces replaced by dashes.
Tags are used when indexing the products for search. It's advised to set tags (keywords) so that customers can easily find the products they are searching for.
`expressCart` uses a MongoDB for storing all the data. Setting of the database connection string is done through the `/config/settings.json` file. There are two properties relating to the database connection:
Note: The `databaseConnectionString` property requires a full connection string. You may need to add authentication parameters to your connection string.
> For a good and reasonably priced MongoDB Host, we recommend [mLab](https://mlab.com).
All settings are managed from the admin panel ([http://127.0.0.1:1111/admin](http://127.0.0.1:1111/admin)) except the Payment gateway and database settings.
These values are used for search engine optimization (SEO) purposes. They will be used as the title and description when your website is listed in Google and other search engines.
The `Cart name` is also used if there is no logo set.
##### Cart image/logo
Generally you would place your logo into the `/uploads` folder. You would then add the value `/uploads/mylogo.png` to the `Cart image/logo` setting value.
##### Cart URL
This value is vital for your cart to work. Set this value to your domain name/URL which customers will access your website. This value is used in returning from Paypal
payments and the sitemap for search engine indexing.
##### Cart Email
This email is used for any email receipts which are sent by your website.
##### Free shipping threshold
expressCart allows for the addition of a free shipping threshold. The cart will remove the shipping costs once the order has exceeded the `Free shipping threshold`
value. If the value of the cart is beneath the `Free shipping threshold`, the cart will add the `Flat shipping rate` to the total amount.
##### Payment Gateway
This determines which payment gateway to use. You will also need to configure your payment gateway configuration file here: `/config/<gateway_name>.json`
##### Currency symbol
Set this value to your chosen currency symbol. Eg: $, £, €.
##### Themes
Themes are a set of handlebars views and a stylesheet file. See `Cloth` theme as example.
You can set the number of products per page by changing the `Products per page` value to a whole number of your choice. You may want to ensure
the number of products per page matches up with the `Products per row` value. Eg: if you have the `Products per row` value set to 3, you may want
to ensure the `Products per page` is a multiple of 3 for the best look.
##### Number of Products per row
This is the number of products displayed per row on your website. You can select anywhere up to 4 `Products per row`.
##### Menu enabled
Enables/disable the menu setup in `/admin/settings/menu`.
##### Menu header
This is the text which will be displayed at the top of your menu.
##### Menu position
You can set position where your menu will be displayed. Setting the value to `side` will position the menu to the left of your products, setting the value to `top`
will create a 'breadcrumb' menu at the top of the page
##### Paypal (Payments)
The Paypal config file is located: `/config/paypal.json`. A example Paypal settings file is provided:
Although `expressCart` is a search based shopping cart, you can also group your products into categories using tags. You can then setup menu Items to "filter" based on
keywords (tags) to make it easier for your customers.
Setting of menu items is done via `/admin/settings/menu`.
To add a new menu item to filter products, you will set the menu text using the `Menu` field and setting the keyword to filter is using the `link` field.
To add a new menu item to link to a static page, you will set the menu text using the `Menu` field and set the static page URL using the `link` field. Eg:
An `About` page would be set. Menu = 'About Us', Link = 'about`
You can re-order menu items by clicking and dragging the arrows icon and placing the menu item in desired position.
## Static pages
You may want to create a static page to show contact details, about us, shipping information etc.
New static pages are setup via `/admin/settings/pages`.
I'm looking for contributors of any kind. I'm working on turning the admin panel into something more modern and using Vue.js. The frontend part of the website will always be a normal webapp with no SPA frameworks as I believe eCommerce apps should have SEO as top priority.
Contributing payment providers and themes would be much appreciated. Payment providers are added by simply adding the payment provider file to `/routes/payments/providerName.js`, then adding the route to the `app.js` file by adding `const providerName = require('./routes/payments/{providerName}');` and mounting the route `app.use('/providerName', providerName);`.
If you see current code which could be enhanced (note: parts of the code is quite old but new to Github) you are welcome to submit a PR.