diff --git a/.babelrc b/.babelrc
index 40d73dbe4..932edc943 100644
--- a/.babelrc
+++ b/.babelrc
@@ -10,7 +10,9 @@
"transform-class-properties",
// { ...todo, completed: true }
"transform-object-rest-spread",
+ // embeds the react tag name into the component
"transform-react-display-name",
+ // these two together prevent us from defining the helpers in every module
"external-helpers",
"transform-runtime",
// turns `import {sum} from 'lodash'`
diff --git a/.webpackrc.js b/.webpackrc.js
index f3668013e..d571236fa 100644
--- a/.webpackrc.js
+++ b/.webpackrc.js
@@ -41,7 +41,7 @@ const config = {
replace: null,
port: 3000, // for webpack-dev-server
- stats: {},
+ stats: {colors: false},
entry: {
main: ['./src/index.js'],
@@ -64,9 +64,17 @@ const config = {
},
devServer: {
- // If these are enabled, then historyApiFallback doesn't work.
+ // If `info` is enabled, then historyApiFallback doesn't work.
// info: false,
- // stats: 'errors-only',
+ stats: {
+ colors: false,
+ assets: false,
+ version: false,
+ hash: false,
+ timings: false,
+ chunks: false,
+ chunkModules: false,
+ },
contentBase: outputFolder,
// Makes webpack serve /index.html as the response to any request to
diff --git a/README.md b/README.md
index 97b535bb8..7ad1fb74c 100644
--- a/README.md
+++ b/README.md
@@ -3,13 +3,13 @@
[![Build Status](https://travis-ci.org/hawkrives/gobbldygook.svg?branch=master)](https://travis-ci.org/hawkrives/gobbldygook)
[![Code Coverage](https://coveralls.io/repos/hawkrives/gobbldygook/badge.svg?branch=master&service=github)](https://coveralls.io/github/hawkrives/gobbldygook?branch=master)
-This is a course scheduler for students at St. Olaf College. You give it your areas of study (majors, concentrations, degrees), the courses you *have* taken and are *planning* on taking, and it tells you if you can graduate or not.
+This is a course scheduler for students at St. Olaf College. You give it your areas of study (majors, concentrations, degrees), the courses you *have* taken and are *planning* to take, and it tells you if you can graduate or not.
We have a [trello board](https://trello.com/b/cviTwkre) where we track which areas of study we are working on; if you have one in particular that you want us to work on next, let us know by either voting on the Trello card or emailing us!
## Playing
-1. Visit https://stolaf.edu/people/rives/g
+1. Visit https://hawkrives.github.io/gobbldygook
– Gobbldygook currently supports every major browser, except for Safari (so Chrome, Firefox, Internet Explorer 11, and Microsoft Edge). (Addendum: IE support is currently broken. Unsure why. It's on the TODO list.)
– Let's just say that Safari's database support is … a bit lacking.
– On iOS devices, every browser is required to use Safari internally, which means that Chrome, Opera, and Safari on iOS all have the same terrible database support.
@@ -23,7 +23,7 @@ We have a [trello board](https://trello.com/b/cviTwkre) where we track which are
## Hacking
-- Prerequisites: [node.js](https://nodejs.org) and [git](https://git-scm.com).
+- Prerequisites: [node.js, at least v6](https://nodejs.org) and [git](https://git-scm.com).
- `git clone https://github.com/hawkrives/gobbldygook.git`
- `cd gobbldygook`
- `npm install`
@@ -33,7 +33,7 @@ You can see additional commands by executing `npm run` with no arguments.
## Support
-You can file an issue via [github](https://github.com/hawkrives/gobbldygook/issues/), or you can send us an email, if you look us up on Stalkernet.
+You can file an issue via [github](https://github.com/hawkrives/gobbldygook/issues/), or you can send an email to the email listed on my Github profile.
## Credits
@@ -41,18 +41,13 @@ You can file an issue via [github](https://github.com/hawkrives/gobbldygook/issu
- Final project for Software Design, @hawkrives and @xandrasings
- So much of the internet.
- Teammate for January 2015: @drewvolz
-- Professor Hanson, for agreeing to be our advisor over Interim
+- Professor Hanson, for agreeing to be our advisor over Interim 2014
-## Screenshot
+## Screenshots
### 2015 – September
![Screenshot, september 2015](./screenshots/september-2015.png)
### 2014 - September
![Screenshot, september 2014](./screenshots/september-2014.png)
-
-
-## Misc.
-
-- The svg sprite in /src/static was generated by `svg-sprite-generate -d src/icons/ionicons/ -o src/static/ionicons.svg`
diff --git a/package.json b/package.json
index 6d075ba46..960652dc1 100644
--- a/package.json
+++ b/package.json
@@ -9,7 +9,7 @@
"author": "Hawken MacKay Rives",
"license": "MIT",
"scripts": {
- "build": "cross-env NODE_ENV=production webpack --config .webpackrc.js --bail --production --progress",
+ "build": "npm run copy && cross-env NODE_ENV=production webpack --config .webpackrc.js --bail --production --progress",
"build-ci": "npm run build -- --no-progress",
"build-dev": "cross-env NODE_ENV=development webpack --config .webpackrc.js --bail --progress --devtool=source-map",
"build-peg": "pegjs < src/area-tools/parse-hanson-string.pegjs | ./scripts/babel-stdin.js | js-beautify -f - --end-with-newline --indent-with-tabs > src/area-tools/parse-hanson-string.js",
@@ -18,11 +18,9 @@
"coveralls": "nyc report --reporter=text-lcov | coveralls",
"deploy": "bash scripts/deploy.sh",
"lint": "eslint *.js bin/ scripts/ src/ test/",
- "prebuild": "npm run copy",
- "prestart": "npm run copy",
"profile": "cat profile/README.md",
"serve-production": "cross-env NODE_ENV=production webpack-dev-server --config .webpackrc.js --progress",
- "start": "cross-env NODE_ENV=development webpack-dev-server --config .webpackrc.js --progress",
+ "start": "npm run copy && cross-env NODE_ENV=development webpack-dev-server --config .webpackrc.js --progress",
"stats": "cross-env NODE_ENV=production npm run stats-base",
"stats-base": "webpack --config .webpackrc.js --bail --profile --json > stats.json && echo 'open http://webpack.github.io/analyse/'",
"stats-dev": "cross-env NODE_ENV=development npm run stats-base",
diff --git a/src/containers/app.js b/src/containers/app.js
index 0f7590736..8bbd93b61 100644
--- a/src/containers/app.js
+++ b/src/containers/app.js
@@ -26,7 +26,7 @@ App.propTypes = {
overlay: PropTypes.node,
}
-import StudentPicker from '../routes/app_content_student-picker/containers/student-picker'
+import StudentPicker from '../routes/index/containers/student-picker'
App.defaultProps = {
content: ,
}
diff --git a/src/index.js b/src/index.js
index b8e486155..f37e9f9bf 100644
--- a/src/index.js
+++ b/src/index.js
@@ -1,5 +1,3 @@
-/* globals module */
-
// Set up the default promise implementation as Bluebird
import Bluebird from 'bluebird'
Bluebird.config({
diff --git a/src/routes/app_content_student/containers/blank.js b/src/routes/app_content_student/containers/blank.js
deleted file mode 100644
index b6ecd8b88..000000000
--- a/src/routes/app_content_student/containers/blank.js
+++ /dev/null
@@ -1,3 +0,0 @@
-import React from 'react'
-
-export default () =>
Hi
diff --git a/src/routes/app_content_student/index.js b/src/routes/app_content_student/index.js
deleted file mode 100644
index 93365eb30..000000000
--- a/src/routes/app_content_student/index.js
+++ /dev/null
@@ -1,25 +0,0 @@
-export default {
- path: 's/:studentId',
-
- getIndexRoute(location, cb) {
- require.ensure([], () => {
- cb(null, require('../student_content_course-table').default)
- }, 'student.index')
- },
-
- getChildRoutes(state, cb) {
- require.ensure([], () => {
- cb(null, [
- require('../student_overlay_share').default, // share
- require('../student_sidebar_search').default, // search
- require('../student_content_semester-detail').default, // :year/:term
- ])
- }, 'student.routes')
- },
-
- getComponents(location, cb) {
- require.ensure([], () => {
- cb(null, {content: require('./containers/student').default})
- }, 'student.components')
- },
-}
diff --git a/src/routes/app_content_new-student/components/screen-toolbar.js b/src/routes/create/components/screen-toolbar.js
similarity index 79%
rename from src/routes/app_content_new-student/components/screen-toolbar.js
rename to src/routes/create/components/screen-toolbar.js
index 0940459c0..8c8f5a12f 100644
--- a/src/routes/app_content_new-student/components/screen-toolbar.js
+++ b/src/routes/create/components/screen-toolbar.js
@@ -1,7 +1,7 @@
import React, {PropTypes} from 'react'
-import Button from '../../../components/button'
-import Toolbar from '../../../components/toolbar'
+import Button from 'src/components/button'
+import Toolbar from 'src/components/toolbar'
export default function ScreenToolbar({onNext, onBack}) {
return (
diff --git a/src/routes/app_content_new-student/containers/new-student.js b/src/routes/create/containers/new-student.js
similarity index 100%
rename from src/routes/app_content_new-student/containers/new-student.js
rename to src/routes/create/containers/new-student.js
diff --git a/src/routes/app_content_new-student/containers/new-student.scss b/src/routes/create/containers/new-student.scss
similarity index 100%
rename from src/routes/app_content_new-student/containers/new-student.scss
rename to src/routes/create/containers/new-student.scss
diff --git a/src/routes/app_content_new-student/index.js b/src/routes/create/index.js
similarity index 56%
rename from src/routes/app_content_new-student/index.js
rename to src/routes/create/index.js
index c34c45d66..ba2cac66d 100644
--- a/src/routes/app_content_new-student/index.js
+++ b/src/routes/create/index.js
@@ -6,14 +6,12 @@ export default {
}, 'new-student.index')
},
getChildRoutes(location, cb) {
- require.ensure([], () => {
- cb(null, [
- require('./routes/sis').default, // create/sis
- require('./routes/manual').default, // create/manual
- require('./routes/drive').default, // create/drive
- require('./routes/upload').default, // create/upload
- ])
- }, 'new-student.routes')
+ cb(null, [
+ require('./routes/sis').default, // create/sis
+ require('./routes/manual').default, // create/manual
+ require('./routes/drive').default, // create/drive
+ require('./routes/upload').default, // create/upload
+ ])
},
getComponents(location, cb) {
require.ensure([], () => {
diff --git a/src/routes/app_content_new-student/methods.js b/src/routes/create/methods.js
similarity index 100%
rename from src/routes/app_content_new-student/methods.js
rename to src/routes/create/methods.js
diff --git a/src/routes/app_content_new-student/routes/drive/drive.js b/src/routes/create/routes/drive/drive.js
similarity index 100%
rename from src/routes/app_content_new-student/routes/drive/drive.js
rename to src/routes/create/routes/drive/drive.js
diff --git a/src/routes/app_content_new-student/routes/drive/index.js b/src/routes/create/routes/drive/index.js
similarity index 100%
rename from src/routes/app_content_new-student/routes/drive/index.js
rename to src/routes/create/routes/drive/index.js
diff --git a/src/routes/app_content_new-student/routes/manual/index.js b/src/routes/create/routes/manual/index.js
similarity index 100%
rename from src/routes/app_content_new-student/routes/manual/index.js
rename to src/routes/create/routes/manual/index.js
diff --git a/src/routes/app_content_new-student/routes/manual/manual.js b/src/routes/create/routes/manual/manual.js
similarity index 96%
rename from src/routes/app_content_new-student/routes/manual/manual.js
rename to src/routes/create/routes/manual/manual.js
index 3b561eb4f..1ffa4c427 100644
--- a/src/routes/app_content_new-student/routes/manual/manual.js
+++ b/src/routes/create/routes/manual/manual.js
@@ -1,5 +1,5 @@
import React, {Component, PropTypes} from 'react'
-import Button from '../../../../components/button'
+import Button from 'src/components/button'
import cx from 'classnames'
import Autosize from 'react-input-autosize'
import Select from 'react-select'
@@ -8,8 +8,8 @@ import withRouter from 'react-router/lib/withRouter'
import map from 'lodash/map'
import filter from 'lodash/filter'
import 'react-select/dist/react-select.css'
-import { initStudent } from '../../../../redux/students/actions/init-student'
-import filterAreaList from '../../../../helpers/filter-area-list'
+import { initStudent } from 'src/redux/students/actions/init-student'
+import filterAreaList from 'src/helpers/filter-area-list'
import './manual.scss'
diff --git a/src/routes/app_content_new-student/routes/manual/manual.scss b/src/routes/create/routes/manual/manual.scss
similarity index 92%
rename from src/routes/app_content_new-student/routes/manual/manual.scss
rename to src/routes/create/routes/manual/manual.scss
index 7c4955a67..4e4072229 100644
--- a/src/routes/app_content_new-student/routes/manual/manual.scss
+++ b/src/routes/create/routes/manual/manual.scss
@@ -1,4 +1,4 @@
-@import '../../../../styles/variables.scss';
+@import 'src/styles/variables.scss';
.manual .autosize-input > input {
border: 0;
diff --git a/src/routes/app_content_new-student/routes/sis/index.js b/src/routes/create/routes/sis/index.js
similarity index 100%
rename from src/routes/app_content_new-student/routes/sis/index.js
rename to src/routes/create/routes/sis/index.js
diff --git a/src/routes/app_content_new-student/routes/sis/sis-import.js b/src/routes/create/routes/sis/sis-import.js
similarity index 88%
rename from src/routes/app_content_new-student/routes/sis/sis-import.js
rename to src/routes/create/routes/sis/sis-import.js
index a341fe354..8cc153697 100644
--- a/src/routes/app_content_new-student/routes/sis/sis-import.js
+++ b/src/routes/create/routes/sis/sis-import.js
@@ -1,15 +1,15 @@
import React, {Component, PropTypes} from 'react'
import serializeError from 'serialize-error'
-import Button from '../../../../components/button'
-import getStudentInfo, {checkIfLoggedIn} from '../../../../helpers/import-student'
-import convertStudent from '../../../../helpers/convert-imported-student'
-import StudentSummary from '../../../../routes/app_content_student/components/student-summary'
+import Button from 'src/components/button'
+import getStudentInfo, {checkIfLoggedIn} from 'src/helpers/import-student'
+import convertStudent from 'src/helpers/convert-imported-student'
+import StudentSummary from 'src/routes/student/components/student-summary'
import map from 'lodash/map'
import groupBy from 'lodash/groupBy'
import sortBy from 'lodash/sortBy'
-import semesterName from '../../../../helpers/semester-name'
+import semesterName from 'src/helpers/semester-name'
import { RadioGroup, Radio } from 'react-radio-group'
-import { initStudent } from '../../../../redux/students/actions/init-student'
+import { initStudent } from 'src/redux/students/actions/init-student'
import { connect } from 'react-redux'
import withRouter from 'react-router/lib/withRouter'
diff --git a/src/routes/app_content_new-student/routes/upload/index.js b/src/routes/create/routes/upload/index.js
similarity index 100%
rename from src/routes/app_content_new-student/routes/upload/index.js
rename to src/routes/create/routes/upload/index.js
diff --git a/src/routes/app_content_new-student/routes/upload/upload-file.js b/src/routes/create/routes/upload/upload-file.js
similarity index 91%
rename from src/routes/app_content_new-student/routes/upload/upload-file.js
rename to src/routes/create/routes/upload/upload-file.js
index 74dab86b1..94e83c307 100644
--- a/src/routes/app_content_new-student/routes/upload/upload-file.js
+++ b/src/routes/create/routes/upload/upload-file.js
@@ -1,10 +1,11 @@
import React, {Component, PropTypes} from 'react'
import DropZone from 'react-dropzone'
import map from 'lodash/map'
-import Button from '../../../../components/button'
-import List from '../../../../components/list'
-import StudentSummary from '../../../../routes/app_content_student/components/student-summary'
-import { initStudent } from '../../../../redux/students/actions/init-student'
+import Button from 'src/components/button'
+import List from 'src/components/list'
+// TODO: Move this component to src/components
+import StudentSummary from 'src/routes/student/components/student-summary'
+import { initStudent } from 'src/redux/students/actions/init-student'
import withRouter from 'react-router/lib/withRouter'
import { connect } from 'react-redux'
diff --git a/src/routes/app_content_new-student/routes/upload/upload-file.scss b/src/routes/create/routes/upload/upload-file.scss
similarity index 100%
rename from src/routes/app_content_new-student/routes/upload/upload-file.scss
rename to src/routes/create/routes/upload/upload-file.scss
diff --git a/src/routes/app_content_new-student/routes/welcome/index.js b/src/routes/create/routes/welcome/index.js
similarity index 100%
rename from src/routes/app_content_new-student/routes/welcome/index.js
rename to src/routes/create/routes/welcome/index.js
diff --git a/src/routes/app_content_new-student/routes/welcome/welcome.js b/src/routes/create/routes/welcome/welcome.js
similarity index 95%
rename from src/routes/app_content_new-student/routes/welcome/welcome.js
rename to src/routes/create/routes/welcome/welcome.js
index 5cc53547a..871b17723 100644
--- a/src/routes/app_content_new-student/routes/welcome/welcome.js
+++ b/src/routes/create/routes/welcome/welcome.js
@@ -1,5 +1,5 @@
import React from 'react'
-import Button from '../../../../components/button'
+import Button from 'src/components/button'
export default function WelcomeScreen() {
return
diff --git a/src/routes/app_content_degub/components/degub.js b/src/routes/degub/components/degub.js
similarity index 100%
rename from src/routes/app_content_degub/components/degub.js
rename to src/routes/degub/components/degub.js
diff --git a/src/routes/app_content_degub/index.js b/src/routes/degub/index.js
similarity index 100%
rename from src/routes/app_content_degub/index.js
rename to src/routes/degub/index.js
diff --git a/src/routes/app_content_areas/components/area-editor.js b/src/routes/edit-area/components/area-editor.js
similarity index 100%
rename from src/routes/app_content_areas/components/area-editor.js
rename to src/routes/edit-area/components/area-editor.js
diff --git a/src/routes/app_content_areas/components/area-editor.scss b/src/routes/edit-area/components/area-editor.scss
similarity index 100%
rename from src/routes/app_content_areas/components/area-editor.scss
rename to src/routes/edit-area/components/area-editor.scss
diff --git a/src/routes/app_content_areas/components/area-list.js b/src/routes/edit-area/components/area-list.js
similarity index 100%
rename from src/routes/app_content_areas/components/area-list.js
rename to src/routes/edit-area/components/area-list.js
diff --git a/src/routes/app_content_areas/containers/area-editor.js b/src/routes/edit-area/containers/area-editor.js
similarity index 96%
rename from src/routes/app_content_areas/containers/area-editor.js
rename to src/routes/edit-area/containers/area-editor.js
index c8b16b240..aba1ee1d6 100644
--- a/src/routes/app_content_areas/containers/area-editor.js
+++ b/src/routes/edit-area/containers/area-editor.js
@@ -6,9 +6,9 @@ import find from 'lodash/find'
import filter from 'lodash/filter'
import { connect } from 'react-redux'
import { bindActionCreators } from 'redux'
-import { loadAllAreas } from '../../../redux/areas/actions'
+import { loadAllAreas } from 'src/redux/areas/actions'
-import Loading from '../../../components/loading'
+import Loading from 'src/components/loading'
import AreaList from '../components/area-list'
import AreaEditor from '../components/area-editor'
diff --git a/src/routes/app_content_areas/index.js b/src/routes/edit-area/index.js
similarity index 100%
rename from src/routes/app_content_areas/index.js
rename to src/routes/edit-area/index.js
diff --git a/src/routes/index.js b/src/routes/index.js
index cf5e8bf7d..92d7e2117 100644
--- a/src/routes/index.js
+++ b/src/routes/index.js
@@ -1,25 +1,21 @@
export default {
- component: require('../containers/app').default,
+ component: require('src/containers/app').default,
childRoutes: [{
path: '/',
getIndexRoute(location, cb) {
- require.ensure([], () => {
- cb(null, {content: require('./app_content_student-picker').default})
- }, 'app.index')
+ cb(null, {content: require('./index').default})
},
getChildRoutes(state, cb) {
- require.ensure([], () => {
- cb(null, [
- require('./app_content_areas').default, // edit-area
- require('./app_overlay_search').default, // search
- require('./app_content_degub').default, // debug
- require('./app_content_new-student').default, // create
- require('./app_content_student').default, // s/:id
- require('./not_found').default, // anything else
- ])
- }, 'app.routes')
+ cb(null, [
+ require('./edit-area').default, // edit-area
+ require('./degub').default, // degub
+ require('./create').default, // create
+ require('./student').default, // student
+ require('./search').default, // search
+ require('./not-found').default, // anything else
+ ])
},
}],
}
diff --git a/src/routes/app_content_student-picker/components/student-list-item.js b/src/routes/index/components/student-list-item.js
similarity index 86%
rename from src/routes/app_content_student-picker/components/student-list-item.js
rename to src/routes/index/components/student-list-item.js
index 81207c236..4d960c718 100644
--- a/src/routes/app_content_student-picker/components/student-list-item.js
+++ b/src/routes/index/components/student-list-item.js
@@ -3,12 +3,12 @@ import cx from 'classnames'
import Link from 'react-router/lib/Link'
import groupBy from 'lodash/groupBy'
import map from 'lodash/map'
-import interpose from '../../../helpers/interpose'
-import sortStudiesByType from '../../../helpers/sort-studies-by-type'
+import interpose from 'src/helpers/interpose'
+import sortStudiesByType from 'src/helpers/sort-studies-by-type'
-import Button from '../../../components/button'
-import Icon from '../../../components/icon'
-import {iosTrashOutline, iosArrowForward} from '../../../icons/ionicons'
+import Button from 'src/components/button'
+import Icon from 'src/components/icon'
+import {iosTrashOutline, iosArrowForward} from 'src/icons/ionicons'
import './student-list-item.scss'
diff --git a/src/routes/app_content_student-picker/components/student-list-item.scss b/src/routes/index/components/student-list-item.scss
similarity index 95%
rename from src/routes/app_content_student-picker/components/student-list-item.scss
rename to src/routes/index/components/student-list-item.scss
index 7a17889b1..22b61fd47 100644
--- a/src/routes/app_content_student-picker/components/student-list-item.scss
+++ b/src/routes/index/components/student-list-item.scss
@@ -1,5 +1,5 @@
-@import '../../../styles/variables.scss';
-@import '../../../styles/mixins.scss';
+@import 'src/styles/variables.scss';
+@import 'src/styles/mixins.scss';
.student-list-item {
@include link-undecorated();
diff --git a/src/routes/app_content_student-picker/components/student-list.js b/src/routes/index/components/student-list.js
similarity index 96%
rename from src/routes/app_content_student-picker/components/student-list.js
rename to src/routes/index/components/student-list.js
index dbf0c7c3c..a15b36392 100644
--- a/src/routes/app_content_student-picker/components/student-list.js
+++ b/src/routes/index/components/student-list.js
@@ -4,7 +4,7 @@ import map from 'lodash/map'
import sortBy from 'lodash/sortBy'
import fuzzysearch from 'fuzzysearch'
-import List from '../../../components/list'
+import List from 'src/components/list'
import StudentListItem from './student-list-item'
import './student-list.scss'
diff --git a/src/routes/app_content_student-picker/components/student-list.scss b/src/routes/index/components/student-list.scss
similarity index 72%
rename from src/routes/app_content_student-picker/components/student-list.scss
rename to src/routes/index/components/student-list.scss
index 105a934c2..96e35afb1 100644
--- a/src/routes/app_content_student-picker/components/student-list.scss
+++ b/src/routes/index/components/student-list.scss
@@ -1,4 +1,4 @@
-@import '../../../styles/mixins.scss';
+@import 'src/styles/mixins.scss';
.student-list {
@include card();
diff --git a/src/routes/app_content_student-picker/components/student-picker.js b/src/routes/index/components/student-picker.js
similarity index 93%
rename from src/routes/app_content_student-picker/components/student-picker.js
rename to src/routes/index/components/student-picker.js
index a3d411997..f62c774bb 100644
--- a/src/routes/app_content_student-picker/components/student-picker.js
+++ b/src/routes/index/components/student-picker.js
@@ -1,10 +1,10 @@
import React, {PropTypes} from 'react'
import size from 'lodash/size'
-import {androidSearch, funnel, androidApps, androidMenu, androidAdd} from '../../../icons/ionicons'
-import Toolbar from '../../../components/toolbar'
-import Button from '../../../components/button'
-import Icon from '../../../components/icon'
+import {androidSearch, funnel, androidApps, androidMenu, androidAdd} from 'src/icons/ionicons'
+import Toolbar from 'src/components/toolbar'
+import Button from 'src/components/button'
+import Icon from 'src/components/icon'
import StudentList from './student-list'
import './student-picker.scss'
diff --git a/src/routes/app_content_student-picker/components/student-picker.scss b/src/routes/index/components/student-picker.scss
similarity index 93%
rename from src/routes/app_content_student-picker/components/student-picker.scss
rename to src/routes/index/components/student-picker.scss
index a1796dd47..34bbcb456 100644
--- a/src/routes/app_content_student-picker/components/student-picker.scss
+++ b/src/routes/index/components/student-picker.scss
@@ -1,5 +1,5 @@
-@import '../../../styles/variables.scss';
-@import '../../../styles/mixins.scss';
+@import 'src/styles/variables.scss';
+@import 'src/styles/mixins.scss';
.app-title {
margin-top: 3em;
diff --git a/src/routes/app_content_student-picker/containers/student-picker.js b/src/routes/index/containers/student-picker.js
similarity index 91%
rename from src/routes/app_content_student-picker/containers/student-picker.js
rename to src/routes/index/containers/student-picker.js
index cce3df4b3..4ca10cdb7 100644
--- a/src/routes/app_content_student-picker/containers/student-picker.js
+++ b/src/routes/index/containers/student-picker.js
@@ -2,8 +2,8 @@ import React, {Component, PropTypes} from 'react'
import StudentPicker from '../components/student-picker'
import { bindActionCreators } from 'redux'
import { connect } from 'react-redux'
-import { destroyStudent } from '../../../redux/students/actions/destroy-student'
-import { loadStudents } from '../../../redux/students/actions/load-students'
+import { destroyStudent } from 'src/redux/students/actions/destroy-student'
+import { loadStudents } from 'src/redux/students/actions/load-students'
class StudentPickerContainer extends Component {
static propTypes = {
diff --git a/src/routes/app_content_student-picker/index.js b/src/routes/index/index.js
similarity index 100%
rename from src/routes/app_content_student-picker/index.js
rename to src/routes/index/index.js
diff --git a/src/routes/not_found/index.js b/src/routes/not-found/index.js
similarity index 100%
rename from src/routes/not_found/index.js
rename to src/routes/not-found/index.js
diff --git a/src/routes/not_found/not-found.js b/src/routes/not-found/not-found.js
similarity index 100%
rename from src/routes/not_found/not-found.js
rename to src/routes/not-found/not-found.js
diff --git a/src/routes/app_overlay_search/containers/course-searcher-overlay.js b/src/routes/search/containers/course-searcher-overlay.js
similarity index 100%
rename from src/routes/app_overlay_search/containers/course-searcher-overlay.js
rename to src/routes/search/containers/course-searcher-overlay.js
diff --git a/src/routes/app_overlay_search/containers/course-searcher-overlay.scss b/src/routes/search/containers/course-searcher-overlay.scss
similarity index 100%
rename from src/routes/app_overlay_search/containers/course-searcher-overlay.scss
rename to src/routes/search/containers/course-searcher-overlay.scss
diff --git a/src/routes/app_overlay_search/index.js b/src/routes/search/index.js
similarity index 100%
rename from src/routes/app_overlay_search/index.js
rename to src/routes/search/index.js
diff --git a/src/routes/app_content_student/components/area-of-study-group.js b/src/routes/student/components/area-of-study-group.js
similarity index 92%
rename from src/routes/app_content_student/components/area-of-study-group.js
rename to src/routes/student/components/area-of-study-group.js
index 6cc3d5ea6..d8a8f6eb3 100644
--- a/src/routes/app_content_student/components/area-of-study-group.js
+++ b/src/routes/student/components/area-of-study-group.js
@@ -1,13 +1,13 @@
import React, {PropTypes} from 'react'
import map from 'lodash/map'
-import pluralizeArea from '../../../area-tools/pluralize-area'
+import pluralizeArea from 'src/area-tools/pluralize-area'
import capitalize from 'lodash/capitalize'
-import * as areaTypeConstants from '../../../models/area-types'
+import * as areaTypeConstants from 'src/models/area-types'
import values from 'lodash/values'
import AreaOfStudy from './area-of-study'
import AreaPicker from './area-picker'
-import Button from '../../../components/button'
+import Button from 'src/components/button'
import './area-of-study-group.scss'
diff --git a/src/routes/app_content_student/components/area-of-study-group.scss b/src/routes/student/components/area-of-study-group.scss
similarity index 89%
rename from src/routes/app_content_student/components/area-of-study-group.scss
rename to src/routes/student/components/area-of-study-group.scss
index 7df825ae4..76e5c8b31 100644
--- a/src/routes/app_content_student/components/area-of-study-group.scss
+++ b/src/routes/student/components/area-of-study-group.scss
@@ -1,5 +1,5 @@
-@import '../../../styles/variables.scss';
-@import '../../../styles/mixins.scss';
+@import 'src/styles/variables.scss';
+@import 'src/styles/mixins.scss';
.area-of-study-group {
@include card();
diff --git a/src/routes/app_content_student/components/area-of-study-sidebar.js b/src/routes/student/components/area-of-study-sidebar.js
similarity index 95%
rename from src/routes/app_content_student/components/area-of-study-sidebar.js
rename to src/routes/student/components/area-of-study-sidebar.js
index bcf1d3938..47fbf22cf 100644
--- a/src/routes/app_content_student/components/area-of-study-sidebar.js
+++ b/src/routes/student/components/area-of-study-sidebar.js
@@ -15,10 +15,10 @@ import union from 'lodash/union'
import uniq from 'lodash/uniq'
import values from 'lodash/values'
-import sortStudiesByType from '../../../helpers/sort-studies-by-type'
+import sortStudiesByType from 'src/helpers/sort-studies-by-type'
import AreaOfStudyGroup from './area-of-study-group'
-import Button from '../../../components/button'
-import * as areaTypeConstants from '../../../models/area-types'
+import Button from 'src/components/button'
+import * as areaTypeConstants from 'src/models/area-types'
export default function AreaOfStudySidebar(props) {
const {allAreas, student, showAreaPickerFor} = props
diff --git a/src/routes/app_content_student/components/area-of-study.js b/src/routes/student/components/area-of-study.js
similarity index 94%
rename from src/routes/app_content_student/components/area-of-study.js
rename to src/routes/student/components/area-of-study.js
index c64770a02..a1856d447 100644
--- a/src/routes/app_content_student/components/area-of-study.js
+++ b/src/routes/student/components/area-of-study.js
@@ -1,12 +1,12 @@
import React, {Component, PropTypes} from 'react'
import cx from 'classnames'
-import Button from '../../../components/button'
-import Icon from '../../../components/icon'
+import Button from 'src/components/button'
+import Icon from 'src/components/icon'
import Requirement from './requirement'
-import ProgressBar from '../../../components/progress-bar'
-import compareProps from '../../../helpers/compare-props'
-import {close, chevronUp, chevronDown} from '../../../icons/ionicons'
+import ProgressBar from 'src/components/progress-bar'
+import compareProps from 'src/helpers/compare-props'
+import {close, chevronUp, chevronDown} from 'src/icons/ionicons'
import './area-of-study.scss'
diff --git a/src/routes/app_content_student/components/area-of-study.scss b/src/routes/student/components/area-of-study.scss
similarity index 97%
rename from src/routes/app_content_student/components/area-of-study.scss
rename to src/routes/student/components/area-of-study.scss
index 257112627..bebd1bd6e 100644
--- a/src/routes/app_content_student/components/area-of-study.scss
+++ b/src/routes/student/components/area-of-study.scss
@@ -1,4 +1,4 @@
-@import '../../../styles/variables.scss';
+@import 'src/styles/variables.scss';
.area {
&.errored {
diff --git a/src/routes/app_content_student/components/area-picker.js b/src/routes/student/components/area-picker.js
similarity index 89%
rename from src/routes/app_content_student/components/area-picker.js
rename to src/routes/student/components/area-picker.js
index 382d4ceda..f5a79e511 100644
--- a/src/routes/app_content_student/components/area-picker.js
+++ b/src/routes/student/components/area-picker.js
@@ -1,15 +1,15 @@
import React, {Component, PropTypes} from 'react'
import fuzzysearch from 'fuzzysearch'
-import pluralizeArea from '../../../area-tools/pluralize-area'
+import pluralizeArea from 'src/area-tools/pluralize-area'
import map from 'lodash/map'
import reject from 'lodash/reject'
import filter from 'lodash/filter'
import includes from 'lodash/includes'
-import filterAreaList from '../../../helpers/filter-area-list'
+import filterAreaList from 'src/helpers/filter-area-list'
-import Button from '../../../components/button'
-import List from '../../../components/list'
-import Toolbar from '../../../components/toolbar'
+import Button from 'src/components/button'
+import List from 'src/components/list'
+import Toolbar from 'src/components/toolbar'
import './area-picker.scss'
diff --git a/src/routes/app_content_student/components/area-picker.scss b/src/routes/student/components/area-picker.scss
similarity index 90%
rename from src/routes/app_content_student/components/area-picker.scss
rename to src/routes/student/components/area-picker.scss
index 92ec76649..b20b07a77 100644
--- a/src/routes/app_content_student/components/area-picker.scss
+++ b/src/routes/student/components/area-picker.scss
@@ -1,5 +1,5 @@
-@import '../../../styles/variables.scss';
-@import '../../../styles/mixins.scss';
+@import 'src/styles/variables.scss';
+@import 'src/styles/mixins.scss';
.add-area {
padding: $area-edge-padding;
diff --git a/src/routes/app_content_student/components/expression--course.js b/src/routes/student/components/expression--course.js
similarity index 93%
rename from src/routes/app_content_student/components/expression--course.js
rename to src/routes/student/components/expression--course.js
index 5dc8811c4..d24ba8b86 100644
--- a/src/routes/app_content_student/components/expression--course.js
+++ b/src/routes/student/components/expression--course.js
@@ -1,7 +1,7 @@
import React, {PropTypes} from 'react'
import cx from 'classnames'
-import semesterName from '../../../helpers/semester-name'
-import {shrinkDepartment} from '../../../area-tools/convert-department'
+import semesterName from 'src/helpers/semester-name'
+import {shrinkDepartment} from 'src/area-tools/convert-department'
import './expression--course.scss'
diff --git a/src/routes/app_content_student/components/expression--course.scss b/src/routes/student/components/expression--course.scss
similarity index 100%
rename from src/routes/app_content_student/components/expression--course.scss
rename to src/routes/student/components/expression--course.scss
diff --git a/src/routes/app_content_student/components/expression--filter.js b/src/routes/student/components/expression--filter.js
similarity index 100%
rename from src/routes/app_content_student/components/expression--filter.js
rename to src/routes/student/components/expression--filter.js
diff --git a/src/routes/app_content_student/components/expression.js b/src/routes/student/components/expression.js
similarity index 98%
rename from src/routes/app_content_student/components/expression.js
rename to src/routes/student/components/expression.js
index 28425a8e5..caeb20fa0 100644
--- a/src/routes/app_content_student/components/expression.js
+++ b/src/routes/student/components/expression.js
@@ -5,7 +5,7 @@ import ResultIndicator from './result-indicator'
import map from 'lodash/map'
import plur from 'plur'
-import humanizeOperator from '../../../area-tools/humanize-operator'
+import humanizeOperator from 'src/area-tools/humanize-operator'
import './expression.scss'
diff --git a/src/routes/app_content_student/components/expression.scss b/src/routes/student/components/expression.scss
similarity index 95%
rename from src/routes/app_content_student/components/expression.scss
rename to src/routes/student/components/expression.scss
index 9c0eab299..f2a8aa0af 100644
--- a/src/routes/app_content_student/components/expression.scss
+++ b/src/routes/student/components/expression.scss
@@ -1,5 +1,5 @@
-@import '../../../styles/variables.scss';
-@import '../../../styles/mixins.scss';
+@import 'src/styles/variables.scss';
+@import 'src/styles/mixins.scss';
@import './variables-expression.scss';
.expression {
diff --git a/src/routes/app_content_student/components/graduation-status.js b/src/routes/student/components/graduation-status.js
similarity index 100%
rename from src/routes/app_content_student/components/graduation-status.js
rename to src/routes/student/components/graduation-status.js
diff --git a/src/routes/app_content_student/components/graduation-status.scss b/src/routes/student/components/graduation-status.scss
similarity index 92%
rename from src/routes/app_content_student/components/graduation-status.scss
rename to src/routes/student/components/graduation-status.scss
index 463e6c913..42b0e3923 100644
--- a/src/routes/app_content_student/components/graduation-status.scss
+++ b/src/routes/student/components/graduation-status.scss
@@ -1,4 +1,4 @@
-@import '../../../styles/variables.scss';
+@import 'src/styles/variables.scss';
.graduation-status {
font-size: 0.85em;
diff --git a/src/routes/app_content_student/components/requirement.js b/src/routes/student/components/requirement.js
similarity index 96%
rename from src/routes/app_content_student/components/requirement.js
rename to src/routes/student/components/requirement.js
index 07c612c5d..0b41b2751 100644
--- a/src/routes/app_content_student/components/requirement.js
+++ b/src/routes/student/components/requirement.js
@@ -3,11 +3,11 @@ import filter from 'lodash/filter'
import keys from 'lodash/keys'
import map from 'lodash/map'
-import isRequirementName from '../../../area-tools/is-requirement-name'
+import isRequirementName from 'src/area-tools/is-requirement-name'
import Filter from './expression--filter'
import Expression from './expression'
-import Button from '../../../components/button'
+import Button from 'src/components/button'
import ResultIndicator from './result-indicator'
import './requirement.scss'
diff --git a/src/routes/app_content_student/components/requirement.scss b/src/routes/student/components/requirement.scss
similarity index 97%
rename from src/routes/app_content_student/components/requirement.scss
rename to src/routes/student/components/requirement.scss
index 8cfda3e38..6d33aafa9 100644
--- a/src/routes/app_content_student/components/requirement.scss
+++ b/src/routes/student/components/requirement.scss
@@ -1,5 +1,5 @@
-@import '../../../styles/variables.scss';
-@import '../../../styles/mixins.scss';
+@import 'src/styles/variables.scss';
+@import 'src/styles/mixins.scss';
@import './variables-expression.scss';
diff --git a/src/routes/app_content_student/components/result-indicator.js b/src/routes/student/components/result-indicator.js
similarity index 75%
rename from src/routes/app_content_student/components/result-indicator.js
rename to src/routes/student/components/result-indicator.js
index c56ead90d..f2240224a 100644
--- a/src/routes/app_content_student/components/result-indicator.js
+++ b/src/routes/student/components/result-indicator.js
@@ -1,6 +1,6 @@
import React, {PropTypes} from 'react'
-import Icon from '../../../components/icon'
-import {checkmark, close} from '../../../icons/ionicons'
+import Icon from 'src/components/icon'
+import {checkmark, close} from 'src/icons/ionicons'
export default function ResultIndicator({result}) {
return
diff --git a/src/routes/app_content_student/components/student-summary.js b/src/routes/student/components/student-summary.js
similarity index 94%
rename from src/routes/app_content_student/components/student-summary.js
rename to src/routes/student/components/student-summary.js
index dfc47dc8b..5fc04a1ea 100644
--- a/src/routes/app_content_student/components/student-summary.js
+++ b/src/routes/student/components/student-summary.js
@@ -6,11 +6,11 @@ import filter from 'lodash/filter'
import map from 'lodash/map'
import sample from 'lodash/sample'
-import AvatarLetter from '../../../components/avatar-letter'
-import ContentEditable from '../../../components/content-editable'
+import AvatarLetter from 'src/components/avatar-letter'
+import ContentEditable from 'src/components/content-editable'
-import getActiveStudentCourses from '../../../helpers/get-active-student-courses'
-import countCredits from '../../../area-tools/count-credits'
+import getActiveStudentCourses from 'src/helpers/get-active-student-courses'
+import countCredits from 'src/area-tools/count-credits'
import './student-summary.scss'
diff --git a/src/routes/app_content_student/components/student-summary.scss b/src/routes/student/components/student-summary.scss
similarity index 93%
rename from src/routes/app_content_student/components/student-summary.scss
rename to src/routes/student/components/student-summary.scss
index 05ba6a757..56bc3522e 100644
--- a/src/routes/app_content_student/components/student-summary.scss
+++ b/src/routes/student/components/student-summary.scss
@@ -1,5 +1,5 @@
-@import '../../../styles/variables.scss';
-@import '../../../styles/mixins.scss';
+@import 'src/styles/variables.scss';
+@import 'src/styles/mixins.scss';
.student-summary {
@include card();
diff --git a/src/routes/app_content_student/components/variables-expression.scss b/src/routes/student/components/variables-expression.scss
similarity index 100%
rename from src/routes/app_content_student/components/variables-expression.scss
rename to src/routes/student/components/variables-expression.scss
diff --git a/src/routes/app_content_student/containers/graduation-status.js b/src/routes/student/containers/graduation-status.js
similarity index 92%
rename from src/routes/app_content_student/containers/graduation-status.js
rename to src/routes/student/containers/graduation-status.js
index 8f90c376f..683d16e89 100644
--- a/src/routes/app_content_student/containers/graduation-status.js
+++ b/src/routes/student/containers/graduation-status.js
@@ -3,11 +3,11 @@ import { connect } from 'react-redux'
import { bindActionCreators } from 'redux'
import has from 'lodash/has'
-import pathToOverride from '../../../area-tools/path-to-override'
+import pathToOverride from 'src/area-tools/path-to-override'
-import {changeName, changeMatriculation, changeGraduation} from '../../../redux/students/actions/change'
-import {addArea, removeArea} from '../../../redux/students/actions/areas'
-import {setOverride, removeOverride} from '../../../redux/students/actions/overrides'
+import {changeName, changeMatriculation, changeGraduation} from 'src/redux/students/actions/change'
+import {addArea, removeArea} from 'src/redux/students/actions/areas'
+import {setOverride, removeOverride} from 'src/redux/students/actions/overrides'
import GraduationStatus from '../components/graduation-status'
class GraduationStatusContainer extends Component {
diff --git a/src/routes/app_content_student/containers/student.js b/src/routes/student/containers/student.js
similarity index 89%
rename from src/routes/app_content_student/containers/student.js
rename to src/routes/student/containers/student.js
index 2899c3926..fda6fd785 100644
--- a/src/routes/app_content_student/containers/student.js
+++ b/src/routes/student/containers/student.js
@@ -2,12 +2,12 @@ import React, { Component, PropTypes, cloneElement } from 'react'
import DocumentTitle from 'react-document-title'
import { connect } from 'react-redux'
import { bindActionCreators } from 'redux'
-import { loadStudent } from '../../../redux/students/actions/load-student'
+import { loadStudent } from 'src/redux/students/actions/load-student'
-import Sidebar from '../../../containers/sidebar'
-import Loading from '../../../components/loading'
+import Sidebar from 'src/containers/sidebar'
+import Loading from 'src/components/loading'
-import CourseTable from '../../student_content_course-table/containers/course-table'
+import CourseTable from '../routes/course-table/containers/course-table'
import GraduationStatus from './graduation-status'
import './student.scss'
diff --git a/src/routes/app_content_student/containers/student.scss b/src/routes/student/containers/student.scss
similarity index 85%
rename from src/routes/app_content_student/containers/student.scss
rename to src/routes/student/containers/student.scss
index 874cbd6da..75616374d 100644
--- a/src/routes/app_content_student/containers/student.scss
+++ b/src/routes/student/containers/student.scss
@@ -1,4 +1,4 @@
-@import '../../../styles/variables.scss';
+@import 'src/styles/variables.scss';
.student {
height: 100vh;
diff --git a/src/routes/student/index.js b/src/routes/student/index.js
new file mode 100644
index 000000000..ff927d5b8
--- /dev/null
+++ b/src/routes/student/index.js
@@ -0,0 +1,23 @@
+export default {
+ path: 's/:studentId',
+
+ getIndexRoute(location, cb) {
+ require.ensure([], () => {
+ cb(null, require('./routes/course-table').default)
+ }, 'student.index')
+ },
+
+ getChildRoutes(state, cb) {
+ cb(null, [
+ require('./routes/share').default, // share, overlay
+ require('./routes/search').default, // search, sidebar
+ require('./routes/semester-detail').default, // :year/:term, content
+ ])
+ },
+
+ getComponents(location, cb) {
+ require.ensure([], () => {
+ cb(null, {content: require('./containers/student').default})
+ }, 'student.components')
+ },
+}
diff --git a/src/routes/student_content_course-table/components/course-list.js b/src/routes/student/routes/course-table/components/course-list.js
similarity index 92%
rename from src/routes/student_content_course-table/components/course-list.js
rename to src/routes/student/routes/course-table/components/course-list.js
index aa0a5e3c4..c3c0e4158 100644
--- a/src/routes/student_content_course-table/components/course-list.js
+++ b/src/routes/student/routes/course-table/components/course-list.js
@@ -2,8 +2,8 @@ import React, {PropTypes} from 'react'
import range from 'lodash/range'
import map from 'lodash/map'
-import InlineCourse from '../../../components/inline-course'
-import List from '../../../components/list'
+import InlineCourse from 'src/components/inline-course'
+import List from 'src/components/list'
import MissingCourse from './missing-course'
import EmptyCourseSlot from './empty-course-slot'
diff --git a/src/routes/student_content_course-table/components/course-list.scss b/src/routes/student/routes/course-table/components/course-list.scss
similarity index 81%
rename from src/routes/student_content_course-table/components/course-list.scss
rename to src/routes/student/routes/course-table/components/course-list.scss
index 07d517cf1..1c1628261 100644
--- a/src/routes/student_content_course-table/components/course-list.scss
+++ b/src/routes/student/routes/course-table/components/course-list.scss
@@ -1,5 +1,5 @@
-@import '../../../styles/variables.scss';
-@import '../../../styles/mixins.scss';
+@import 'src/styles/variables.scss';
+@import 'src/styles/mixins.scss';
@import './variables.scss';
.course-list {
diff --git a/src/routes/student_content_course-table/components/course-table.js b/src/routes/student/routes/course-table/components/course-table.js
similarity index 88%
rename from src/routes/student_content_course-table/components/course-table.js
rename to src/routes/student/routes/course-table/components/course-table.js
index cf3ddb01d..8e95de0f9 100644
--- a/src/routes/student_content_course-table/components/course-table.js
+++ b/src/routes/student/routes/course-table/components/course-table.js
@@ -1,13 +1,13 @@
import React, {PropTypes} from 'react'
import cx from 'classnames'
-import expandYear from '../../../helpers/expand-year'
+import expandYear from 'src/helpers/expand-year'
-import findFirstAvailableYear from '../../../helpers/find-first-available-year'
+import findFirstAvailableYear from 'src/helpers/find-first-available-year'
import map from 'lodash/map'
import sortBy from 'lodash/sortBy'
import groupBy from 'lodash/groupBy'
-import Button from '../../../components/button'
+import Button from 'src/components/button'
import Year from './year'
import './course-table.scss'
diff --git a/src/routes/student_content_course-table/components/course-table.scss b/src/routes/student/routes/course-table/components/course-table.scss
similarity index 100%
rename from src/routes/student_content_course-table/components/course-table.scss
rename to src/routes/student/routes/course-table/components/course-table.scss
diff --git a/src/routes/student_content_course-table/components/empty-course-slot.js b/src/routes/student/routes/course-table/components/empty-course-slot.js
similarity index 100%
rename from src/routes/student_content_course-table/components/empty-course-slot.js
rename to src/routes/student/routes/course-table/components/empty-course-slot.js
diff --git a/src/routes/student_content_course-table/components/empty-course-slot.scss b/src/routes/student/routes/course-table/components/empty-course-slot.scss
similarity index 76%
rename from src/routes/student_content_course-table/components/empty-course-slot.scss
rename to src/routes/student/routes/course-table/components/empty-course-slot.scss
index eed89333e..0eca44c1f 100644
--- a/src/routes/student_content_course-table/components/empty-course-slot.scss
+++ b/src/routes/student/routes/course-table/components/empty-course-slot.scss
@@ -1,4 +1,4 @@
-@import '../../../styles/variables.scss';
+@import 'src/styles/variables.scss';
.empty-course {
color: $gray-500;
diff --git a/src/routes/student_content_course-table/components/fake-course.js b/src/routes/student/routes/course-table/components/fake-course.js
similarity index 85%
rename from src/routes/student_content_course-table/components/fake-course.js
rename to src/routes/student/routes/course-table/components/fake-course.js
index 8a9fab529..5b3780433 100644
--- a/src/routes/student_content_course-table/components/fake-course.js
+++ b/src/routes/student/routes/course-table/components/fake-course.js
@@ -1,7 +1,7 @@
import React, {PropTypes} from 'react'
import cx from 'classnames'
-import '../../../components/inline-course.scss'
-import '../../../components/course-title.scss'
+import 'src/components/inline-course.scss'
+import 'src/components/course-title.scss'
export default function FakeCourse(props) {
return (
diff --git a/src/routes/student_content_course-table/components/missing-course.js b/src/routes/student/routes/course-table/components/missing-course.js
similarity index 100%
rename from src/routes/student_content_course-table/components/missing-course.js
rename to src/routes/student/routes/course-table/components/missing-course.js
diff --git a/src/routes/student_content_course-table/components/semester.js b/src/routes/student/routes/course-table/components/semester.js
similarity index 90%
rename from src/routes/student_content_course-table/components/semester.js
rename to src/routes/student/routes/course-table/components/semester.js
index 9ca246782..006f15f40 100644
--- a/src/routes/student_content_course-table/components/semester.js
+++ b/src/routes/student/routes/course-table/components/semester.js
@@ -3,16 +3,16 @@ import {findDOMNode} from 'react-dom'
import cx from 'classnames'
import Link from 'react-router/lib/Link'
import plur from 'plur'
-import semesterName from '../../../helpers/semester-name'
-import countCredits from '../../../area-tools/count-credits'
-import {COURSE} from '../../../models/item-types'
+import semesterName from 'src/helpers/semester-name'
+import countCredits from 'src/area-tools/count-credits'
+import {COURSE} from 'src/models/item-types'
import {DropTarget} from 'react-dnd'
import includes from 'lodash/includes'
-import Button from '../../../components/button'
-import Icon from '../../../components/icon'
-import List from '../../../components/list'
-import {close, search} from '../../../icons/ionicons'
+import Button from 'src/components/button'
+import Icon from 'src/components/icon'
+import List from 'src/components/list'
+import {close, search} from 'src/icons/ionicons'
import CourseList from './course-list'
import './semester.scss'
diff --git a/src/routes/student_content_course-table/components/semester.scss b/src/routes/student/routes/course-table/components/semester.scss
similarity index 94%
rename from src/routes/student_content_course-table/components/semester.scss
rename to src/routes/student/routes/course-table/components/semester.scss
index dc992ea86..ff757ed3f 100644
--- a/src/routes/student_content_course-table/components/semester.scss
+++ b/src/routes/student/routes/course-table/components/semester.scss
@@ -1,5 +1,5 @@
-@import '../../../styles/variables.scss';
-@import '../../../styles/mixins.scss';
+@import 'src/styles/variables.scss';
+@import 'src/styles/mixins.scss';
@import './variables.scss';
diff --git a/src/routes/student_content_course-table/components/variables.scss b/src/routes/student/routes/course-table/components/variables.scss
similarity index 81%
rename from src/routes/student_content_course-table/components/variables.scss
rename to src/routes/student/routes/course-table/components/variables.scss
index 83c6709df..4d3b8c0e2 100644
--- a/src/routes/student_content_course-table/components/variables.scss
+++ b/src/routes/student/routes/course-table/components/variables.scss
@@ -1,4 +1,4 @@
-@import '../../../styles/variables.scss';
+@import 'src/styles/variables.scss';
$semester-spacing: 4px;
diff --git a/src/routes/student_content_course-table/components/year.js b/src/routes/student/routes/course-table/components/year.js
similarity index 87%
rename from src/routes/student_content_course-table/components/year.js
rename to src/routes/student/routes/course-table/components/year.js
index 706361dc4..ae80ce84a 100644
--- a/src/routes/student_content_course-table/components/year.js
+++ b/src/routes/student/routes/course-table/components/year.js
@@ -3,12 +3,12 @@ import filter from 'lodash/filter'
import sortBy from 'lodash/sortBy'
import map from 'lodash/map'
-import Button from '../../../components/button'
+import Button from 'src/components/button'
import Semester from '../containers/semester'
-import findFirstAvailableSemester from '../../../helpers/find-first-available-semester'
-import expandYear from '../../../helpers/expand-year'
-import semesterName from '../../../helpers/semester-name'
+import findFirstAvailableSemester from 'src/helpers/find-first-available-semester'
+import expandYear from 'src/helpers/expand-year'
+import semesterName from 'src/helpers/semester-name'
import './year.scss'
diff --git a/src/routes/student_content_course-table/components/year.scss b/src/routes/student/routes/course-table/components/year.scss
similarity index 94%
rename from src/routes/student_content_course-table/components/year.scss
rename to src/routes/student/routes/course-table/components/year.scss
index 97ecad473..770e4105c 100644
--- a/src/routes/student_content_course-table/components/year.scss
+++ b/src/routes/student/routes/course-table/components/year.scss
@@ -1,5 +1,5 @@
-@import '../../../styles/variables.scss';
-@import '../../../styles/mixins.scss';
+@import 'src/styles/variables.scss';
+@import 'src/styles/mixins.scss';
$year-title-size: 2em;
$year-title-width: $year-title-size * 0.75; /* I don't know why this is 0.75 */
diff --git a/src/routes/student_content_course-table/containers/course-table.js b/src/routes/student/routes/course-table/containers/course-table.js
similarity index 86%
rename from src/routes/student_content_course-table/containers/course-table.js
rename to src/routes/student/routes/course-table/containers/course-table.js
index 98471db27..b5de6849a 100644
--- a/src/routes/student_content_course-table/containers/course-table.js
+++ b/src/routes/student/routes/course-table/containers/course-table.js
@@ -4,9 +4,9 @@ import { bindActionCreators } from 'redux'
import map from 'lodash/map'
import filter from 'lodash/filter'
-import {addSchedule, destroySchedules} from '../../../redux/students/actions/schedules'
-import findFirstAvailableYear from '../../../helpers/find-first-available-year'
-import findFirstAvailableSemester from '../../../helpers/find-first-available-semester'
+import {addSchedule, destroySchedules} from 'src/redux/students/actions/schedules'
+import findFirstAvailableYear from 'src/helpers/find-first-available-year'
+import findFirstAvailableSemester from 'src/helpers/find-first-available-semester'
import CourseTable from '../components/course-table'
diff --git a/src/routes/student_content_course-table/containers/semester.js b/src/routes/student/routes/course-table/containers/semester.js
similarity index 84%
rename from src/routes/student_content_course-table/containers/semester.js
rename to src/routes/student/routes/course-table/containers/semester.js
index c0155cc99..b4b550b9b 100644
--- a/src/routes/student_content_course-table/containers/semester.js
+++ b/src/routes/student/routes/course-table/containers/semester.js
@@ -3,14 +3,14 @@ import {connect} from 'react-redux'
import {bindActionCreators} from 'redux'
import filter from 'lodash/filter'
import map from 'lodash/map'
-import isCurrentSemester from '../../../helpers/is-current-semester'
+import isCurrentSemester from 'src/helpers/is-current-semester'
-import Loading from '../../../components/loading'
-import {destroySchedules} from '../../../redux/students/actions/schedules'
-import {moveCourse, addCourse} from '../../../redux/students/actions/courses'
+import Loading from 'src/components/loading'
+import {destroySchedules} from 'src/redux/students/actions/schedules'
+import {moveCourse, addCourse} from 'src/redux/students/actions/courses'
import Semester from '../components/semester'
-import getSchedule from '../../../helpers/get-schedule'
+import getSchedule from 'src/helpers/get-schedule'
export class SemesterContainer extends Component {
diff --git a/src/routes/student_content_course-table/index.js b/src/routes/student/routes/course-table/index.js
similarity index 100%
rename from src/routes/student_content_course-table/index.js
rename to src/routes/student/routes/course-table/index.js
diff --git a/src/routes/student_sidebar_search/containers/search-sidebar.js b/src/routes/student/routes/search/containers/search-sidebar.js
similarity index 92%
rename from src/routes/student_sidebar_search/containers/search-sidebar.js
rename to src/routes/student/routes/search/containers/search-sidebar.js
index ddf72d911..2474cfb53 100644
--- a/src/routes/student_sidebar_search/containers/search-sidebar.js
+++ b/src/routes/student/routes/search/containers/search-sidebar.js
@@ -1,6 +1,6 @@
import React, {PropTypes} from 'react'
import withRouter from 'react-router/lib/withRouter'
-import CourseSearcher from '../../../containers/course-searcher'
+import CourseSearcher from 'src/containers/course-searcher'
function CourseSearcherSidebar(props) {
const {studentId} = props.params
diff --git a/src/routes/student_sidebar_search/index.js b/src/routes/student/routes/search/index.js
similarity index 100%
rename from src/routes/student_sidebar_search/index.js
rename to src/routes/student/routes/search/index.js
diff --git a/src/routes/student_content_semester-detail/containers/semester-detail.js b/src/routes/student/routes/semester-detail/containers/semester-detail.js
similarity index 91%
rename from src/routes/student_content_semester-detail/containers/semester-detail.js
rename to src/routes/student/routes/semester-detail/containers/semester-detail.js
index e9c1258f4..fc7657d3f 100644
--- a/src/routes/student_content_semester-detail/containers/semester-detail.js
+++ b/src/routes/student/routes/semester-detail/containers/semester-detail.js
@@ -4,8 +4,8 @@ import map from 'lodash/map'
import filter from 'lodash/filter'
import omit from 'lodash/omit'
import DocumentTitle from 'react-document-title'
-import isCurrentSemester from '../../../helpers/is-current-semester'
-import semesterName from '../../../helpers/semester-name'
+import isCurrentSemester from 'src/helpers/is-current-semester'
+import semesterName from 'src/helpers/semester-name'
import './semester-detail.scss'
diff --git a/src/routes/student_content_semester-detail/containers/semester-detail.scss b/src/routes/student/routes/semester-detail/containers/semester-detail.scss
similarity index 100%
rename from src/routes/student_content_semester-detail/containers/semester-detail.scss
rename to src/routes/student/routes/semester-detail/containers/semester-detail.scss
diff --git a/src/routes/student_content_semester-detail/index.js b/src/routes/student/routes/semester-detail/index.js
similarity index 100%
rename from src/routes/student_content_semester-detail/index.js
rename to src/routes/student/routes/semester-detail/index.js
diff --git a/src/routes/student_overlay_share/containers/share-student.js b/src/routes/student/routes/share/containers/share-student.js
similarity index 78%
rename from src/routes/student_overlay_share/containers/share-student.js
rename to src/routes/student/routes/share/containers/share-student.js
index 7379b9a69..0b5ab8185 100644
--- a/src/routes/student_overlay_share/containers/share-student.js
+++ b/src/routes/student/routes/share/containers/share-student.js
@@ -1,16 +1,16 @@
import React, {PropTypes} from 'react'
-import Button from '../../../components/button'
-import Icon from '../../../components/icon'
-import Toolbar from '../../../components/toolbar'
-import Modal from '../../../components/modal'
-import List from '../../../components/list'
+import Button from 'src/components/button'
+import Icon from 'src/components/icon'
+import Toolbar from 'src/components/toolbar'
+import Modal from 'src/components/modal'
+import List from 'src/components/list'
import withRouter from 'react-router/lib/withRouter'
-import {close} from '../../../icons/ionicons'
+import {close} from 'src/icons/ionicons'
import { connect } from 'react-redux'
-import encodeStudent from '../../../helpers/encode-student'
+import encodeStudent from 'src/helpers/encode-student'
import './share-student.scss'
diff --git a/src/routes/student_overlay_share/containers/share-student.scss b/src/routes/student/routes/share/containers/share-student.scss
similarity index 72%
rename from src/routes/student_overlay_share/containers/share-student.scss
rename to src/routes/student/routes/share/containers/share-student.scss
index 0adae09a4..6ea44af71 100644
--- a/src/routes/student_overlay_share/containers/share-student.scss
+++ b/src/routes/student/routes/share/containers/share-student.scss
@@ -1,4 +1,4 @@
-@import '../../../styles/mixins.scss';
+@import 'src/styles/mixins.scss';
.share-dialog {
@include card();
diff --git a/src/routes/student_overlay_share/index.js b/src/routes/student/routes/share/index.js
similarity index 100%
rename from src/routes/student_overlay_share/index.js
rename to src/routes/student/routes/share/index.js