├── pages ├── 404.md ├── 500.md ├── home.md ├── about.md ├── settings.json └── contact.json ├── README.md ├── LICENSE └── resources.json /pages/404.md: -------------------------------------------------------------------------------- 1 | ## Not Found 2 | 3 | Sorry, but the page you are trying to view does not exist. 4 | -------------------------------------------------------------------------------- /pages/500.md: -------------------------------------------------------------------------------- 1 | ## Whoops! 2 | 3 | We are experiencing some technical difficulties, possibly due to a network or service interruption. 4 | 5 | Sorry for the inconvenience, Please try again later. 6 | -------------------------------------------------------------------------------- /pages/home.md: -------------------------------------------------------------------------------- 1 | ## Welcome To The Demo 2 | This is an isomorphic web app that demonstrates performance techniques and multiple backing services. 3 | 4 | ### Data Driven Flux & React 5 | All the content you see, including navigation, comes from a [backend data service](https://github.com/localnerve/flux-react-example-data). 6 | This application uses Facebook's [React](http://reactjs.com) and Yahoo's [Fluxible](http://fluxible.io). 7 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # FRED 2 | > A data repo that contains content and models for examples 3 | 4 | The files represent the output of a more traditional data service and include content and models by resource name. 5 | 6 | The resource.json is the main resource of the service. It acts as a manifest that supplies application routes with all other route specific (and application global) resources reachable from it. 7 | 8 | Different branches are used for different Environments (as labelled). 9 | -------------------------------------------------------------------------------- /pages/about.md: -------------------------------------------------------------------------------- 1 | ## About This Demo 2 | 3 | This demo is only meant to be a reference application. It serves as a possible source of inspiration for solving problems during isomorphic application development, or as a basis for a [progressive application](https://infrequently.org/2015/06/progressive-apps-escaping-tabs-without-losing-our-soul/). 4 | 5 | The outgoing mail queue is currently disconnected from this application on Heroku, so contact form completions will not succeed. 6 | 7 | Please visit the project [documentation](https://github.com/localnerve/flux-react-example/wiki) for more detailed info, or contact me @localnerve. 8 | -------------------------------------------------------------------------------- /pages/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "settings": { 3 | "name": "settings", 4 | "heading": "Settings", 5 | "settingsNotSupported": "Settings Not Available On This Device", 6 | "pushNotifications": { 7 | "enable": "Enable Push Notifications", 8 | "notificationsNotSupported": "Notifications Not Supported", 9 | "notificationsBlocked": "Notifications Blocked", 10 | "pushMessagingNotSupported": "Push Messaging Not Supported", 11 | "topics": [{ 12 | "label": "Alerts", 13 | "tag": "push-alerts-tag" 14 | }, { 15 | "label": "Upcoming Events", 16 | "tag": "push-upcoming-events-tag" 17 | }] 18 | }, 19 | "backgroundSync": { 20 | "enable": "Enable Background Sync", 21 | "notSupported": "Background Sync Not Supported" 22 | }, 23 | "demo": { 24 | "pushNotification": true, 25 | "backgroundSync": true 26 | } 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | Copyright (c) 2016, Alex Grant 2 | All rights reserved. 3 | 4 | Redistribution and use in source and binary forms, with or without 5 | modification, are permitted provided that the following conditions are met: 6 | 7 | * Redistributions of source code must retain the above copyright notice, this 8 | list of conditions and the following disclaimer. 9 | 10 | * Redistributions in binary form must reproduce the above copyright notice, 11 | this list of conditions and the following disclaimer in the documentation 12 | and/or other materials provided with the distribution. 13 | 14 | * Neither the name of fred nor the names of its 15 | contributors may be used to endorse or promote products derived from 16 | this software without specific prior written permission. 17 | 18 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 19 | AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 20 | IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 21 | DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE 22 | FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 23 | DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 24 | SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 25 | CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 26 | OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 27 | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 28 | -------------------------------------------------------------------------------- /pages/contact.json: -------------------------------------------------------------------------------- 1 | { 2 | "contact": { 3 | "name": "contact", 4 | "headingText": "Contact Me", 5 | "stepFinal": 3, 6 | "resultMessageFail": "Message Not Sent, click to Retry.", 7 | "resultMessageSuccess": "Message Sent Successfully", 8 | "navigation": { 9 | "previous": { 10 | "text": "Back", 11 | "help": "Press here if you would like to go back to the previous form" 12 | }, 13 | "next": { 14 | "text": "Next", 15 | "help": "Press here after you've filled out all form elements", 16 | "last": "Submit" 17 | } 18 | }, 19 | "steps": [ 20 | { 21 | "step": 0, 22 | "name": "name", 23 | "introduction": { 24 | "text": "Interested in creating an app like this? Drop me a line!" 25 | }, 26 | "label": { 27 | "text": "What is your name?", 28 | "help": "Enter your name" 29 | } 30 | }, 31 | { 32 | "step": 1, 33 | "name": "email", 34 | "introduction": { 35 | "text": "Almost there, keep going!" 36 | }, 37 | "label": { 38 | "text": "What is your email address?", 39 | "help": "Enter your email address" 40 | } 41 | }, 42 | { 43 | "step": 2, 44 | "name": "message", 45 | "introduction": { 46 | "text": "Last step. Remember, the mail queue is disconnected." 47 | }, 48 | "label": { 49 | "text": "What is your message?", 50 | "help": "Enter your message" 51 | } 52 | }, 53 | { 54 | "step": 3, 55 | "name": "result", 56 | "introduction": { 57 | "text": "" 58 | }, 59 | "label": { 60 | "failure": { 61 | "text": "Whoops!" 62 | }, 63 | "success": { 64 | "text": "Thank you!" 65 | } 66 | }, 67 | "message": { 68 | "failure": { 69 | "text": "Our contact service is temporarily unavailable. Here's some help to deliver your message:", 70 | "email": "Email your message", 71 | "emailHelp": "Start an email with your message", 72 | "copy": "Copy your message", 73 | "copyHelp": "Copy your message to clipboard", 74 | "call": "Call us" 75 | }, 76 | "success": { 77 | "text": "Your message has been sent. I'll be in touch with you within 48 hours." 78 | } 79 | } 80 | } 81 | ] 82 | } 83 | } 84 | -------------------------------------------------------------------------------- /resources.json: -------------------------------------------------------------------------------- 1 | { 2 | "routes": { 3 | "404": { 4 | "path": "/404", 5 | "method": "get", 6 | "page": "404", 7 | "label": "Not Found", 8 | "pageTitle": "Page Not Found", 9 | "component": "ContentPage", 10 | "mainNav": false, 11 | "background": "", 12 | "order": 0, 13 | "priority": 0, 14 | "action": { 15 | "name": "page", 16 | "params": { 17 | "resource": "404", 18 | "url": "https://api.github.com/repos/localnerve/fred/contents/pages/404.md", 19 | "format": "markdown", 20 | "models": [ 21 | "LocalBusiness", 22 | "SiteInfo", 23 | "Settings" 24 | ] 25 | } 26 | } 27 | }, 28 | "500": { 29 | "path": "/500", 30 | "method": "get", 31 | "page": "500", 32 | "label": "Error", 33 | "pageTitle": "Application Error", 34 | "component": "ContentPage", 35 | "mainNav": false, 36 | "background": "", 37 | "order": 0, 38 | "priority": 0, 39 | "action": { 40 | "name": "page", 41 | "params": { 42 | "resource": "500", 43 | "url": "https://api.github.com/repos/localnerve/fred/contents/pages/500.md", 44 | "format": "markdown", 45 | "models": [ 46 | "LocalBusiness", 47 | "SiteInfo", 48 | "Settings" 49 | ] 50 | } 51 | } 52 | }, 53 | "home": { 54 | "path": "/", 55 | "method": "get", 56 | "page": "home", 57 | "label": "Home", 58 | "pageTitle": "An Example Isomorphic Application", 59 | "component": "ContentPage", 60 | "mainNav": true, 61 | "background": "3.jpg", 62 | "order": 0, 63 | "priority": 1, 64 | "siteMeta": { 65 | "priority": 1.0, 66 | "changefreq": "weekly" 67 | }, 68 | "action": { 69 | "name": "page", 70 | "params": { 71 | "resource": "home", 72 | "url": "https://api.github.com/repos/localnerve/fred/contents/pages/home.md", 73 | "format": "markdown", 74 | "models": [ 75 | "LocalBusiness", 76 | "SiteInfo", 77 | "Settings" 78 | ] 79 | } 80 | } 81 | }, 82 | "about": { 83 | "path": "/about", 84 | "method": "get", 85 | "page": "about", 86 | "label": "About", 87 | "pageTitle": "About", 88 | "component": "ContentPage", 89 | "mainNav": true, 90 | "background": "4.jpg", 91 | "order": 1, 92 | "priority": 1, 93 | "siteMeta": { 94 | "priority": 0.5, 95 | "changefreq": "monthly" 96 | }, 97 | "action": { 98 | "name": "page", 99 | "params": { 100 | "resource": "about", 101 | "url": "https://api.github.com/repos/localnerve/fred/contents/pages/about.md", 102 | "format": "markdown", 103 | "models": [ 104 | "LocalBusiness", 105 | "SiteInfo", 106 | "Settings" 107 | ] 108 | } 109 | } 110 | }, 111 | "contact": { 112 | "path": "/contact", 113 | "method": "get", 114 | "page": "contact", 115 | "label": "Contact", 116 | "pageTitle": "Contact", 117 | "component": "Contact", 118 | "mainNav": true, 119 | "background": "5.jpg", 120 | "order": 2, 121 | "priority": 1, 122 | "siteMeta": { 123 | "priority": 0.8, 124 | "changefreq": "monthly" 125 | }, 126 | "action": { 127 | "name": "page", 128 | "params": { 129 | "resource": "contact", 130 | "url": "https://api.github.com/repos/localnerve/fred/contents/pages/contact.json", 131 | "format": "json", 132 | "models": [ 133 | "LocalBusiness", 134 | "SiteInfo", 135 | "Settings" 136 | ] 137 | } 138 | } 139 | } 140 | }, 141 | "models": { 142 | "LocalBusiness": { 143 | "legalName": "LocalNerve, LLC", 144 | "alternateName": "LocalNerve", 145 | "url": "http://localnerve.com", 146 | "telephone": "207-370-8005", 147 | "email": "alex@localnerve.com", 148 | "address": { 149 | "streetAddress": "PO BOX 95", 150 | "addressRegion": "ME", 151 | "addressLocality": "Windham", 152 | "addressCountry": "USA", 153 | "postalCode": "04062", 154 | "postOfficeBoxNumber": "95" 155 | } 156 | }, 157 | "SiteInfo": { 158 | "site": { 159 | "name": "Contactor", 160 | "tagLine": "A Fluxible, Reactive reference app with a good prognosis.", 161 | "bullets": ["Fluxible", "React", "Data Driven"] 162 | }, 163 | "license": { 164 | "type": "BSD", 165 | "url": "https://github.com/localnerve/react-pwa-reference/blob/master/LICENSE.md", 166 | "statement": "All code licensed under LocalNerve BSD License." 167 | }, 168 | "developer": { 169 | "name": "LocalNerve", 170 | "byLine": "Developed by LocalNerve", 171 | "url": "http://localnerve.com" 172 | }, 173 | "social": { 174 | "github": "https://github.com/localnerve/react-pwa-reference", 175 | "twitter": "https://twitter.com/localnerve", 176 | "facebook": "https://facebook.com/localnerve", 177 | "linkedin": "https://www.linkedin.com/in/alexpaulgrant", 178 | "googleplus": "https://plus.google.com/118303375063449115817/" 179 | } 180 | }, 181 | "Settings": { 182 | "component": "settings", 183 | "split": "settings", 184 | "resource": "settings", 185 | "url": "https://api.github.com/repos/localnerve/fred/contents/pages/settings.json", 186 | "format": "json", 187 | "action": { 188 | "name": "settings", 189 | "params": { 190 | } 191 | }, 192 | "models": [ 193 | "LocalBusiness", 194 | "SiteInfo", 195 | "Settings" 196 | ] 197 | } 198 | } 199 | } 200 | --------------------------------------------------------------------------------