diff --git a/404.html b/404.html index 1ed41203..1fdc32b3 100644 --- a/404.html +++ b/404.html @@ -5,7 +5,7 @@ Page Not Found | Geo Garden Club - + diff --git a/assets/js/6b1fc3de.647b4422.js b/assets/js/6b1fc3de.647b4422.js deleted file mode 100644 index d12d52f6..00000000 --- a/assets/js/6b1fc3de.647b4422.js +++ /dev/null @@ -1 +0,0 @@ -"use strict";(self.webpackChunkgeogardenclub_github_io=self.webpackChunkgeogardenclub_github_io||[]).push([[8754],{8312:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>s,default:()=>c,frontMatter:()=>a,metadata:()=>r,toc:()=>h});var o=n(5893),i=n(1151);const a={hide_table_of_contents:!1},s="Installation",r={id:"develop/installation",title:"Installation",description:"Flutter",source:"@site/docs/develop/installation.md",sourceDirName:"develop",slug:"/develop/installation",permalink:"/docs/develop/installation",draft:!1,unlisted:!1,tags:[],version:"current",frontMatter:{hide_table_of_contents:!1},sidebar:"developSidebar",previous:{title:"Onboarding",permalink:"/docs/develop/onboarding"},next:{title:"Scripts",permalink:"/docs/develop/scripts"}},l={},h=[{value:"Flutter",id:"flutter",level:2},{value:"Tool versions",id:"tool-versions",level:2},{value:"Install the app",id:"install-the-app",level:2},{value:"Run the app",id:"run-the-app",level:2},{value:"...with the production database",id:"with-the-production-database",level:3},{value:"...with test data",id:"with-test-data",level:3},{value:"Integration tests",id:"integration-tests",level:2},{value:"Editor",id:"editor",level:2},{value:"Monarch",id:"monarch",level:2}];function d(e){const t={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",mdxAdmonitionTitle:"mdxAdmonitionTitle",p:"p",pre:"pre",...(0,i.a)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(t.header,{children:(0,o.jsx)(t.h1,{id:"installation",children:"Installation"})}),"\n",(0,o.jsx)(t.h2,{id:"flutter",children:"Flutter"}),"\n",(0,o.jsxs)(t.p,{children:["Follow the ",(0,o.jsx)(t.a,{href:"https://docs.flutter.dev/get-started/install",children:"Flutter Installation"})," instructions."]}),"\n",(0,o.jsxs)(t.p,{children:["The ",(0,o.jsx)(t.a,{href:"https://courses.ics.hawaii.edu/mobile-application-development/modules/flutterpalooza/",children:"Flutterpalooza"})," module has some additional documentation."]}),"\n",(0,o.jsxs)(t.p,{children:["It is important that you are able to run ",(0,o.jsx)(t.code,{children:"flutter doctor"})," without error:"]}),"\n",(0,o.jsx)(t.pre,{children:(0,o.jsx)(t.code,{className:"language-shell",children:"% flutter doctor\nDoctor summary (to see all details, run flutter doctor -v):\n[\u2713] Flutter (Channel stable, 3.10.0, on macOS 13.3.1 22E772610a darwin-arm64, locale en-US)\n[\u2713] Android toolchain - develop for Android devices (Android SDK version 33.0.1)\n[\u2713] Xcode - develop for iOS and macOS (Xcode 14.3)\n[\u2713] Chrome - develop for the web\n[\u2713] Android Studio (version 2021.3)\n[\u2713] IntelliJ IDEA Ultimate Edition (version 2023.1)\n[\u2713] Connected device (3 available)\n[\u2713] Network resources\n\n\u2022 No issues found!\n"})}),"\n",(0,o.jsx)(t.h2,{id:"tool-versions",children:"Tool versions"}),"\n",(0,o.jsx)(t.p,{children:"It turns out that getting Flutter Doctor to report no issues is not enough. There are other tech stack components which must also be at an appropriate version in order for the app to run successfully during development. In some cases, there might be multiple possible versions, but every developer must be using the same version of the tools; otherwise the app will run for some developers but not for others."}),"\n",(0,o.jsxs)(t.p,{children:["In order to help developers keep on the same page with respect to tech stack versions, we have implemented a script called ",(0,o.jsx)(t.code,{children:"run_tool_versions.sh"})," that prints versions of the tech stack tools important to getting GGC to run correctly. Our Discord server has a channel called ",(0,o.jsx)(t.code,{children:"#tool-versions"})," where developers post the output from running this script. This helps all of us to stay on the same page, and when one person updates a component of the tech stack, they can post the new output from the script so that everyone else can update their tech stack as well."]}),"\n",(0,o.jsxs)(t.p,{children:["Here is an example of the output from ",(0,o.jsx)(t.code,{children:"run_tool_versions.sh"}),":"]}),"\n",(0,o.jsx)(t.pre,{children:(0,o.jsx)(t.code,{className:"language-shell",children:"% ./run_tool_versions.sh\nComputer Name: PMJ M2 2023\nCocoapods 1.15.2\nDart SDK version: 3.5.4 \nFlutter 3.24.4 \nMacOS 14.6.1\nMonarch version 2.2.7\nruby 3.2.2 (202\nXcode 16.0\n"})}),"\n",(0,o.jsx)(t.p,{children:"Be sure to run this script locally and check it against the output from the Discord channel. If there are differences, try to update your tech stack to match the versions in the Discord channel."}),"\n",(0,o.jsx)(t.p,{children:"Note that all GGC development is done using macOS. We do not support Windows or Unix-based development at this time."}),"\n",(0,o.jsx)(t.h2,{id:"install-the-app",children:"Install the app"}),"\n",(0,o.jsxs)(t.p,{children:["To install the app, first clone the sources from ",(0,o.jsx)(t.a,{href:"https://github.com/geogardenclub/ggc_app",children:"https://github.com/geogardenclub/ggc_app"}),"."]}),"\n",(0,o.jsxs)(t.p,{children:["Next, cd into the ggc_app directory and run ",(0,o.jsx)(t.code,{children:"flutter pub get"}),". For example:"]}),"\n",(0,o.jsx)(t.pre,{children:(0,o.jsx)(t.code,{children:'% flutter pub get\nRunning "flutter pub get" in ggc_app...\nResolving dependencies... (1.4s)\n _fe_analyzer_shared 58.0.0 (59.0.0 available)\n analyzer 5.10.0 (5.11.1 available)\n async 2.10.0 (2.11.0 available)\n build_daemon 3.1.1 (4.0.0 available)\n build_runner 2.3.3 (2.4.1 available)\n characters 1.2.1 (1.3.0 available)\n collection 1.17.0 (1.17.1 available)\n flex_color_scheme 7.0.3 (7.0.4 available)\n flutter_form_builder 7.8.0 (8.0.0 available)\n flutter_riverpod 2.3.5 (2.3.6 available)\n flutter_svg 1.1.6 (2.0.5 available)\n go_router 6.5.7 (6.5.8 available)\n intl 0.17.0 (0.18.1 available)\n js 0.6.5 (0.6.7 available)\n matcher 0.12.13 (0.12.15 available)\n material_color_utilities 0.2.0 (0.3.0 available)\n meta 1.8.0 (1.9.1 available)\n monarch 3.0.1 (3.4.0 available)\n path 1.8.2 (1.8.3 available)\n path_provider_windows 2.1.5 (2.1.6 available)\n petitparser 5.1.0 (5.4.0 available)\n riverpod 2.3.5 (2.3.6 available)\n source_span 1.9.1 (1.10.0 available)\n sqflite 2.2.6 (2.2.7 available)\n sqflite_common 2.4.3 (2.4.4 available)\n synchronized 3.0.1 (3.1.0 available)\n test_api 0.4.16 (0.5.2 available)\n vm_service 11.3.0 (11.4.0 available)\n win32 3.1.4 (4.1.3 available)\n xml 6.2.2 (6.3.0 available)\nGot dependencies!\n'})}),"\n",(0,o.jsx)(t.h2,{id:"run-the-app",children:"Run the app"}),"\n",(0,o.jsx)(t.h3,{id:"with-the-production-database",children:"...with the production database"}),"\n",(0,o.jsxs)(t.p,{children:["To check that the ggc_app runs in your development environment, the simplest thing to do is to invoke ",(0,o.jsx)(t.code,{children:"flutter run"})," and select Chrome:"]}),"\n",(0,o.jsx)(t.pre,{children:(0,o.jsx)(t.code,{children:'% flutter run\nMultiple devices found:\nmacOS (desktop) \u2022 macos \u2022 darwin-arm64 \u2022 macOS 13.3.1 22E261 darwin-arm64\nChrome (web) \u2022 chrome \u2022 web-javascript \u2022 Google Chrome 112.0.5615.137\n[1]: macOS (macos)\n[2]: Chrome (chrome)\nPlease choose one (To quit, press "q/Q"): 2\nLaunching lib/main.dart on Chrome in debug mode...\nWaiting for connection from debug service on Chrome... 16.5s\nThis app is linked to the debug service: ws://127.0.0.1:58007/FT3-VNs7AGk=/ws\nDebug service listening on ws://127.0.0.1:58007/FT3-VNs7AGk=/ws\n\n\ud83d\udcaa Running with sound null safety \ud83d\udcaa\n\n\ud83d\udd25 To hot restart changes while running, press "r" or "R".\nFor a more detailed help message, press "h". To quit, press "q".\n\nAn Observatory debugger and profiler on Chrome is available at: http://127.0.0.1:58007/FT3-VNs7AGk=\nWARNING: found an existing tag. Flutter Web uses its own viewport configuration for better compatibility with\nFlutter. This tag will be replaced.\nThe Flutter DevTools debugger and profiler on Chrome is available at: http://127.0.0.1:9100?uri=http://127.0.0.1:58007/FT3-VNs7AGk=\n\n'})}),"\n",(0,o.jsx)(t.p,{children:"If all goes well, you should see a window similar to the following appear:"}),"\n",(0,o.jsx)("img",{src:"/img/develop/getting-started/installation-ggc-chrome.png"}),"\n",(0,o.jsx)(t.p,{children:"This means the app is up and is connected to the production Firebase database. At this point, you can login as one of the existing users to make sure communication with Firebase is working correctly. Contact Philip for credentials."}),"\n",(0,o.jsx)(t.h3,{id:"with-test-data",children:"...with test data"}),"\n",(0,o.jsxs)(t.p,{children:["During development, it is often safer and more appropriate to not manipulate the production database. As an alternative, instead of invoking ",(0,o.jsx)(t.code,{children:"flutter run"}),", you can invoke ",(0,o.jsx)(t.code,{children:"flutter run lib/main_test_fixture.dart"}),":"]}),"\n",(0,o.jsx)(t.pre,{children:(0,o.jsx)(t.code,{className:"language-shell",children:'~/GitHub/geogardenclub/ggc_app $ flutter run lib/main_test_fixture.dart\nLaunching lib/main_test_fixture.dart on iPhone 15 Pro in debug mode...\nRunning Xcode build... \n \u2514\u2500Compiling, linking and signing... 7.2s\nXcode build done. 45.7s\nSyncing files to device iPhone 15 Pro... 149ms\n\nFlutter run key commands.\nr Hot reload. \ud83d\udd25\ud83d\udd25\ud83d\udd25\nR Hot restart.\nh List all available interactive commands.\nd Detach (terminate "flutter run" but leave application running).\nc Clear the screen\nq Quit (terminate the application on the device).\n\nA Dart VM Service on iPhone 15 Pro is available at: http://127.0.0.1:64617/Tfq60_DovMo=/\nThe Flutter DevTools debugger and profiler on iPhone 15 Pro is available at:\nhttp://127.0.0.1:9102?uri=http://127.0.0.1:64617/Tfq60_DovMo=/\n'})}),"\n",(0,o.jsxs)(t.admonition,{type:"info",children:[(0,o.jsx)(t.mdxAdmonitionTitle,{}),(0,o.jsx)(t.p,{children:'In IntelliJ, you can create a "Run Configuration" that enables you to run with the test database by clicking the green arrow at the top of the IntelliJ window.'})]}),"\n",(0,o.jsxs)(t.p,{children:["This command overrides the Riverpod providers so that they load the test fixture data in ",(0,o.jsx)(t.code,{children:"assets/test/fixture1"}),". Note that changes you make with the UI are never written to these files, so if you reload the system during development, the app state will be restored to the test fixture state. However, as long as you do not reload, changes to the data are reflected in the UI, making this a good way to test out changes to the system without fear of affecting the production database in a negative manner."]}),"\n",(0,o.jsx)(t.h2,{id:"integration-tests",children:"Integration tests"}),"\n",(0,o.jsxs)(t.p,{children:["The next step is to ensure that you can run the integration tests. Please follow the instructions on the ",(0,o.jsx)(t.a,{href:"/docs/develop/quality-assurance/testing",children:"Testing"})," page. If you cannot run the tests without encountering a test failure, please contact a developer for assistance."]}),"\n",(0,o.jsx)(t.h2,{id:"editor",children:"Editor"}),"\n",(0,o.jsx)(t.p,{children:"There are three good choices for your Editor: Visual Studio, Android Studio, or IntelliJ IDEA Ultimate (with the Dart and Flutter plugins, which makes it almost equivalent to Android Studio)."}),"\n",(0,o.jsx)(t.p,{children:"With IntelliJ IDEA Ultimate, after bringing up the project, you should see a run toolbar at the top which gives you (on a Mac) the option of opening the iOS simulator:"}),"\n",(0,o.jsx)("img",{src:"/img/develop/getting-started/installation-open-ios.png"}),"\n",(0,o.jsx)(t.p,{children:"After opening the simulator, it should appear and you should be able to emulate the system on an iOS device:"}),"\n",(0,o.jsx)("img",{src:"/img/develop/getting-started/installation-run-ios.png"}),"\n",(0,o.jsx)(t.p,{children:"It takes a couple of minutes to do all of the XCode shenanigans the first time you run it, but eventually you should see something like the following:"}),"\n",(0,o.jsx)("img",{src:"/img/develop/getting-started/installation-run-ios-2.png"}),"\n",(0,o.jsx)(t.p,{children:"As before, consult with Philip for login credentials."}),"\n",(0,o.jsx)(t.h2,{id:"monarch",children:"Monarch"}),"\n",(0,o.jsxs)(t.p,{children:["According to their home page, ",(0,o.jsx)(t.a,{href:"https://monarchapp.io/",children:"Monarch"}),' is a "tool for building Flutter widgets in isolation. It makes it easy to build, test and debug complex UIs." Monarch is basically a Flutter port of React Storybook, which is popular in React UI development.']}),"\n",(0,o.jsxs)(t.p,{children:["Follow the ",(0,o.jsx)(t.a,{href:"https://monarchapp.io/docs/install",children:"Monarch installation instructions"})," to install the tool."]}),"\n",(0,o.jsxs)(t.p,{children:["Then, invoke ",(0,o.jsx)(t.code,{children:"./run_monarch.sh"}),":"]}),"\n",(0,o.jsx)(t.p,{children:"You will see the Monarch UI appear:"}),"\n",(0,o.jsx)("img",{src:"/img/develop/getting-started/monarch.png"}),"\n",(0,o.jsx)(t.p,{children:'Select one of our themes (currently, "Green Theme: Light"). Then select a story, such as "showHomeScreenTasks", and Monarch will show the story:'}),"\n",(0,o.jsx)("img",{src:"/img/develop/getting-started/monarch-2.png"}),"\n",(0,o.jsxs)(t.p,{children:["Monarch loads the data in the ",(0,o.jsx)(t.code,{children:"test/fixture1"})," files to populate screens."]}),"\n",(0,o.jsx)(t.p,{children:"At present, Monarch seems most useful when experimenting with different themes. Monarch allows you to switch themes and see the results on your widget(s) of interest by simply selecting from the Theme menu. In contrast, in the simulator, you would need to navigate from the screen displaying the widget(s) of interest to the Settings page (in order to select the new theme), and then navigate back to the screen displaying the widget(s) of interest."}),"\n",(0,o.jsxs)(t.admonition,{title:"Ignore Firebase exceptions",type:"info",children:[(0,o.jsx)(t.p,{children:"Unfortunately, the console window will print out error messages similar to the following when using Monarch:"}),(0,o.jsx)(t.pre,{children:(0,o.jsx)(t.code,{className:"language-shell",children:"\u2550\u2550\u2561 EXCEPTION CAUGHT BY MONARCH \u255e\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\nThe following message was thrown while a story was selected:\n[core/no-app] No Firebase App '[DEFAULT]' has been created - call Firebase.initializeApp()\n"})}),(0,o.jsx)(t.p,{children:"You can ignore these messages as Monarch does not actually invoke Firebase."})]})]})}function c(e={}){const{wrapper:t}={...(0,i.a)(),...e.components};return t?(0,o.jsx)(t,{...e,children:(0,o.jsx)(d,{...e})}):d(e)}},1151:(e,t,n)=>{n.d(t,{Z:()=>r,a:()=>s});var o=n(7294);const i={},a=o.createContext(i);function s(e){const t=o.useContext(a);return o.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function r(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:s(e.components),o.createElement(a.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/6b1fc3de.7c965e97.js b/assets/js/6b1fc3de.7c965e97.js new file mode 100644 index 00000000..33198dd9 --- /dev/null +++ b/assets/js/6b1fc3de.7c965e97.js @@ -0,0 +1 @@ +"use strict";(self.webpackChunkgeogardenclub_github_io=self.webpackChunkgeogardenclub_github_io||[]).push([[8754],{8312:(e,t,n)=>{n.r(t),n.d(t,{assets:()=>l,contentTitle:()=>s,default:()=>c,frontMatter:()=>a,metadata:()=>r,toc:()=>h});var o=n(5893),i=n(1151);const a={hide_table_of_contents:!1},s="Installation",r={id:"develop/installation",title:"Installation",description:"Flutter",source:"@site/docs/develop/installation.md",sourceDirName:"develop",slug:"/develop/installation",permalink:"/docs/develop/installation",draft:!1,unlisted:!1,tags:[],version:"current",frontMatter:{hide_table_of_contents:!1},sidebar:"developSidebar",previous:{title:"Onboarding",permalink:"/docs/develop/onboarding"},next:{title:"Scripts",permalink:"/docs/develop/scripts"}},l={},h=[{value:"Flutter",id:"flutter",level:2},{value:"Tool versions",id:"tool-versions",level:2},{value:"Install the app",id:"install-the-app",level:2},{value:"Run the app",id:"run-the-app",level:2},{value:"...with the production database",id:"with-the-production-database",level:3},{value:"...with test data",id:"with-test-data",level:3},{value:"Integration tests",id:"integration-tests",level:2},{value:"Editor",id:"editor",level:2},{value:"Monarch",id:"monarch",level:2}];function d(e){const t={a:"a",admonition:"admonition",code:"code",h1:"h1",h2:"h2",h3:"h3",header:"header",mdxAdmonitionTitle:"mdxAdmonitionTitle",p:"p",pre:"pre",...(0,i.a)(),...e.components};return(0,o.jsxs)(o.Fragment,{children:[(0,o.jsx)(t.header,{children:(0,o.jsx)(t.h1,{id:"installation",children:"Installation"})}),"\n",(0,o.jsx)(t.h2,{id:"flutter",children:"Flutter"}),"\n",(0,o.jsxs)(t.p,{children:["Follow the ",(0,o.jsx)(t.a,{href:"https://docs.flutter.dev/get-started/install",children:"Flutter Installation"})," instructions."]}),"\n",(0,o.jsxs)(t.p,{children:["It is important that you are able to run ",(0,o.jsx)(t.code,{children:"flutter doctor"})," without error:"]}),"\n",(0,o.jsx)(t.pre,{children:(0,o.jsx)(t.code,{className:"language-shell",children:"% flutter doctor\nDoctor summary (to see all details, run flutter doctor -v):\n[\u2713] Flutter (Channel stable, 3.10.0, on macOS 13.3.1 22E772610a darwin-arm64, locale en-US)\n[\u2713] Android toolchain - develop for Android devices (Android SDK version 33.0.1)\n[\u2713] Xcode - develop for iOS and macOS (Xcode 14.3)\n[\u2713] Chrome - develop for the web\n[\u2713] Android Studio (version 2021.3)\n[\u2713] IntelliJ IDEA Ultimate Edition (version 2023.1)\n[\u2713] Connected device (3 available)\n[\u2713] Network resources\n\n\u2022 No issues found!\n"})}),"\n",(0,o.jsx)(t.h2,{id:"tool-versions",children:"Tool versions"}),"\n",(0,o.jsx)(t.p,{children:"It turns out that getting Flutter Doctor to report no issues is not enough. There are other tech stack components which must also be at an appropriate version in order for the app to run successfully during development. In some cases, there might be multiple possible versions, but every developer must be using the same version of the tools; otherwise the app will run for some developers but not for others."}),"\n",(0,o.jsxs)(t.p,{children:["In order to help developers ensure that they have the same tech stack environment, we have implemented a script called ",(0,o.jsx)(t.code,{children:"run_tool_versions.sh"})," that prints versions of the tech stack tools important to getting GGC to run correctly."]}),"\n",(0,o.jsxs)(t.p,{children:["Our Discord server has a channel called ",(0,o.jsx)(t.code,{children:"#tool-versions"})," where developers post the output from running this script. This helps all of us to stay on the same page, and when one person updates a component of the tech stack, they can post the new output from the script so that everyone else can update their tech stack to match the new version(s) of components."]}),"\n",(0,o.jsxs)(t.p,{children:["Here is an example of the output from ",(0,o.jsx)(t.code,{children:"run_tool_versions.sh"}),":"]}),"\n",(0,o.jsx)(t.pre,{children:(0,o.jsx)(t.code,{className:"language-shell",children:"% ./run_tool_versions.sh\nComputer Name: PMJ M2 2023\nCocoapods 1.15.2\nDart SDK version: 3.5.4 \nFlutter 3.24.4 \nMacOS 14.6.1\nMonarch version 2.2.7\nruby 3.2.2 (202\nXcode 16.0\n"})}),"\n",(0,o.jsx)(t.p,{children:"Be sure to run this script locally and check it against the output from the Discord channel. If there are differences, try to update your tech stack to match the versions in the Discord channel."}),"\n",(0,o.jsx)(t.p,{children:"Note that all GGC development is done using macOS. We do not support Windows or Unix-based development at this time."}),"\n",(0,o.jsx)(t.h2,{id:"install-the-app",children:"Install the app"}),"\n",(0,o.jsxs)(t.p,{children:["To install the app, first clone the sources from ",(0,o.jsx)(t.a,{href:"https://github.com/geogardenclub/ggc_app",children:"https://github.com/geogardenclub/ggc_app"}),"."]}),"\n",(0,o.jsxs)(t.p,{children:["Next, cd into the ggc_app directory and run ",(0,o.jsx)(t.code,{children:"flutter pub get"}),". For example:"]}),"\n",(0,o.jsx)(t.pre,{children:(0,o.jsx)(t.code,{children:'% flutter pub get\nRunning "flutter pub get" in ggc_app...\nResolving dependencies... (1.4s)\n _fe_analyzer_shared 58.0.0 (59.0.0 available)\n analyzer 5.10.0 (5.11.1 available)\n async 2.10.0 (2.11.0 available)\n build_daemon 3.1.1 (4.0.0 available)\n build_runner 2.3.3 (2.4.1 available)\n characters 1.2.1 (1.3.0 available)\n collection 1.17.0 (1.17.1 available)\n flex_color_scheme 7.0.3 (7.0.4 available)\n flutter_form_builder 7.8.0 (8.0.0 available)\n flutter_riverpod 2.3.5 (2.3.6 available)\n flutter_svg 1.1.6 (2.0.5 available)\n go_router 6.5.7 (6.5.8 available)\n intl 0.17.0 (0.18.1 available)\n js 0.6.5 (0.6.7 available)\n matcher 0.12.13 (0.12.15 available)\n material_color_utilities 0.2.0 (0.3.0 available)\n meta 1.8.0 (1.9.1 available)\n monarch 3.0.1 (3.4.0 available)\n path 1.8.2 (1.8.3 available)\n path_provider_windows 2.1.5 (2.1.6 available)\n petitparser 5.1.0 (5.4.0 available)\n riverpod 2.3.5 (2.3.6 available)\n source_span 1.9.1 (1.10.0 available)\n sqflite 2.2.6 (2.2.7 available)\n sqflite_common 2.4.3 (2.4.4 available)\n synchronized 3.0.1 (3.1.0 available)\n test_api 0.4.16 (0.5.2 available)\n vm_service 11.3.0 (11.4.0 available)\n win32 3.1.4 (4.1.3 available)\n xml 6.2.2 (6.3.0 available)\nGot dependencies!\n'})}),"\n",(0,o.jsx)(t.h2,{id:"run-the-app",children:"Run the app"}),"\n",(0,o.jsx)(t.h3,{id:"with-the-production-database",children:"...with the production database"}),"\n",(0,o.jsxs)(t.p,{children:["To check that the ggc_app runs in your development environment, the simplest thing to do is to invoke ",(0,o.jsx)(t.code,{children:"flutter run"})," and select Chrome:"]}),"\n",(0,o.jsx)(t.pre,{children:(0,o.jsx)(t.code,{children:'% flutter run\nMultiple devices found:\nmacOS (desktop) \u2022 macos \u2022 darwin-arm64 \u2022 macOS 13.3.1 22E261 darwin-arm64\nChrome (web) \u2022 chrome \u2022 web-javascript \u2022 Google Chrome 112.0.5615.137\n[1]: macOS (macos)\n[2]: Chrome (chrome)\nPlease choose one (To quit, press "q/Q"): 2\nLaunching lib/main.dart on Chrome in debug mode...\nWaiting for connection from debug service on Chrome... 16.5s\nThis app is linked to the debug service: ws://127.0.0.1:58007/FT3-VNs7AGk=/ws\nDebug service listening on ws://127.0.0.1:58007/FT3-VNs7AGk=/ws\n\n\ud83d\udcaa Running with sound null safety \ud83d\udcaa\n\n\ud83d\udd25 To hot restart changes while running, press "r" or "R".\nFor a more detailed help message, press "h". To quit, press "q".\n\nAn Observatory debugger and profiler on Chrome is available at: http://127.0.0.1:58007/FT3-VNs7AGk=\nWARNING: found an existing tag. Flutter Web uses its own viewport configuration for better compatibility with\nFlutter. This tag will be replaced.\nThe Flutter DevTools debugger and profiler on Chrome is available at: http://127.0.0.1:9100?uri=http://127.0.0.1:58007/FT3-VNs7AGk=\n\n'})}),"\n",(0,o.jsx)(t.p,{children:"If all goes well, you should see a window similar to the following appear:"}),"\n",(0,o.jsx)("img",{src:"/img/develop/getting-started/installation-ggc-chrome.png"}),"\n",(0,o.jsx)(t.p,{children:"This means the app is up and is connected to the production Firebase database. At this point, you can login as one of the existing users to make sure communication with Firebase is working correctly. Contact Philip for credentials."}),"\n",(0,o.jsx)(t.h3,{id:"with-test-data",children:"...with test data"}),"\n",(0,o.jsxs)(t.p,{children:["During development, it is often safer and more appropriate to not manipulate the production database. As an alternative, instead of invoking ",(0,o.jsx)(t.code,{children:"flutter run"}),", you can invoke ",(0,o.jsx)(t.code,{children:"flutter run lib/main_test_fixture.dart"}),":"]}),"\n",(0,o.jsx)(t.pre,{children:(0,o.jsx)(t.code,{className:"language-shell",children:'~/GitHub/geogardenclub/ggc_app $ flutter run lib/main_test_fixture.dart\nLaunching lib/main_test_fixture.dart on iPhone 15 Pro in debug mode...\nRunning Xcode build... \n \u2514\u2500Compiling, linking and signing... 7.2s\nXcode build done. 45.7s\nSyncing files to device iPhone 15 Pro... 149ms\n\nFlutter run key commands.\nr Hot reload. \ud83d\udd25\ud83d\udd25\ud83d\udd25\nR Hot restart.\nh List all available interactive commands.\nd Detach (terminate "flutter run" but leave application running).\nc Clear the screen\nq Quit (terminate the application on the device).\n\nA Dart VM Service on iPhone 15 Pro is available at: http://127.0.0.1:64617/Tfq60_DovMo=/\nThe Flutter DevTools debugger and profiler on iPhone 15 Pro is available at:\nhttp://127.0.0.1:9102?uri=http://127.0.0.1:64617/Tfq60_DovMo=/\n'})}),"\n",(0,o.jsxs)(t.admonition,{type:"info",children:[(0,o.jsx)(t.mdxAdmonitionTitle,{}),(0,o.jsx)(t.p,{children:'In IntelliJ, you can create a "Run Configuration" that enables you to run with the test database by clicking the green arrow at the top of the IntelliJ window.'})]}),"\n",(0,o.jsxs)(t.p,{children:["This command overrides the Riverpod providers so that they load the test fixture data in ",(0,o.jsx)(t.code,{children:"assets/test/fixture1"}),". Note that changes you make with the UI are never written to these files, so if you reload the system during development, the app state will be restored to the test fixture state. However, as long as you do not reload, changes to the data are reflected in the UI, making this a good way to test out changes to the system without fear of affecting the production database in a negative manner."]}),"\n",(0,o.jsx)(t.h2,{id:"integration-tests",children:"Integration tests"}),"\n",(0,o.jsxs)(t.p,{children:["The next step is to ensure that you can run the integration tests. Please follow the instructions on the ",(0,o.jsx)(t.a,{href:"/docs/develop/quality-assurance/testing",children:"Testing"})," page. If you cannot run the tests without encountering a test failure, please contact a developer for assistance."]}),"\n",(0,o.jsx)(t.h2,{id:"editor",children:"Editor"}),"\n",(0,o.jsx)(t.p,{children:"There are three good choices for your Editor: Visual Studio, Android Studio, or IntelliJ IDEA Ultimate (with the Dart and Flutter plugins, which makes it almost equivalent to Android Studio)."}),"\n",(0,o.jsx)(t.p,{children:"With IntelliJ IDEA Ultimate, after bringing up the project, you should see a run toolbar at the top which gives you (on a Mac) the option of opening the iOS simulator:"}),"\n",(0,o.jsx)("img",{src:"/img/develop/getting-started/installation-open-ios.png"}),"\n",(0,o.jsx)(t.p,{children:"After opening the simulator, it should appear and you should be able to emulate the system on an iOS device:"}),"\n",(0,o.jsx)("img",{src:"/img/develop/getting-started/installation-run-ios.png"}),"\n",(0,o.jsx)(t.p,{children:"It takes a couple of minutes to do all of the XCode shenanigans the first time you run it, but eventually you should see something like the following:"}),"\n",(0,o.jsx)("img",{src:"/img/develop/getting-started/installation-run-ios-2.png"}),"\n",(0,o.jsx)(t.p,{children:"As before, consult with Philip for login credentials."}),"\n",(0,o.jsx)(t.h2,{id:"monarch",children:"Monarch"}),"\n",(0,o.jsxs)(t.p,{children:["According to their home page, ",(0,o.jsx)(t.a,{href:"https://monarchapp.io/",children:"Monarch"}),' is a "tool for building Flutter widgets in isolation. It makes it easy to build, test and debug complex UIs." Monarch is basically a Flutter port of React Storybook, which is popular in React UI development.']}),"\n",(0,o.jsxs)(t.p,{children:["Follow the ",(0,o.jsx)(t.a,{href:"https://monarchapp.io/docs/install",children:"Monarch installation instructions"})," to install the tool."]}),"\n",(0,o.jsxs)(t.p,{children:["Then, invoke ",(0,o.jsx)(t.code,{children:"./run_monarch.sh"}),":"]}),"\n",(0,o.jsx)(t.p,{children:"You will see the Monarch UI appear:"}),"\n",(0,o.jsx)("img",{src:"/img/develop/getting-started/monarch.png"}),"\n",(0,o.jsx)(t.p,{children:'Select one of our themes (currently, "Green Theme: Light"). Then select a story, such as "showHomeScreenTasks", and Monarch will show the story:'}),"\n",(0,o.jsx)("img",{src:"/img/develop/getting-started/monarch-2.png"}),"\n",(0,o.jsxs)(t.p,{children:["Monarch loads the data in the ",(0,o.jsx)(t.code,{children:"test/fixture1"})," files to populate screens."]}),"\n",(0,o.jsx)(t.p,{children:"At present, Monarch seems most useful when experimenting with different themes. Monarch allows you to switch themes and see the results on your widget(s) of interest by simply selecting from the Theme menu. In contrast, in the simulator, you would need to navigate from the screen displaying the widget(s) of interest to the Settings page (in order to select the new theme), and then navigate back to the screen displaying the widget(s) of interest."}),"\n",(0,o.jsxs)(t.admonition,{title:"Ignore Firebase exceptions",type:"info",children:[(0,o.jsx)(t.p,{children:"Unfortunately, the console window will print out error messages similar to the following when using Monarch:"}),(0,o.jsx)(t.pre,{children:(0,o.jsx)(t.code,{className:"language-shell",children:"\u2550\u2550\u2561 EXCEPTION CAUGHT BY MONARCH \u255e\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\u2550\nThe following message was thrown while a story was selected:\n[core/no-app] No Firebase App '[DEFAULT]' has been created - call Firebase.initializeApp()\n"})}),(0,o.jsx)(t.p,{children:"You can ignore these messages as Monarch does not actually invoke Firebase."})]})]})}function c(e={}){const{wrapper:t}={...(0,i.a)(),...e.components};return t?(0,o.jsx)(t,{...e,children:(0,o.jsx)(d,{...e})}):d(e)}},1151:(e,t,n)=>{n.d(t,{Z:()=>r,a:()=>s});var o=n(7294);const i={},a=o.createContext(i);function s(e){const t=o.useContext(a);return o.useMemo((function(){return"function"==typeof e?e(t):{...t,...e}}),[t,e])}function r(e){let t;return t=e.disableParentContext?"function"==typeof e.components?e.components(i):e.components||i:s(e.components),o.createElement(a.Provider,{value:t},e.children)}}}]); \ No newline at end of file diff --git a/assets/js/runtime~main.4fdd1973.js b/assets/js/runtime~main.deb6f197.js similarity index 72% rename from assets/js/runtime~main.4fdd1973.js rename to assets/js/runtime~main.deb6f197.js index 1d3f2941..d96765e3 100644 --- a/assets/js/runtime~main.4fdd1973.js +++ b/assets/js/runtime~main.deb6f197.js @@ -1 +1 @@ -(()=>{"use strict";var e,a,c,b,f,d={},r={};function t(e){var a=r[e];if(void 0!==a)return a.exports;var c=r[e]={exports:{}};return d[e].call(c.exports,c,c.exports,t),c.exports}t.m=d,e=[],t.O=(a,c,b,f)=>{if(!c){var d=1/0;for(i=0;i=f)&&Object.keys(t.O).every((e=>t.O[e](c[o])))?c.splice(o--,1):(r=!1,f0&&e[i-1][2]>f;i--)e[i]=e[i-1];e[i]=[c,b,f]},t.n=e=>{var a=e&&e.__esModule?()=>e.default:()=>e;return t.d(a,{a:a}),a},c=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,t.t=function(e,b){if(1&b&&(e=this(e)),8&b)return e;if("object"==typeof e&&e){if(4&b&&e.__esModule)return e;if(16&b&&"function"==typeof e.then)return e}var f=Object.create(null);t.r(f);var d={};a=a||[null,c({}),c([]),c(c)];for(var r=2&b&&e;"object"==typeof r&&!~a.indexOf(r);r=c(r))Object.getOwnPropertyNames(r).forEach((a=>d[a]=()=>e[a]));return d.default=()=>e,t.d(f,d),f},t.d=(e,a)=>{for(var c in a)t.o(a,c)&&!t.o(e,c)&&Object.defineProperty(e,c,{enumerable:!0,get:a[c]})},t.f={},t.e=e=>Promise.all(Object.keys(t.f).reduce(((a,c)=>(t.f[c](e,a),a)),[])),t.u=e=>"assets/js/"+({1:"ff0b8175",183:"96083bb9",186:"a8521eb9",196:"505d7517",200:"a6327429",234:"39838d4e",403:"3ad77611",814:"95f4d37c",825:"7be5f79d",860:"2cd8ab24",1130:"0f1bb644",1340:"e2299c6d",1420:"6741c1a9",1549:"1506d638",1585:"2450005c",1666:"c401bc0d",1744:"10921c5b",1868:"3fa09aed",1937:"49882d99",2535:"814f3328",2743:"968b4846",2967:"e4eb6786",3029:"afab5b7c",3085:"1f391b9e",3089:"a6aa9e1f",3560:"17d8eee1",3608:"9e4087bc",3629:"aba21aa0",3844:"772c3429",4e3:"afc29949",4031:"f81c1134",4057:"c03baef0",4063:"31caa863",4076:"7d1225b6",4088:"0058b4c6",4195:"c4f5d8e4",4368:"a94703ab",4524:"e27695c2",4713:"bc03b1b7",5014:"38346c4b",5622:"70c70343",5857:"3e240fbf",5980:"a7456010",6033:"6f165e31",6041:"a9a08fef",6103:"ccc49370",6142:"bebdd554",6265:"906ac375",6414:"3d832522",6427:"59628a4d",6642:"c15d9823",6800:"2f9db241",6801:"7bda6e26",6906:"9ebba4ea",6957:"a5b8d3e9",6974:"af21c641",7222:"0bd3a280",7346:"f3759001",7393:"acecf23e",7414:"393be207",7540:"0f1af657",7664:"reactPlayerPreview",7918:"17896441",7937:"c48bbb24",8294:"3463d78f",8392:"ed0568ab",8518:"a7bd4aaa",8653:"ec0f34d7",8754:"6b1fc3de",8911:"682a0ea6",9208:"36994c47",9256:"3bea7cd1",9268:"ba771284",9572:"7d56ced7",9586:"3b4579e8",9601:"18fc9463",9661:"5e95c892",9866:"11f6a8a1",9929:"1863cff0"}[e]||e)+"."+{1:"a06d7a3a",183:"d2117bbc",186:"4c804139",196:"40c652f2",200:"3adcaf0a",234:"6da8b591",403:"9fc2a256",814:"4e08262b",825:"d42ee47b",860:"d7028e73",1130:"c05c53ae",1340:"11ae0623",1420:"aeb48ccb",1549:"7d1c392d",1585:"db463b44",1666:"ffe69db6",1744:"5ff58a23",1772:"3d06e0e2",1868:"bd4243ae",1937:"96ed6c84",2535:"0ba125c5",2700:"83aa9a75",2743:"67c47945",2967:"a7c4ab03",3029:"f223c5d2",3085:"3dba5538",3089:"911b8dd5",3560:"cffc9f0b",3608:"ee0c677a",3629:"eb980bea",3844:"84e52c31",4e3:"1038aca8",4031:"6f8546d9",4057:"efd80a40",4063:"097a8498",4076:"739b5077",4088:"7388c647",4195:"b92bf9f8",4368:"4aef8496",4524:"f13327a6",4713:"802bf1c8",5014:"bd156c61",5622:"e865676c",5655:"ab3e12ff",5857:"241b5abc",5980:"f93cbc61",6033:"fb906847",6041:"3cafd262",6103:"4990621e",6142:"9adb781d",6265:"ecc041e6",6414:"19d9c76b",6427:"2704a200",6642:"b756708b",6800:"2dc6905e",6801:"fd330214",6906:"df274206",6957:"ba87d584",6974:"242c3e8d",7222:"7b0ad8f2",7346:"277b9e7e",7393:"9d35c647",7414:"37f8208f",7540:"5d4247b4",7664:"e5a1011e",7918:"b96e81ff",7937:"881a7b56",8041:"e22d43c6",8294:"97dc70b8",8392:"40070c7f",8518:"eaa77d27",8653:"1c9ade88",8754:"647b4422",8911:"169cbed9",9208:"203bad01",9256:"0698ba6b",9268:"f1b885cf",9572:"aac6a3b6",9586:"82224d7d",9601:"e6c986e7",9661:"2dcb0623",9866:"6c00f0dc",9929:"e36f6a83"}[e]+".js",t.miniCssF=e=>{},t.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),t.o=(e,a)=>Object.prototype.hasOwnProperty.call(e,a),b={},f="geogardenclub-github-io:",t.l=(e,a,c,d)=>{if(b[e])b[e].push(a);else{var r,o;if(void 0!==c)for(var n=document.getElementsByTagName("script"),i=0;i{r.onerror=r.onload=null,clearTimeout(s);var f=b[e];if(delete b[e],r.parentNode&&r.parentNode.removeChild(r),f&&f.forEach((e=>e(c))),a)return a(c)},s=setTimeout(l.bind(null,void 0,{type:"timeout",target:r}),12e4);r.onerror=l.bind(null,r.onerror),r.onload=l.bind(null,r.onload),o&&document.head.appendChild(r)}},t.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},t.p="/",t.gca=function(e){return e={17896441:"7918",ff0b8175:"1","96083bb9":"183",a8521eb9:"186","505d7517":"196",a6327429:"200","39838d4e":"234","3ad77611":"403","95f4d37c":"814","7be5f79d":"825","2cd8ab24":"860","0f1bb644":"1130",e2299c6d:"1340","6741c1a9":"1420","1506d638":"1549","2450005c":"1585",c401bc0d:"1666","10921c5b":"1744","3fa09aed":"1868","49882d99":"1937","814f3328":"2535","968b4846":"2743",e4eb6786:"2967",afab5b7c:"3029","1f391b9e":"3085",a6aa9e1f:"3089","17d8eee1":"3560","9e4087bc":"3608",aba21aa0:"3629","772c3429":"3844",afc29949:"4000",f81c1134:"4031",c03baef0:"4057","31caa863":"4063","7d1225b6":"4076","0058b4c6":"4088",c4f5d8e4:"4195",a94703ab:"4368",e27695c2:"4524",bc03b1b7:"4713","38346c4b":"5014","70c70343":"5622","3e240fbf":"5857",a7456010:"5980","6f165e31":"6033",a9a08fef:"6041",ccc49370:"6103",bebdd554:"6142","906ac375":"6265","3d832522":"6414","59628a4d":"6427",c15d9823:"6642","2f9db241":"6800","7bda6e26":"6801","9ebba4ea":"6906",a5b8d3e9:"6957",af21c641:"6974","0bd3a280":"7222",f3759001:"7346",acecf23e:"7393","393be207":"7414","0f1af657":"7540",reactPlayerPreview:"7664",c48bbb24:"7937","3463d78f":"8294",ed0568ab:"8392",a7bd4aaa:"8518",ec0f34d7:"8653","6b1fc3de":"8754","682a0ea6":"8911","36994c47":"9208","3bea7cd1":"9256",ba771284:"9268","7d56ced7":"9572","3b4579e8":"9586","18fc9463":"9601","5e95c892":"9661","11f6a8a1":"9866","1863cff0":"9929"}[e]||e,t.p+t.u(e)},(()=>{var e={1303:0,532:0};t.f.j=(a,c)=>{var b=t.o(e,a)?e[a]:void 0;if(0!==b)if(b)c.push(b[2]);else if(/^(1303|532)$/.test(a))e[a]=0;else{var f=new Promise(((c,f)=>b=e[a]=[c,f]));c.push(b[2]=f);var d=t.p+t.u(a),r=new Error;t.l(d,(c=>{if(t.o(e,a)&&(0!==(b=e[a])&&(e[a]=void 0),b)){var f=c&&("load"===c.type?"missing":c.type),d=c&&c.target&&c.target.src;r.message="Loading chunk "+a+" failed.\n("+f+": "+d+")",r.name="ChunkLoadError",r.type=f,r.request=d,b[1](r)}}),"chunk-"+a,a)}},t.O.j=a=>0===e[a];var a=(a,c)=>{var b,f,d=c[0],r=c[1],o=c[2],n=0;if(d.some((a=>0!==e[a]))){for(b in r)t.o(r,b)&&(t.m[b]=r[b]);if(o)var i=o(t)}for(a&&a(c);n{"use strict";var e,a,c,f,b,d={},r={};function t(e){var a=r[e];if(void 0!==a)return a.exports;var c=r[e]={exports:{}};return d[e].call(c.exports,c,c.exports,t),c.exports}t.m=d,e=[],t.O=(a,c,f,b)=>{if(!c){var d=1/0;for(i=0;i=b)&&Object.keys(t.O).every((e=>t.O[e](c[o])))?c.splice(o--,1):(r=!1,b0&&e[i-1][2]>b;i--)e[i]=e[i-1];e[i]=[c,f,b]},t.n=e=>{var a=e&&e.__esModule?()=>e.default:()=>e;return t.d(a,{a:a}),a},c=Object.getPrototypeOf?e=>Object.getPrototypeOf(e):e=>e.__proto__,t.t=function(e,f){if(1&f&&(e=this(e)),8&f)return e;if("object"==typeof e&&e){if(4&f&&e.__esModule)return e;if(16&f&&"function"==typeof e.then)return e}var b=Object.create(null);t.r(b);var d={};a=a||[null,c({}),c([]),c(c)];for(var r=2&f&&e;"object"==typeof r&&!~a.indexOf(r);r=c(r))Object.getOwnPropertyNames(r).forEach((a=>d[a]=()=>e[a]));return d.default=()=>e,t.d(b,d),b},t.d=(e,a)=>{for(var c in a)t.o(a,c)&&!t.o(e,c)&&Object.defineProperty(e,c,{enumerable:!0,get:a[c]})},t.f={},t.e=e=>Promise.all(Object.keys(t.f).reduce(((a,c)=>(t.f[c](e,a),a)),[])),t.u=e=>"assets/js/"+({1:"ff0b8175",183:"96083bb9",186:"a8521eb9",196:"505d7517",200:"a6327429",234:"39838d4e",403:"3ad77611",814:"95f4d37c",825:"7be5f79d",860:"2cd8ab24",1130:"0f1bb644",1340:"e2299c6d",1420:"6741c1a9",1549:"1506d638",1585:"2450005c",1666:"c401bc0d",1744:"10921c5b",1868:"3fa09aed",1937:"49882d99",2535:"814f3328",2743:"968b4846",2967:"e4eb6786",3029:"afab5b7c",3085:"1f391b9e",3089:"a6aa9e1f",3560:"17d8eee1",3608:"9e4087bc",3629:"aba21aa0",3844:"772c3429",4e3:"afc29949",4031:"f81c1134",4057:"c03baef0",4063:"31caa863",4076:"7d1225b6",4088:"0058b4c6",4195:"c4f5d8e4",4368:"a94703ab",4524:"e27695c2",4713:"bc03b1b7",5014:"38346c4b",5622:"70c70343",5857:"3e240fbf",5980:"a7456010",6033:"6f165e31",6041:"a9a08fef",6103:"ccc49370",6142:"bebdd554",6265:"906ac375",6414:"3d832522",6427:"59628a4d",6642:"c15d9823",6800:"2f9db241",6801:"7bda6e26",6906:"9ebba4ea",6957:"a5b8d3e9",6974:"af21c641",7222:"0bd3a280",7346:"f3759001",7393:"acecf23e",7414:"393be207",7540:"0f1af657",7664:"reactPlayerPreview",7918:"17896441",7937:"c48bbb24",8294:"3463d78f",8392:"ed0568ab",8518:"a7bd4aaa",8653:"ec0f34d7",8754:"6b1fc3de",8911:"682a0ea6",9208:"36994c47",9256:"3bea7cd1",9268:"ba771284",9572:"7d56ced7",9586:"3b4579e8",9601:"18fc9463",9661:"5e95c892",9866:"11f6a8a1",9929:"1863cff0"}[e]||e)+"."+{1:"a06d7a3a",183:"d2117bbc",186:"4c804139",196:"40c652f2",200:"3adcaf0a",234:"6da8b591",403:"9fc2a256",814:"4e08262b",825:"d42ee47b",860:"d7028e73",1130:"c05c53ae",1340:"11ae0623",1420:"aeb48ccb",1549:"7d1c392d",1585:"db463b44",1666:"ffe69db6",1744:"5ff58a23",1772:"3d06e0e2",1868:"bd4243ae",1937:"96ed6c84",2535:"0ba125c5",2700:"83aa9a75",2743:"67c47945",2967:"a7c4ab03",3029:"f223c5d2",3085:"3dba5538",3089:"911b8dd5",3560:"cffc9f0b",3608:"ee0c677a",3629:"eb980bea",3844:"84e52c31",4e3:"1038aca8",4031:"6f8546d9",4057:"efd80a40",4063:"097a8498",4076:"739b5077",4088:"7388c647",4195:"b92bf9f8",4368:"4aef8496",4524:"f13327a6",4713:"802bf1c8",5014:"bd156c61",5622:"e865676c",5655:"ab3e12ff",5857:"241b5abc",5980:"f93cbc61",6033:"fb906847",6041:"3cafd262",6103:"4990621e",6142:"9adb781d",6265:"ecc041e6",6414:"19d9c76b",6427:"2704a200",6642:"b756708b",6800:"2dc6905e",6801:"fd330214",6906:"df274206",6957:"ba87d584",6974:"242c3e8d",7222:"7b0ad8f2",7346:"277b9e7e",7393:"9d35c647",7414:"37f8208f",7540:"5d4247b4",7664:"e5a1011e",7918:"b96e81ff",7937:"881a7b56",8041:"e22d43c6",8294:"97dc70b8",8392:"40070c7f",8518:"eaa77d27",8653:"1c9ade88",8754:"7c965e97",8911:"169cbed9",9208:"203bad01",9256:"0698ba6b",9268:"f1b885cf",9572:"aac6a3b6",9586:"82224d7d",9601:"e6c986e7",9661:"2dcb0623",9866:"6c00f0dc",9929:"e36f6a83"}[e]+".js",t.miniCssF=e=>{},t.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(e){if("object"==typeof window)return window}}(),t.o=(e,a)=>Object.prototype.hasOwnProperty.call(e,a),f={},b="geogardenclub-github-io:",t.l=(e,a,c,d)=>{if(f[e])f[e].push(a);else{var r,o;if(void 0!==c)for(var n=document.getElementsByTagName("script"),i=0;i{r.onerror=r.onload=null,clearTimeout(s);var b=f[e];if(delete f[e],r.parentNode&&r.parentNode.removeChild(r),b&&b.forEach((e=>e(c))),a)return a(c)},s=setTimeout(l.bind(null,void 0,{type:"timeout",target:r}),12e4);r.onerror=l.bind(null,r.onerror),r.onload=l.bind(null,r.onload),o&&document.head.appendChild(r)}},t.r=e=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},t.p="/",t.gca=function(e){return e={17896441:"7918",ff0b8175:"1","96083bb9":"183",a8521eb9:"186","505d7517":"196",a6327429:"200","39838d4e":"234","3ad77611":"403","95f4d37c":"814","7be5f79d":"825","2cd8ab24":"860","0f1bb644":"1130",e2299c6d:"1340","6741c1a9":"1420","1506d638":"1549","2450005c":"1585",c401bc0d:"1666","10921c5b":"1744","3fa09aed":"1868","49882d99":"1937","814f3328":"2535","968b4846":"2743",e4eb6786:"2967",afab5b7c:"3029","1f391b9e":"3085",a6aa9e1f:"3089","17d8eee1":"3560","9e4087bc":"3608",aba21aa0:"3629","772c3429":"3844",afc29949:"4000",f81c1134:"4031",c03baef0:"4057","31caa863":"4063","7d1225b6":"4076","0058b4c6":"4088",c4f5d8e4:"4195",a94703ab:"4368",e27695c2:"4524",bc03b1b7:"4713","38346c4b":"5014","70c70343":"5622","3e240fbf":"5857",a7456010:"5980","6f165e31":"6033",a9a08fef:"6041",ccc49370:"6103",bebdd554:"6142","906ac375":"6265","3d832522":"6414","59628a4d":"6427",c15d9823:"6642","2f9db241":"6800","7bda6e26":"6801","9ebba4ea":"6906",a5b8d3e9:"6957",af21c641:"6974","0bd3a280":"7222",f3759001:"7346",acecf23e:"7393","393be207":"7414","0f1af657":"7540",reactPlayerPreview:"7664",c48bbb24:"7937","3463d78f":"8294",ed0568ab:"8392",a7bd4aaa:"8518",ec0f34d7:"8653","6b1fc3de":"8754","682a0ea6":"8911","36994c47":"9208","3bea7cd1":"9256",ba771284:"9268","7d56ced7":"9572","3b4579e8":"9586","18fc9463":"9601","5e95c892":"9661","11f6a8a1":"9866","1863cff0":"9929"}[e]||e,t.p+t.u(e)},(()=>{var e={1303:0,532:0};t.f.j=(a,c)=>{var f=t.o(e,a)?e[a]:void 0;if(0!==f)if(f)c.push(f[2]);else if(/^(1303|532)$/.test(a))e[a]=0;else{var b=new Promise(((c,b)=>f=e[a]=[c,b]));c.push(f[2]=b);var d=t.p+t.u(a),r=new Error;t.l(d,(c=>{if(t.o(e,a)&&(0!==(f=e[a])&&(e[a]=void 0),f)){var b=c&&("load"===c.type?"missing":c.type),d=c&&c.target&&c.target.src;r.message="Loading chunk "+a+" failed.\n("+b+": "+d+")",r.name="ChunkLoadError",r.type=b,r.request=d,f[1](r)}}),"chunk-"+a,a)}},t.O.j=a=>0===e[a];var a=(a,c)=>{var f,b,d=c[0],r=c[1],o=c[2],n=0;if(d.some((a=>0!==e[a]))){for(f in r)t.o(r,f)&&(t.m[f]=r[f]);if(o)var i=o(t)}for(a&&a(c);n Blog | Geo Garden Club - + diff --git a/blog/2023/02/10/welcome.html b/blog/2023/02/10/welcome.html index 4efae2bf..a70781a9 100644 --- a/blog/2023/02/10/welcome.html +++ b/blog/2023/02/10/welcome.html @@ -5,7 +5,7 @@ Welcome, Geo Garden Club! Aloha, Agile Garden Club! | Geo Garden Club - + diff --git a/blog/archive.html b/blog/archive.html index cd3301e6..9362bc7c 100644 --- a/blog/archive.html +++ b/blog/archive.html @@ -5,7 +5,7 @@ Archive | Geo Garden Club - + diff --git a/docs/business.html b/docs/business.html index 5179993a..f57b6695 100644 --- a/docs/business.html +++ b/docs/business.html @@ -5,7 +5,7 @@ Welcome to the GGC Business Development Guide | Geo Garden Club - + diff --git a/docs/business/market-size.html b/docs/business/market-size.html index 497d3ae4..33bcb88e 100644 --- a/docs/business/market-size.html +++ b/docs/business/market-size.html @@ -5,7 +5,7 @@ Market Size Estimation (USA) | Geo Garden Club - + diff --git a/docs/business/milestones.html b/docs/business/milestones.html index e4806b2f..82981d48 100644 --- a/docs/business/milestones.html +++ b/docs/business/milestones.html @@ -5,7 +5,7 @@ Milestones | Geo Garden Club - + diff --git a/docs/business/roadmap.html b/docs/business/roadmap.html index edda07af..fea7ed9a 100644 --- a/docs/business/roadmap.html +++ b/docs/business/roadmap.html @@ -5,7 +5,7 @@ Roadmap | Geo Garden Club - + diff --git a/docs/develop.html b/docs/develop.html index 2225d0a1..ed66e567 100644 --- a/docs/develop.html +++ b/docs/develop.html @@ -5,7 +5,7 @@ Welcome to the GGC Developers Guide | Geo Garden Club - + diff --git a/docs/develop/architecture.html b/docs/develop/architecture.html index 4ab93b61..1aa887e3 100644 --- a/docs/develop/architecture.html +++ b/docs/develop/architecture.html @@ -5,7 +5,7 @@ Architecture | Geo Garden Club - + diff --git a/docs/develop/backups.html b/docs/develop/backups.html index 3fd4f7a5..00c15c68 100644 --- a/docs/develop/backups.html +++ b/docs/develop/backups.html @@ -5,7 +5,7 @@ Backups | Geo Garden Club - + diff --git a/docs/develop/data-model.html b/docs/develop/data-model.html index 5dff4cf0..a9e061da 100644 --- a/docs/develop/data-model.html +++ b/docs/develop/data-model.html @@ -5,7 +5,7 @@ Data Model | Geo Garden Club - + diff --git a/docs/develop/database-management.html b/docs/develop/database-management.html index 7b91efc2..6be6acbf 100644 --- a/docs/develop/database-management.html +++ b/docs/develop/database-management.html @@ -5,7 +5,7 @@ Database management | Geo Garden Club - + diff --git a/docs/develop/deployment.html b/docs/develop/deployment.html index df2cae5a..850f7810 100644 --- a/docs/develop/deployment.html +++ b/docs/develop/deployment.html @@ -5,7 +5,7 @@ Deployment | Geo Garden Club - + diff --git a/docs/develop/design/badges.html b/docs/develop/design/badges.html index f16d8793..84cc6e5f 100644 --- a/docs/develop/design/badges.html +++ b/docs/develop/design/badges.html @@ -5,7 +5,7 @@ Badges | Geo Garden Club - + diff --git a/docs/develop/design/data-mutation.html b/docs/develop/design/data-mutation.html index 5089e212..877d51a8 100644 --- a/docs/develop/design/data-mutation.html +++ b/docs/develop/design/data-mutation.html @@ -5,7 +5,7 @@ Data Mutation | Geo Garden Club - + diff --git a/docs/develop/design/features.html b/docs/develop/design/features.html index 6f55cc8c..5e25e880 100644 --- a/docs/develop/design/features.html +++ b/docs/develop/design/features.html @@ -5,7 +5,7 @@ Features | Geo Garden Club - + diff --git a/docs/develop/design/ids.html b/docs/develop/design/ids.html index 457ac83c..221d81fd 100644 --- a/docs/develop/design/ids.html +++ b/docs/develop/design/ids.html @@ -5,7 +5,7 @@ ID management | Geo Garden Club - + diff --git a/docs/develop/design/input-fields.html b/docs/develop/design/input-fields.html index 6a2bc372..4a7f3de7 100644 --- a/docs/develop/design/input-fields.html +++ b/docs/develop/design/input-fields.html @@ -5,7 +5,7 @@ Input Fields | Geo Garden Club - + diff --git a/docs/develop/design/with-widgets.html b/docs/develop/design/with-widgets.html index 8bcb4b77..1fc2d1f8 100644 --- a/docs/develop/design/with-widgets.html +++ b/docs/develop/design/with-widgets.html @@ -5,7 +5,7 @@ "With" widgets | Geo Garden Club - + diff --git a/docs/develop/installation.html b/docs/develop/installation.html index 5b1b32de..5f61c9e8 100644 --- a/docs/develop/installation.html +++ b/docs/develop/installation.html @@ -5,19 +5,19 @@ Installation | Geo Garden Club - +

Installation

Flutter​

Follow the Flutter Installation instructions.

-

The Flutterpalooza module has some additional documentation.

It is important that you are able to run flutter doctor without error:

% flutter doctor
Doctor summary (to see all details, run flutter doctor -v):
[✓] Flutter (Channel stable, 3.10.0, on macOS 13.3.1 22E772610a darwin-arm64, locale en-US)
[✓] Android toolchain - develop for Android devices (Android SDK version 33.0.1)
[✓] Xcode - develop for iOS and macOS (Xcode 14.3)
[✓] Chrome - develop for the web
[✓] Android Studio (version 2021.3)
[✓] IntelliJ IDEA Ultimate Edition (version 2023.1)
[✓] Connected device (3 available)
[✓] Network resources

• No issues found!

Tool versions​

It turns out that getting Flutter Doctor to report no issues is not enough. There are other tech stack components which must also be at an appropriate version in order for the app to run successfully during development. In some cases, there might be multiple possible versions, but every developer must be using the same version of the tools; otherwise the app will run for some developers but not for others.

-

In order to help developers keep on the same page with respect to tech stack versions, we have implemented a script called run_tool_versions.sh that prints versions of the tech stack tools important to getting GGC to run correctly. Our Discord server has a channel called #tool-versions where developers post the output from running this script. This helps all of us to stay on the same page, and when one person updates a component of the tech stack, they can post the new output from the script so that everyone else can update their tech stack as well.

+

In order to help developers ensure that they have the same tech stack environment, we have implemented a script called run_tool_versions.sh that prints versions of the tech stack tools important to getting GGC to run correctly.

+

Our Discord server has a channel called #tool-versions where developers post the output from running this script. This helps all of us to stay on the same page, and when one person updates a component of the tech stack, they can post the new output from the script so that everyone else can update their tech stack to match the new version(s) of components.

Here is an example of the output from run_tool_versions.sh:

% ./run_tool_versions.sh
Computer Name: PMJ M2 2023
Cocoapods 1.15.2
Dart SDK version: 3.5.4
Flutter 3.24.4
MacOS 14.6.1
Monarch version 2.2.7
ruby 3.2.2 (202
Xcode 16.0

Be sure to run this script locally and check it against the output from the Discord channel. If there are differences, try to update your tech stack to match the versions in the Discord channel.

diff --git a/docs/develop/onboarding.html b/docs/develop/onboarding.html index 48c1feb3..f3a43186 100644 --- a/docs/develop/onboarding.html +++ b/docs/develop/onboarding.html @@ -5,7 +5,7 @@ Onboarding | Geo Garden Club - + diff --git a/docs/develop/privacy.html b/docs/develop/privacy.html index 5c4f108e..5ef1da97 100644 --- a/docs/develop/privacy.html +++ b/docs/develop/privacy.html @@ -5,7 +5,7 @@ Privacy and security | Geo Garden Club - + diff --git a/docs/develop/quality-assurance/coding-standards.html b/docs/develop/quality-assurance/coding-standards.html index a3430498..077822eb 100644 --- a/docs/develop/quality-assurance/coding-standards.html +++ b/docs/develop/quality-assurance/coding-standards.html @@ -5,7 +5,7 @@ Coding Standards | Geo Garden Club - + diff --git a/docs/develop/quality-assurance/dart-analyze.html b/docs/develop/quality-assurance/dart-analyze.html index 0a468033..216af236 100644 --- a/docs/develop/quality-assurance/dart-analyze.html +++ b/docs/develop/quality-assurance/dart-analyze.html @@ -5,7 +5,7 @@ Dart analyze | Geo Garden Club - + diff --git a/docs/develop/quality-assurance/integrity-check.html b/docs/develop/quality-assurance/integrity-check.html index db1f0352..6a497b58 100644 --- a/docs/develop/quality-assurance/integrity-check.html +++ b/docs/develop/quality-assurance/integrity-check.html @@ -5,7 +5,7 @@ Database Integrity Checking | Geo Garden Club - + diff --git a/docs/develop/quality-assurance/testing.html b/docs/develop/quality-assurance/testing.html index 86a7d2e3..bc6faadb 100644 --- a/docs/develop/quality-assurance/testing.html +++ b/docs/develop/quality-assurance/testing.html @@ -5,7 +5,7 @@ Testing | Geo Garden Club - + diff --git a/docs/develop/releases/release-0.0/chatgpt-feedback.html b/docs/develop/releases/release-0.0/chatgpt-feedback.html index 1abe876a..1fff2b95 100644 --- a/docs/develop/releases/release-0.0/chatgpt-feedback.html +++ b/docs/develop/releases/release-0.0/chatgpt-feedback.html @@ -5,7 +5,7 @@ ChatGPT feedback | Geo Garden Club - + diff --git a/docs/develop/releases/release-0.0/customer-feedback.html b/docs/develop/releases/release-0.0/customer-feedback.html index ae3ce4c0..2f22bc84 100644 --- a/docs/develop/releases/release-0.0/customer-feedback.html +++ b/docs/develop/releases/release-0.0/customer-feedback.html @@ -5,7 +5,7 @@ Customer feedback | Geo Garden Club - + diff --git a/docs/develop/releases/release-0.0/design.html b/docs/develop/releases/release-0.0/design.html index 07665be9..43824ab8 100644 --- a/docs/develop/releases/release-0.0/design.html +++ b/docs/develop/releases/release-0.0/design.html @@ -5,7 +5,7 @@ Design and implementation | Geo Garden Club - + diff --git a/docs/develop/releases/release-0.0/entrepreneur-feedback.html b/docs/develop/releases/release-0.0/entrepreneur-feedback.html index bd9ae68c..8dd975af 100644 --- a/docs/develop/releases/release-0.0/entrepreneur-feedback.html +++ b/docs/develop/releases/release-0.0/entrepreneur-feedback.html @@ -5,7 +5,7 @@ Entrepreneur feedback | Geo Garden Club - + diff --git a/docs/develop/releases/release-1.0/cvp.html b/docs/develop/releases/release-1.0/cvp.html index b6c5c230..46852928 100644 --- a/docs/develop/releases/release-1.0/cvp.html +++ b/docs/develop/releases/release-1.0/cvp.html @@ -5,7 +5,7 @@ Core Value Propositions | Geo Garden Club - + diff --git a/docs/develop/releases/release-1.0/end-of-season-feedback.html b/docs/develop/releases/release-1.0/end-of-season-feedback.html index 4385342b..6e08d5b8 100644 --- a/docs/develop/releases/release-1.0/end-of-season-feedback.html +++ b/docs/develop/releases/release-1.0/end-of-season-feedback.html @@ -5,7 +5,7 @@ End of Season Feedback | Geo Garden Club - + diff --git a/docs/develop/releases/release-1.0/goals.html b/docs/develop/releases/release-1.0/goals.html index 20615ca8..8332c705 100644 --- a/docs/develop/releases/release-1.0/goals.html +++ b/docs/develop/releases/release-1.0/goals.html @@ -5,7 +5,7 @@ Technology Goals | Geo Garden Club - + diff --git a/docs/develop/releases/release-1.0/onboarding-feedback.html b/docs/develop/releases/release-1.0/onboarding-feedback.html index 7d63bedd..b8e55f9a 100644 --- a/docs/develop/releases/release-1.0/onboarding-feedback.html +++ b/docs/develop/releases/release-1.0/onboarding-feedback.html @@ -5,7 +5,7 @@ Onboarding Feedback | Geo Garden Club - + diff --git a/docs/develop/scripts.html b/docs/develop/scripts.html index a23ee325..6acdc5bb 100644 --- a/docs/develop/scripts.html +++ b/docs/develop/scripts.html @@ -5,7 +5,7 @@ Scripts | Geo Garden Club - + diff --git a/docs/home/food-security.html b/docs/home/food-security.html index c812e5e5..49dcee7b 100644 --- a/docs/home/food-security.html +++ b/docs/home/food-security.html @@ -5,7 +5,7 @@ Food Security | Geo Garden Club - + diff --git a/docs/home/innovations.html b/docs/home/innovations.html index 9bba3548..b24c7570 100644 --- a/docs/home/innovations.html +++ b/docs/home/innovations.html @@ -5,7 +5,7 @@ Design Innovations | Geo Garden Club - + diff --git a/docs/home/related-work.html b/docs/home/related-work.html index d97ab39a..c52bffdf 100644 --- a/docs/home/related-work.html +++ b/docs/home/related-work.html @@ -5,7 +5,7 @@ Garden Planning Tools | Geo Garden Club - + diff --git a/docs/home/serious-gardeners.html b/docs/home/serious-gardeners.html index 68671545..59ff16f9 100644 --- a/docs/home/serious-gardeners.html +++ b/docs/home/serious-gardeners.html @@ -5,7 +5,7 @@ "Serious" Gardeners | Geo Garden Club - + diff --git a/docs/home/sneak-peek.html b/docs/home/sneak-peek.html index 9402ea59..f5642fa6 100644 --- a/docs/home/sneak-peek.html +++ b/docs/home/sneak-peek.html @@ -5,7 +5,7 @@ Mobile App Sneak Peek | Geo Garden Club - + diff --git a/docs/home/team.html b/docs/home/team.html index a9ac4704..d82db55e 100644 --- a/docs/home/team.html +++ b/docs/home/team.html @@ -5,7 +5,7 @@ The Team | Geo Garden Club - + diff --git a/docs/home/welcome.html b/docs/home/welcome.html index e369328b..0205d35e 100644 --- a/docs/home/welcome.html +++ b/docs/home/welcome.html @@ -5,7 +5,7 @@ Welcome | Geo Garden Club - + diff --git a/docs/user-guide/adding-plantings.html b/docs/user-guide/adding-plantings.html index d1e5b64c..6d2df5ac 100644 --- a/docs/user-guide/adding-plantings.html +++ b/docs/user-guide/adding-plantings.html @@ -5,7 +5,7 @@ Add Plantings to Beds | Geo Garden Club - + diff --git a/docs/user-guide/adding-vendors-crops-varieties.html b/docs/user-guide/adding-vendors-crops-varieties.html index ffbb5f0b..7cc0ecfd 100644 --- a/docs/user-guide/adding-vendors-crops-varieties.html +++ b/docs/user-guide/adding-vendors-crops-varieties.html @@ -5,7 +5,7 @@ Add Crops, Varieties, Vendors to the Chapter Database | Geo Garden Club - + diff --git a/docs/user-guide/badges.html b/docs/user-guide/badges.html index 2387fc76..c184ca38 100644 --- a/docs/user-guide/badges.html +++ b/docs/user-guide/badges.html @@ -5,7 +5,7 @@ Badges | Geo Garden Club - + diff --git a/docs/user-guide/chat-rooms.html b/docs/user-guide/chat-rooms.html index 309dd871..09316f37 100644 --- a/docs/user-guide/chat-rooms.html +++ b/docs/user-guide/chat-rooms.html @@ -5,7 +5,7 @@ Chat Rooms | Geo Garden Club - + diff --git a/docs/user-guide/define-a-garden.html b/docs/user-guide/define-a-garden.html index a48c7aa9..35afb5f3 100644 --- a/docs/user-guide/define-a-garden.html +++ b/docs/user-guide/define-a-garden.html @@ -5,7 +5,7 @@ Define a Garden | Geo Garden Club - + diff --git a/docs/user-guide/downloading.html b/docs/user-guide/downloading.html index 9fe233e2..f8eee0aa 100644 --- a/docs/user-guide/downloading.html +++ b/docs/user-guide/downloading.html @@ -5,7 +5,7 @@ Downloading | Geo Garden Club - + diff --git a/docs/user-guide/explore-a-chapter.html b/docs/user-guide/explore-a-chapter.html index 85e60d1b..7947248b 100644 --- a/docs/user-guide/explore-a-chapter.html +++ b/docs/user-guide/explore-a-chapter.html @@ -5,7 +5,7 @@ Explore a Chapter | Geo Garden Club - + diff --git a/docs/user-guide/explore-a-garden.html b/docs/user-guide/explore-a-garden.html index f459051b..3b2f5b61 100644 --- a/docs/user-guide/explore-a-garden.html +++ b/docs/user-guide/explore-a-garden.html @@ -5,7 +5,7 @@ Explore a Garden | Geo Garden Club - + diff --git a/docs/user-guide/geobot.html b/docs/user-guide/geobot.html index 2a5ce667..1625a7b0 100644 --- a/docs/user-guide/geobot.html +++ b/docs/user-guide/geobot.html @@ -5,7 +5,7 @@ GeoBot | Geo Garden Club - + diff --git a/docs/user-guide/guided-tour.html b/docs/user-guide/guided-tour.html index 7153733b..c1821ce6 100644 --- a/docs/user-guide/guided-tour.html +++ b/docs/user-guide/guided-tour.html @@ -5,7 +5,7 @@ Frequently Asked (Gardening) Questions | Geo Garden Club - + diff --git a/docs/user-guide/observations.html b/docs/user-guide/observations.html index b201dde6..cbeb7299 100644 --- a/docs/user-guide/observations.html +++ b/docs/user-guide/observations.html @@ -5,7 +5,7 @@ Observations | Geo Garden Club - + diff --git a/docs/user-guide/outcomes.html b/docs/user-guide/outcomes.html index 31b5191a..e4006b12 100644 --- a/docs/user-guide/outcomes.html +++ b/docs/user-guide/outcomes.html @@ -5,7 +5,7 @@ outcomes | Geo Garden Club - + diff --git a/docs/user-guide/overview.html b/docs/user-guide/overview.html index c11c0d52..aeeceea3 100644 --- a/docs/user-guide/overview.html +++ b/docs/user-guide/overview.html @@ -5,7 +5,7 @@ Overview | Geo Garden Club - + diff --git a/docs/user-guide/privacy.html b/docs/user-guide/privacy.html index c544801c..cfb58593 100644 --- a/docs/user-guide/privacy.html +++ b/docs/user-guide/privacy.html @@ -5,7 +5,7 @@ Privacy Policy | Geo Garden Club - + diff --git a/docs/user-guide/registration.html b/docs/user-guide/registration.html index da052342..8e3750cb 100644 --- a/docs/user-guide/registration.html +++ b/docs/user-guide/registration.html @@ -5,7 +5,7 @@ Registration | Geo Garden Club - + diff --git a/docs/user-guide/scenarios.html b/docs/user-guide/scenarios.html index 1f634f6d..ee0eac66 100644 --- a/docs/user-guide/scenarios.html +++ b/docs/user-guide/scenarios.html @@ -5,7 +5,7 @@ Planting Scenarios | Geo Garden Club - + diff --git a/docs/user-guide/seeds.html b/docs/user-guide/seeds.html index 73457fd6..44907e4e 100644 --- a/docs/user-guide/seeds.html +++ b/docs/user-guide/seeds.html @@ -5,7 +5,7 @@ Seeds | Geo Garden Club - + diff --git a/docs/user-guide/tasks.html b/docs/user-guide/tasks.html index ae3d84be..284ad5f4 100644 --- a/docs/user-guide/tasks.html +++ b/docs/user-guide/tasks.html @@ -5,7 +5,7 @@ Tasks | Geo Garden Club - + diff --git a/docs/user-guide/terms-and-conditions.html b/docs/user-guide/terms-and-conditions.html index 52b85e34..437fa629 100644 --- a/docs/user-guide/terms-and-conditions.html +++ b/docs/user-guide/terms-and-conditions.html @@ -5,7 +5,7 @@ Terms and Conditions | Geo Garden Club - + diff --git a/index.html b/index.html index 549ca0c0..fab1cfb4 100644 --- a/index.html +++ b/index.html @@ -5,7 +5,7 @@ Geo Garden Club | Geo Garden Club - + diff --git a/markdown-page.html b/markdown-page.html index 66ed218d..e69927c2 100644 --- a/markdown-page.html +++ b/markdown-page.html @@ -5,7 +5,7 @@ Markdown page example | Geo Garden Club - +