- {requestType}
+ {displayName}
[
@@ -77,7 +77,7 @@ const PinPopup = ({
export default PinPopup;
PinPopup.propTypes = {
- requestType: PropTypes.string,
+ displayName: PropTypes.string,
color: PropTypes.string,
abbrev: PropTypes.string,
address: PropTypes.string,
@@ -89,7 +89,7 @@ PinPopup.propTypes = {
};
PinPopup.defaultProps = {
- requestType: undefined,
+ displayName: undefined,
color: 'black',
abbrev: undefined,
address: undefined,
diff --git a/src/components/Visualizations/Frequency.jsx b/src/components/Visualizations/Frequency.jsx
index 104a8f4b9..8da2ac6e2 100644
--- a/src/components/Visualizations/Frequency.jsx
+++ b/src/components/Visualizations/Frequency.jsx
@@ -15,7 +15,7 @@ const Frequency = ({
const chartData = {
labels: bins.slice(0, -1).map(bin => moment(bin).format('MMM D')),
datasets: Object.keys(counts).map(key => {
- const requestType = REQUEST_TYPES.find(t => t.type === key);
+ const requestType = REQUEST_TYPES[key];
return {
data: counts[key],
label: requestType?.abbrev,
diff --git a/src/components/Visualizations/Legend.jsx b/src/components/Visualizations/Legend.jsx
index befe715fc..8813f93a9 100644
--- a/src/components/Visualizations/Legend.jsx
+++ b/src/components/Visualizations/Legend.jsx
@@ -6,7 +6,11 @@ import { REQUEST_TYPES } from '@components/common/CONSTANTS';
const Legend = ({
requestTypes,
}) => {
- const selectedTypes = REQUEST_TYPES.filter(el => requestTypes[el.type]);
+ const selectedTypes = (
+ Object.keys(requestTypes)
+ .filter(type => type !== 'All' && requestTypes[type])
+ .map(type => REQUEST_TYPES[type])
+ );
return (
@@ -14,13 +18,13 @@ const Legend = ({
{
selectedTypes.length > 0
- ? selectedTypes.map(({ type, color, abbrev }) => (
+ ? selectedTypes.map(({ displayName, color, abbrev }) => (
- { type }
+ { displayName }
{' '}
[
{abbrev}
diff --git a/src/components/Visualizations/TimeToClose.jsx b/src/components/Visualizations/TimeToClose.jsx
index f149ce713..812bd72c1 100644
--- a/src/components/Visualizations/TimeToClose.jsx
+++ b/src/components/Visualizations/TimeToClose.jsx
@@ -10,7 +10,7 @@ const TimeToClose = ({
// // DATA ////
const boxes = Object.keys(timeToClose).map(key => {
- const requestType = REQUEST_TYPES.find(t => t.type === key);
+ const requestType = REQUEST_TYPES[key];
return {
abbrev: requestType?.abbrev,
color: requestType?.color,
diff --git a/src/components/Visualizations/TotalRequests.jsx b/src/components/Visualizations/TotalRequests.jsx
index e2966d2ea..cfc9271af 100644
--- a/src/components/Visualizations/TotalRequests.jsx
+++ b/src/components/Visualizations/TotalRequests.jsx
@@ -15,7 +15,7 @@ const TotalRequests = ({
const chartData = {
labels: bins.slice(0, -1).map(bin => moment(bin).format('MMM D')),
datasets: Object.keys(counts).map(key => {
- const requestType = REQUEST_TYPES.find(t => t.type === key);
+ const requestType = REQUEST_TYPES[key];
return {
data: counts[key],
label: requestType?.abbrev,
diff --git a/src/components/Visualizations/TypeOfRequest.jsx b/src/components/Visualizations/TypeOfRequest.jsx
index 96240887c..bf1ecbf20 100644
--- a/src/components/Visualizations/TypeOfRequest.jsx
+++ b/src/components/Visualizations/TypeOfRequest.jsx
@@ -8,9 +8,9 @@ const TypeOfRequest = ({
typeCounts,
}) => {
const sectors = Object.keys(typeCounts).map(key => ({
- label: key,
+ label: REQUEST_TYPES[key]?.displayName,
value: typeCounts[key],
- color: REQUEST_TYPES.find(t => t.type === key)?.color,
+ color: REQUEST_TYPES[key]?.color,
}));
return (
diff --git a/src/components/about/About.jsx b/src/components/about/About.jsx
new file mode 100644
index 000000000..8611bec13
--- /dev/null
+++ b/src/components/about/About.jsx
@@ -0,0 +1,19 @@
+import React from 'react';
+import { Link } from 'react-router-dom';
+import Button from '@components/common/Button';
+import HeroImage from './HeroImage';
+import WhatIs311Data from './WhatIs311Data';
+import HowItWorks from './HowItWorks';
+
+const About = () => (
+
+
+
+
+
+
+
+
+);
+
+export default About;
diff --git a/src/components/about/HeroImage.jsx b/src/components/about/HeroImage.jsx
new file mode 100644
index 000000000..8af5ece8b
--- /dev/null
+++ b/src/components/about/HeroImage.jsx
@@ -0,0 +1,13 @@
+import React from 'react';
+
+const HeroImage = () => (
+
+
+ About
+ 311
+ DATA
+
+
+);
+
+export default HeroImage;
diff --git a/src/components/about/HowItWorks.jsx b/src/components/about/HowItWorks.jsx
new file mode 100644
index 000000000..d58d0c383
--- /dev/null
+++ b/src/components/about/HowItWorks.jsx
@@ -0,0 +1,32 @@
+import React from 'react';
+import mobile from '@assets/mobile.svg';
+import dataserver from '@assets/dataserver.svg';
+import growth from '@assets/growth.svg';
+import datavisualization from '@assets/datavisualization.svg';
+
+const HowItWorks = () => (
+
+
How It Works
+
+
+
+
+
+
Community members post reports via the City's easy-to-use mobile application.
+
+ Reports are consolidated and entered into a central database and requests are
+ assigned to the appropriate department to resolve.
+
+
+ Our site draws data from the City’s database to create easy-to-view visualizations and
+ files to export at the neighborhood level.
+
+
+ Communities are empowered and equipped to identify areas of improvement to uplift and
+ thrive.
+
+
+
+);
+
+export default HowItWorks;
diff --git a/src/components/about/WhatIs311Data.jsx b/src/components/about/WhatIs311Data.jsx
new file mode 100644
index 000000000..4d7b6a99c
--- /dev/null
+++ b/src/components/about/WhatIs311Data.jsx
@@ -0,0 +1,34 @@
+import React from 'react';
+
+const WhatIs311Data = () => (
+
+
What is 311 Data?
+
+ Each day, residents of the City of LA submit thousands of requests to deal with issues
+ such as illegal dumping and homeless encampments. These requests are received by the
+ relevant agencies, such as the Police, Building and Safety, or Department of Transportation.
+ The agency responds to the request, addresses it, and then closes it when resolved. The data
+ associated with some of these requests is available online, but is difficult to make
+ actionable at the neighborhood level.
+
+
+ That’s where this site comes in.
+ {' '}
+ EmpowerLA
+ {' '}
+ has partnered with
+ {' '}
+ Hack For LA
+ {' '}
+ to create the
+ {' '}
+ 311 Data project
+ {' '}
+ to empower local residents and Neighborhood Councils to make informed decisions about how to
+ improve their communities using an intuitive app. We make navigating the wealth of 311 data
+ easier using an open source app built and maintained by volunteers throughout our community.
+
+
+);
+
+export default WhatIs311Data;
diff --git a/src/components/common/CONSTANTS.js b/src/components/common/CONSTANTS.js
index 82b7d2b6f..263ff9855 100644
--- a/src/components/common/CONSTANTS.js
+++ b/src/components/common/CONSTANTS.js
@@ -1,91 +1,62 @@
export default {};
-export const YEARS = [
- '2015',
- '2016',
- '2017',
- '2018',
- '2019',
-];
-
-export const MONTHS = [
- 'January',
- 'February',
- 'March',
- 'April',
- 'May',
- 'June',
- 'July',
- 'August',
- 'September',
- 'October',
- 'November',
- 'December',
-];
-
-export const REQUEST_TYPES = [
- {
- type: 'Dead Animal',
- fullType: 'Dead Animal Removal',
+export const REQUEST_TYPES = {
+ 'Dead Animal Removal': {
+ displayName: 'Dead Animal',
abbrev: 'DAN',
color: '#4FEFEF',
},
- {
- type: 'Homeless Encampment',
+ 'Homeless Encampment': {
+ displayName: 'Homeless Encampment',
abbrev: 'HLE',
color: '#ECB800',
},
- {
- type: 'Single Streetlight',
- fullType: 'Single Streetlight Issue',
+ 'Single Streetlight Issue': {
+ displayName: 'Single Streetlight',
abbrev: 'SSL',
color: '#AD7B56',
},
- {
- type: 'Multiple Streetlight',
- fullType: 'Multiple Streetlight Issue',
+ 'Multiple Streetlight Issue': {
+ displayName: 'Multiple Streetlight',
abbrev: 'MSL',
color: '#F7ADAD',
},
- {
- type: 'Feedback',
+ Feedback: {
+ displayName: 'Feedback',
abbrev: 'FBK',
color: '#FFE6B7',
},
- {
- type: 'Bulky Items',
+ 'Bulky Items': {
+ displayName: 'Bulky Items',
abbrev: 'BLK',
color: '#FF0000',
},
- {
- type: 'E-Waste',
- fullType: 'Electronic Waste',
+ 'Electronic Waste': {
+ displayName: 'E-Waste',
abbrev: 'EWT',
color: '#DDEC9F',
},
- {
- type: 'Metal/Household Appliances',
+ 'Metal/Household Appliances': {
+ displayName: 'Metal/Household Appliances',
abbrev: 'MHA',
color: '#B8D0FF',
},
- {
- type: 'Graffiti',
- fullType: 'Graffiti Removal',
+ 'Graffiti Removal': {
+ displayName: 'Graffiti',
abbrev: 'GFT',
color: '#2368D0',
},
- {
- type: 'Illegal Dumping',
- fullType: 'Illegal Dumping Pickup',
+ 'Illegal Dumping Pickup': {
+ displayName: 'Illegal Dumping',
abbrev: 'ILD',
color: '#6A8011',
},
- {
- type: 'Other',
+ Other: {
+ displayName: 'Other',
abbrev: 'OTH',
color: '#6D7C93',
},
-];
+};
export const REQUEST_SOURCES = [
{
@@ -114,20 +85,6 @@ export const REQUEST_SOURCES = [
},
];
-export const REQUESTS = [
- 'Bulky Items',
- 'Dead Animal Removal',
- 'Electronic Waste',
- 'Graffiti Removal',
- 'Homeless Encampment',
- 'Illegal Dumping Pickup',
- 'Metal/Household Appliances',
- 'Single Streetlight Issue',
- 'Multiple Streetlight Issue',
- 'Report Water Waste',
- 'Other',
-];
-
export const COUNCILS = [
'ARLETA NC',
'ARROYO SECO NC',
diff --git a/src/components/contact/Contact.jsx b/src/components/contact/Contact.jsx
new file mode 100644
index 000000000..8244e52a0
--- /dev/null
+++ b/src/components/contact/Contact.jsx
@@ -0,0 +1,9 @@
+import React from 'react';
+
+const Contact = () => (
+
+ Contact
+
+);
+
+export default Contact;
diff --git a/src/components/main/body/Body.jsx b/src/components/main/body/Body.jsx
index 5f57857d1..1f178217f 100644
--- a/src/components/main/body/Body.jsx
+++ b/src/components/main/body/Body.jsx
@@ -13,17 +13,15 @@ const Body = ({
openErrorModal,
error,
}) => (
-
+
-
-
-
-
- }
- />
-
+
+
+
+
}
+ />
);
diff --git a/src/components/main/footer/Footer.jsx b/src/components/main/footer/Footer.jsx
index 6d0accdeb..f1edc2a87 100644
--- a/src/components/main/footer/Footer.jsx
+++ b/src/components/main/footer/Footer.jsx
@@ -1,14 +1,15 @@
import React from 'react';
import { connect } from 'react-redux';
+import { Switch, Route } from 'react-router-dom';
import propTypes from 'proptypes';
import moment from 'moment';
+import StaticFooter from './StaticFooter';
import COLORS from '../../../styles/COLORS';
const footerTextStyle = {
color: COLORS.BACKGROUND,
fontWeight: 'bold',
- width: '100vw',
};
const Footer = ({
@@ -25,14 +26,19 @@ const Footer = ({
zIndex: '20000',
}}
>
-
-
-
- Data Updated Through:
-
- {lastUpdated && moment(1000 * lastUpdated).format('MMMM Do YYYY, h:mm:ss a')}
-
-
+
+
+
+
+
+
+ Data Updated Through:
+
+ {lastUpdated && moment(1000 * lastUpdated).format('MMMM Do YYYY, h:mm:ss a')}
+
+
+
+
);
diff --git a/src/components/main/footer/StaticFooter.jsx b/src/components/main/footer/StaticFooter.jsx
new file mode 100644
index 000000000..b29184096
--- /dev/null
+++ b/src/components/main/footer/StaticFooter.jsx
@@ -0,0 +1,23 @@
+import React from 'react';
+
+const StaticFooter = () => (
+ <>
+
+ ©2020 311 Data
+ |
+ All Rights Reserved
+ |
+ Powered by
+ EmpowerLA
+
+
+ {/* **** NEED TO REPLACE HREF WITH VALID LINK WHEN AVAILABLE **** */}
+
Terms & Conditions
+ |
+ {/* **** NEED TO REPLACE HREF WITH VALID LINK WHEN AVAILABLE **** */}
+
Privacy Policy
+
+ >
+);
+
+export default StaticFooter;
diff --git a/src/components/main/header/Header.jsx b/src/components/main/header/Header.jsx
index d760cb304..4ff27c123 100644
--- a/src/components/main/header/Header.jsx
+++ b/src/components/main/header/Header.jsx
@@ -1,21 +1,18 @@
import React from 'react';
-
+import { Link } from 'react-router-dom';
import COLORS from '../../../styles/COLORS';
const Header = () => {
const cta2Style = {
color: COLORS.BRAND.CTA2,
- fontWeight: 'bold',
};
const backgroundStyle = {
color: COLORS.BACKGROUND,
- fontWeight: 'bold',
};
const cta1Style = {
color: COLORS.BRAND.CTA1,
- fontWeight: 'bold',
};
return (
@@ -23,37 +20,32 @@ const Header = () => {
className="navbar"
role="navigation"
aria-label="main navigation"
- style={{
- background: COLORS.BRAND.MAIN,
- height: '60px',
- boxShadow: '0 2px 4px rgba(0, 0, 0, 0.5)',
- // Really high z-index here to ensure Header is on top of modal
- zIndex: '20000',
- }}
>
diff --git a/src/components/main/menu/Menu.jsx b/src/components/main/menu/Menu.jsx
index 86cc6d306..2f7461986 100644
--- a/src/components/main/menu/Menu.jsx
+++ b/src/components/main/menu/Menu.jsx
@@ -5,6 +5,7 @@ import React from 'react';
import PropTypes from 'proptypes';
import { connect } from 'react-redux';
import clx from 'classnames';
+import { Switch, Route } from 'react-router-dom';
import {
toggleMenu as reduxToggleMenu,
@@ -52,11 +53,20 @@ const Menu = ({
/>
-
Filters
-
-
-
-
+
+
+ Comparison Tool
+
+
+
+
+ Filters
+
+
+
+
+
+
);
diff --git a/src/components/main/menu/RequestTypeSelector.jsx b/src/components/main/menu/RequestTypeSelector.jsx
index 58c901bd1..a672c854c 100644
--- a/src/components/main/menu/RequestTypeSelector.jsx
+++ b/src/components/main/menu/RequestTypeSelector.jsx
@@ -25,18 +25,21 @@ const checkboxStyle = {
paddingLeft: '3px',
};
+const types = Object.keys(REQUEST_TYPES);
+
const midIndex = (list => {
if (list.length / 2 === 0) {
return (list.length / 2);
}
return Math.floor(list.length / 2);
-})(REQUEST_TYPES);
+})(types);
-const leftColumnItems = REQUEST_TYPES.slice(0, midIndex);
-const rightColumnItems = REQUEST_TYPES.slice(midIndex);
+const leftColumnItems = types.slice(0, midIndex);
+const rightColumnItems = types.slice(midIndex);
const RequestItem = ({
type,
+ displayName,
abbrev,
selected,
color,
@@ -66,7 +69,7 @@ const RequestItem = ({
/>
- {`${type} [${abbrev}]`}
+ {`${displayName} [${abbrev}]`}
);
@@ -82,16 +85,20 @@ const RequestTypeSelector = ({
selectType(type);
};
- const renderRequestItems = items => items.map(item => (
-
- ));
+ const renderRequestItems = items => items.map(type => {
+ const item = REQUEST_TYPES[type];
+ return (
+
+ );
+ });
return (
@@ -166,6 +173,7 @@ export default connect(
RequestItem.propTypes = {
type: PropTypes.string,
+ displayName: PropTypes.string,
abbrev: PropTypes.string,
color: PropTypes.string,
selected: PropTypes.bool,
@@ -174,6 +182,7 @@ RequestItem.propTypes = {
RequestItem.defaultProps = {
type: null,
+ displayName: null,
abbrev: null,
color: null,
selected: false,
diff --git a/src/redux/reducers/filters.js b/src/redux/reducers/filters.js
index 04def95c1..6cc48846a 100644
--- a/src/redux/reducers/filters.js
+++ b/src/redux/reducers/filters.js
@@ -1,3 +1,5 @@
+import { REQUEST_TYPES } from '@components/common/CONSTANTS';
+
export const types = {
UPDATE_START_DATE: 'UPDATE_START_DATE',
UPDATE_END_DATE: 'UPDATE_END_DATE',
@@ -35,39 +37,19 @@ export const updateNC = council => ({
payload: council,
});
+// set all types to either true or false
+const allRequestTypes = value => (
+ Object.keys(REQUEST_TYPES).reduce((acc, type) => {
+ acc[type] = value;
+ return acc;
+ }, { All: value })
+);
+
const initialState = {
startDate: null,
endDate: null,
councils: [],
- requestTypes: {
- All: false,
- 'Dead Animal': false,
- 'Homeless Encampment': false,
- 'Single Streetlight': false,
- 'Multiple Streetlight': false,
- 'Bulky Items': false,
- 'E-Waste': false,
- 'Metal/Household Appliances': false,
- 'Illegal Dumping': false,
- Graffiti: false,
- Feedback: false,
- Other: false,
- },
-};
-
-const allRequestTypes = {
- All: true,
- 'Dead Animal': true,
- 'Homeless Encampment': true,
- 'Single Streetlight': true,
- 'Multiple Streetlight': true,
- 'Bulky Items': true,
- 'E-Waste': true,
- 'Metal/Household Appliances': true,
- 'Illegal Dumping': true,
- Graffiti: true,
- Feedback: true,
- Other: true,
+ requestTypes: allRequestTypes(false),
};
export default (state = initialState, action) => {
@@ -96,7 +78,7 @@ export default (state = initialState, action) => {
case types.SELECT_ALL_REQUEST_TYPES:
return {
...state,
- requestTypes: allRequestTypes,
+ requestTypes: allRequestTypes(true),
};
case types.DESELECT_ALL_REQUEST_TYPES:
return {
diff --git a/src/styles/about/_about.scss b/src/styles/about/_about.scss
new file mode 100644
index 000000000..5067cab3b
--- /dev/null
+++ b/src/styles/about/_about.scss
@@ -0,0 +1,19 @@
+.about-311 {
+ position: absolute;
+ top: 62px;
+ bottom: 52px;
+ text-align: center;
+ padding-bottom: 100px;
+ overflow-y: auto;
+
+ #btn-about-311 {
+ background-color: $brand-cta1-color;
+ color: $brand-text-color;
+ font-weight: bold;
+ font-size: 18px;
+ font-family: $brand-heading-family;
+ width: 256px;
+ height: 42px;
+ text-align: center;
+ }
+}
diff --git a/src/styles/about/_heroimage.scss b/src/styles/about/_heroimage.scss
new file mode 100644
index 000000000..7aea15c31
--- /dev/null
+++ b/src/styles/about/_heroimage.scss
@@ -0,0 +1,31 @@
+.about-hero {
+ height: 55vh;
+ background-image: url('../assets/about311hero860-min.png');
+ background-position: center;
+ background-repeat: no-repeat;
+ background-size: cover;
+ position: relative;
+}
+
+.overlay-text {
+ position: absolute;
+ top: 50%;
+ left: 50%;
+ transform: translate(-50%, -50%);
+ text-align: center;
+ font-size: 40px;
+ font-weight: bold;
+ font-family: $brand-heading-family;
+
+ .text-about {
+ color: $brand-bg-color;
+ }
+
+ .text-311 {
+ color: $brand-cta1-color;
+ }
+
+ .text-data {
+ color: $brand-cta2-color;
+ }
+}
diff --git a/src/styles/about/_howitworks.scss b/src/styles/about/_howitworks.scss
new file mode 100644
index 000000000..9675db46a
--- /dev/null
+++ b/src/styles/about/_howitworks.scss
@@ -0,0 +1,21 @@
+.how-it-works{
+ margin: 100px 5em 5em 100px;
+
+ h1 {
+ text-align: center;
+ }
+
+ p {
+ text-align: left;
+ line-height: 19px;
+ }
+
+ .grid-container {
+ margin-top: 50px;
+ display: grid;
+ grid-template-columns: repeat(4, 1fr);
+ grid-row-gap: 20px;
+ grid-column-gap: 75px;
+ justify-items: center;
+ }
+}
diff --git a/src/styles/about/_whatis311data.scss b/src/styles/about/_whatis311data.scss
new file mode 100644
index 000000000..0471b62d7
--- /dev/null
+++ b/src/styles/about/_whatis311data.scss
@@ -0,0 +1,20 @@
+.main-text {
+ margin-top: 48px;
+ margin-left: 5em;
+ margin-right: 5em;
+
+ h1 {
+ text-align: center;
+ }
+
+ p {
+ margin-top: 20px;
+ text-align: left;
+ font-size: 16px;
+ line-height: 19px;
+
+ a {
+ font-weight: bold;
+ }
+ }
+}
diff --git a/src/styles/main/_header.scss b/src/styles/main/_header.scss
new file mode 100644
index 000000000..5cb12fca7
--- /dev/null
+++ b/src/styles/main/_header.scss
@@ -0,0 +1,17 @@
+.navbar {
+ font-family: $brand-heading-family;
+ font-weight: bold;
+ height: '60px';
+ box-shadow: '0 2px 4px rgba(0, 0, 0, 0.5)';
+ z-index: '20000';
+ background-color: $brand-heading-color;
+
+ .navbar-brand {
+ font-size: 20px;
+ }
+
+ .navbar-menu .navbar-item {
+ font-size: 16px;
+ margin-right: 46px;
+ }
+}
diff --git a/src/styles/main/_map.scss b/src/styles/main/_map.scss
index 1505e2c67..f1c8c422d 100644
--- a/src/styles/main/_map.scss
+++ b/src/styles/main/_map.scss
@@ -14,3 +14,5 @@
height: auto;
}
}
+
+@import '~react-leaflet-markercluster/dist/styles.min.css';
diff --git a/src/styles/main/_pinmap.scss b/src/styles/main/_pinmap.scss
deleted file mode 100644
index 40c59d950..000000000
--- a/src/styles/main/_pinmap.scss
+++ /dev/null
@@ -1 +0,0 @@
-@import '~react-leaflet-markercluster/dist/styles.min.css';
\ No newline at end of file
diff --git a/src/styles/main/_staticfooter.scss b/src/styles/main/_staticfooter.scss
new file mode 100644
index 000000000..f51436427
--- /dev/null
+++ b/src/styles/main/_staticfooter.scss
@@ -0,0 +1,16 @@
+.static-footer {
+ color: $brand-bg-color;
+ font-family: $brand-text-family;
+ font-size: 20px;
+ font-weight: normal;
+ margin-left: 40px;
+ margin-right: 40px;
+
+ .empowerla {
+ font-weight: bold;
+ }
+
+ a {
+ color: $brand-bg-color;
+ }
+}
diff --git a/src/styles/styles.scss b/src/styles/styles.scss
index 854f3f3b2..ef59eaa55 100644
--- a/src/styles/styles.scss
+++ b/src/styles/styles.scss
@@ -4,13 +4,19 @@
@import './bulma';
@import './base';
+@import './main/header';
@import './main/menu';
@import './main/datepicker';
@import './main/tooltip';
@import './main/visualizations';
@import './main/loader';
@import './main/body';
-@import './main/pinmap';
@import './main/pinpopup';
@import './main/export';
@import './main/map';
+@import './main/staticfooter';
+
+@import './about/about';
+@import './about/heroimage';
+@import './about/whatis311data';
+@import './about/howitworks';
diff --git a/webpack.config.js b/webpack.config.js
index aa841a4c6..5bb7a7078 100644
--- a/webpack.config.js
+++ b/webpack.config.js
@@ -15,6 +15,7 @@ module.exports = {
'@components': path.resolve(__dirname, 'src/components'),
'@reducers': path.resolve(__dirname, 'src/redux/reducers'),
'@styles': path.resolve(__dirname, 'src/styles'),
+ '@assets': path.resolve(__dirname, 'src/assets'),
},
},
module: {