diff --git a/packages/generator/src/frontend/add/templates/Add.js.template b/packages/generator/src/frontend/add/templates/Add.js.template
new file mode 100644
index 0000000..7bbdec1
--- /dev/null
+++ b/packages/generator/src/frontend/add/templates/Add.js.template
@@ -0,0 +1,109 @@
+import React, { Component, PropTypes } from 'react';
+import Relay from 'react-relay';
+import RelayStore from '../../RelayStore';
+import { withRouter } from 'react-router';
+
+import <%= name %>AddMutation from './<%= name %>AddMutation';
+
+import Form from '../common/Form';
+
+class <%= name %>Add extends Component {
+ static contextTypes = {
+ showSnackbar: PropTypes.func,
+ };
+
+ fields = [
+ {
+ name: 'id',
+ placeholder: 'ID',
+ required: true,
+ },
+ // TODO - add ObjectType fields here
+ ];
+
+ onSubmit = (data) => {
+ const mutation = new <%= name %>AddMutation({
+ viewer: this.props.viewer,
+ ...data,
+ });
+
+ RelayStore.commitUpdate(mutation, {
+ onSuccess: ({ <%= name %>Add }) => {
+ this.context.showSnackbar({
+ message: '<%= rawName %> created successfully!',
+ });
+
+ this.props.router.push(`/<%= pluralName %>/view/${<%= name %>Add.<%= rawName %>Edge.node.id}`);
+ },
+ onFailure: (failureResponse) => {
+ this.context.showSnackbar({
+ message: 'There was an error while trying to create a <%= rawName %>.',
+ });
+
+ console.log('FAIL', failureResponse);
+ },
+ });
+ };
+
+ render() {
+ return (
+
+
+ New <%= name %>
+
+
+
+ );
+ }
+}
+
+const styles = {
+ form: {
+ backgroundColor: 'white',
+ boxShadow: 'rgba(0, 0, 0, 0.056863) 0px 7px 8px, rgba(0, 0, 0, 0.227451) 0px 0px 0px',
+ borderWidth: 1,
+ borderStyle: 'solid',
+ borderColor: '#E7ECEA',
+ padding: 20,
+ paddingTop: 50,
+ },
+ formContainer: {
+ display: 'flex',
+ flexWrap: 'wrap',
+ },
+ title: {
+ fontSize: 25,
+ fontWeight: 300,
+ },
+ actionsContainer: {
+ display: 'flex',
+ justifyContent: 'flex-end',
+ marginTop: 5,
+ paddingRight: 8,
+ borderTopStyle: 'solid',
+ borderTopWidth: 1,
+ paddingTop: 15,
+ borderColor: '#ECECEC',
+ },
+ formField: {
+ marginRight: 10,
+ flex: '1 0 47%',
+ },
+ selectField: {
+ marginRight: 10,
+ flex: '1 0 48%',
+ },
+};
+
+export default Relay.createContainer(withRouter(<%= name %>Add), {
+ fragments: {
+ viewer: () => Relay.QL`
+ fragment on Viewer {
+ ${<%= name %>AddMutation.getFragment('viewer')}
+ }
+ `,
+ },
+});
diff --git a/packages/generator/src/frontend/add/templates/AddMutation.js.template b/packages/generator/src/frontend/add/templates/AddMutation.js.template
new file mode 100644
index 0000000..8365533
--- /dev/null
+++ b/packages/generator/src/frontend/add/templates/AddMutation.js.template
@@ -0,0 +1,63 @@
+import Relay from 'react-relay';
+
+export default class <%= name %>AddMutation extends Relay.Mutation {
+ static fragments = {
+ viewer: () => Relay.QL`
+ fragment on Viewer {
+ id
+ }
+ `,
+ };
+
+ getMutation() {
+ return Relay.QL`mutation {
+ <%= name %>Add
+ }`;
+ }
+
+ getVariables() {
+ const {
+ id
+ // TODO - add mutation input fields here
+ } = this.props;
+
+ return {
+ id
+ // TODO - add mutation input fields here
+ };
+ }
+
+ getFatQuery() {
+ return Relay.QL`
+ fragment on <%= name %>AddPayload {
+ <%= rawName %>Edge
+ viewer {
+ <%= pluralName %>
+ }
+ }
+ `;
+ }
+
+ getConfigs() {
+ return [
+ {
+ type: 'RANGE_ADD',
+ parentName: 'viewer',
+ parentID: this.props.viewer.id,
+ connectionName: '<%= pluralName %>',
+ edgeName: '<%= rawName %>Edge',
+ rangeBehaviors: {
+ '': 'prepend',
+ },
+ },
+ {
+ type: 'REQUIRED_CHILDREN',
+ children: [Relay.QL`
+ fragment on <%= name %>AddPayload {
+ <%= rawName %>Edge
+ }
+ `],
+ },
+ ];
+ }
+}
diff --git a/packages/generator/src/frontend/edit/templates/Edit.js.template b/packages/generator/src/frontend/edit/templates/Edit.js.template
new file mode 100644
index 0000000..1e4bd0a
--- /dev/null
+++ b/packages/generator/src/frontend/edit/templates/Edit.js.template
@@ -0,0 +1,106 @@
+import React, { Component, PropTypes } from 'react';
+import Relay from 'react-relay';
+import RelayStore from '../../../RelayStore';
+import { withRouter } from 'react-router';
+
+import <%= name %>EditMutation from './<%= name %>EditMutation.js';
+
+import Form from '../../common/Form';
+
+class <%= name %>Edit extends Component {
+ static contextTypes = {
+ showSnackbar: PropTypes.func,
+ };
+
+ fields = [
+ {
+ name: 'id',
+ placeholder: 'ID',
+ required: true,
+ },
+ // TODO - add ObjectType fields here
+ ];
+
+ onSubmit = (data) => {
+ const { company } = this.props;
+
+ const mutation = new <%= rawName %>EditMutation({
+ ...data,
+ });
+
+ RelayStore.commitUpdate(mutation, {
+ onSuccess: () => {
+ this.context.showSnackbar({
+ message: '<%= name %> edited successfully!',
+ });
+
+ this.props.router.goBack();
+ },
+ onFailure: (failureResponse) => {
+ this.context.showSnackbar({
+ message: 'There was an error while trying to edit this <%= rawName %>.',
+ });
+
+ console.log('FAIL', failureResponse);
+ },
+ });
+ };
+
+ render() {
+ const { <%= rawName %> } = this.props;
+
+ return (
+