├── .gitignore ├── .nvmrc ├── .prettierrc ├── Dockerfile ├── LICENSE ├── Makefile ├── README.md ├── gatsby-browser.js ├── gatsby-config.js ├── gatsby-node.js ├── gatsby-ssr.js ├── mail-sender ├── .env.template ├── .gitignore ├── .prettierrc ├── LICENSE ├── README.md ├── __tests__ │ ├── __snapshots__ │ │ └── email-generator.js.snap │ ├── email-generator.js │ ├── error-handler.js │ ├── index.js │ ├── log.js │ ├── mail-sender.js │ └── validators.js ├── handler.js ├── package-lock.json ├── package.json ├── serverless.yml └── src │ ├── email-generator.js │ ├── error-handler.js │ ├── index.js │ ├── log.js │ ├── mail-sender.js │ └── validators.js ├── netlify.toml ├── package.json ├── serve.json ├── sketch └── medals.sketch ├── src ├── buttons.css ├── cms │ ├── admin.css │ ├── cms.js │ ├── team.css │ ├── team.js │ └── timetable.js ├── colors.css ├── components │ ├── ContactUs.css │ ├── ContactUs.js │ ├── CookiePolicy.css │ ├── CookiePolicy.js │ ├── Disciplines.css │ ├── Disciplines.js │ ├── Footer.css │ ├── Footer.js │ ├── Hero.css │ ├── Hero.js │ ├── Homepage.css │ ├── Homepage.js │ ├── LatestNews.css │ ├── LatestNews.js │ ├── Map.css │ ├── Map.js │ ├── MapStyles.js │ ├── MedalCollection.css │ ├── MedalCollection.js │ ├── Navbar.css │ ├── Navbar.js │ ├── SWBanner.css │ ├── SWBanner.js │ ├── Team.css │ ├── Team.js │ ├── Topbar.css │ ├── Topbar.js │ └── indexPage.js ├── config.js ├── icons │ ├── close.js │ └── index.js ├── images │ └── logo.png ├── layouts │ ├── index.js │ └── layout.css ├── pages │ ├── 404.js │ ├── NotFoundPage.css │ ├── disciplines.js │ ├── disciplines │ │ ├── adult-rhythmic-gymnastics.md │ │ ├── recreational-rhythmic-gymnastics.md │ │ └── rhythmic-gymnastics.md │ ├── home │ │ └── homepage.md │ ├── index.js │ ├── legal.js │ ├── legal │ │ ├── cookies.md │ │ ├── copyright.md │ │ ├── privacy-policy.md │ │ └── terms-of-use.md │ ├── medals.css │ ├── medals.js │ ├── medals │ │ └── medals.md │ ├── news.js │ ├── news │ │ ├── 1st-english-camp-lilleshall-national-sport-centre.md │ │ ├── 1st-junior-championship-selection-results.md │ │ ├── 2019-british-championships-liverpool.md │ │ ├── 2019-espoirs-open-championships.md │ │ ├── 2020-lilleshall-gbr-national-squad-training-camp.md │ │ ├── 2020-re-series.md │ │ ├── 2020-spring-london-championships.md │ │ ├── 2020-udine-ita-friendly-international-tournament.md │ │ ├── 20202-european-championships-selection-events.md │ │ ├── 2nd-gbr-squad-training-camp-junior-senior-season-2018-2019.md │ │ ├── 5th-london-championships-redbridge.md │ │ ├── another-great-news.md │ │ ├── bath-open-championships.md │ │ ├── bath-open.md │ │ ├── british-championship-2018.md │ │ ├── canterbury-cup-2018.md │ │ ├── draft-news.md │ │ ├── easter-camp.md │ │ ├── england-rg-performance-squad-2019.md │ │ ├── english-championship.md │ │ ├── english-squad-2020.md │ │ ├── fig-1st-junior-world-championship.md │ │ ├── fig-portimao-international-tournament.md │ │ ├── fig-prize-of-queen-margarita-varna.md │ │ ├── gbr-senior-programme-2019.md │ │ ├── gbr-team-2020.md │ │ ├── good-news-everyone.md │ │ ├── grades-2019.md │ │ ├── great-results-from-the-spring-cup.md │ │ ├── happy-cup-ghent-belgium-team-🏴.md │ │ ├── internal-competition-2018.md │ │ ├── internal-competition-2019.md │ │ ├── international-competitions-convocation.md │ │ ├── interrupting-classes-covid-19.md │ │ ├── interview-for-ginnasticando-it.md │ │ ├── junior-open-championship-and-group-seeding.md │ │ ├── last-training-of-the-year-ct-matches-and-season-2020-2021-squad-gymnasts-presentation.md │ │ ├── merry-christmas-and-happy-new-year.md │ │ ├── ndp-final.md │ │ ├── ndp-finals-and-group-league-round-1-2019.md │ │ ├── new-season.md │ │ ├── north-london-cup.md │ │ ├── open-championship-espoir.md │ │ ├── paquita-re-xmas-show.md │ │ ├── pècs-cup-2019-harkany-hun.md │ │ ├── quote-of-the-day.md │ │ ├── ritam-cup-beograd-srbija.md │ │ └── rose-cup.md │ ├── socials │ │ ├── facebook.md │ │ ├── instagram.md │ │ ├── twitter.md │ │ └── youtube.md │ ├── team.css │ ├── team.js │ ├── team │ │ ├── eleonora-baio.md │ │ ├── francesca-cavallerio.md │ │ ├── francesca-fazzari.md │ │ ├── francesca-majer.md │ │ ├── helpers.md │ │ ├── jelena-tihonova.md │ │ ├── joanna-chudzik.md │ │ ├── lauriane-pradeau.md │ │ ├── stefano-sirianni.md │ │ └── stephani-sherlock.md │ ├── timetable.css │ ├── timetable.js │ └── timetable │ │ ├── east-branch-hackney.md │ │ └── west-london.md ├── reset.css └── templates │ ├── discipline.js │ ├── legal.js │ ├── news.js │ ├── pages.css │ ├── teamMember.css │ └── teamMember.js ├── static ├── admin │ └── config.yml ├── assets │ ├── 1885e3a2-551e-4bc2-b78b-12193ce7de59.jpg │ ├── 253c22f8-a11d-4cef-be4e-34d1e492152b.jpg │ ├── 2b735cce-230f-46d9-af10-ca9d8abf6151.jpg │ ├── 46488081_1897268410371078_305960439236263936_n.jpg │ ├── 46508001_1897268460371073_8999210989232586752_n.jpg │ ├── 5b74b74e-6b28-4077-84d0-10d50402ad31.jpg │ ├── 5ee0f471-23f6-4f69-ad72-d66f93e96fcc.jpg │ ├── 61924335_2179967498767833_7517858287597912064_n.jpg │ ├── 62229713_2179967568767826_8540997966557609984_n.jpg │ ├── 66079534_1218095251647637_8550242806352838656_o.jpg │ ├── 70388935_2341859752578606_2079050044287221760_n.jpg │ ├── 80351351-0631-4dc0-a8ea-4b69ce6d0530-1-.jpg │ ├── 807a2910.jpg │ ├── 8eff49f8-6f8c-4832-af7c-2922ef4ada85.jpg │ ├── adult-gymnastics.jpeg │ ├── british-gymnastics-logo.png │ ├── disciplines-rhythmic-gymnastics.jpg │ ├── dsc_4867.jpg │ ├── eleonora-baio.jpg │ ├── francesca-cavallerio.jpg │ ├── francesca-fazzari.jpg │ ├── img-20180513-wa0048.jpg │ ├── img-20180625-wa0037.jpg │ ├── img-20180625-wa0038.jpg │ ├── img-20180806-wa0033.jpg │ ├── img-20180812-wa0009.jpg │ ├── img-20180930-wa0030.jpg │ ├── img-20181111-wa0050.jpg │ ├── img-20181125-wa0028.jpg │ ├── img-20181208-wa0018.jpg │ ├── img-20190309-wa0009.jpg │ ├── img-20190413-wa0050.jpg │ ├── img-20190415-wa0034.jpg │ ├── img-20190420-wa0043.jpg │ ├── img-20190422-wa0016.jpg │ ├── img-20190525-wa0090.jpg │ ├── img-20190609-wa0084.jpg │ ├── img-20190611-wa0078.jpg │ ├── img-20190706-wa0112-1-.jpg │ ├── img-20190717-wa0056.jpg │ ├── img-20190718-wa0055.jpg │ ├── img-20190718-wa0065.jpg │ ├── img-20190719-wa0084.jpg │ ├── img-20190719-wa0086.jpg │ ├── img-20190721-wa0044.jpg │ ├── img-20190721-wa0112.jpg │ ├── img-20190728-wa0065.jpg │ ├── img-20191213-wa0041.jpg │ ├── img_0222.png │ ├── img_1821.jpg │ ├── img_20180601_131253-e1528971438190.jpg │ ├── img_20180624_122106.jpg │ ├── img_20180719_151004-e1532096327432.jpg │ ├── img_20180923_203037_526.jpg │ ├── img_20180923_203037_537.jpg │ ├── img_20180923_203037_548.jpg │ ├── img_20181002_103403_871.jpg │ ├── img_20181013_142003.jpg │ ├── img_20181214_214522_390.jpg │ ├── img_20190323_084723.jpg │ ├── img_20190323_084749.jpg │ ├── img_20190323_175307.jpg │ ├── img_20190323_182748_1.jpg │ ├── img_20190407_135944.jpg │ ├── img_20190408_100828_027.jpg │ ├── img_20190408_100828_029.jpg │ ├── img_20190414_134611.jpg │ ├── img_20190503_121201.jpg │ ├── img_20190504_094518.jpg │ ├── img_20190505_202407.jpg │ ├── img_20190505_203849.jpg │ ├── img_20190506_100428_359.jpg │ ├── img_20190506_100428_370.jpg │ ├── img_20190608_122722.jpg │ ├── img_20190609_094440.jpg │ ├── img_20190701_100652_502.jpg │ ├── img_20190718_112836.jpg │ ├── img_20190720_162136.jpg │ ├── img_20190721_115956.jpg │ ├── img_20190722_194728_196.jpg │ ├── img_20190722_194728_197.jpg │ ├── img_20190722_194728_207.jpg │ ├── img_20190722_194728_211.jpg │ ├── img_20190722_194728_212.jpg │ ├── img_20190727_204526_1.jpg │ ├── img_20190727_204957.jpg │ ├── img_20191102_154215.jpg │ ├── img_4056.png │ ├── img_4079.png │ ├── img_4080.png │ ├── img_4081.png │ ├── img_4101.png │ ├── img_4426.jpg │ ├── img_5457.png │ ├── img_6630.jpg │ ├── img_6632.jpg │ ├── img_9230.jpg │ ├── img_9360.jpg │ ├── img_9362.jpg │ ├── jelena-tihonova.jpg │ ├── mvi_5704.00_00_01_23.still071.jpg │ ├── mvi_5704.00_00_20_09.still064.jpg │ ├── mvi_5704.00_00_47_22.still045.jpg │ ├── mvi_5704.00_00_54_15.still003.jpg │ ├── mvimg_20190609_160732.jpg │ ├── mvimg_20190718_115133.jpg │ ├── mvimg_20190721_104247.jpg │ ├── re.png │ ├── rhythmic-137-edit.jpg │ ├── rhythmic-192-edit.jpg │ ├── rhythmic-gymnastic.jpeg │ ├── rhythmicexcellence-copy.jpg │ ├── rhythmicexcellence2.jpg │ ├── screenshot-2020-06-23-at-18.30.38.png │ ├── screenshot-2020-10-06-at-12.53.13.png │ ├── screenshot-2021-01-04-at-13.35.45.png │ ├── screenshot-2021-01-04-at-14.40.52.png │ ├── screenshot_20190525-221845.png │ ├── screenshot_20190525-221858.png │ ├── screenshot_20190610-142038.png │ ├── screenshot_20190725-092652.png │ ├── stefano-sirianni.jpg │ ├── website.jpg │ ├── whatsapp-image-2020-09-23-at-13.51.40.jpeg │ └── whatsapp-image-2020-09-24-at-15.58.33.jpeg └── img │ ├── 404.jpg │ ├── curve-disciplines.svg │ ├── curve-map.svg │ ├── home_background.png │ ├── logo.png │ ├── medal.png │ ├── medal_bronze.png │ ├── medal_gold.png │ ├── medal_silver.png │ └── rhythmicexcellence.png └── yarn.lock /.gitignore: -------------------------------------------------------------------------------- 1 | # Project dependencies 2 | .cache 3 | node_modules 4 | yarn-error.log 5 | 6 | # Build directory 7 | /public 8 | .DS_Store 9 | 10 | # DotEnv 11 | .env 12 | 13 | # Serverless Framework directories 14 | .serverless 15 | 16 | # Lighthouse-ci 17 | /lighthouse 18 | 19 | # docz 20 | .docz 21 | -------------------------------------------------------------------------------- /.nvmrc: -------------------------------------------------------------------------------- 1 | 12.19.0 -------------------------------------------------------------------------------- /.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "semi": true, 3 | "singleQuote": true, 4 | "trailingComma": "es5", 5 | "printWidth": 100 6 | } 7 | -------------------------------------------------------------------------------- /Dockerfile: -------------------------------------------------------------------------------- 1 | FROM node:10 2 | 3 | WORKDIR /demo 4 | 5 | # Install Chrome 6 | RUN wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add - 7 | RUN sh -c 'echo "deb [arch=amd64] http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google.list' 8 | RUN apt-get update && apt-get install -y google-chrome-stable 9 | 10 | ENV CHROME_BIN=/usr/bin/google-chrome-stable 11 | 12 | COPY package*.json /demo/ 13 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2018-2019 AndreaSonny (https://github.com/andreasonny83) 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: 6 | 7 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 8 | 9 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 10 | -------------------------------------------------------------------------------- /Makefile: -------------------------------------------------------------------------------- 1 | .PHONY: default build run_audit install dev audit 2 | 3 | build: 4 | docker build --rm --force-rm -t sonny/lighthouse-demo . 5 | 6 | run_audit: 7 | docker run --rm -it -v ${PWD}:/demo sonny/lighthouse-demo npm run audit 8 | 9 | install: 10 | docker run --rm -it -v ${PWD}:/demo sonny/lighthouse-demo npm install 11 | 12 | dev: 13 | docker run --rm -it -v ${PWD}:/demo sonny/lighthouse-demo /bin/bash 14 | 15 | interactive: 16 | docker run --rm -it -v ${PWD}:/demo --name rhythmicexcellence sonny/lighthouse-demo /bin/bash 17 | 18 | audit: build install run_audit 19 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | [![Netlify Status](https://api.netlify.com/api/v1/badges/c123a083-9460-4c4b-98dc-9bf81f2dce10/deploy-status)](https://app.netlify.com/sites/rhythmic-excellence/deploys) 2 | 3 |

4 | 5 | Rhythmic Excellence 6 | 7 |

8 |

9 | Rhythmic Excellence 10 |

11 | 12 | **https://github.com/stayforward09/Nimedix-Backend-Express-PG 13 | 14 | ## Audit 15 | 16 | Using Docker you can test the website performance with 17 | 18 | ```sh 19 | $ make build 20 | ``` 21 | 22 | Then run Lighthouse-CI with 23 | 24 | ```sh 25 | $ make dev 26 | ``` 27 | -------------------------------------------------------------------------------- /gatsby-browser.js: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stayForward09/Rythm_react_gatsby/2a3bd9165169d208b275be219d09c9d24f531560/gatsby-browser.js -------------------------------------------------------------------------------- /gatsby-config.js: -------------------------------------------------------------------------------- 1 | module.exports = { 2 | siteMetadata: { 3 | title: 'Rhythmic Excellence', 4 | }, 5 | plugins: [ 6 | 'gatsby-plugin-react-helmet', 7 | { 8 | resolve: `gatsby-plugin-manifest`, 9 | options: { 10 | name: 'RhythmicExcellence', 11 | short_name: 'RhythmicExcellence', 12 | start_url: '/', 13 | background_color: '#663399', 14 | theme_color: '#663399', 15 | display: 'minimal-ui', 16 | icon: 'src/images/logo.png', // This path is relative to the root of the site. 17 | }, 18 | }, 19 | { 20 | resolve: `gatsby-plugin-postcss`, 21 | options: { 22 | postCssPlugins: [ 23 | require(`postcss-preset-env`)({ 24 | stage: 0, 25 | browsers: 'last 2 versions', 26 | features: { 27 | 'nesting-rules': true, 28 | 'color-mod-function': { unresolved: 'warn' }, 29 | }, 30 | }), 31 | ], 32 | }, 33 | }, 34 | { 35 | resolve: `gatsby-plugin-google-fonts`, 36 | options: { 37 | fonts: [`Raleway`], 38 | display: 'swap', 39 | }, 40 | }, 41 | { 42 | resolve: 'gatsby-plugin-offline', 43 | }, 44 | { 45 | resolve: 'gatsby-source-filesystem', 46 | options: { 47 | path: `${__dirname}/src/pages/team`, 48 | name: 'team', 49 | }, 50 | }, 51 | { 52 | resolve: 'gatsby-source-filesystem', 53 | options: { 54 | path: `${__dirname}/src/pages/news`, 55 | name: 'news', 56 | }, 57 | }, 58 | { 59 | resolve: 'gatsby-source-filesystem', 60 | options: { 61 | path: `${__dirname}/src/pages/disciplines`, 62 | name: 'disciplines', 63 | }, 64 | }, 65 | { 66 | resolve: 'gatsby-source-filesystem', 67 | options: { 68 | path: `${__dirname}/src/pages/home`, 69 | name: 'home', 70 | }, 71 | }, 72 | { 73 | resolve: 'gatsby-source-filesystem', 74 | options: { 75 | path: `${__dirname}/src/pages/legal`, 76 | name: 'legal', 77 | }, 78 | }, 79 | { 80 | resolve: 'gatsby-source-filesystem', 81 | options: { 82 | path: `${__dirname}/src/pages/socials`, 83 | name: 'socials', 84 | }, 85 | }, 86 | { 87 | resolve: 'gatsby-source-filesystem', 88 | options: { 89 | path: `${__dirname}/src/pages/medals`, 90 | name: 'medals', 91 | }, 92 | }, 93 | { 94 | resolve: 'gatsby-source-filesystem', 95 | options: { 96 | path: `${__dirname}/src/pages/timetable`, 97 | name: 'timetable', 98 | }, 99 | }, 100 | 'gatsby-transformer-remark', 101 | 'gatsby-remark-relative-images', 102 | { 103 | resolve: 'gatsby-plugin-netlify-cms', 104 | options: { 105 | modulePath: `${__dirname}/src/cms/cms.js`, 106 | }, 107 | }, 108 | 'gatsby-plugin-netlify', // make sure to keep it last in the array 109 | ], 110 | }; 111 | -------------------------------------------------------------------------------- /gatsby-ssr.js: -------------------------------------------------------------------------------- 1 | /** 2 | * Implement Gatsby's SSR (Server Side Rendering) APIs in this file. 3 | * 4 | * See: https://www.gatsbyjs.org/docs/ssr-apis/ 5 | */ 6 | 7 | // You can delete this file if you're not using it 8 | -------------------------------------------------------------------------------- /mail-sender/.env.template: -------------------------------------------------------------------------------- 1 | // Rename this file to .env 2 | 3 | DEBUG=true 4 | FROM="SenderEmail " 5 | EMAIL_KENSINGTON="RecipientEmail " 6 | EMAIL_HACKNEY="RecipientEmail " 7 | SUBJECT="Test Email" 8 | NODE_ENV=development 9 | CLIENT_URL=https://your.client.website.com 10 | -------------------------------------------------------------------------------- /mail-sender/.gitignore: -------------------------------------------------------------------------------- 1 | # Project dependencies 2 | .cache 3 | node_modules 4 | yarn-error.log 5 | 6 | # Build directory 7 | /public 8 | .DS_Store 9 | -------------------------------------------------------------------------------- /mail-sender/.prettierrc: -------------------------------------------------------------------------------- 1 | { 2 | "semi": true, 3 | "singleQuote": true, 4 | "trailingComma": "es5", 5 | "printWidth": 80, 6 | "arrowParens": "always", 7 | "useTabs": false 8 | } 9 | -------------------------------------------------------------------------------- /mail-sender/LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2018-2019 AndreaSonny (https://github.com/andreasonny83) 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: 6 | 7 | The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. 8 | 9 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. 10 | -------------------------------------------------------------------------------- /mail-sender/README.md: -------------------------------------------------------------------------------- 1 | # Rhythmic Excellence Mail Sender 2 | 3 | ## 🚀 Quick start 4 | 5 | 1. **Install the Node dependencies** 6 | 7 | ```sh 8 | npm install 9 | ``` 10 | 11 | 2. **Configure your environment variables** 12 | 13 | Rename the `.env.template` file to `.env` and fill all the required information. 14 | 15 | 3. **Run a local instance of the lambda function.** 16 | 17 | ```sh 18 | npm run dev 19 | ``` 20 | 21 | 4. **Testing time.** 22 | 23 | This projects makes use of Jest for running all the unit and integration tests. 24 | 25 | ```sh 26 | npm test 27 | ``` 28 | 29 | ## 💫 Deploy 30 | 31 | Run the following command to deploy the project into your AWS account using Serverless 32 | 33 | **Note** You will need to have an AWS account, if you don't have one already, before running this command. 34 | To learn more how to configure your AWS account, read the Serverless documentation 35 | [here](https://serverless.com/framework/docs/providers/aws/guide/credentials/) 36 | 37 | When deploying this to AWS Lambda, make sure to set the function environment variables correctly. 38 | -------------------------------------------------------------------------------- /mail-sender/__tests__/email-generator.js: -------------------------------------------------------------------------------- 1 | // Copyright (c) 2018-2019 AndreaSonny (https://github.com/andreasonny83) 2 | // 3 | // This software is released under the MIT License. 4 | // https://opensource.org/licenses/MIT 5 | 6 | const { EmailGenerator } = require('../src/email-generator'); 7 | 8 | describe('EmailGenerator', () => { 9 | beforeEach(() => (emailGenerator = new EmailGenerator())); 10 | 11 | it('should export a function', () => { 12 | // Assert 13 | expect(typeof EmailGenerator).toEqual('function'); 14 | }); 15 | 16 | it('should set the charset to `UTF-8` by default', () => { 17 | // Arrange 18 | const expectedCharset = 'UTF-8'; 19 | 20 | // Act 21 | const result = emailGenerator.generate(); 22 | 23 | // Assert 24 | expect(result.Message.Subject.Charset).toEqual(expectedCharset); 25 | }); 26 | 27 | it('should accept a different charset', () => { 28 | // Arrange 29 | const expectedCharset = 'ISO-8859-1'; 30 | 31 | // Act 32 | const isoEmailGenerator = new EmailGenerator(expectedCharset); 33 | const result = isoEmailGenerator.generate(); 34 | 35 | // Assert 36 | expect(result.Message.Subject.Charset).toEqual(expectedCharset); 37 | }); 38 | 39 | it('should generate an email object', () => { 40 | // Arrange 41 | const emailGenerator = new EmailGenerator(); 42 | const subject = 'test email'; 43 | const branch = 'Earth'; 44 | const from = 'fake_user@mail.com'; 45 | const sender = 'Heisenberg'; 46 | const email = 'heisenberg@crystal.blue'; 47 | const to = 'fake_recipient@mail.com'; 48 | const body = 'Hello!'; 49 | // Mock the Date constructor 50 | Date = jest.fn(() => ({ 51 | toUTCString: () => 'now', 52 | })); 53 | 54 | // Act 55 | const prepareMail = emailGenerator.generate( 56 | subject, 57 | body, 58 | branch, 59 | from, 60 | to, 61 | sender, 62 | email 63 | ); 64 | 65 | // Assert 66 | expect(prepareMail).toMatchSnapshot(); 67 | }); 68 | }); 69 | -------------------------------------------------------------------------------- /mail-sender/__tests__/error-handler.js: -------------------------------------------------------------------------------- 1 | // Copyright (c) 2018-2019 AndreaSonny (https://github.com/andreasonny83) 2 | // 3 | // This software is released under the MIT License. 4 | // https://opensource.org/licenses/MIT 5 | 6 | const { EmailSenderError } = require('../src/error-handler'); 7 | 8 | describe('EmailSenderError', () => { 9 | it('should export a function', () => { 10 | // Assert 11 | expect(typeof EmailSenderError).toEqual('function'); 12 | }); 13 | 14 | it('should be a throwable error', () => { 15 | // Assert 16 | expect(() => { 17 | throw new EmailSenderError('Error'); 18 | }).toThrow(new EmailSenderError('Error')); 19 | }); 20 | 21 | it('should return an error', () => { 22 | // Arrange 23 | expectedName = 'EmailSenderError'; 24 | 25 | // Act 26 | const error = new EmailSenderError(); 27 | 28 | // Assert 29 | expect(error.name).toEqual(expectedName); 30 | }); 31 | 32 | it('should contain a given error message', () => { 33 | // Arrange 34 | expectedMessage = 'generic error message'; 35 | 36 | // Act 37 | const error = new EmailSenderError(expectedMessage); 38 | 39 | // Assert 40 | expect(error.message).toEqual(expectedMessage); 41 | }); 42 | }); 43 | -------------------------------------------------------------------------------- /mail-sender/__tests__/log.js: -------------------------------------------------------------------------------- 1 | // Copyright (c) 2018-2019 AndreaSonny (https://github.com/andreasonny83) 2 | // 3 | // This software is released under the MIT License. 4 | // https://opensource.org/licenses/MIT 5 | 6 | const { Log } = require('../src/log'); 7 | 8 | describe('Log', () => { 9 | it('should export a function', () => { 10 | // Assert 11 | expect(typeof Log).toEqual('function'); 12 | }); 13 | 14 | it('should export a function constructor', () => { 15 | // Arrange 16 | const log = new Log(true); 17 | 18 | // Assert 19 | expect(log).toBeInstanceOf(Log); 20 | }); 21 | 22 | it(`should export an 'info' method`, () => { 23 | // Arrange 24 | const log = new Log(true); 25 | 26 | // Assert 27 | expect(log.info).toBeDefined(); 28 | }); 29 | 30 | it(`should print a message when the 'debugStatus' is set to true'`, () => { 31 | // Arrange 32 | const log = new Log(true); 33 | 34 | // Mock and Spy the console.log 35 | console = { 36 | log: jest.fn(), 37 | }; 38 | 39 | // Act 40 | log.info('test'); 41 | 42 | // Assert 43 | expect(console.log).toHaveBeenCalledTimes(1); 44 | expect(console.log).toHaveBeenCalledWith('test'); 45 | }); 46 | 47 | it(`should print both a message and a variable, if specified`, () => { 48 | // Arrange 49 | const testObject = { 50 | name: 'Heisenberg', 51 | }; 52 | const log = new Log(true); 53 | 54 | // Mock and Spy the console.log 55 | console = { 56 | log: jest.fn(), 57 | }; 58 | 59 | // Act 60 | log.info('test', testObject); 61 | 62 | // Assert 63 | expect(console.log).toHaveBeenCalledTimes(2); 64 | expect(console.log).toHaveBeenCalledWith('test'); 65 | expect(console.log).toHaveBeenCalledWith(testObject); 66 | }); 67 | 68 | it(`should not print anything if the 'debugStatus' is false or not specified'`, () => { 69 | // Arrange 70 | const log = new Log(); 71 | const log2 = new Log(false); 72 | 73 | console = { 74 | log: jest.fn(), 75 | }; 76 | 77 | // Act 78 | log.info('test'); 79 | log2.info('test'); 80 | 81 | // Assert 82 | expect(console.log).not.toHaveBeenCalled(); 83 | }); 84 | }); 85 | -------------------------------------------------------------------------------- /mail-sender/__tests__/validators.js: -------------------------------------------------------------------------------- 1 | const { sanitize, validateEmail, validateField } = require('../src/validators'); 2 | 3 | describe('Validators', () => { 4 | describe('sanitize', () => { 5 | it('should trim a string', () => { 6 | // Act 7 | const test1 = sanitize(' aa '); 8 | const test2 = sanitize(' a a '); 9 | const test3 = sanitize(' aa !'); 10 | 11 | // Assert 12 | expect(test1).toEqual('aa'); 13 | expect(test2).toEqual('a a'); 14 | expect(test3).toEqual('aa !'); 15 | }); 16 | 17 | it('should convert everyting to a string', () => { 18 | // Act 19 | const test1 = sanitize(12); 20 | const test2 = sanitize(true); 21 | const test3 = sanitize(function hack() { 22 | while (true) {} 23 | }); 24 | 25 | // Assert 26 | expect(test1).toEqual('12'); 27 | expect(test2).toEqual('true'); 28 | expect(test3).toEqual(`function hack() { 29 | while (true) {} 30 | }`); 31 | }); 32 | }); 33 | 34 | describe('validateField', () => { 35 | it('should validate any input field', () => { 36 | // Assert 37 | expect(() => validateField()).toThrow('Invalid data'); 38 | expect(() => validateField(undefined)).toThrow('Invalid data'); 39 | expect(() => validateField(null)).toThrow('Invalid data'); 40 | expect(() => validateField('')).toThrow('Invalid data'); 41 | expect(() => validateField(0)).toThrow('Invalid data'); 42 | expect(() => validateField('A')).toThrow('Invalid data'); 43 | expect(() => validateField('Al')).not.toThrow(); 44 | expect(() => validateField('Als')).not.toThrow(); 45 | }); 46 | }); 47 | 48 | describe('validateEmail', () => { 49 | it('should deny any invalid email address', () => { 50 | // Assert 51 | expect(() => validateEmail('invalid')).toThrow('Invalid email'); 52 | expect(() => validateEmail('invalid@s')).toThrow('Invalid email'); 53 | expect(() => validateEmail(' @s.xs')).toThrow('Invalid email'); 54 | expect(() => validateEmail('in @s.xs')).toThrow('Invalid email'); 55 | expect(() => validateEmail(' in@s.xs')).toThrow('Invalid email'); 56 | expect(() => validateEmail('invalid@s .xs')).toThrow('Invalid email'); 57 | expect(() => validateEmail('invalid@s.xs ss')).toThrow('Invalid email'); 58 | expect(() => validateEmail('valid@s.commmmmmm')).toThrow('Invalid email'); 59 | }); 60 | 61 | it('should accept any valid email address', () => { 62 | // Assert 63 | expect(() => validateEmail('valid@s.xs')).not.toThrow(); 64 | expect(() => validateEmail('valid@s.com')).not.toThrow(); 65 | expect(() => validateEmail('valid@s.comm')).not.toThrow(); 66 | expect(() => validateEmail('valid@s.commm')).not.toThrow(); 67 | expect(() => validateEmail('valid@s.london')).not.toThrow(); 68 | }); 69 | 70 | it('should extract the email address from a composed email string', () => { 71 | // Assert 72 | expect(() => validateEmail('MyEmail ')).not.toThrow(); 73 | expect(() => validateEmail('My Email ')).not.toThrow(); 74 | expect(() => validateEmail('My_Email ')).not.toThrow(); 75 | 76 | expect(() => validateEmail('My-Email ')).toThrow( 77 | 'Invalid email' 78 | ); 79 | expect(() => validateEmail('My Email ')).toThrow( 80 | 'Invalid email' 81 | ); 82 | }); 83 | }); 84 | }); 85 | -------------------------------------------------------------------------------- /mail-sender/handler.js: -------------------------------------------------------------------------------- 1 | // Copyright (c) 2018-2019 AndreaSonny (https://github.com/andreasonny83) 2 | // 3 | // This software is released under the MIT License. 4 | // https://opensource.org/licenses/MIT 5 | 6 | 'use strict'; 7 | 8 | const sendMail = require('./src'); 9 | 10 | if (process.env.NODE_ENV !== 'production') { 11 | require('dotenv').config(); 12 | } 13 | 14 | const from = process.env.FROM; 15 | const toKensington = process.env.EMAIL_KENSINGTON; 16 | const toHackney = process.env.EMAIL_HACKNEY; 17 | const subject = process.env.SUBJECT; 18 | const debug = process.env.DEBUG === 'true'; 19 | 20 | const returnCallback = (body, statusCode = 500) => { 21 | if (!(statusCode < 300 && statusCode >= 200)) { 22 | body = { name: body.name, message: body.message }; 23 | } 24 | 25 | return { 26 | statusCode, 27 | headers: { 28 | 'Content-Type': 'application/json', 29 | 'Access-Control-Allow-Origin': 'https://www.rhythmicexcellence.london', 30 | }, 31 | body: JSON.stringify(body), 32 | }; 33 | }; 34 | 35 | module.exports.send = async (event, context) => { 36 | let data; 37 | 38 | try { 39 | data = JSON.parse(event.body); 40 | } catch (err) { 41 | return returnCallback({ 42 | name: 'SyntaxError', 43 | message: 44 | 'body is missing in the event or is not parsable to JSON.\n' + 45 | err.message, 46 | }); 47 | } 48 | 49 | const { branch } = data; 50 | const to = '' + branch.trim().toLowerCase() === 'kensington' && toKensington || toHackney; 51 | 52 | try { 53 | await sendMail(data, from, to, subject, debug); 54 | } catch (err) { 55 | return returnCallback(err); 56 | } 57 | 58 | return returnCallback({ status: 'success' }, 200); 59 | }; 60 | -------------------------------------------------------------------------------- /mail-sender/package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "rhythmic-excellence-mail-sender", 3 | "version": "1.0.0", 4 | "description": "Send emails coming from RhythmicExcellence website", 5 | "main": "index.js", 6 | "scripts": { 7 | "dev": "AWS_REGION=us-east-1 serverless offline start", 8 | "deploy": "serverless deploy", 9 | "test": "jest --watchAll" 10 | }, 11 | "keywords": [], 12 | "author": "andreasonny83 ", 13 | "license": "MIT", 14 | "dependencies": { 15 | "aws-sdk": "^2.315.0", 16 | "dotenv": "^8.0.0", 17 | "nodemailer": "^6.2.1", 18 | "nodemailer-ses-transport": "^1.5.1" 19 | }, 20 | "devDependencies": { 21 | "jest": "^24.8.0", 22 | "serverless-offline": "^5.7.2" 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /mail-sender/serverless.yml: -------------------------------------------------------------------------------- 1 | service: rhythmic-excellence-mail-sender 2 | 3 | provider: 4 | name: aws 5 | runtime: nodejs10.x 6 | region: us-east-1 7 | memorySize: 512 8 | timeout: 8 9 | stage: production 10 | versionFunctions: false 11 | iamRoleStatements: 12 | - Effect: 'Allow' 13 | Action: 14 | - 'ses:SendEmail' 15 | Resource: '*' 16 | usagePlan: # Optional usage plan configuration 17 | quota: 18 | limit: 1000 19 | offset: 2 20 | period: MONTH 21 | throttle: 22 | burstLimit: 100 23 | rateLimit: 50 24 | 25 | functions: 26 | send: 27 | handler: handler.send 28 | name: ${self:provider.stage}-rhythmicExcellenceMailsender 29 | description: Send emails coming from RhythmicExcellence website 30 | memorySize: 512 31 | timeout: 8 32 | events: 33 | - http: 34 | path: send 35 | method: post 36 | cors: 37 | origins: 38 | - '*' 39 | headers: 40 | - Content-Type 41 | - X-Api-Key 42 | 43 | package: 44 | exclude: 45 | - node_modules/** 46 | include: 47 | - node_modules/serverless-offline/** 48 | 49 | plugins: 50 | - serverless-offline 51 | -------------------------------------------------------------------------------- /mail-sender/src/error-handler.js: -------------------------------------------------------------------------------- 1 | // Copyright (c) 2018-2019 AndreaSonny (https://github.com/andreasonny83) 2 | // 3 | // This software is released under the MIT License. 4 | // https://opensource.org/licenses/MIT 5 | 6 | 'use strict'; 7 | 8 | class EmailSenderError extends Error { 9 | constructor(...params) { 10 | super(...params); 11 | this.name = 'EmailSenderError'; 12 | Error.captureStackTrace(this, EmailSenderError); 13 | } 14 | } 15 | 16 | module.exports.EmailSenderError = EmailSenderError; 17 | -------------------------------------------------------------------------------- /mail-sender/src/index.js: -------------------------------------------------------------------------------- 1 | // Copyright (c) 2018-2019 AndreaSonny (https://github.com/andreasonny83) 2 | // 3 | // This software is released under the MIT License. 4 | // https://opensource.org/licenses/MIT 5 | 6 | 'use strict'; 7 | 8 | const AWS = require('aws-sdk'); 9 | const { EmailGenerator } = require('./email-generator'); 10 | const { EmailSenderError } = require('./error-handler'); 11 | const { MailSender } = require('./mail-sender'); 12 | const { Log } = require('./log'); 13 | const { validateEmail, validateField, sanitize } = require('./validators'); 14 | 15 | module.exports = async (data, from, to, subject, debug) => { 16 | const log = new Log(debug); 17 | 18 | log.info('event data received', data); 19 | 20 | const { sender, email, body, branch } = data; 21 | 22 | // Sanitize input 23 | const emailObject = { 24 | subject: sanitize(subject), 25 | body: sanitize(body), 26 | branch: sanitize(branch), 27 | from: sanitize(from), 28 | to: sanitize(to), 29 | sender: sanitize(sender), 30 | email: sanitize(email), 31 | }; 32 | 33 | try { 34 | for (const field in emailObject) { 35 | if (emailObject.hasOwnProperty(field)) { 36 | validateField(emailObject[field]); 37 | } 38 | } 39 | 40 | [from, email].forEach((emailFiled) => validateEmail(emailFiled)); 41 | } catch (err) { 42 | throw new EmailSenderError(err); 43 | } 44 | 45 | const mailSender = new MailSender(AWS, EmailGenerator); 46 | 47 | log.info('attempting to send following email', emailObject); 48 | 49 | try { 50 | await mailSender.send(emailObject); 51 | log.info('email submitted to SES'); 52 | } catch (err) { 53 | throw new EmailSenderError(err); 54 | } 55 | }; 56 | -------------------------------------------------------------------------------- /mail-sender/src/log.js: -------------------------------------------------------------------------------- 1 | // Copyright (c) 2018-2019 AndreaSonny (https://github.com/andreasonny83) 2 | // 3 | // This software is released under the MIT License. 4 | // https://opensource.org/licenses/MIT 5 | 6 | 'use strict'; 7 | 8 | class Log { 9 | constructor(debugStatus = false) { 10 | this.debugStatus = debugStatus; 11 | } 12 | 13 | info(title, body) { 14 | if (this.debugStatus) { 15 | console.log(title); 16 | body && console.log(body); 17 | } 18 | } 19 | } 20 | 21 | module.exports.Log = Log; 22 | -------------------------------------------------------------------------------- /mail-sender/src/mail-sender.js: -------------------------------------------------------------------------------- 1 | // Copyright (c) 2018-2019 AndreaSonny (https://github.com/andreasonny83) 2 | // 3 | // This software is released under the MIT License. 4 | // https://opensource.org/licenses/MIT 5 | 6 | 'use strict'; 7 | 8 | class MailSender { 9 | constructor(AWS, EmailGenerator) { 10 | this.ses = new AWS.SES(); 11 | this.emailGenerator = new EmailGenerator(); 12 | } 13 | 14 | async send(emailObject) { 15 | const { subject, body, branch, from, to, sender, email } = emailObject; 16 | const emailFormattedObject = this._prepareEmail( 17 | subject, 18 | body, 19 | branch, 20 | from, 21 | to, 22 | sender, 23 | email 24 | ); 25 | 26 | try { 27 | await this._sendEmail(emailFormattedObject); 28 | } catch (err) { 29 | throw new Error(err); 30 | } 31 | } 32 | 33 | async _sendEmail(emailObject) { 34 | return await this.ses.sendEmail(emailObject).promise(); 35 | } 36 | 37 | _prepareEmail(subject, body, branch, from, to, sender, email) { 38 | return this.emailGenerator.generate( 39 | subject, 40 | body, 41 | branch, 42 | from, 43 | to, 44 | sender, 45 | email 46 | ); 47 | } 48 | } 49 | 50 | module.exports.MailSender = MailSender; 51 | -------------------------------------------------------------------------------- /mail-sender/src/validators.js: -------------------------------------------------------------------------------- 1 | // Copyright (c) 2018-2019 AndreaSonny (https://github.com/andreasonny83) 2 | // 3 | // This software is released under the MIT License. 4 | // https://opensource.org/licenses/MIT 5 | 6 | 'use strict'; 7 | 8 | const sanitize = (field) => field && ['', field].join('').trim(); 9 | 10 | const validateField = (dataField) => { 11 | if (typeof dataField === 'string' && !!dataField && dataField.length >= 2) { 12 | return; 13 | } 14 | 15 | throw 'Invalid data'; 16 | }; 17 | 18 | const validateEmail = (emailFiled) => { 19 | const emailFieldExtractor = /^[\w ]+ <(.+)>$/; 20 | const emailValidator = /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,8}))$/; 21 | 22 | const emailFound = emailFiled.match(emailFieldExtractor); 23 | 24 | const validate = () => { 25 | if (emailFound && emailFound[1]) { 26 | return validateEmail(emailFound[1]); 27 | } 28 | 29 | if (emailValidator.test(emailFiled)) { 30 | return; 31 | } 32 | 33 | throw 'Invalid email'; 34 | }; 35 | 36 | return validate(); 37 | }; 38 | 39 | module.exports = { 40 | sanitize, 41 | validateField, 42 | validateEmail, 43 | }; 44 | -------------------------------------------------------------------------------- /netlify.toml: -------------------------------------------------------------------------------- 1 | [build] 2 | publish = "public" 3 | command = "yarn build" 4 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "rhythmicexcellence.london", 3 | "description": "RhythmicExcellence website", 4 | "version": "1.4.5", 5 | "engines": { 6 | "node": "12.19.0" 7 | }, 8 | "author": "andreasonny83 ", 9 | "homepage": "https://github.com/RhythmicExcellence/rhythmicexcellence.london#readme", 10 | "bugs": { 11 | "url": "https://github.com/RhythmicExcellence/rhythmicexcellence.london/issues" 12 | }, 13 | "repository": { 14 | "type": "git", 15 | "url": "https://github.com/RhythmicExcellence/rhythmicexcellence.london.git" 16 | }, 17 | "keywords": [ 18 | "gatsby" 19 | ], 20 | "license": "MIT", 21 | "dependencies": { 22 | "axios": "^0.21.1", 23 | "create-react-class": "^15.6.3", 24 | "gatsby": "^2.1.2", 25 | "gatsby-plugin-google-fonts": "^1.0.1", 26 | "gatsby-plugin-manifest": "2.12.0", 27 | "gatsby-plugin-netlify": "^2.0.0", 28 | "gatsby-plugin-netlify-cms": "^3.0.0", 29 | "gatsby-plugin-offline": "^2.0.5", 30 | "gatsby-plugin-postcss": "^2.0.0", 31 | "gatsby-plugin-react-helmet": "^3.0.0", 32 | "gatsby-remark-relative-images": "^0.2.1", 33 | "gatsby-source-filesystem": "^2.0.1", 34 | "gatsby-transformer-remark": "^2.1.3", 35 | "netlify-cms": "^2.10.51", 36 | "netlify-cms-lib-auth": "^2.2.8", 37 | "netlify-cms-lib-util": "^2.11.0", 38 | "netlify-cms-ui-default": "^2.11.1", 39 | "postcss-preset-env": "^6.0.3", 40 | "prop-types": "^15.6.2", 41 | "react": "^16.5.1", 42 | "react-burger-menu": "^2.5.2", 43 | "react-cookie": "^3.0.4", 44 | "react-dom": "^16.5.1", 45 | "react-google-maps": "^9.4.5", 46 | "react-helmet": "^5.2.0", 47 | "react-icons": "^3.11.0", 48 | "slate": "^0.41.1" 49 | }, 50 | "scripts": { 51 | "lighthouse": "lighthouse-ci http://localhost:64073 --report --score=80", 52 | "serve:dist": "PORT=64073 serve", 53 | "preaudit": "npm run build", 54 | "audit": "npm-run-all -r -p serve:dist lighthouse", 55 | "audit:report": "open lighthouse/report.html", 56 | "build": "gatsby telemetry --disable && gatsby build", 57 | "develop": "gatsby telemetry --disable && gatsby develop", 58 | "format": "prettier --write 'src/**/*.js'", 59 | "test": "echo \"Error: no test specified\" && exit 1" 60 | }, 61 | "devDependencies": { 62 | "@types/googlemaps": "^3.30.13", 63 | "@types/markerclustererplus": "^2.1.33", 64 | "@types/react": "^16.4.14", 65 | "css-loader": "^1.0.0", 66 | "lighthouse-ci": "^1.4.1", 67 | "npm-run-all": "^4.1.3", 68 | "prettier": "^1.14.2", 69 | "serve": "^10.0.1" 70 | } 71 | } 72 | -------------------------------------------------------------------------------- /serve.json: -------------------------------------------------------------------------------- 1 | { 2 | "public": "public" 3 | } 4 | -------------------------------------------------------------------------------- /sketch/medals.sketch: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stayForward09/Rythm_react_gatsby/2a3bd9165169d208b275be219d09c9d24f531560/sketch/medals.sketch -------------------------------------------------------------------------------- /src/buttons.css: -------------------------------------------------------------------------------- 1 | .button { 2 | display: inline-block; 3 | margin: 1.1rem 0; 4 | text-rendering: auto; 5 | letter-spacing: normal; 6 | word-spacing: normal; 7 | text-transform: none; 8 | text-indent: 0; 9 | text-shadow: none; 10 | outline: 0; 11 | font-size: 1rem; 12 | font-weight: 500; 13 | line-height: 1.8rem; 14 | padding: 0.4rem 1.1rem; 15 | text-align: center; 16 | text-decoration: none; 17 | border: 0; 18 | border-radius: 3px; 19 | box-shadow: 0 2px 4px 0 rgba(14, 30, 37, 0.2); 20 | cursor: pointer; 21 | background: var(--primary); 22 | color: var(--white-light); 23 | -webkit-font-smoothing: antialiased; 24 | -moz-osx-font-smoothing: grayscale; 25 | transition: all 0.2s ease-in-out; 26 | 27 | &:disabled { 28 | cursor: not-allowed; 29 | background: var(--white); 30 | color: gray; 31 | } 32 | } 33 | 34 | .button:focus:not(:disabled), 35 | .button:hover:not(:disabled) { 36 | --focus: hsla(var(--color-primary), 0.8); 37 | text-decoration: none; 38 | background-color: var(--focus); 39 | } 40 | 41 | .button:active:not(:disabled) { 42 | --active: hsla(var(--color-primary-1), 0.9); 43 | box-shadow: none; 44 | background-color: var(--active); 45 | } 46 | -------------------------------------------------------------------------------- /src/cms/admin.css: -------------------------------------------------------------------------------- 1 | @import url('https://fonts.googleapis.com/css?family=Raleway'); 2 | 3 | body { 4 | margin: 0; 5 | padding: 20px; 6 | color: #4a4a4a; 7 | font-size: 1rem; 8 | line-height: 1.5; 9 | font-family: 'Raleway', Lucida Grande, sans-serif; 10 | } 11 | 12 | html, 13 | body { 14 | min-width: 320px; 15 | } 16 | 17 | img { 18 | max-width: 100%; 19 | height: auto; 20 | } 21 | 22 | blockquote { 23 | margin-left: 1.45rem; 24 | margin-right: 1.45rem; 25 | margin-top: 0; 26 | padding-bottom: 0; 27 | padding-left: 0; 28 | padding-right: 0; 29 | padding-top: 0; 30 | margin-bottom: 1.45rem; 31 | display: block; 32 | margin-block-start: 1em; 33 | margin-block-end: 1em; 34 | margin-inline-start: 40px; 35 | margin-inline-end: 40px; 36 | } 37 | 38 | .otro-blockquote { 39 | font-size: 1em; 40 | width:95%; 41 | margin:30px auto; 42 | font-style:italic; 43 | color: #555; 44 | padding:1.2em 26px 1.2em 54px; 45 | border-left:8px solid #5143ea ; 46 | line-height:1.6; 47 | position: relative; 48 | background:#EDEDED; 49 | } 50 | 51 | .otro-blockquote::before { 52 | font-family:Arial; 53 | content: "\201C"; 54 | color:#5143ea; 55 | font-size:4em; 56 | position: absolute; 57 | left: 10px; 58 | top:-10px; 59 | } 60 | 61 | .otro-blockquote::after { 62 | content: ''; 63 | } 64 | 65 | .otro-blockquote span { 66 | display:block; 67 | color:#444; 68 | font-style: normal; 69 | font-weight: bold; 70 | margin-top:1em; 71 | } -------------------------------------------------------------------------------- /src/cms/cms.js: -------------------------------------------------------------------------------- 1 | import CMS from 'netlify-cms'; 2 | 3 | import { TeamPreview } from './team'; 4 | import { TimetablePreview } from './timetable'; 5 | 6 | import AdminCSS from '!css-loader!./admin.css'; 7 | import TeamCSS from '!css-loader!./team.css'; 8 | 9 | CMS.registerPreviewStyle(AdminCSS.toString(), { raw: true }); 10 | CMS.registerPreviewStyle(TeamCSS.toString(), { raw: true }); 11 | 12 | CMS.registerPreviewTemplate('team', TeamPreview); 13 | CMS.registerPreviewTemplate('timetable', TimetablePreview); 14 | 15 | CMS.registerEditorComponent({ 16 | id: 'youtube', 17 | label: 'YouTube', 18 | fields: [{ name: 'id', label: 'YouTube Video ID', widget: 'string' }], 19 | pattern: /^YouTube Video<\/a>$/, 20 | fromBlock: function(match) { 21 | return { 22 | id: match[1], 23 | }; 24 | }, 25 | toBlock: function(obj) { 26 | return `YouTube Video`; 29 | }, 30 | toPreview: function(obj) { 31 | return `YouTube Video`; 34 | }, 35 | }); 36 | 37 | CMS.registerEditorComponent({ 38 | id: 'linebreak', 39 | label: 'Line Break', 40 | pattern: /^---$/, 41 | toBlock: function() { 42 | return `---`; 43 | }, 44 | toPreview: function() { 45 | return `
`; 46 | }, 47 | }); 48 | 49 | CMS.registerEditorComponent({ 50 | id: 'linkimage', 51 | label: 'Link Image', 52 | fields: [ 53 | { name: 'id', label: 'Link Image', widget: 'image' }, 54 | { name: 'link', label: 'Link', widget: 'string' }, 55 | { name: 'description', label: 'Description', widget: 'string' }, 56 | ], 57 | pattern: /^\[!\[(\S+)?\]\((\S+)\)]\((\S+)\)$/, 58 | fromBlock: function(match) { 59 | return { 60 | description: match[1], 61 | id: match[2], 62 | link: match[3], 63 | }; 64 | }, 65 | toBlock: function(obj) { 66 | return `[![${obj.description}](${obj.id})](${obj.link})`; 67 | }, 68 | toPreview: function(obj) { 69 | return `${obj.description}`; 70 | }, 71 | }); 72 | 73 | CMS.registerEditorComponent({ 74 | id: 'quote', 75 | label: 'Quote', 76 | fields: [ 77 | { name: 'id', label: 'Quote', widget: 'string' }, 78 | { name: 'author', label: 'Author', widget: 'string' }, 79 | ], 80 | pattern: /^
(.+)(.+)<\/span><\/blockquote>$/, 81 | fromBlock: function(match) { 82 | return { 83 | id: match[1], 84 | author: match[2], 85 | }; 86 | }, 87 | toBlock: function(obj) { 88 | return `
${obj.id}${obj.author}
`; 89 | }, 90 | toPreview: function(obj) { 91 | return `
${obj.id}${obj.author}
`; 92 | }, 93 | }); 94 | -------------------------------------------------------------------------------- /src/cms/team.css: -------------------------------------------------------------------------------- 1 | .team { 2 | display: grid; 3 | grid-template-columns: 1fr; 4 | grid-row-gap: 0.75rem; 5 | grid-auto-flow: row; 6 | justify-items: center; 7 | font-size: 1rem; 8 | } 9 | 10 | .team h1 { 11 | font-size: 2.2em; 12 | margin: 0; 13 | } 14 | 15 | .team img.avatar { 16 | max-width: 22em; 17 | border-radius: 50%; 18 | } 19 | 20 | .team img:not(.avatar) { 21 | margin-top: 1rem; 22 | margin-bottom: 1rem; 23 | } 24 | 25 | .team blockquote { 26 | margin-top: 1rem; 27 | margin-left: 0; 28 | border-left: 4px solid hsl(247, 91%, 67%); 29 | padding-left: 1em; 30 | font-size: 1rem; 31 | line-height: 1.4em; 32 | text-transform: capitalize; 33 | } 34 | 35 | .team blockquote p + .team blockquote p { 36 | margin-top: 0.6rem; 37 | } 38 | 39 | .separator { 40 | width: 100%; 41 | } -------------------------------------------------------------------------------- /src/cms/team.js: -------------------------------------------------------------------------------- 1 | import createClass from 'create-react-class'; 2 | 3 | export const TeamPreview = createClass({ 4 | render: function() { 5 | const h = window.h; 6 | const entry = this.props.entry; 7 | 8 | const name = entry.getIn(['data', 'title']); 9 | const titles = entry.getIn(['data', 'titles']); 10 | const image = entry.getIn(['data', 'avatar']); 11 | const body = this.props.widgetFor('body'); 12 | const details = this.props.widgetFor('details'); 13 | 14 | return h( 15 | 'div', 16 | { className: 'team' }, 17 | image 18 | ? h('img', { 19 | src: this.props.getAsset(image).toString(), 20 | className: 'avatar', 21 | }) 22 | : null, 23 | h('h1', {}, name && name.toUpperCase()), 24 | h('blockquote', {}, titles && titles.split('\n').map(title => h('p', {}, title))), 25 | h('p', { className: 'details' }, details), 26 | h('hr', { className: 'separator' }), 27 | h('p', { className: 'description' }, body) 28 | ); 29 | }, 30 | }); 31 | -------------------------------------------------------------------------------- /src/cms/timetable.js: -------------------------------------------------------------------------------- 1 | import createClass from 'create-react-class'; 2 | 3 | export const TimetablePreview = createClass({ 4 | render: function() { 5 | const h = window.h; 6 | const entry = this.props.entry; 7 | 8 | const title = entry.getIn(['data', 'title']); 9 | const monday = this.props.widgetFor('monday'); 10 | const tuesday = this.props.widgetFor('tuesday'); 11 | const wednesday = this.props.widgetFor('wednesday'); 12 | const thursday = this.props.widgetFor('thursday'); 13 | const friday = this.props.widgetFor('friday'); 14 | const saturday = this.props.widgetFor('saturday'); 15 | const sunday = this.props.widgetFor('sunday'); 16 | 17 | return h( 18 | 'div', 19 | { className: 'timetable' }, 20 | h('h1', {}, title && title.toUpperCase()), 21 | monday && h('div', {}, h('h4', {}, 'Monday:'), h('p', { className: 'monday' }, monday)), 22 | tuesday && h('div', {}, h('h4', {}, 'Tuesday:'), h('p', { className: 'tuesday' }, tuesday)), 23 | wednesday && 24 | h('div', {}, h('h4', {}, 'Wednesday:'), h('p', { className: 'wednesday' }, wednesday)), 25 | thursday && 26 | h('div', {}, h('h4', {}, 'Thursday:'), h('p', { className: 'thursday' }, thursday)), 27 | friday && h('div', {}, h('h4', {}, 'Friday:'), h('p', { className: 'friday' }, friday)), 28 | saturday && 29 | h('div', {}, h('h4', {}, 'Saturday:'), h('p', { className: 'saturday' }, saturday)), 30 | sunday && h('div', {}, h('h4', {}, 'Sunday:'), h('p', { className: 'sunday' }, sunday)) 31 | ); 32 | }, 33 | }); 34 | -------------------------------------------------------------------------------- /src/colors.css: -------------------------------------------------------------------------------- 1 | :root { 2 | --color-primary: 262, 66%, 46%; 3 | --color-primary-1: 247, 91%, 67%; 4 | --color-primary-2: 245, 80%, 59%; 5 | --color-primary-2-light: 246, 78%, 86%; 6 | 7 | --color-secondary: 262, 56%, 54%; 8 | --color-primary-light: 282, 45%, 87%; 9 | 10 | --color-white: 0, 0%, 93%; 11 | --color-white-light: 0, 0%, 100%; 12 | --color-black: 0, 0%, 20%; 13 | --color-black-dark: 0, 0%, 7%; 14 | --color-light-gray: 180, 7%, 96%; 15 | 16 | --color-topbar: 257, 64%, 46%; 17 | --color-body-background: 294, 31%, 47%; 18 | 19 | --primary: hsl(var(--color-primary)); 20 | --primary-1: hsl(var(--color-primary-1)); 21 | --primary-2: hsl(var(--color-primary-2)); 22 | --primary-2-light: hsl(var(--color-primary-2-light)); 23 | --secondary: hsl(var(--color-secondary)); 24 | --primary-light: hsl(var(--color-primary-light)); 25 | --light-gray: hsl(var(--color-light-gray)); 26 | 27 | --white: hsl(var(--color-white)); 28 | --white-light: hsl(var(--color-white-light)); 29 | --black: hsl(var(--color-black)); 30 | --black-dark: hsl(var(--color-black-dark)); 31 | 32 | --topbar: hsl(var(--color-topbar)); 33 | --body-background: hsl(var(--color-body-background)); 34 | } 35 | -------------------------------------------------------------------------------- /src/components/ContactUs.css: -------------------------------------------------------------------------------- 1 | .ContactUs { 2 | padding: 1.25rem 0; 3 | 4 | & form { 5 | display: flex; 6 | flex-direction: column; 7 | width: 100%; 8 | max-width: 600px; 9 | margin: 0 auto; 10 | padding: 0em; 11 | border-radius: 8px; 12 | background-color: var(--white-light); 13 | 14 | @media all and (min-width: 600px) { 15 | padding: 1.5em; 16 | box-shadow: 0 0 6rem 0 rgba(0, 0, 0, 0.16); 17 | } 18 | } 19 | 20 | & .form-group + .form-group { 21 | margin-top: 1rem; 22 | } 23 | 24 | & input, 25 | & textarea, 26 | & select { 27 | display: inline-block; 28 | margin: 0em; 29 | text-rendering: auto; 30 | letter-spacing: normal; 31 | word-spacing: normal; 32 | text-transform: none; 33 | text-indent: 0; 34 | text-shadow: none; 35 | text-align: start; 36 | color: initial; 37 | font-size: 1.1rem; 38 | } 39 | 40 | & input, 41 | & select { 42 | height: 2.8rem; 43 | } 44 | 45 | & input, 46 | & textarea, 47 | & select { 48 | box-sizing: border-box; 49 | display: block; 50 | width: 100%; 51 | margin: 0; 52 | border: 2px solid rgba(10, 30, 35, 0.1); 53 | border-radius: 3px; 54 | background: var(--white-light); 55 | color: var(--black); 56 | font-weight: 400; 57 | line-height: 1.7rem; 58 | padding: 0.4rem 0.5rem; 59 | outline-color: var(--primary); 60 | transition: outline 0.2s ease-out; 61 | } 62 | 63 | & .button { 64 | align-self: flex-end; 65 | } 66 | } 67 | -------------------------------------------------------------------------------- /src/components/CookiePolicy.css: -------------------------------------------------------------------------------- 1 | .CookiePolicy { 2 | position: fixed; 3 | bottom: 10px; 4 | left: 10px; 5 | z-index: 500; 6 | opacity: 1; 7 | transition: bottom 0.25s ease-in-out, opacity 0.25s ease-in-out; 8 | 9 | &.fade-out { 10 | opacity: 0; 11 | } 12 | 13 | @media screen and (min-width: 600px) { 14 | left: 30px; 15 | width: 0; 16 | bottom: 80px; 17 | right: initial; 18 | } 19 | } 20 | 21 | .CookiePolicy__notification { 22 | position: static; 23 | width: calc(100% - 20px); 24 | margin-top: 20px; 25 | opacity: 1; 26 | z-index: 500; 27 | 28 | @media screen and (min-width: 600px) { 29 | width: 400px; 30 | } 31 | } 32 | 33 | .CookiePolicy__notification__content { 34 | position: relative; 35 | padding: 1rem; 36 | border-radius: 4px; 37 | color: var(--black); 38 | box-shadow: 0 0 5px rgba(0, 0, 0, 0.3); 39 | background-color: var(--white-light); 40 | 41 | & p.CookiePolicy__copy { 42 | position: relative; 43 | padding-left: 1.8rem; 44 | font-size: 0.8rem; 45 | text-align: left; 46 | 47 | &:before { 48 | position: absolute; 49 | display: block; 50 | left: 0; 51 | top: 3px; 52 | width: 1.1rem; 53 | height: 1.1rem; 54 | border-radius: 50%; 55 | background-color: var(--primary-2); 56 | color: var(--white-light); 57 | content: 'i'; 58 | line-height: 1.1rem; 59 | text-align: center; 60 | font-weight: 600; 61 | } 62 | } 63 | } 64 | 65 | .CookiePolicy__notification__content__copy { 66 | & .actions { 67 | display: flex; 68 | flex-flow: row; 69 | justify-content: flex-end; 70 | } 71 | } 72 | -------------------------------------------------------------------------------- /src/components/CookiePolicy.js: -------------------------------------------------------------------------------- 1 | import React, { Component } from 'react'; 2 | import { Link } from 'gatsby'; 3 | import PropTypes from 'prop-types'; 4 | import { withCookies, Cookies } from 'react-cookie'; 5 | 6 | import './CookiePolicy.css'; 7 | 8 | class CookiePolicyComponent extends Component { 9 | state = { 10 | acceptedCookies: true, 11 | }; 12 | 13 | componentDidMount() { 14 | const { cookies } = this.props; 15 | 16 | this.setState({ 17 | acceptedCookies: !!cookies.get('Accepted_cookies'), 18 | fadeOut: false, 19 | }); 20 | } 21 | 22 | onAccept = () => { 23 | const { cookies } = this.props; 24 | 25 | this.setState({ fadeOut: true }); 26 | 27 | setTimeout(() => { 28 | cookies.set('Accepted_cookies', true, { path: '/', maxAge: 86400 * 365 }); 29 | this.setState({ acceptedCookies: true }); 30 | }, 1000); 31 | } 32 | 33 | render() { 34 | return ( 35 | this.state.acceptedCookies === false && ( 36 |
37 |
38 |
39 |
40 |

41 | To ensure the best experience on our website, we recommend that you allow cookies, 42 | as described in our Cookie Policy. 43 |

44 |

45 | 52 |

53 |
54 |
55 |
56 |
57 | ) 58 | ); 59 | } 60 | } 61 | 62 | CookiePolicyComponent.propTypes = { 63 | cookies: PropTypes.instanceOf(Cookies).isRequired, 64 | }; 65 | 66 | export const CookiePolicy = withCookies(CookiePolicyComponent); 67 | -------------------------------------------------------------------------------- /src/components/Disciplines.css: -------------------------------------------------------------------------------- 1 | .Disciplines__wrapper { 2 | position: relative; 3 | background-color: #7159fb; 4 | margin-top: 3rem; 5 | padding: 2em 0; 6 | z-index: 10; 7 | 8 | &::before { 9 | content: ''; 10 | display: block; 11 | left: 0; 12 | width: 100%; 13 | position: absolute; 14 | visibility: visible; 15 | z-index: 10; 16 | pointer-events: none; 17 | 18 | @media all and (min-width: 1200px) { 19 | top: -270px; 20 | height: 276px; 21 | background-image: url('/img/curve-disciplines.svg'); 22 | background-position: right top; 23 | background-repeat: no-repeat; 24 | background-size: 3000px 278px; 25 | } 26 | } 27 | 28 | & h2.title { 29 | color: var(--white); 30 | } 31 | 32 | & .Disciplines { 33 | display: grid; 34 | margin: 4em auto; 35 | grid-template-columns: repeat(auto-fit, minmax(16rem, 1fr)); 36 | grid-gap: 3rem 2.2rem; 37 | 38 | & a { 39 | padding: 1.2rem; 40 | text-decoration: none; 41 | transition: all 250ms ease-in-out; 42 | 43 | color: var(--black); 44 | 45 | &:hover { 46 | color: var(--primary); 47 | background-color: var(--white-light); 48 | box-shadow: 0 3px 16px hsla(0, 0%, 4%, 0.5); 49 | } 50 | } 51 | 52 | & .Discipline { 53 | display: flex; 54 | flex-direction: column; 55 | align-items: center; 56 | justify-content: center; 57 | justify-self: center; 58 | 59 | border-radius: 50%; 60 | background-color: var(--white); 61 | box-shadow: 0px 1px 16px hsla(0, 0%, 4%, 0.4); 62 | width: 200px; 63 | height: 200px; 64 | text-align: center; 65 | } 66 | } 67 | } 68 | -------------------------------------------------------------------------------- /src/components/Disciplines.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { Link } from 'gatsby'; 3 | import propTypes from 'prop-types'; 4 | 5 | import './Disciplines.css'; 6 | 7 | const Discipline = ({ title, link }) => ( 8 | 9 |

{title}

10 | 11 | ); 12 | 13 | Discipline.propTypes = { 14 | title: propTypes.string.isRequired, 15 | link: propTypes.string.isRequired, 16 | }; 17 | 18 | Discipline.defaultProps = { 19 | link: '/', 20 | }; 21 | 22 | export const Disciplines = ({ disciplines }) => ( 23 |
24 |

Our Disciplines

25 |
26 | {(disciplines && 27 | disciplines.edges && 28 | disciplines.edges.map((discipline, key) => ( 29 | 36 | ))) ||
No discipline available. Try again later.
} 37 |
38 |
39 | ); 40 | -------------------------------------------------------------------------------- /src/components/Footer.css: -------------------------------------------------------------------------------- 1 | .Footer { 2 | margin-top: 4rem; 3 | padding: 2rem 0; 4 | background-color: var(--black); 5 | color: var(--white); 6 | 7 | & .content { 8 | display: flex; 9 | flex-direction: column; 10 | text-align: center; 11 | justify-content: center; 12 | max-width: 1200px; 13 | margin: 0 auto; 14 | height: 400px; 15 | } 16 | 17 | & .grid__container { 18 | display: grid; 19 | grid-gap: 1em; 20 | grid-template-columns: minmax(280px, 1fr); 21 | 22 | @media all and (min-width: 600px) { 23 | grid-template-columns: repeat(2, 1fr); 24 | } 25 | 26 | @media all and (min-width: 920px) { 27 | grid-template-columns: repeat(4, minmax(200px, 1fr)); 28 | } 29 | } 30 | 31 | & .grid__column { 32 | text-align: center; 33 | 34 | @media all and (min-width: 920px) { 35 | text-align: initila; 36 | } 37 | } 38 | 39 | & a { 40 | color: var(--primary-2-light); 41 | text-decoration: none; 42 | } 43 | 44 | & a:hover { 45 | color: var(--primary-1); 46 | } 47 | 48 | & ul { 49 | margin-left: 0; 50 | & a { 51 | text-decoration: none; 52 | } 53 | } 54 | 55 | & li { 56 | list-style: none; 57 | margin-bottom: 0.4em; 58 | font-size: 0.9em; 59 | } 60 | 61 | & .logo { 62 | max-width: 140px; 63 | opacity: 0.8; 64 | 65 | &:hover { 66 | opacity: 1; 67 | } 68 | } 69 | 70 | & .copy { 71 | @media all and (min-width: 920px) { 72 | text-align: left; 73 | grid-column: span 2; 74 | } 75 | } 76 | 77 | & .social { 78 | & ul { 79 | margin: 0; 80 | } 81 | 82 | & li { 83 | display: inline-block; 84 | margin: 0 0.35em; 85 | 86 | & a { 87 | display: block; 88 | } 89 | } 90 | 91 | @media all and (min-width: 600px) { 92 | justify-self: center; 93 | align-self: end; 94 | } 95 | 96 | @media all and (min-width: 920px) { 97 | grid-column: auto/-1; 98 | } 99 | } 100 | 101 | & .version { 102 | font-size: 0.75em; 103 | } 104 | } 105 | -------------------------------------------------------------------------------- /src/components/Footer.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import propTypes from 'prop-types'; 3 | import { Link } from 'gatsby'; 4 | import { 5 | IoLogoGoogleplus, 6 | IoLogoTwitter, 7 | IoLogoFacebook, 8 | IoLogoInstagram, 9 | IoLogoYoutube, 10 | } from 'react-icons/io'; 11 | import { VERSION } from '../config'; 12 | 13 | import './Footer.css'; 14 | 15 | const renderIcon = iconName => { 16 | switch (iconName.toLowerCase()) { 17 | case 'facebook': 18 | return ; 19 | case 'twitter': 20 | return ; 21 | case 'googleplus': 22 | return ; 23 | case 'instagram': 24 | return ; 25 | case 'youtube': 26 | return ; 27 | default: 28 | return; 29 | } 30 | }; 31 | 32 | export const Footer = ({ disciplines, legals, socials }) => ( 33 |
34 |
35 |
36 |
37 | Rhythmic Excellence logo 38 |
39 | 40 |
41 |

Disciplines

42 |
    43 | {disciplines.map(discipline => ( 44 |
  • 45 | {discipline.node.frontmatter.title} 46 |
  • 47 | ))} 48 |
49 |
50 | 51 |
52 |

Other Links

53 |
    54 |
  • 55 | Timetable 56 |
  • 57 |
  • 58 | Meet our team 59 |
  • 60 |
  • 61 | News 62 |
  • 63 |
64 |
65 | 66 |
67 |

Legal

68 |
    69 | {legals.map(legal => ( 70 |
  • 71 | {legal.node.frontmatter.title} 72 |
  • 73 | ))} 74 |
75 |
76 | 77 |
78 |
RhythmicExcellence v{`${VERSION}`}
79 | 80 |
81 | © Copyright 2018-{new Date().getFullYear() + ' '} 82 | 83 | Sonny 84 | {' '} 85 | - All Rights Reserved 86 |
87 |
88 |
89 | 103 |
104 |
105 |
106 |
107 | ); 108 | 109 | Footer.propTypes = { 110 | disciplines: propTypes.any.isRequired, 111 | legals: propTypes.any.isRequired, 112 | socials: propTypes.any.isRequired, 113 | }; 114 | -------------------------------------------------------------------------------- /src/components/Hero.css: -------------------------------------------------------------------------------- 1 | .Hero { 2 | & h1 { 3 | margin: 0; 4 | color: var(--white); 5 | font-size: 1.2rem; 6 | line-height: 2.5rem; 7 | 8 | @media all and (min-width: 420px) { 9 | font-size: 1.4rem; 10 | } 11 | @media all and (min-width: 600px) { 12 | font-size: 1.5rem; 13 | } 14 | } 15 | 16 | & .hero-bg { 17 | background: url('/img/home_background.png'); 18 | background-repeat: no-repeat; 19 | background-size: cover; 20 | background-position: bottom; 21 | min-height: 14rem; 22 | padding: 5rem 1rem 4rem; 23 | text-align: center; 24 | 25 | opacity: 0; 26 | transform: translateY(-3px); 27 | transition: opacity 500ms cubic-bezier(0.25, 0.46, 0.45, 0.94); 28 | } 29 | 30 | & .home-link { 31 | position: absolute; 32 | top: 0.9em; 33 | left: 1em; 34 | color: var(--white); 35 | text-decoration: none; 36 | } 37 | 38 | & .home-link:hover { 39 | opacity: 0.75; 40 | } 41 | 42 | & .hero-logo { 43 | max-height: 50vh; 44 | margin-bottom: 4%; 45 | opacity: 0; 46 | transform: translateY(40px); 47 | transition: all 500ms cubic-bezier(0.25, 0.46, 0.45, 0.94) 250ms; 48 | } 49 | 50 | & .hero-bg.show { 51 | opacity: 1; 52 | } 53 | 54 | & .hero-logo.show { 55 | opacity: 1; 56 | transform: translateY(0); 57 | } 58 | } 59 | -------------------------------------------------------------------------------- /src/components/Hero.js: -------------------------------------------------------------------------------- 1 | import React, { Component } from 'react'; 2 | import { Link } from 'gatsby'; 3 | 4 | import './Hero.css'; 5 | 6 | export class Hero extends Component { 7 | image = React.createRef(); 8 | 9 | componentDidMount() { 10 | const img = this.image.current; 11 | 12 | if (img && img.complete) { 13 | this.props.handleImageLoaded(); 14 | } 15 | } 16 | 17 | render() { 18 | const { image, alt, handleImageLoaded } = this.props; 19 | const show = true; 20 | 21 | return ( 22 |
23 |
24 | 25 |

Rhythmic Excellence

26 | 27 | {alt} 34 |
35 |
36 | ); 37 | } 38 | } 39 | -------------------------------------------------------------------------------- /src/components/Homepage.css: -------------------------------------------------------------------------------- 1 | .Homepage { 2 | padding-bottom: 3rem; 3 | 4 | & .content { 5 | padding-top: 1rem; 6 | padding-bottom: 1rem; 7 | } 8 | } 9 | -------------------------------------------------------------------------------- /src/components/Homepage.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import propTypes from 'prop-types'; 3 | 4 | import './Homepage.css'; 5 | 6 | export const Homepage = ({ node }) => { 7 | const title = node.frontmatter && node.frontmatter.title; 8 | const content = node.html; 9 | 10 | return ( 11 |
12 |
13 |

{title}

14 |
15 |
16 |
17 | ); 18 | }; 19 | 20 | Homepage.propTypes = { 21 | node: propTypes.any.isRequired, 22 | }; 23 | -------------------------------------------------------------------------------- /src/components/LatestNews.css: -------------------------------------------------------------------------------- 1 | .LatestNews { 2 | display: block; 3 | padding: 1rem 0 0; 4 | margin-bottom: -4rem; 5 | overflow: hidden; 6 | z-index: 9; 7 | 8 | & .LatestNews__wrapper { 9 | display: block; 10 | margin-bottom: -1em; 11 | } 12 | 13 | & .LatestNews__cards__wrapper { 14 | display: flex; 15 | flex-direction: row; 16 | scroll-snap-type: x mandatory; 17 | overflow-x: scroll; 18 | padding-bottom: 5em; 19 | } 20 | 21 | & .LatestNews__card__wrapper { 22 | box-sizing: content-box; 23 | padding: 1.2em 1em; 24 | max-width: 600px; 25 | min-width: 340px; 26 | width: 100%; 27 | scroll-snap-align: center; 28 | 29 | &:first-child { 30 | margin-left: auto; 31 | padding-left: 1rem; 32 | 33 | @media all and (min-width: 1200px) { 34 | padding-left: 4rem; 35 | } 36 | } 37 | 38 | &:last-child { 39 | margin-right: auto; 40 | padding-right: 1rem; 41 | 42 | @media all and (min-width: 1200px) { 43 | padding-right: 4rem; 44 | } 45 | } 46 | } 47 | 48 | & .LatestNews__card { 49 | position: relative; 50 | display: flex; 51 | flex-direction: column; 52 | flex-shrink: 0; 53 | min-width: 17em; 54 | padding: 1.6em; 55 | z-index: 10; 56 | border-radius: 8px; 57 | text-align: left; 58 | text-transform: capitalize; 59 | text-decoration: none; 60 | font-size: 0.8rem; 61 | color: var(--black); 62 | background: var(--white-light); 63 | box-shadow: 0 2px 30px rgba(16, 30, 36, 0.1), 0 2px 4px rgba(14, 30, 36, 0.18); 64 | -webkit-font-smoothing: antialiased; 65 | -moz-osx-font-smoothing: grayscale; 66 | transition: box-shadow 250ms ease-in-out; 67 | 68 | &:hover { 69 | box-shadow: 0 2px 20px rgba(16, 30, 36, 0.1), 0 1px 4px rgba(14, 30, 36, 0.18); 70 | 71 | & h4 { 72 | color: var(--primary); 73 | } 74 | } 75 | 76 | & h4 { 77 | font-weight: 600; 78 | font-size: 1.2em; 79 | transition: color 250ms ease-in-out; 80 | 81 | height: 66px; 82 | overflow: hidden; 83 | text-overflow: ellipsis; 84 | -webkit-line-clamp: 2; 85 | display: -webkit-box; 86 | -webkit-box-orient: vertical; 87 | } 88 | 89 | & .LatestNews__card__content { 90 | padding: 0.5em 0; 91 | height: 103px; 92 | overflow: hidden; 93 | text-overflow: ellipsis; 94 | -webkit-line-clamp: 4; 95 | display: -webkit-box; 96 | -webkit-box-orient: vertical; 97 | } 98 | 99 | & .LatestNews__card__footer { 100 | margin-top: 1.2em; 101 | font-size: 0.85em; 102 | } 103 | } 104 | } 105 | -------------------------------------------------------------------------------- /src/components/LatestNews.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import propTypes from 'prop-types'; 3 | import { Link } from 'gatsby'; 4 | 5 | import './LatestNews.css'; 6 | 7 | const NewsCard = ({ title, date, excerpt, slug }) => ( 8 |
9 | 10 |

{title}

11 |
12 |

{excerpt}

13 |
14 |
15 | {date} 16 |
17 | 18 |
19 | ); 20 | 21 | NewsCard.propTypes = { 22 | title: propTypes.string.isRequired, 23 | date: propTypes.string.isRequired, 24 | excerpt: propTypes.string.isRequired, 25 | slug: propTypes.string.isRequired, 26 | }; 27 | 28 | export const LatestNews = ({ edges }) => { 29 | return ( 30 |
31 |

Latest News

32 |
33 |
34 | {edges.map((edge, index) => ( 35 | 42 | ))} 43 |
44 |
45 |
46 | ); 47 | }; 48 | 49 | LatestNews.propTypes = { 50 | edges: propTypes.any.isRequired, 51 | }; 52 | -------------------------------------------------------------------------------- /src/components/Map.css: -------------------------------------------------------------------------------- 1 | @keyframes wave { 2 | from { 3 | width: 100%; 4 | } 5 | to { 6 | width: 400%; 7 | } 8 | } 9 | 10 | .Map { 11 | position: relative; 12 | 13 | & .gm-style .gm-style-iw { 14 | color: var(--black); 15 | } 16 | } 17 | 18 | .Map::before { 19 | content: ''; 20 | display: block; 21 | left: 0; 22 | position: absolute; 23 | width: 100%; 24 | visibility: visible; 25 | z-index: 10; 26 | height: 100px; 27 | top: -1px; 28 | background-image: url('/img/curve-map.svg'); 29 | background-size: 3000px 100px; 30 | background-position: center bottom; 31 | background-repeat: repeat-x; 32 | transform: scaleY(-1); 33 | animation-name: wave; 34 | animation-duration: 30s; 35 | animation-direction: alternate; 36 | animation-fill-mode: both; 37 | animation-iteration-count: infinite; 38 | animation-timing-function: linear; 39 | } 40 | -------------------------------------------------------------------------------- /src/components/Map.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { 3 | withScriptjs, 4 | withGoogleMap, 5 | GoogleMap, 6 | InfoWindow, 7 | Marker, 8 | } from 'react-google-maps'; 9 | import { MarkerClusterer } from 'react-google-maps/lib/components/addons/MarkerClusterer'; 10 | import { mapStyles } from './MapStyles'; 11 | 12 | import './Map.css'; 13 | 14 | const MapComponent = withScriptjs( 15 | withGoogleMap(props => ( 16 | 25 | 26 | 27 | 28 |
29 |

Hackney Branch

30 | 35 | Open in Google Maps 36 | 37 |
38 |
39 |
40 | 41 | 42 |
43 |

Haggerston Branch

44 | 49 | Open in Google Maps 50 | 51 |
52 |
53 |
54 | 55 | 56 |
57 |

Kensington branch

58 | 63 | Open in Google Maps 64 | 65 |
66 |
67 |
68 |
69 |
70 | )) 71 | ); 72 | 73 | const MapContainer = ChildComponent => props => ( 74 |
75 | 76 |
77 | ); 78 | 79 | export const Map = MapContainer(MapComponent); 80 | -------------------------------------------------------------------------------- /src/components/MapStyles.js: -------------------------------------------------------------------------------- 1 | export const mapStyles = [ 2 | { elementType: 'geometry', stylers: [{ color: '#242f3e' }] }, 3 | { 4 | elementType: 'labels.text.stroke', 5 | stylers: [{ color: '#242f3e' }], 6 | }, 7 | { elementType: 'labels.text.fill', stylers: [{ color: '#746855' }] }, 8 | { 9 | featureType: 'administrative.locality', 10 | elementType: 'labels.text.fill', 11 | stylers: [{ color: '#cccccc' }], 12 | }, 13 | { 14 | featureType: 'poi', 15 | elementType: 'labels.text.fill', 16 | stylers: [{ color: '#cccccc' }], 17 | }, 18 | { 19 | featureType: 'poi.park', 20 | elementType: 'geometry', 21 | stylers: [{ color: '#96539d' }], 22 | }, 23 | { 24 | featureType: 'poi.park', 25 | elementType: 'labels.text.fill', 26 | stylers: [{ color: '#cccccc' }], 27 | }, 28 | { 29 | featureType: 'road', 30 | elementType: 'geometry', 31 | stylers: [{ color: '#38414e' }], 32 | }, 33 | { 34 | featureType: 'road', 35 | elementType: 'geometry.stroke', 36 | stylers: [{ color: '#212a37' }], 37 | }, 38 | { 39 | featureType: 'road', 40 | elementType: 'labels.text.fill', 41 | stylers: [{ color: '#9ca5b3' }], 42 | }, 43 | { 44 | featureType: 'road.highway', 45 | elementType: 'geometry', 46 | stylers: [{ color: '#746855' }], 47 | }, 48 | { 49 | featureType: 'road.highway', 50 | elementType: 'geometry.stroke', 51 | stylers: [{ color: '#1f2835' }], 52 | }, 53 | { 54 | featureType: 'road.highway', 55 | elementType: 'labels.text.fill', 56 | stylers: [{ color: '#f3d19c' }], 57 | }, 58 | { 59 | featureType: 'transit', 60 | elementType: 'geometry', 61 | stylers: [{ color: '#2f3948' }], 62 | }, 63 | { 64 | featureType: 'transit.station', 65 | elementType: 'labels.text.fill', 66 | stylers: [{ color: '#d59563' }], 67 | }, 68 | { 69 | featureType: 'water', 70 | elementType: 'geometry', 71 | stylers: [{ color: '#897ec7' }], 72 | }, 73 | { 74 | featureType: 'water', 75 | elementType: 'labels.text.fill', 76 | stylers: [{ color: '#515c6d' }], 77 | }, 78 | { 79 | featureType: 'water', 80 | elementType: 'labels.text.stroke', 81 | stylers: [{ color: '#17263c' }], 82 | }, 83 | ] 84 | -------------------------------------------------------------------------------- /src/components/MedalCollection.css: -------------------------------------------------------------------------------- 1 | .MedalCollection { 2 | } 3 | 4 | .MedalCollection__medals__container { 5 | cursor: pointer; 6 | } 7 | 8 | .MedalCollection__medals { 9 | position: relative; 10 | display: flex; 11 | flex-flow: column; 12 | align-items: center; 13 | } 14 | 15 | .MedalCollection__medals__counter { 16 | color: #d69400; 17 | font-size: 42px; 18 | font-weight: bold; 19 | position: absolute; 20 | bottom: 61px; 21 | } 22 | -------------------------------------------------------------------------------- /src/components/MedalCollection.js: -------------------------------------------------------------------------------- 1 | import React, { PureComponent } from 'react'; 2 | import { Link } from 'gatsby'; 3 | 4 | import './MedalCollection.css'; 5 | 6 | export class MedalCollection extends PureComponent { 7 | render() { 8 | const { data } = this.props; 9 | 10 | const totalMedals = data.gold + data.silver + data.bronze; 11 | 12 | return ( 13 |
14 |

{data.title}

15 | 16 | 17 |
18 | Medal 19 | {totalMedals} 20 |
21 | 22 |
23 | ); 24 | } 25 | } 26 | -------------------------------------------------------------------------------- /src/components/Navbar.css: -------------------------------------------------------------------------------- 1 | .bm-burger-button { 2 | position: absolute; 3 | width: 34px; 4 | height: 26px; 5 | right: 1em; 6 | top: 25px; 7 | } 8 | 9 | .bm-burger-bars { 10 | background: var(--white); 11 | box-shadow: 0 0 1px 0px rgba(0, 0, 0, 0.28), 0 3px 7px rgba(0, 0, 0, 0.1); 12 | } 13 | 14 | .bm-cross-button { 15 | height: 24px; 16 | width: 24px; 17 | } 18 | 19 | .bm-cross { 20 | background: #bdc3c7; 21 | } 22 | 23 | .bm-menu { 24 | background: #373a47; 25 | padding: 2.5em 1.5em 0; 26 | font-size: 1.15em; 27 | } 28 | 29 | .bm-menu a { 30 | display: block; 31 | padding: 1em; 32 | outline: none; 33 | color: #b8b7ad; 34 | text-decoration: none; 35 | font-weight: 400; 36 | } 37 | 38 | .bm-menu a:hover, 39 | .bm-menu a:focus, 40 | .bm-menu a.selected { 41 | color: #c94e50; 42 | cursor: pointer; 43 | } 44 | 45 | .bm-morph-shape { 46 | fill: #373a47; 47 | } 48 | 49 | .bm-item-list { 50 | color: #b8b7ad; 51 | padding: 0.8em; 52 | } 53 | 54 | .bm-overlay { 55 | background: rgba(0, 0, 0, 0.3); 56 | } 57 | -------------------------------------------------------------------------------- /src/components/Navbar.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { slide as BurgerMenu } from 'react-burger-menu'; 3 | import { Link } from 'gatsby'; 4 | 5 | import './Navbar.css'; 6 | 7 | export const Navbar = () => ( 8 | 9 | 10 | Home 11 | 12 | 13 | Disciplines 14 | 15 | 16 | Timetable 17 | 18 | 19 | Meet our team 20 | 21 | 22 | News 23 | 24 | 25 | Legal 26 | 27 | 28 | ); 29 | -------------------------------------------------------------------------------- /src/components/SWBanner.css: -------------------------------------------------------------------------------- 1 | .SWBanner { 2 | position: fixed; 3 | top: 0; 4 | left: 0; 5 | padding: 1rem 0; 6 | background-color: var(--white-light); 7 | box-shadow: 0px 2px 30px 0px rgba(0, 0, 0, 0.15), 0 1px 5px rgba(0, 0, 0, 0.49); 8 | transform: translateY(-101%); 9 | transition: transform 1s linear; 10 | z-index: 9999; 11 | 12 | @media all and (min-width: 600px) { 13 | width: 100%; 14 | } 15 | 16 | &.show { 17 | transform: translateY(0); 18 | } 19 | 20 | & .click-here { 21 | color: var(--primary-1); 22 | cursor: pointer; 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /src/components/SWBanner.js: -------------------------------------------------------------------------------- 1 | import React, { PureComponent } from 'react'; 2 | 3 | import './SWBanner.css'; 4 | 5 | const windowGlobal = typeof window !== 'undefined' && window; 6 | 7 | export class SWBanner extends PureComponent { 8 | state = { 9 | show: false, 10 | }; 11 | 12 | componentDidMount() { 13 | if (windowGlobal['navigator'] && 'serviceWorker' in windowGlobal['navigator']) { 14 | this.activate(); 15 | } 16 | } 17 | 18 | activate() { 19 | windowGlobal.navigator.serviceWorker.ready.then(reg => { 20 | reg.addEventListener('updatefound', () => { 21 | const newWorker = reg.installing; 22 | 23 | newWorker.addEventListener('statechange', () => { 24 | switch (newWorker.state) { 25 | case 'installed': 26 | if (navigator.serviceWorker.controller) { 27 | // new update available 28 | this.showUpdateBar(); 29 | } 30 | 31 | // No update available 32 | break; 33 | 34 | default: 35 | break; 36 | } 37 | }); 38 | }); 39 | }); 40 | } 41 | 42 | reload() { 43 | windowGlobal.location.reload(); 44 | } 45 | 46 | render() { 47 | return ( 48 |
49 | {this.state.show && ( 50 |
51 | A new version of RhythmicExcellence is available. Click{' '} 52 | 53 | here 54 | {' '} 55 | to update. 56 |
57 | )} 58 |
59 | ); 60 | } 61 | 62 | showUpdateBar = () => { 63 | this.setState({ show: true }); 64 | } 65 | } 66 | -------------------------------------------------------------------------------- /src/components/Team.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import PropTypes from 'prop-types'; 3 | import { Link } from 'gatsby'; 4 | 5 | import { IconClose } from '../icons'; 6 | import './Team.css'; 7 | 8 | export const TeamMember = ({ 9 | name, 10 | id, 11 | content, 12 | titles, 13 | picture, 14 | slug, 15 | active, 16 | show, 17 | onActive, 18 | onDismiss, 19 | }) => ( 20 |
21 |
onDismiss()} 24 | /> 25 |
26 |
27 | 32 |
33 |
onActive(id)}> 34 |
35 |
36 |
37 |
38 |

{name}

39 |
40 |
41 | {titles && titles.split('\n').map((title, key) =>

{title}

)} 42 |
43 |
44 | 45 | Read More... 46 | 47 |
48 |
49 |
50 |
51 |
52 | ); 53 | 54 | TeamMember.propTypes = { 55 | show: PropTypes.bool.isRequired, 56 | }; 57 | -------------------------------------------------------------------------------- /src/components/Topbar.css: -------------------------------------------------------------------------------- 1 | .Topbar { 2 | display: flex; 3 | margin-bottom: 2rem; 4 | width: 100%; 5 | height: 4rem; 6 | flex-direction: row; 7 | align-items: center; 8 | background-color: var(--topbar); 9 | 10 | & h1 { 11 | margin: 0 0 0 1rem; 12 | color: var(--white); 13 | font-size: 1.2rem; 14 | line-height: 2.5rem; 15 | 16 | @media all and (min-width: 420px) { 17 | font-size: 1.4rem; 18 | } 19 | @media all and (min-width: 600px) { 20 | font-size: 1.5rem; 21 | } 22 | } 23 | 24 | & .home { 25 | color: var(--white); 26 | text-decoration: none; 27 | } 28 | 29 | & .home:hover { 30 | opacity: 0.75; 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /src/components/Topbar.js: -------------------------------------------------------------------------------- 1 | import React, { Component } from 'react'; 2 | import { Link } from 'gatsby'; 3 | 4 | import './Topbar.css'; 5 | 6 | export class Topbar extends Component { 7 | render() { 8 | return ( 9 |
10 |

11 | 12 | Rhythmic Excellence 13 | 14 |

15 |
16 | ); 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /src/components/indexPage.js: -------------------------------------------------------------------------------- 1 | import React, { PureComponent } from 'react'; 2 | import propTypes from 'prop-types'; 3 | 4 | import { Hero } from './Hero'; 5 | import { Homepage } from './Homepage'; 6 | import { MedalCollection } from './MedalCollection'; 7 | import { LatestNews } from './LatestNews'; 8 | import { Disciplines } from './Disciplines'; 9 | import { Map } from './Map'; 10 | import { ContactUs } from './ContactUs'; 11 | import { Footer } from './Footer'; 12 | 13 | export class IndexPage extends PureComponent { 14 | state = { 15 | ready: false 16 | } 17 | 18 | render() { 19 | const { data, apiKey, height, zoom } = this.props; 20 | const { ready } = this.state; 21 | 22 | return ( 23 |
24 | 25 |
26 | {data.home && data.home.edges.map(edge => )} 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | { ready && } 39 | containerElement={
} 40 | mapElement={
} 41 | />} 42 | 43 | 44 | 45 |
50 |
51 |
52 | ) 53 | } 54 | 55 | handleImageLoaded = () => { 56 | setTimeout(() => this.setState({ ready: true })); 57 | } 58 | } 59 | 60 | IndexPage.propTypes = { 61 | data: propTypes.any.isRequired, 62 | apiKey: propTypes.string.isRequired, 63 | height: propTypes.number.isRequired, 64 | zoom: propTypes.number.isRequired, 65 | }; 66 | -------------------------------------------------------------------------------- /src/config.js: -------------------------------------------------------------------------------- 1 | import Package from '../package.json'; 2 | const windowGlobal = typeof window !== 'undefined' && window; 3 | const hostname = windowGlobal && windowGlobal.location && windowGlobal.location.hostname; 4 | let backendHost; 5 | 6 | if (/rhythmicexcellence\.london/.test(hostname)) { 7 | backendHost = 'https://bt6eyfidtj.execute-api.us-east-1.amazonaws.com/production'; 8 | } else { 9 | backendHost = process.env.BACKEND_HOST || 'http://localhost:3000'; 10 | } 11 | 12 | export const API_ROOT = `${backendHost}`; 13 | export const VERSION = `${Package.version}`; 14 | -------------------------------------------------------------------------------- /src/icons/close.js: -------------------------------------------------------------------------------- 1 | import React from 'react' 2 | 3 | export const IconClose = ({ iconTitle, width, height }) => ( 4 | 13 | 14 | 15 | 21 | 22 | 23 | 24 | ) 25 | -------------------------------------------------------------------------------- /src/icons/index.js: -------------------------------------------------------------------------------- 1 | const { IconClose } = require('./close') 2 | 3 | module.exports = { 4 | IconClose, 5 | } 6 | -------------------------------------------------------------------------------- /src/images/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stayForward09/Rythm_react_gatsby/2a3bd9165169d208b275be219d09c9d24f531560/src/images/logo.png -------------------------------------------------------------------------------- /src/layouts/layout.css: -------------------------------------------------------------------------------- 1 | main { 2 | position: relative; 3 | } 4 | 5 | a, 6 | a:visited { 7 | color: var(--secondary); 8 | } 9 | a:hover { 10 | color: var(--primary-1); 11 | } 12 | 13 | .news a img { 14 | display: block; 15 | border: 1.5px solid #9E9E9E; 16 | padding: 8px; 17 | } 18 | 19 | h1, 20 | h2, 21 | h3, 22 | h4, 23 | h5 { 24 | text-transform: capitalize; 25 | } 26 | 27 | h1 { 28 | text-align: center; 29 | margin-bottom: 1em; 30 | } 31 | 32 | h2.title + p.sub-title { 33 | margin-top: -3rem; 34 | margin-bottom: 2rem; 35 | 36 | @media all and (min-width: 600px) { 37 | margin-top: -4rem; 38 | } 39 | } 40 | 41 | h2.title { 42 | text-align: center; 43 | font-size: 1.33rem; 44 | line-height: 3rem; 45 | text-transform: capitalize; 46 | margin: 1.4rem 0 2em; 47 | color: var(--primary-2); 48 | 49 | @media all and (min-width: 600px) { 50 | font-size: 2rem; 51 | } 52 | } 53 | 54 | h3.title { 55 | margin-bottom: 1rem; 56 | text-align: center; 57 | font-size: 1.2rem; 58 | color: var(--primary-1); 59 | } 60 | 61 | p.sub-title { 62 | text-align: center; 63 | font-size: 1rem; 64 | 65 | color: var(--primary); 66 | } 67 | 68 | p + p { 69 | margin-top: 1.25em; 70 | } 71 | 72 | .container { 73 | max-width: 960px; 74 | width: 100%; 75 | padding: 0 1.2em; 76 | margin: 0 auto; 77 | display: block; 78 | } 79 | 80 | .App, 81 | .Home__content { 82 | background-color: var(--white-light); 83 | } 84 | 85 | .Home__content { 86 | opacity: 0; 87 | height: 0; 88 | overflow: hidden; 89 | transition: opacity 750ms ease-in; 90 | will-change: opacity; 91 | } 92 | 93 | .ready .Home__content { 94 | opacity: 1; 95 | height: initial; 96 | } 97 | 98 | .otro-blockquote { 99 | font-size: 1em; 100 | width:95%; 101 | margin:30px auto; 102 | font-style:italic; 103 | color: #555; 104 | padding:1.2em 26px 1.2em 54px; 105 | border-left:8px solid #5143ea ; 106 | line-height:1.6; 107 | position: relative; 108 | background:#EDEDED; 109 | } 110 | 111 | .otro-blockquote::before { 112 | font-family:Arial; 113 | content: "\201C"; 114 | color:#5143ea; 115 | font-size:4em; 116 | position: absolute; 117 | left: 10px; 118 | top:-10px; 119 | } 120 | 121 | .otro-blockquote::after { 122 | content: ''; 123 | } 124 | 125 | .otro-blockquote span { 126 | display:block; 127 | color:#444; 128 | font-style: normal; 129 | font-weight: bold; 130 | margin-top:1em; 131 | } -------------------------------------------------------------------------------- /src/pages/404.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | 3 | import Layout from '../layouts/index'; 4 | 5 | import './NotFoundPage.css'; 6 | 7 | const NotFoundPage = () => ( 8 | 9 |
10 |
11 |
12 |

Oops!

13 | 404 Page Not Found 14 |
15 |

You just hit a route that doesn't exist... the sadness.

16 |
17 |
18 |
19 | ); 20 | 21 | export default NotFoundPage; 22 | -------------------------------------------------------------------------------- /src/pages/NotFoundPage.css: -------------------------------------------------------------------------------- 1 | .NotFoundPage { 2 | position: relative; 3 | margin-top: -2rem; 4 | margin-bottom: -4rem; 5 | min-height: calc(100vh - 5rem); 6 | color: var(--black); 7 | text-align: center; 8 | z-index: 0; 9 | font-size: 1.2em; 10 | font-weight: 600; 11 | 12 | & header { 13 | padding: 1rem 0; 14 | 15 | & h2 { 16 | font-size: 3rem; 17 | line-height: 1.5em; 18 | margin-top: 0; 19 | margin-bottom: 0.5rem; 20 | } 21 | 22 | & span { 23 | font-size: 1.3rem; 24 | font-weight: 600; 25 | } 26 | } 27 | } 28 | 29 | .NotFoundPage:after { 30 | content: ''; 31 | display: block; 32 | position: absolute; 33 | top: 0; 34 | left: 0; 35 | background-image: url('/img/404.jpg'); 36 | background-position: center center; 37 | background-size: cover; 38 | width: 100%; 39 | height: 100%; 40 | opacity: 0.45; 41 | z-index: -1; 42 | } 43 | -------------------------------------------------------------------------------- /src/pages/disciplines.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { Link, graphql } from 'gatsby'; 3 | 4 | import Layout from '../layouts/index'; 5 | 6 | const Legal = ({ data }) => ( 7 | 8 |
9 |

Our Disciplines

10 | 11 | {data.allMarkdownRemark.edges.map((legal, id) => ( 12 |
13 |

{legal.node.frontmatter.title}

14 |
15 | Read more 16 |
17 |
18 |
19 | ))} 20 |
21 | 22 | ); 23 | 24 | export default Legal; 25 | 26 | export const pageQuery = graphql` 27 | { 28 | allMarkdownRemark(filter: { fields: { category: { eq: "discipline" } } }, limit: 100) { 29 | edges { 30 | node { 31 | excerpt 32 | fields { 33 | slug 34 | } 35 | frontmatter { 36 | title 37 | } 38 | } 39 | } 40 | } 41 | } 42 | `; 43 | -------------------------------------------------------------------------------- /src/pages/disciplines/adult-rhythmic-gymnastics.md: -------------------------------------------------------------------------------- 1 | --- 2 | published: true 3 | position: 3 4 | title: Adult Rhythmic Gymnastics 5 | --- 6 | Adult Gymnastics provides a new opportunity to try out an amazing sport. Build your strength, flexibility and control and test yourself in a range of different activities. 7 | 8 | The minimum age to attend the course is 15. 9 | 10 | Our monthly fees are: 11 | 12 | 1 day per week - £50\ 13 | 2 days per week - £65\ 14 | \ 15 | Please enquiry to receive further information 16 | 17 | ## Our timetable 18 | 19 | **Tuesday** and **Friday** 6-7 at SPACe (online in September 2020) 20 | 21 | ![adult gymnastics](/assets/img_4426.jpg) 22 | 23 | Our adult competitive gymnasts Yoana and Kinga at the last London Championships (March 2020) 24 | 25 | ![](/assets/2b735cce-230f-46d9-af10-ca9d8abf6151.jpg) -------------------------------------------------------------------------------- /src/pages/disciplines/recreational-rhythmic-gymnastics.md: -------------------------------------------------------------------------------- 1 | --- 2 | published: true 3 | position: 2 4 | title: Recreational Rhythmic Gymnastics 5 | --- 6 | Our recreational classes are opened to children from 4 years old up. 7 | 8 | Our monthly fees are: 9 | 10 | 1 day per week - £75\ 11 | 2 days per week - £90\ 12 | 3 days per week - £115 13 | 14 | Baby group: 15 | 16 | 1 day per week - £50 17 | 18 | Please enquiry to receive further information 19 | 20 | ![](/assets/rhythmic-137-edit.jpg) 21 | 22 | Picture by [GBDANCESTARS](https://www.instagram.com/gbswimstars_gbdancestars/?hl=en) -------------------------------------------------------------------------------- /src/pages/disciplines/rhythmic-gymnastics.md: -------------------------------------------------------------------------------- 1 | --- 2 | published: true 3 | position: 1 4 | title: Rhythmic Gymnastics 5 | --- 6 | Rhythmic Gymnastics is the perfect combination of sport and art, linking expressive dance steps with skilful manipulations of the rope, hoop, ball, clubs and ribbon to be performed individually or as part of a group. 7 | 8 | ## Our rhythmic gymnastics training encompasses 9 | 10 | * **Fitness** (Conditioning, endurance, agility and strength), 11 | stretching (kinetic, static-active and static-passive flexibility), expression (body language, emotions communication), coordination (balance, precision) 12 | * **Technical body difficulties** under the FIG (2016/2020) Rhythmic Gymnastics code of point 13 | * **Technical apparatus difficulty** under the FIG (2016/2020) Rhythmic Gymnastic code of point 14 | * **Ballet** 15 | * Creation of Individual and Group **routines** 16 | * **Competitions** and events performances 17 | 18 | ![](/assets/img-20180513-wa0048.jpg) 19 | 20 | Season 2020/2021 21 | 22 | * **Squad** Selected gymnasts only - Level 3, 4 and 5 23 | * **Young Squad** Selected gymnasts only -preparation for level 3, 4 and 5 24 | 25 | ![Saffron Severn at the British Championships 2018](/assets/disciplines-rhythmic-gymnastics.jpg) 26 | 27 | British Gymnastics logo -------------------------------------------------------------------------------- /src/pages/legal.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { Link, graphql } from 'gatsby'; 3 | 4 | import Layout from '../layouts/index'; 5 | 6 | const Legal = ({ data }) => ( 7 | 8 |
9 |

Legal

10 | 11 | {data.allMarkdownRemark.edges.map((legal, id) => ( 12 |
13 |

{legal.node.frontmatter.title}

14 |
15 | Read more 16 |
17 |
18 |
19 | ))} 20 |
21 | 22 | ); 23 | 24 | export default Legal; 25 | 26 | export const pageQuery = graphql` 27 | { 28 | allMarkdownRemark(filter: { fields: { category: { eq: "legal" } } }, limit: 100) { 29 | edges { 30 | node { 31 | excerpt 32 | fields { 33 | slug 34 | } 35 | frontmatter { 36 | title 37 | } 38 | } 39 | } 40 | } 41 | } 42 | `; 43 | -------------------------------------------------------------------------------- /src/pages/medals.css: -------------------------------------------------------------------------------- 1 | .medals { 2 | padding-top: 3rem; 3 | padding-bottom: 3rem; 4 | 5 | & .medals__container { 6 | display: flex; 7 | flex-flow: row; 8 | align-items: flex-end; 9 | justify-content: center; 10 | } 11 | 12 | & .medals__container__column { 13 | text-align: center; 14 | position: relative; 15 | } 16 | 17 | & .base { 18 | padding-top: 1rem; 19 | padding-left: 2rem; 20 | padding-right: 2rem; 21 | border: 4px solid #5e19c7; 22 | border-bottom: none; 23 | } 24 | 25 | & .base__1 { 26 | position: relative; 27 | padding-top: 1rem; 28 | padding-bottom: 2rem; 29 | margin-right: -5px; 30 | border-right: 3px solid white; 31 | background: white; 32 | z-index: 9; 33 | } 34 | 35 | & .base__2 { 36 | padding-top: 1rem; 37 | padding-bottom: 6rem; 38 | } 39 | 40 | & .base__3 { 41 | position: relative; 42 | margin-left: -5px; 43 | border-left: 3px solid white; 44 | background: white; 45 | z-index: 9; 46 | } 47 | 48 | & .medals__container__column h3 { 49 | font-weight: bolder; 50 | color: rgb(94, 25, 198); 51 | font-size: 69px; 52 | line-height: 80px; 53 | } 54 | } 55 | -------------------------------------------------------------------------------- /src/pages/medals.js: -------------------------------------------------------------------------------- 1 | import React, { PureComponent } from 'react'; 2 | import { graphql } from 'gatsby'; 3 | 4 | import Layout from '../layouts/index'; 5 | 6 | import './medals.css'; 7 | 8 | class Medals extends PureComponent { 9 | render() { 10 | const { data } = this.props; 11 | const { frontmatter } = data.allMarkdownRemark.edges[0].node; 12 | 13 | return ( 14 | 15 |
16 |
17 |

{frontmatter.title}

18 | 19 |
20 |
21 |

{frontmatter.silver}

22 |
23 | Silver Medals 28 |
29 |
30 | 31 |
32 |

{frontmatter.gold}

33 |
34 | Gold Medals 39 |
40 |
41 | 42 |
43 |

{frontmatter.bronze}

44 |
45 | Bronze Medals 50 |
51 |
52 |
53 |
54 |
55 |
56 | ); 57 | } 58 | } 59 | 60 | export default Medals; 61 | 62 | export const pageQuery = graphql` 63 | { 64 | allMarkdownRemark(filter: { fields: { category: { eq: "medals" } } }, limit: 1) { 65 | edges { 66 | node { 67 | frontmatter { 68 | title 69 | gold 70 | silver 71 | bronze 72 | } 73 | } 74 | } 75 | } 76 | } 77 | `; 78 | -------------------------------------------------------------------------------- /src/pages/medals/medals.md: -------------------------------------------------------------------------------- 1 | --- 2 | published: true 3 | title: Medals 4 | gold: 136 5 | silver: 109 6 | bronze: 97 7 | --- 8 | 9 | -------------------------------------------------------------------------------- /src/pages/news.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { Link, graphql } from 'gatsby'; 3 | 4 | import Layout from '../layouts/index'; 5 | 6 | const News = ({ data }) => ( 7 | 8 |
9 |

News

10 | 11 | {data.allMarkdownRemark.edges.map((news, id) => ( 12 |
13 |

{news.node.frontmatter.title}

14 | Created on: {news.node.frontmatter.date} 15 |
16 | Read more 17 |
18 |
19 |
20 | ))} 21 |
22 | 23 | ); 24 | 25 | export default News; 26 | 27 | export const pageQuery = graphql` 28 | { 29 | allMarkdownRemark( 30 | filter: { fields: { category: { eq: "news" } } } 31 | sort: { fields: [frontmatter___date], order: DESC } 32 | limit: 20 33 | ) { 34 | edges { 35 | node { 36 | excerpt 37 | fields { 38 | slug 39 | } 40 | frontmatter { 41 | title 42 | date(formatString: "DD MMMM, YYYY") 43 | } 44 | } 45 | } 46 | } 47 | } 48 | `; 49 | -------------------------------------------------------------------------------- /src/pages/news/1st-english-camp-lilleshall-national-sport-centre.md: -------------------------------------------------------------------------------- 1 | --- 2 | published: true 3 | title: 1st English Camp 2019 - Lilleshall National Sport Centre 4 | date: 2019-03-07T10:46:38.266Z 5 | --- 6 | Well done to our junior Saffron Severn for having attended the 1st English Camp of the year and successfully completed her program at the control training. 7 | 8 | ![](/assets/img-20190309-wa0009.jpg) 9 | -------------------------------------------------------------------------------- /src/pages/news/1st-junior-championship-selection-results.md: -------------------------------------------------------------------------------- 1 | --- 2 | published: true 3 | title: 1st Junior World Championships - Selection Results 4 | date: 2019-06-12T14:37:49.453Z 5 | --- 6 | We are extremely proud of our gymnast Saffron Severn who has won the last selection event and has been confirmed to represent GBR at the 1st Junior World Championship which will be held in Moscow RUS from 19th to 21st of July. 7 | 8 | Saffron will be travelling with coach Eleonora, her teammates Elizabeth and her coach Ioana, GBR judge Rebecca Bounce and the team physiotherapist. 9 | 10 | We wish our delegation the best of luck in this memorable event. 11 | 12 | Official announcement [here](https://www.british-gymnastics.org/technical-information/selection/rhythmic/10513-rhy-jnr-world-championships-2019-team-selection-announcement/file) 13 | 14 | ![](/assets/img-20190611-wa0078.jpg) 15 | 16 | ![](/assets/img_9230.jpg) 17 | -------------------------------------------------------------------------------- /src/pages/news/2019-british-championships-liverpool.md: -------------------------------------------------------------------------------- 1 | --- 2 | published: true 3 | title: 2019 British Championships - Liverpool 4 | date: 2019-07-28T10:10:13.067Z 5 | --- 6 | One of the greatest competition weekend ever! 7 | 8 | 🏆Saffron Severn is the Junior British National Champion 2019 9 | 10 | Finals:\ 11 | 🥇rope\ 12 | 🥈ball\ 13 | 🥈clubs\ 14 | 🥇ribbon 15 | 16 | We couldn't be happier, congratulations to our Saffron!!! 17 | 18 | \ 19 | Instagram photos [here](https://www.instagram.com/p/B0i2bJnht3i/) 20 | 21 | [Rope AA](https://www.youtube.com/watch?v=nL_0n7MrAeQ&list=UUjL65Cnt9yJ6cKUiE5UYafA&index=2) 14.800\ 22 | [Clubs AA](https://www.youtube.com/watch?v=oM37GFJvLyA&list=UUjL65Cnt9yJ6cKUiE5UYafA&index=1) 15.600\ 23 | [Ribbon Final](https://www.youtube.com/watch?v=gRIbVruXouA&list=UUjL65Cnt9yJ6cKUiE5UYafA&index=3) 13.500 24 | 25 | Full results [here](https://www.british-gymnastics.org/news-and-events/british-championships/championship-series#results) 26 | 27 | ![](/assets/img-20190728-wa0065.jpg) 28 | 29 | ![](/assets/img_20190727_204957.jpg) 30 | 31 | ![](/assets/img_20190727_204526_1.jpg) 32 | -------------------------------------------------------------------------------- /src/pages/news/2019-espoirs-open-championships.md: -------------------------------------------------------------------------------- 1 | --- 2 | published: true 3 | title: '2019 Espoirs Open Championships ' 4 | date: 2019-11-24T20:27:17.241Z 5 | --- 6 | Great results from the British National Open Championships 2020, our youngest have performed their brand new routines showing big character and determination. 7 | 8 | A huge CONGRATULATIONS to _Elizabeth L._ (class 2010) whose has performed a fantastic rope routine and ranked 6th competing against gymnasts borne in 2010, 2009 and 2008! 9 | 10 | A big well done to _Adriana_ (8th in clubs with a great 10.550 and 13th in hoop), _Elena_ and _Elizabeth_ _P_. 11 | 12 | [Instagram](https://www.instagram.com/p/B5QyOAvBwXT/) 13 | -------------------------------------------------------------------------------- /src/pages/news/2020-lilleshall-gbr-national-squad-training-camp.md: -------------------------------------------------------------------------------- 1 | --- 2 | published: true 3 | title: 2020 Lilleshall - GBR National Squad Training Camp 4 | date: 2020-11-09T13:37:20.629Z 5 | --- 6 | Our senior gymnasts had finally the chance to get back to the National Sport Centre for a Squad camp organised in preparation of the 2021 European Championships. 7 | 8 | Well done to Saffron Severn and Leyla Yilmaz and big thanks to all the coaches Lynne, Laura, Suzanne and Maria. 9 | 10 | ![](/assets/5b74b74e-6b28-4077-84d0-10d50402ad31.jpg) 11 | 12 | ![](/assets/253c22f8-a11d-4cef-be4e-34d1e492152b.jpg) 13 | 14 | ![]() -------------------------------------------------------------------------------- /src/pages/news/2020-re-series.md: -------------------------------------------------------------------------------- 1 | --- 2 | published: true 3 | title: 2020 - RE Series 4 | date: 2020-02-22T15:47:44.908Z 5 | --- 6 | We’re pleased to inform you that RE is organising the first RE Series. 7 | 8 | ![](/assets/img_4056.png) 9 | 10 | RE Series 2020 Dates 11 | 12 | • Saturday 22nd February 13 | 14 | • Saturday 30th May 15 | 16 | • Saturday 27th June 17 | 18 | The teams: 19 | 20 | Livia, Akari and Adriana 21 | 22 | Dana, Sandra and Elizabeth L. 23 | 24 | Leyla, Rebecca and Emilia 25 | 26 | Saffron, Elizabeth P. and Elena 27 | 28 | Every team will perform 4 routines out of the 5 FIG (rope, hoop, ball, clubs and ribbon) in the FIG order. 29 | 30 | Every gymnast will perform minimum 1 and maximum 2 routines each match with a maximum total of 5 routines out of the 3 matches. 31 | 32 | All scores for each team will be summed and the teams will be ranked from the highest to the lowest total score. 33 | 34 | The overall winning team after the 3 matches will be the RE Champion. 35 | 36 | We hope you will all come and support the girls and their teams 37 | 38 | Further information: 39 | 40 | At the end of each match the teams will get the special points: 41 | 42 | 1st team - 8 points 43 | 44 | 2nd team - 6 points 45 | 46 | 3rd team - 4 points 47 | 48 | 4th team - 2 points 49 | 50 | The special points will be summed and the final points will declare the final ranking. 51 | 52 | I.e. If team A wins the first match, get 3rd on the second match and wins the last, the total points will be: 20. 53 | 54 | ![](/assets/8eff49f8-6f8c-4832-af7c-2922ef4ada85.jpg) 55 | 56 | ![](/assets/img_4080.png) 57 | 58 | ![](/assets/img_4081.png) 59 | 60 | ![](/assets/img_4079.png) 61 | 62 | Instagram pictures [Here](https://www.instagram.com/stories/highlights/17860370152730843/?hl=en) 63 | 64 | Results after the first match: 65 | 66 | ![](/assets/img_4101.png) 67 | -------------------------------------------------------------------------------- /src/pages/news/2020-spring-london-championships.md: -------------------------------------------------------------------------------- 1 | --- 2 | published: true 3 | title: 2020 - Spring London Championships 4 | date: 2020-03-01T14:46:50.081Z 5 | --- 6 | Well done to all our gymnasts that competed at the London Championships: 7 | 8 | \ 9 | _Level 3_ 10 | 11 | **Jessica** 1st Free 1st Rope (U9) 🥇🥇 12 | 13 | **Vasilisa** 11th Free 5th Rope (U10) 14 | 15 | **Emilia** 6th Clubs 2nd Ribbon (Junior) 🥈 16 | 17 | \ 18 | _Level 4_ 19 | 20 | **Elizabeth** **L.** 4th Free 3rd Rope (U10) 🥉 21 | 22 | **Adriana** 8th Clubs 8th Hoop (U12) 23 | 24 | **Rebecca** 4th Ribbon 6th Clubs (Junior) 25 | 26 | **Livia** 10th Ribbon 5th Clubs (Junior) 27 | 28 | **Sandra** 5th Rope 12th Clubs (Junior) 29 | 30 | **Dana** 1st Rope 11th Clubs (Junior)🥇 31 | 32 | **Elena** 7th Ribbon 8th Clubs (Junior) 33 | 34 | **Elizabeth P.** 6th Ribbon 7th Clubs (Junior) 35 | 36 | **Akari** 8th Ribbon (Junior) 37 | 38 | \ 39 | _Level 5_ 40 | 41 | **Leyla** 1st Ribbon 2nd Rope 4th Clubs (Junior)🥇🥈 42 | 43 | **Saffron** 1st Hoop 1st Ball 1st Clubs Miss Dance (Senior)🥇🥇🥇🎗 44 | 45 | \ 46 | _Level 1/2_ 47 | 48 | **Yoana** 1st Ribbon (Senior)🥇 49 | 50 | **Kinga** 3rd Ball (Senior)🥉 51 | 52 | Have a look [here](https://www.instagram.com/stories/highlights/18053733583223995/?hl=en) 53 | -------------------------------------------------------------------------------- /src/pages/news/2020-udine-ita-friendly-international-tournament.md: -------------------------------------------------------------------------------- 1 | --- 2 | published: true 3 | title: 2020 Udine ITA - Friendly International Tournament 4 | date: 2020-01-12T14:12:36.947Z 5 | --- 6 | Huge congratulations to all our gymnasts who competed at the international and attended Alexandra Agiurgiuculese's masterclass. 7 | 8 | Have a look [here](https://www.instagram.com/p/B7UBQi9B4Yg/) and [here](https://www.instagram.com/p/B8WPO-5hic6/) 9 | 10 | [Facebook](https://www.facebook.com/photo?fbid=2605979866166592&set=pcb.2605980566166522) 11 | -------------------------------------------------------------------------------- /src/pages/news/20202-european-championships-selection-events.md: -------------------------------------------------------------------------------- 1 | --- 2 | published: true 3 | title: 2020 - European Championships Selection Events 4 | date: 2020-02-29T14:23:22.150Z 5 | --- 6 | Our junior gymnasts Dana and Leyla and our senior Saffron have attended the first 2 selection events and the test ranking after which: 7 | 8 | * Saffron has been selected to represent GBR at the Pesaro 🇮🇹and Baku 🇦🇿World Cup that will take place in April; 9 | * Leyla has been selected to represent GBR at the Irina cup (Warsaw 🇵🇱) and the Prize of Yana Batirchina (Baku 🇦🇿) 10 | 11 | Dana has not start well and have perform very unclean routines at the first event but managed to push harder and completed well the second selection doubling her scores. 12 | 13 | Leyla has achieved some of her PB and ranked 3rd in both selection events. 14 | 15 | Saffron is recovering well from her foot injury and managed to win the first event and ranked 3rd at the second (introducing back many elements thanks to her foot getting better and better). 16 | 17 | Have a look [here](https://www.instagram.com/s/aGlnaGxpZ2h0OjE3ODc1OTkxNzEwNTgxMjE3?igshid=160i56s52yc0z&story_media_id=2246442528012507583) :) 18 | -------------------------------------------------------------------------------- /src/pages/news/2nd-gbr-squad-training-camp-junior-senior-season-2018-2019.md: -------------------------------------------------------------------------------- 1 | --- 2 | published: true 3 | title: 2nd GBR SQUAD TRAINING CAMP Junior/Senior season 2018/2019 4 | date: 2018-09-30T10:51:15.924Z 5 | --- 6 | Second National training camp finished! 7 | 8 | Well done to all the gymnasts who have been selected and worked hard (Alida, Alice, Christianna, Eve, Marfa, Leyla, Erin, Agnessa and Hannah) especially our Saffron! 9 | 10 | ![](/assets/img-20180930-wa0030.jpg) 11 | -------------------------------------------------------------------------------- /src/pages/news/5th-london-championships-redbridge.md: -------------------------------------------------------------------------------- 1 | --- 2 | published: true 3 | title: 6th London Championships - Redbridge 4 | date: 2019-11-17T12:30:47.092Z 5 | --- 6 | Well done to all our girls who competed at the 5th London Championships, first competition of the season and lots of new routines, great start!! \ 7 | 7 Golds, 5 Silvers and 4 Bronzes and two special prizes: Miss Technique Adriana and Miss Elegance Dana!!! 8 | 9 | **Level 3:** 10 | 11 | 2011:\ 12 | 7th Jessica - Free 13 | 14 | 2010:\ 15 | 7th Vasilisa - Free\ 16 | 3rd Vasilisa - Rope 17 | 18 | 2009:\ 19 | 5th Tehila - Clubs 20 | 21 | 2008:\ 22 | 6th Kaela - Hoop\ 23 | 5th Kaela - Clubs 24 | 25 | 2005:\ 26 | 4th Saba - Ribbon\ 27 | 4th Emilia - Clubs\ 28 | 7th Saba - Clubs 29 | 30 | **Level 4:** 31 | 32 | 2010:\ 33 | 1st Elizabeth L. - Ball\ 34 | 3rd Elizabeth L. - Rope 35 | 36 | 2008: 37 | 38 | 6th Adriana - Clubs\ 39 | 1st Adriana - Hoop 40 | 41 | 2007: 42 | 43 | 2nd Elizabeth P. - Ribbon\ 44 | 4th Elena - Clubs\ 45 | 1st Elizabeth P. - Rope\ 46 | 2nd Elena - Rope\ 47 | 3rd Elizabeth P. - AA\ 48 | 5th Elena - AA 49 | 50 | 2005/6: 51 | 52 | 1st Akari - Ribbon\ 53 | 2nd Sandra - Ribbon\ 54 | 2nd Livia - Clubs\ 55 | 3rd Akari - Clubs\ 56 | 4th Sandra - Clubs\ 57 | 1st Livia - Rope\ 58 | 2nd Dana - Rope 59 | 60 | **Senior L1/2:** 61 | 62 | 1st Yoana - Hoop\ 63 | 1st Alina - Clubs 64 | 65 | IG Pictures [here](https://www.instagram.com/p/B5ASYxOhZlu/) 66 | -------------------------------------------------------------------------------- /src/pages/news/another-great-news.md: -------------------------------------------------------------------------------- 1 | --- 2 | published: true 3 | title: 1st GBR SQUAD TRAINING CAMP Junior/Senior season 2018/2019 4 | date: 2018-08-16T17:00:00.000Z 5 | --- 6 | Good news for our junior Saffron Severn, a new call for her to train with the best gymnasts of the country. Congratulations to her and to all her teammates. 7 | 8 | 9 | 10 | ![](/assets/img_20181002_103403_871.jpg) 11 | 12 | ![]() 13 | -------------------------------------------------------------------------------- /src/pages/news/bath-open-championships.md: -------------------------------------------------------------------------------- 1 | --- 2 | published: true 3 | title: Bath Open Championships 2019 4 | date: 2019-07-07T14:21:23.350Z 5 | --- 6 | Great results from Bath, our gymnasts won lots of medals and 3 amazing special prizes: 7 | 8 | _Gymnast of the day U8 **Vasilisa**_\ 9 | _Gymnast of the day U9 **Adriana**_\ 10 | _Gymnast of the day Junior **Dana**_ 11 | 12 | Level 2: 13 | 14 | * **Veronica** 2nd in rope 15 | 16 | Level 3: 17 | 18 | * **Yoana** 1st in hoop and 1st in clubs 19 | * **Sabrina** 3rd in clubs 20 | * **Vasilisa** 3rd in free 21 | 22 | Level 4: 23 | 24 | * **Adriana** 1st in rope, 2nd in clubs and 1st AA 25 | * **Elizabeth** 1st in free, 1st in rope and 1st AA 26 | * **Espoir** group 2nd in free and 3rd in balls and 3rd AA 27 | 28 | Well done also to _Dana_, _Livia_ and _Sandra_ who performed their brand new routines for the next season and _Kaela_, _Tehila_ and _Alina_ for competing in both group and individual. 29 | 30 | ![](/assets/img-20190706-wa0112-1-.jpg) 31 | -------------------------------------------------------------------------------- /src/pages/news/bath-open.md: -------------------------------------------------------------------------------- 1 | --- 2 | published: true 3 | title: Bath Open Championships 2018 4 | date: 2018-06-03T18:25:12.703Z 5 | --- 6 | One of our favourite competition of the year in a marvellous place! 7 | 8 | Well done to all our girls competing! 9 | 10 | Sandra, Dana, Akari, Elizabeth (3 silver medals!), Livia, Saffron, Aida and Sabrina (1 bronze medal!) 11 | 12 | Pictures and videos on our [Facebook](https://www.facebook.com/Rhythmic-Excellence-787019504729313/) and [Instagram](https://www.instagram.com/p/BjmbT56lCRp/) pages! 13 | 14 | 15 | -------------------------------------------------------------------------------- /src/pages/news/british-championship-2018.md: -------------------------------------------------------------------------------- 1 | --- 2 | published: true 3 | title: BRITISH CHAMPIONSHIP 2018 4 | date: 2018-06-23T08:38:55.245Z 5 | --- 6 | Fantastic results for our junior Saffron who has attended for the first time the British Championship. 7 | 8 | Saffron has qualified for 3 apparatus finals out of 4 and won a bronze medal in hoop. 9 | 10 | Well done to her and thanks to all the people who has supported us, we’re very happy, proud of our girl and ready to work even harder. 11 | 12 | ![null](/assets/img-20180625-wa0038.jpg) 13 | 14 | Pictures and videos on our [Facebook](https://www.facebook.com/pg/Rhythmic-Excellence-787019504729313/photos/?tab=album&album_id=1694296717334916) and [Instagram](https://www.instagram.com/p/BkctLNllhhq/) pages! 15 | -------------------------------------------------------------------------------- /src/pages/news/canterbury-cup-2018.md: -------------------------------------------------------------------------------- 1 | --- 2 | published: true 3 | title: Canterbury Cup 2018 4 | date: 2018-11-11T12:01:27.734Z 5 | --- 6 | Amazing results from our gymnasts who have competed at the Canterbury cup, thank you CCRGC for inviting us and for organising such a great event! 7 | 8 | Pictures and videos on our [Facebook](https://www.facebook.com/pg/Rhythmic-Excellence-787019504729313/photos/?tab=album&album_id=1893372557427330) and [Instagram](https://www.instagram.com/p/BqeqihaBCeX/) pages! 9 | 10 | 44 medals earned by our lovely girls! Well done to all of them especially the overall winners: Sabrina, Yoana, Livia, Sandra and Saffron and Veronica for her first competition getting the 3rd score of her category!! 11 | 12 | Level 1 U7 13 | 14 | 1. Jessica 15 | 2. Veronica 16 | 17 | Level 1 U10 18 | 19 | 3. Yasmine 20 | 21 | Level 1 U12 22 | 23 | 1. Elvita 24 | 25 | Level 1 Junior 26 | 27 | 2. Jennifer 28 | 29 | Level 1 Senior 30 | 31 | 1. Kinga 32 | 33 | Level 2 U10 34 | 35 | 2. Tehila (free) 8 (hoop) out of 16 🤭🤭 36 | 3. Alina 37 | 38 | Level 2 U12 39 | 40 | 1. Alexia (ball) 5. (hoop) 41 | 42 | Level 2 Junior 43 | 44 | 2. Siham 45 | 3. Saba 46 | 47 | Level 3 U8 48 | 49 | 2. Vasilisa 50 | 51 | Level 3 U10 52 | 53 | 1. Kaela (clubs) 2. (free) 2. AA 54 | 55 | Level 3 U12 56 | 57 | 1. Livia (ball) 2. (clubs) 1. AA 58 | 59 | Level 3 Junior 60 | 61 | 1. Sabrina (ball) 1. (ribbon) 1. AA 62 | 2. Adriana (ribbon) 63 | 64 | Level 3 Senior 65 | 66 | 1. Yoana (clubs) 1. (hoop) 1AA 67 | 68 | Level 4 U8 69 | 70 | 1. Elizabeth (free) 1. AA 71 | 72 | Level 4 U10 73 | 74 | 1. Adriana (clubs) 2. (rope) 2. AA 75 | 2. Ema (clubs) 4. (rope) 5. AA 76 | 3. Anastasia (rope) 4. (clubs) 8. AA 77 | 78 | Level 4 U12 79 | 80 | 1. Sandra (ball) 1. (clubs) 1. (ribbon) 1. AA 81 | 2. Dana (clubs) 2. (ribbon) 2. AA 3. (ball) 82 | 83 | Level 4/5 Junior 84 | 85 | 1. Saffron (clubs) 1. (rope) 1. (ribbon) 2. (ball) 1. AA 86 | 2. Akari (clubs) 2. AA 3. (ball) 4. (ribbon) 87 | 88 | ![](/assets/img-20181111-wa0050.jpg) 89 | 90 | ![](/assets/dsc_4867.jpg) 91 | 92 | ![]() 93 | 94 | ![]() 95 | -------------------------------------------------------------------------------- /src/pages/news/draft-news.md: -------------------------------------------------------------------------------- 1 | --- 2 | published: true 3 | title: Thisle Invitation 2018 - Edinburgh 4 | date: 2018-09-23T17:00:00.000Z 5 | --- 6 | ## Great results from our girls' first competition of the year, well done to everyone and a big thank to Scottish Gymnastics for the invitation and for having organised such a nice event! 7 | 8 | Pictures and videos on our [Facebook](https://www.facebook.com/Rhythmic-Excellence-787019504729313/) and [Instagram](https://www.instagram.com/p/BoFJbqIl-qB/) pages! 9 | 10 | U10\ 11 | Ema 2' clubs - 3' rope\ 12 | Adriana 1' rope\ 13 | Anastasia 2' rope 14 | 15 | U12\ 16 | Sandra 1' clubs - 1' ribbon\ 17 | Dana 2' clubs - 3' ribbon\ 18 | Livia 2' ribbon 19 | 20 | Junior\ 21 | Saffron 1' ball - 1' clubs - 1' ribbon\ 22 | Akari 2' clubs - 3' ball 23 | 24 | ![](/assets/img_20180923_203037_548.jpg) 25 | 26 | ![](/assets/img_20180923_203037_526.jpg) 27 | 28 | ![](/assets/img_20180923_203037_537.jpg) 29 | -------------------------------------------------------------------------------- /src/pages/news/easter-camp.md: -------------------------------------------------------------------------------- 1 | --- 2 | published: true 3 | title: Easter Camp 2018 4 | date: 2018-06-01T18:35:14.491Z 5 | --- 6 | Second camp of the year (the 3rd is on the go with a special guest), girls worked a lot but also had fun 🙂 7 | 8 | We also watched the European Champs 😀 9 | 10 | ![null](/assets/img_20180601_131253-e1528971438190.jpg) 11 | -------------------------------------------------------------------------------- /src/pages/news/england-rg-performance-squad-2019.md: -------------------------------------------------------------------------------- 1 | --- 2 | published: true 3 | title: England RG Performance Squad 2019 4 | date: 2018-12-20T16:00:07.864Z 5 | --- 6 | We're extremely happy for our junior gymnast **Saffron Severn** whose been selected onto the **England RG Performance Squad** for 2019. 7 | 8 | Congratulations to Saffron and her coaches! 9 | 10 | ![](/assets/mvi_5704.00_00_54_15.still003.jpg) 11 | -------------------------------------------------------------------------------- /src/pages/news/english-championship.md: -------------------------------------------------------------------------------- 1 | --- 2 | published: true 3 | title: English Championship 2019 4 | date: 2019-06-02T14:37:15.098Z 5 | --- 6 | We're very proud of our junior **Saffron** who won the Bronze overall medal at the 2019 English Championship and won in finals: Bronze in clubs, Silver in rope and (despite breaking her ribbon stick after 6 sec of her routine) Gold and therefore Ribbon English Champion 💪 7 | 8 | Congratulations to her and well done to all coaches and judges who supported RE and thanks Saffron's family for always being there 😊 9 | 10 | Our little blueberries had a great experience attending such an important event for the first time, the path is long and taught but we're working hard **\*Adriana**, **Vasilisa**, **Alina**, **Tehila** and **Kaela*** 💜 11 | 12 | Videos and pictures [here](https://www.instagram.com/p/ByPI-abhHoj/) 13 | 14 | ![](/assets/61924335_2179967498767833_7517858287597912064_n.jpg) 15 | 16 | ![](/assets/62229713_2179967568767826_8540997966557609984_n.jpg) 17 | -------------------------------------------------------------------------------- /src/pages/news/english-squad-2020.md: -------------------------------------------------------------------------------- 1 | --- 2 | published: true 3 | title: English Squad 2020 4 | date: 2019-12-17T21:42:05.612Z 5 | --- 6 | Huge congratulations to _**Saffron Severn**_ and _**Leyla Yilmaz**_ who have been selected for the **England Rhythmic Performance Programme**. \ 7 | Double times National Team, we couldn't be prouder! 8 | 9 | ![](/assets/img_20191102_154215.jpg) 10 | 11 | Official Selection Announcement [here](https://www.british-gymnastics.org/documents/regions-and-home-countries/england/rhythmic-2/11046-england-rhg-selection-announcement-2020/file) 12 | -------------------------------------------------------------------------------- /src/pages/news/fig-1st-junior-world-championship.md: -------------------------------------------------------------------------------- 1 | --- 2 | published: true 3 | title: FIG 1st Junior World Championship 4 | date: 2019-07-20T08:36:12.862Z 5 | --- 6 | We are extremely proud of our junior gymnast **_Saffron Severn_** who has brilliantly performed at the **"FIG 1st Junior World Championship"** in Moscow. 7 | 8 | Saffron has performed rope (13.300 - 28th) and clubs (13.650 - 38th) in the mayor event for the very first time organised by the FIG and amazingly hosted by the Russian Federation. 9 | 10 | Professional pictures [here](https://www.instagram.com/p/B0RZorAozwz/)\ 11 | Rope video (day 1) [here](https://www.youtube.com/watch?v=n2Yhb5Eb-MA&list=PLV1w3HFYq4zFH1X5dq2aLYTPy-xC72sVi&index=2)\ 12 | Clubs video (day 2) [here](https://www.youtube.com/watch?v=bhr-MOC8bpg&list=PLV1w3HFYq4zFH1X5dq2aLYTPy-xC72sVi&index=1) 13 | 14 | Some information about the **"FIG 1st Junior World Championship"** 15 | 16 | > The brand-new Irina Viner-Usmanova Gymnastics Palace in Moscow hosted the 1st FIG Rhythmic Gymnastics Junior World Championships from 19-21 July with more than 300 young gymnasts from 60-plus nations competing for eight titles. A first for the sport. The first Junior World Championships have certainly proved popular. A grand total of 129 gymnasts, representing 57 nations, have signed up for the individual programme, with a further 183 youngsters from 32 countries slated to take part in the group events. With a roof designed to resemble a fluttering ribbon, the 26,000-square metre Irina Viner-Usmanova Gymnastics Palace will provide a truly world-class stage for the planet’s future Rhythmic stars to parade their talent. The facility, which opened its doors only last month, has three training and choreography halls, an ultra-modern gym, a health and rehabilitation centre, catering facilities, a media centre, a hotel and more. There is even an interactive museum dedicated to showcasing the history of the sport. 17 | 18 | ![](/assets/img-20190718-wa0065.jpg) 19 | 20 | ![](/assets/img_20190718_112836.jpg) 21 | 22 | ![](/assets/img_20190722_194728_196.jpg) 23 | 24 | ![](/assets/img-20190717-wa0056.jpg) 25 | 26 | ![](/assets/img-20190718-wa0055.jpg) 27 | 28 | ![](/assets/img-20190719-wa0084.jpg) 29 | 30 | ![](/assets/mvimg_20190718_115133.jpg) 31 | 32 | ![](/assets/img_20190720_162136.jpg) 33 | 34 | ![](/assets/img_20190722_194728_197.jpg) 35 | 36 | ![](/assets/img_20190722_194728_207.jpg) 37 | 38 | ![](/assets/img-20190721-wa0044.jpg) 39 | 40 | ![](/assets/img-20190721-wa0112.jpg) 41 | 42 | ![](/assets/img_20190722_194728_211.jpg) 43 | 44 | ![](/assets/img_20190721_115956.jpg) 45 | 46 | ![](/assets/mvimg_20190721_104247.jpg) 47 | 48 | ![](/assets/img_20190722_194728_212.jpg) 49 | 50 | ![](/assets/img-20190719-wa0086.jpg) 51 | -------------------------------------------------------------------------------- /src/pages/news/fig-portimao-international-tournament.md: -------------------------------------------------------------------------------- 1 | --- 2 | published: true 3 | title: FIG Portimao International Tournament 4 | date: 2019-09-05T11:32:24.301Z 5 | --- 6 | Amazing results from Portugal! 🥈 7 | 8 | Our junior gymnasts **Saffron** **Severn** and **Leyla** **Yilmaz** have competed at the _FIG Portimao International Tournament_ and achieved great results: 9 | 10 | Saffron Severn qualified for both rope and clubs finals and won the silver medal in the AA junior team alongside her teammates Elizabeth Popova (Llanelli Academy). 11 | 12 | Leyla Yilmaz performed 3 out of 4 brand new routines clean. 13 | 14 | Well done to all team GB gymnasts for the great competition and good luck for the new season! 15 | 16 | IG pictures [here](https://www.instagram.com/p/B2BZ3H-h6wE/)\ 17 | Facebook post \[here](<>)\ 18 | BG post [here](https://www.british-gymnastics.org/news-and-events/news/latest-news/8625-success-in-portugal-for-rhythmic-gymnasts) 19 | 20 | ![](/assets/70388935_2341859752578606_2079050044287221760_n.jpg) 21 | -------------------------------------------------------------------------------- /src/pages/news/fig-prize-of-queen-margarita-varna.md: -------------------------------------------------------------------------------- 1 | --- 2 | published: true 3 | title: FIG "Prize of Queen Margarita" - Varna 4 | date: 2019-07-06T08:09:33.160Z 5 | --- 6 | **Saffron Severn** has represented **Team GBR** again at the _FIG "Prize of Queen Margarita"_ in Varna. 7 | 8 | Great results come from the team competition where the scores of the individual team A (_Saffron's_ rope and clubs and her teammates _Elizabeth Popova's_ ball and ribbon) together with the scores of the GBR junior group (I-star academy _Emily, Amelia, Isabella, Rosina, Alexandra_ - hoops and ribbons) make the GBR Team win bronze. 9 | 10 | _Saffron_ scores a great 13.200 in rope (11th) and a good 13.000 in clubs (17th) 11 | 12 | Fin some pictures [here](https://www.instagram.com/p/BzvG5D6BxIu/). 13 | 14 | ![](/assets/screenshot_20190725-092652.png) 15 | 16 | ![](/assets/66079534_1218095251647637_8550242806352838656_o.jpg) 17 | -------------------------------------------------------------------------------- /src/pages/news/gbr-senior-programme-2019.md: -------------------------------------------------------------------------------- 1 | --- 2 | published: true 3 | title: GBR Senior programme 2019 4 | date: 2019-01-25T19:47:36.199Z 5 | --- 6 | We are very happy to announce that our junior gymnast Saffron Severn has been selected for the GBR Senior programme 2019! Congratulations Saff, 💪! 💜 7 | 8 | ![](/assets/img-20180625-wa0037.jpg) 9 | -------------------------------------------------------------------------------- /src/pages/news/gbr-team-2020.md: -------------------------------------------------------------------------------- 1 | --- 2 | published: true 3 | title: GBR Team 2020 4 | date: 2019-12-17T09:41:47.913Z 5 | --- 6 | Huge **CONGRATULATIONS** to _Saffron Severn_, _Leyla Yilmaz_ and _Adriana Lyshak_ for being selected to the _GBR National Squad 2020_: 7 | 8 | * _**Adriana**_ (espoir 2008) has enter the **GBR Foundation Squad** 9 | * _**Leyla**_ (junior 2005) has enter the **GBR Performance Pathway** 10 | * _**Saffron**_ (senior 2004) has enter the **GBR Performance Pathway** 11 | 12 | **Huge well done to our gymnasts and coaches!** 13 | 14 | ![](/assets/img-20191213-wa0041.jpg) 15 | 16 | Espoir Official Selection results [here](https://www.british-gymnastics.org/technical-information/selection/rhythmic/11032-gbr-rhythmic-foundation-selection-announcement-2020/file)\ 17 | Junior and Senior Official Selection results [here](https://www.british-gymnastics.org/technical-information/selection/rhythmic/11015-gbr-performance-pathway-selection-announcement-juniors-seniors-groups/file) 18 | -------------------------------------------------------------------------------- /src/pages/news/good-news-everyone.md: -------------------------------------------------------------------------------- 1 | --- 2 | published: true 3 | title: Summer Camp in Sofia 2018 4 | date: 2018-08-10T17:10:00.000Z 5 | --- 6 | Our gymnasts Saffron and Dana accepted the invitation and attended a summer camp in Sofia (Bulgaria) on the first 10 days of August. The camp has been organised by Maria Gateva and hosted by her club Nuance. 7 | 8 | Our girls had the chance to practice with some of the best gymnast of our country (as Alida Bogdanova – GBR team and participant of 2016 European Championship and Hannah Martin – GBR team, teammates of Alida in 2016 and recently selected to represent the UK at the World Championship) while Stefano and Eleonora had the chance to attend some lectures taught by Maria herself. 9 | 10 | It has been an incredible camp, girls have worked hard and hope to be invited again next year. 11 | 12 | We wish Saffron good luck for her trainings since she will be staying in Sofia until the end of the month. 13 | 14 | Thanks everyone!!! 15 | 16 | ![](/assets/img-20180806-wa0033.jpg) 17 | 18 | ![](/assets/img-20180812-wa0009.jpg) 19 | -------------------------------------------------------------------------------- /src/pages/news/grades-2019.md: -------------------------------------------------------------------------------- 1 | --- 2 | published: true 3 | title: Grades 2019 4 | date: 2019-04-14T17:42:47.095Z 5 | --- 6 | Well done to all our beautiful gymnasts who successfully attended Grades 2019. Thank you _Stefano_ and _Evgeniya_ for judging and _Eleonora_ and _Francesca_ for coaching.\ 7 | Thanks to all the families for the support and to CCRGC for organising such an impeccable event. 8 | 9 | **_Saffron_** 2º AA, 2º ribbon, 3º ball, 3º clubs - Grade 9\ 10 | **_Dana_** 3º ribbon, 1º rope, 6º AA - Grade 8\ 11 | **_Adriana_** 2º clubs, 6º AA - Grade 6\ 12 | **_Elizabeth_** 6º AA - Grade 4\ 13 | **_Sandra_** 5º AA - Grade 8\ 14 | **_Livia_** 9º AA - Grade 8\ 15 | **_Akari_** 9º AA - Grade 9\ 16 | **_Vasilisa_** 15º AA - Grade 4 17 | 18 | ![](/assets/img-20190415-wa0034.jpg) 19 | 20 | ![](/assets/img-20190413-wa0050.jpg) 21 | 22 | ![](/assets/img_20190414_134611.jpg) 23 | -------------------------------------------------------------------------------- /src/pages/news/great-results-from-the-spring-cup.md: -------------------------------------------------------------------------------- 1 | --- 2 | published: true 3 | title: International Spring Cup 2018 4 | date: 2018-05-05T18:58:57.062Z 5 | --- 6 | Well done to all our gymnasts that have attended the international London Spring Cup last weekend. 7 | 8 | Congratulations to Elizabeth for winning 3 medals out of 3 (2 bronzes and 1 silver) in the highest level presenting her brand new free routine. 9 | 10 | Well done to Sandra who got 4′ in the AA in the highest level too. 11 | 12 | Super congratulations to Nastia for winning the \*Artistic Prize\* 13 | 14 | Well done to Aurelia, Sofia, Adriana, Anastasia, Ema, Kaela, Dana, Akari and Livia for improving all their scores from Grades and Sabrina for competing in B category with clubs and ribbon. 15 | 16 | Last but not the least, we want to welcome back Saffron who has started training after few weeks of stop due to an injury she’s now healed from. 17 | 18 | Saffron has again been invited to the GBR National Junior Squad! Congratulations to her!!!! 19 | 20 | 💜💜 21 | 22 | [Click here to see Facebook!](https://www.facebook.com/Barny.Th/photos/a.1698284836935973/1698289260268864/?type=3&theater) 23 | -------------------------------------------------------------------------------- /src/pages/news/happy-cup-ghent-belgium-team-🏴.md: -------------------------------------------------------------------------------- 1 | --- 2 | published: true 3 | title: "FIG Happy Cup, Ghent Belgium Team \U0001F3F4\U000E0067\U000E0062\U000E0065\U000E006E\U000E0067\U000E007F" 4 | date: 2019-11-02T12:04:17.845Z 5 | --- 6 | **Saffron** and **Leyla** for _Team England_ 🏴󠁧󠁢󠁥󠁮󠁧󠁿 7 | 8 | Great news from Belgium from our gymnasts Saffron Severn and Leyla Yilmaz who have represented Team England 🏴󠁧󠁢󠁥󠁮󠁧󠁿 at the 22nd edition of the FIG Tournament "Happy Cup". 9 | 10 | Saffron has performed for the last time her junior rope routine receiving a good 13.150 followed by a great 14.350 for her new senior ball routine (personal best), new senior clubs too (with a mark deduction) for a brilliant 13.750 and to conclude not the best ribbon performance but a starting point with the senior size. 11 | 12 | Leyla has performed her best ball routine (13.600) followed by a good rope routine (12.200). On the second day the other 2 apparatus did not go as planned but still good for the beginning of the season. 13 | 14 | \ 15 | IG pictures [here](https://www.instagram.com/p/B4crHjghDAX/)\ 16 | Facebook album by ph. Ulrich Faßbender [here](https://www.facebook.com/photo.php?fbid=2534244503288308&set=a.2533649193347839&type=3&theater) 17 | -------------------------------------------------------------------------------- /src/pages/news/internal-competition-2018.md: -------------------------------------------------------------------------------- 1 | --- 2 | published: true 3 | title: Internal Competition 2018 4 | date: 2018-11-17T15:13:42.869Z 5 | --- 6 | Well done to all our gymnasts who have competed in our bi-annual internal competition. 7 | 8 | Pictures and videos on our [Facebook](https://www.facebook.com/pg/Rhythmic-Excellence-787019504729313/photos/?tab=album&album_id=1899917336772852&__xts__%5B0%5D=68.ARA-CxqFxoW2SQ5QcdDKdX1kD2wD1d5lPcBrjTBBi5O9vQpjkJQUCLdVtFsGAdGN1U4CyKZUk6fHt1lrx659zGsZTFfa5r0zsTKgz2_JskjxTRzL-7W5XaO3c1kny5uyhnQytLwZcd7tcvnEJpg-N14D1g2vu2Made8vl4ATJHCV3YV0wbetSkjyr3NEi47aTeLMPuGAiCSYSA3av-cQ1vhz5kIrScwqWLcTBAxhU7i161ne-Tx3cgPptgiCg5JgqtcWVCwZulJUsmAD1jy6cSLcdaFQ4HoTekrh8-SwWK3qMViaZu2s_fzWjr15js5_1HQCkEs8wYdfz8Ewr0dtBYOIkABZnrlyRys4T445mQgunUQZUg8uE4DFKoaVnE0FIN0J5q99AJ_T7516chkGLQDJki-zxfC3GKjOCxlCnOGiNs3AaGfusXxPFQnlG3e-HlBYdrsiL8ocXtQ&__tn__=-UC-R) and [Instagram](https://www.instagram.com/rhythmic_excellence/?hl=en) pages! 9 | 10 | ![](/assets/46488081_1897268410371078_305960439236263936_n.jpg) 11 | 12 | ![](/assets/46508001_1897268460371073_8999210989232586752_n.jpg) 13 | -------------------------------------------------------------------------------- /src/pages/news/internal-competition-2019.md: -------------------------------------------------------------------------------- 1 | --- 2 | published: true 3 | title: Internal competition 2019 4 | date: 2019-05-25T21:04:14.223Z 5 | --- 6 | Well done to all our gymnasts who attended our Club Competition :) 7 | 8 | Thank you for joining us this afternoon and support our girls, we're very happy for today results and are extremely proud of all our gymnasts, this event wouldn't have been possible without all of you but especially without **Jelena**, **Isabel**, **Kim** and **Renie** and our great team of coaches/judges **Veronica**, **Asia**, **Francesca**, **Eleonora** and **Stefano**. 9 | 10 | Today we have collected a very generous sum which will be going towards our club expenses for the upcoming national events our gymnasts have qualified to: _English Championship, NDP Finals and Group League_. 11 | 12 | A special well done to our special prizes winners: 13 | 14 | * _Miss Dedication - **Yoana**_ 15 | * _Miss Hard Worker - **Eliza**_ 16 | * _Miss Ballet - **Vasilisa**_ 17 | 18 | ...and to our lucky ruffle winners: 19 | 20 | * _BG Agenda - **Alina**_ 21 | * _RE T-shirt - **Dana**_ 22 | * _Half-shoes - **Talia**_ 23 | 24 | ![](/assets/img-20190525-wa0090.jpg) 25 | 26 | ![](/assets/screenshot_20190525-221845.png) 27 | 28 | ![](/assets/screenshot_20190525-221858.png) 29 | -------------------------------------------------------------------------------- /src/pages/news/international-competitions-convocation.md: -------------------------------------------------------------------------------- 1 | --- 2 | published: true 3 | title: International Competitions Convocation 2019 4 | date: 2019-02-25T10:52:38.448Z 5 | --- 6 | We are extremely happy for our junior gymnast **Saffron Severn** and our coach Eleonora for having been selected to represent the **GBR Team** to two international tournaments: **Ritam Cup** (Serbia - 19th/21st of April) and **Pecs Cup** (Hungary 4th/6th of May). 7 | 8 | Huge congratulations and a big good luck! 9 | 10 | ![](/assets/img_20180624_122106.jpg) 11 | -------------------------------------------------------------------------------- /src/pages/news/interrupting-classes-covid-19.md: -------------------------------------------------------------------------------- 1 | --- 2 | published: true 3 | title: Interrupting Classes - Covid-19 4 | date: 2020-03-21T12:24:32.573Z 5 | --- 6 | Dear Families and Friends, 7 | 8 | As you may be aware we made the difficult decision of suspending all Rhythmic Excellence classes until the end of April. 9 | 10 | The UK Government announced further social distancing measures and instructed people to avoid social contact and gatherings where possible and avoid non-essential travel. British Gymnastics and London Gymnastics had cancelled all the international, national and regional events until the end of June 2020, including Open championships, Zonal grades and NDP Finals. 11 | 12 | All Rhythmic Excellence coaches are now working on ONLINE training provision for our SQUAD and RECREATIONAL gymnasts starting from this Thursday as per current timetable. Additionally, theoretical lectures on sport training and judging will be provided in the form of presentations and videos. We are already working on this project and we will send all the details soon. 13 | 14 | We thank you all for your understanding and support, all the nice emails we're receiving are really appreciated. 15 | 16 | Please keep safe in this hard time. 17 | 18 | RE Team 19 | -------------------------------------------------------------------------------- /src/pages/news/interview-for-ginnasticando-it.md: -------------------------------------------------------------------------------- 1 | --- 2 | published: true 3 | title: Interview for Ginnasticando.it 4 | date: 2020-06-23T17:18:13.288Z 5 | --- 6 | We had the pleasure of being interviewed by Rebecca Alessi for [Ginnasticando.it](https://www.ginnasticando.it/2020/06/23/uno-sguardo-oltre-la-manica-la-voce-di-eleonora-e-ana-tecniche-della-nazionale-britannica-di-ginnastica-ritmica/?fbclid=IwAR31Y753ZUvTX0D4C1hZ-vQjHK8OFBlveulWpweMbXqit6xc73MTsPmOLqc). 7 | 8 | The interview will be translated soon 9 | 10 | [![undefined](/assets/screenshot-2020-06-23-at-18.30.38.png)](https://www.ginnasticando.it/2020/06/23/uno-sguardo-oltre-la-manica-la-voce-di-eleonora-e-ana-tecniche-della-nazionale-britannica-di-ginnastica-ritmica/?fbclid=IwAR31Y753ZUvTX0D4C1hZ-vQjHK8OFBlveulWpweMbXqit6xc73MTsPmOLqc) -------------------------------------------------------------------------------- /src/pages/news/junior-open-championship-and-group-seeding.md: -------------------------------------------------------------------------------- 1 | --- 2 | published: true 3 | title: Junior Open Championship and Group Seeding 2019 4 | date: 2019-03-23T10:09:13.608Z 5 | --- 6 | A huge **CONGRATULATIONS** to: Our **Espoir group** which qualified to Level 4 and to the **English Championship** at their first ever time! Captain **Adriana**, **Vasilisa, Tehila, Alina** and **Kaela,** **Dana** who got 5th in rope and 7th in ribbon at her very first national competition, **Livia** who got her best score ever for her ball routine at her very first national competition, **Sandra** who performed 3 very strong routines and **Saffron** for winning with rope and getting 2nd in clubs and 3rd in ribbon after attending the first world championship selection the night before. 7 | 8 | More picture [here](https://www.facebook.com/pg/Rhythmic-Excellence-787019504729313/photos/?tab=album&album_id=2073507696080481&__xts__%5B0%5D=68.ARB-z7zXAD3CR0Lk97zKCf0wa-ksEqDSPnH_4Z68mGKuZd-4kofqn-N3bRVcqlEbr_d5s-w9QZ-5BYrOOi61fEXhawde0DeGzRw9jw-C0lOpjxMRzxxV95IVhBPe3iiJscL1sJJKbRLxnepEOIrJNJfuQK9Y8e_-y3CasJBGx9ADdlB5KY0KVESmlUG4AVseEDXmQ9TdP2wJ_09bYgSy09zc60B5U2QLVna0SOZL4MrcEqUtTfXr5Q_U2cC3K_X2yf7UC-S7rG-8LBuQO-BSmhZ-pgNFFZbx_5GIitWIHrjs4WwldNq0t4MpXCBlpKTH2xZWf2z2zm0WtJM5hXxnz21hvCpnD9rJgZ_nD5uOyLKr_C56oJDT1YYGjLdCT-GDDyTgbR5BbTw2mjDJNX_HdhjJipPfnKAxGUH1JYxclWdtn5IledOi5i3okzXZfwPmsfj9C3w7SLmC_VRAC0TT&__tn__=-UC-R) 9 | 10 | ![Sandra, Saffron, Dana and Livia, Vasilisa, Adriana, Kaela, Tehila and Alina](/assets/img_20190323_175307.jpg) 11 | 12 | ![Saffron and Dana](/assets/img_20190323_182748_1.jpg) 13 | 14 | ![Saffron national champion in rope](/assets/img_6630.jpg) 15 | 16 | ![Dana 5th in rope](/assets/img_6632.jpg) 17 | 18 | ![](/assets/img_20190323_084723.jpg "Adriana, Vasilisa, Alina, Tehila and Kaela") 19 | 20 | ![Adriana, Vasilisa, Alina, Tehila and Kaela](/assets/img_20190323_084749.jpg) 21 | 22 | ![Dana](/assets/mvi_5704.00_00_01_23.still071.jpg) 23 | 24 | ![Sandra](/assets/mvi_5704.00_00_20_09.still064.jpg) 25 | 26 | ![Saffron](/assets/mvi_5704.00_00_47_22.still045.jpg) 27 | 28 | A big thanks to Alina for the amazing pictures!!!! 29 | -------------------------------------------------------------------------------- /src/pages/news/last-training-of-the-year-ct-matches-and-season-2020-2021-squad-gymnasts-presentation.md: -------------------------------------------------------------------------------- 1 | --- 2 | published: true 3 | title: 2020 Last training of the year, CT, Matches and Season 2020/2021 Squad 4 | gymnasts' presentation 5 | date: 2021-01-04T12:10:22.693Z 6 | --- 7 | Our gymnasts have spent a fun and challenging last training day. Our squad girls have performed their new season routines live on zoom: 8 | 9 | 10 | 11 | 1. Dana - ball 12 | 2. Adriana - clubs 13 | 3. Miya - ball 14 | 4. Elizabeth L - ribbon 15 | 5. Pola - ball 16 | 6. Rebecca - ball 17 | 7. Leyla - hoop 18 | 8. Amane - ball 19 | 9. Elizabeth P - ball 20 | 21 | Absents Jessica, Emilia and Saffron 22 | 23 | \~\~~ 24 | 25 | The matches have been won by ***Leyla's team***, well done to all the competitors! 26 | 27 | ![](/assets/screenshot-2021-01-04-at-13.35.45.png) 28 | 29 | Dana, Leyla, Amane, Adriana and Miya 30 | 31 | ![](/assets/img_9362.jpg) 32 | 33 | Saffron, Rebecca, Elizabeth P, Pola and Elizabeth L 34 | 35 | \~\~~ 36 | 37 | We have presented our squad gymnasts for the season 2020/2021: 38 | 39 | **Pre Espoir** - *Jessica Collins* \ 40 | **Espoirs** - *Elizabeth Lypchuk, Miya Caviglia, Pola Blyszczynska* \ 41 | **Juniors** - Adriana Lyshak, *Elizabeth Pask, Amane Tanaka, Dana Zigadlo, Rebecca Yianni*\ 42 | **Senior** - *Emilia Fleszar, Leyla Yilmaz, Saffron Severn* 43 | 44 | ![](/assets/5ee0f471-23f6-4f69-ad72-d66f93e96fcc.jpg) -------------------------------------------------------------------------------- /src/pages/news/merry-christmas-and-happy-new-year.md: -------------------------------------------------------------------------------- 1 | --- 2 | published: true 3 | title: Merry Christmas and Happy New Year! 4 | date: 2020-12-20T10:40:39.497Z 5 | --- 6 | RE Team wants to Wish everyone a very Merry Christmas and a Happy New Year! 7 | 8 | Thanks to [ginnasticando.it ](https://www.ginnasticando.it/) 9 | 10 | ![](/assets/img_0222.png) 11 | 12 | Click [here](https://www.facebook.com/GINNASTICANDO.it/videos/122949886308030) to watch the whole video :) -------------------------------------------------------------------------------- /src/pages/news/ndp-final.md: -------------------------------------------------------------------------------- 1 | --- 2 | published: true 3 | title: NDP Finals 2018 4 | date: 2018-06-09T08:43:38.464Z 5 | --- 6 | A huge well done to out U12 Sandra at her first National Final, we missed a marvellous 4′ place in ball due to an alternative ending (watch the video) but we’re very proud of our girl that reached Level 4 in March. 7 | 8 | Bravo Sandra! 💜 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /src/pages/news/ndp-finals-and-group-league-round-1-2019.md: -------------------------------------------------------------------------------- 1 | --- 2 | published: true 3 | title: NDP Finals and Group League round 1 2019 4 | date: 2019-06-09T13:04:23.977Z 5 | --- 6 | What a weekend!! 7 | 8 | ## _Junior grade 8:_ 9 | 10 | **Dana** 2nd ribbon, 4th clubs, 5th ball, 4th AA 11 | 12 | **Livia** 7th ball, 9th clubs, 7th ribbon, 6th AA 13 | 14 | **Sandra** 11th ball, 7th clubs, 9th ribbon, 10th AA 15 | 16 | ## _Junior Grade 9:_ 17 | 18 | **Akari** 4th ball, 10th clubs, 9th ribbon, 6th AA 19 | 20 | ## _Grade 4:_ 21 | 22 | **Elizabeth** 3rd free, 3rd rope, 3rd AA 23 | 24 | ## _Grade 6:_ 25 | 26 | **Adriana** 4th rope, 9th clubs, 6th AA 27 | 28 | \***\***\ 29 | Espoir\*\* Group 12th 30 | 31 | Well done to all our sdomie, coaches and judges 💜 32 | 33 | \ 34 | More pictures [here](https://www.instagram.com/p/ByhmhLlB2yU/?hl=en) 35 | 36 | ![](/assets/img-20190609-wa0084.jpg) 37 | 38 | ![](/assets/screenshot_20190610-142038.png) 39 | 40 | ![](/assets/mvimg_20190609_160732.jpg) 41 | 42 | ![](/assets/img_20190608_122722.jpg) 43 | 44 | ![](/assets/img_20190609_094440.jpg) 45 | -------------------------------------------------------------------------------- /src/pages/news/new-season.md: -------------------------------------------------------------------------------- 1 | --- 2 | published: true 3 | title: New Season 4 | date: 2020-08-15T18:47:22.362Z 5 | --- 6 | ![](/assets/1885e3a2-551e-4bc2-b78b-12193ce7de59.jpg) -------------------------------------------------------------------------------- /src/pages/news/north-london-cup.md: -------------------------------------------------------------------------------- 1 | --- 2 | published: true 3 | title: North London Cup 2019 4 | date: 2019-04-07T11:58:32.766Z 5 | --- 6 | Well done to all our gymnasts that competed at the **1st North London Cup**. 7 | 8 | Great results just a week before Grades which make us hope the preparation is almost complete and girls will be able to perform at their best. 9 | 10 | Thank you to _Stefano_ and _Francesca_ for judging and _Eleonora_ and _Veronica_ for coaching. 11 | 12 | A big THANK YOU to **HENDON** gymnastics clubs for inviting us! 13 | 14 | **_Elizabeth_** U10 L3 - 1st in free and 1st in rope\ 15 | **_Vasilisa_** U10 L3 - 3rd in free and 3rd in rope\ 16 | **_Adriana_** U12 L3 - 1st in rope and 1st in clubs\ 17 | **_Kaela_** U12 L3 - 4th in free\ 18 | **_Dana_** Junior L4 - 2nd in ribbon, 2nd in clubs and 3rd in ball\ 19 | **_Akari_** Junior L4 - 2nd in ball, 3rd in ribbon and 8th in clubs\ 20 | **_Sandra_** Junior L4 - 4th in ribbon, 5th in ball and 6th in clubs\ 21 | **_Livia_** Junior L4 - 4th in ball, 8th in ribbon and 9th in clubs\ 22 | **_Sabrina_** Junior L3 - 3rd in ball and 4th in ribbon\ 23 | **_Tehila_** U10 L2 - 1st in free\ 24 | **_Alina_** U11 L2 - 2nd in ball\ 25 | **_Alexia_** Junior L2 - 1st in clubs\ 26 | **_Saba_** Junior L2 - 3rd in clubs\ 27 | **_Yoana_** Senior L2 - 1st \ 28 | **_Alina_** Senior L2 - 2nd 29 | 30 | ![](/assets/img_20190408_100828_027.jpg) 31 | 32 | ![](/assets/img_20190407_135944.jpg) 33 | 34 | ![](/assets/img_20190408_100828_029.jpg) 35 | -------------------------------------------------------------------------------- /src/pages/news/open-championship-espoir.md: -------------------------------------------------------------------------------- 1 | --- 2 | published: true 3 | title: Open Championship 2018 - Espoir 4 | date: 2018-11-25T12:16:15.596Z 5 | --- 6 | Well done to our pre-junior level 4 Sandra who has participated for the first time at the national Open championship performing 3 very good routines! 7 | 8 | ![](/assets/img-20181125-wa0028.jpg) 9 | -------------------------------------------------------------------------------- /src/pages/news/paquita-re-xmas-show.md: -------------------------------------------------------------------------------- 1 | --- 2 | published: true 3 | title: Paquita - RE Xmas Show 2018 4 | date: 2018-12-14T12:52:38.490Z 5 | --- 6 | ![]() 7 | 8 | It has been terrific!\ 9 | Thanks to all the gymnasts who have performed, all coaches for the hard work and all families for the support! 10 | 11 | ![](/assets/img-20181208-wa0018.jpg) 12 | 13 | ![](/assets/img_20181214_214522_390.jpg) 14 | 15 | The cast: Evelina, Amaia, Beren, Daisy, Emiliana, Maya, Myla, Sofia, Talia, Veronika, Anastasia, Vasilisa, Tehila, Ema, Kaela, Adriana, Elizabeth, Karmel, Jessica, Livia, Akari, Saffron, Sandra, Dana, Yasmine, Alexia, Sabrina, Siham, Saba, Alina, Jadesola, Sophia, Zahra, Lily, Eniola, Alina, Jennifer, Monica, Elvita, Yoana, Kinga, Martina and Maria. 16 | 17 | The coaches: Veronica, Evina, Asia, Francesca, Eleonora and Stefano. 18 | 19 | Our welfare officer Jelena and our special helper Kim, Izabel and our voice Karen, thank you all so much! 20 | -------------------------------------------------------------------------------- /src/pages/news/pècs-cup-2019-harkany-hun.md: -------------------------------------------------------------------------------- 1 | --- 2 | published: true 3 | title: Pècs Cup 2019 - Harkany HUN 4 | date: 2019-05-05T13:58:00.576Z 5 | --- 6 | Huge congratulations to our junior **Saffron Severn** who successfully represented GBR in the international tournament [**Pècs Cup 2019**](https://twitter.com/rhythmic_excel/status/1125300771896143872) winning \ 7 | 🥉in AA\ 8 | 🥈in rope\ 9 | 🥉in ball\ 10 | 🥉in clubs 11 | 12 | Click [here](https://www.facebook.com/pg/Rhythmic-Excellence-787019504729313/photos/?tab=album&album_id=2163020923795824) for the photo album. 13 | 14 | [Video](https://youtu.be/ezXW0cQ9Y3c) 15 | 16 | Thank you for everyone's support 17 | 18 | ![](/assets/img_20190505_203849.jpg) 19 | 20 | ![](/assets/img_20190505_202407.jpg) 21 | 22 | ![](/assets/img_20190503_121201.jpg) 23 | 24 | ![](/assets/img_20190506_100428_370.jpg) 25 | 26 | ![](/assets/img_20190504_094518.jpg) 27 | 28 | ![](/assets/img_20190506_100428_359.jpg) 29 | -------------------------------------------------------------------------------- /src/pages/news/quote-of-the-day.md: -------------------------------------------------------------------------------- 1 | --- 2 | published: true 3 | title: GBR Junior National Squad 2018 4 | date: 2018-07-19T20:47:57.455Z 5 | --- 6 | > Well done to Saffron and her teammates Alice, Isabella and Leyla for working hard in Lilleshall at the National Sport Centre. 7 | > 8 | > 9 | > 10 | > ![](/assets/img_20180719_151004-e1532096327432.jpg) 11 | -------------------------------------------------------------------------------- /src/pages/news/ritam-cup-beograd-srbija.md: -------------------------------------------------------------------------------- 1 | --- 2 | published: true 3 | title: FIG Ritam Cup 2019 - Beograd Srbija 4 | date: 2019-04-21T17:13:35.685Z 5 | --- 6 | Huge congratulations to our junior Saffron Severn for having represented GBR for her very first time at the FIG Ritam Cup tournament in Belgrade. 7 | 8 | Saffron has ranked 16th competing against 36 gymnasts and achieved the top ten in both clubs (with her highest score of 14.250) and ribbon (13.200). 9 | 10 | GBR junior team has ranked 6th in the team competition. 11 | 12 | Click [here](https://www.facebook.com/pg/Rhythmic-Excellence-787019504729313/photos/?tab=album&album_id=2149258645172052) for the photo album. 13 | 14 | [Saffron's clubs](https://youtu.be/U6Hps4NvE00) 15 | 16 | ![](/assets/807a2910.jpg) 17 | 18 | ![](/assets/img-20190422-wa0016.jpg) 19 | 20 | ![](/assets/img-20190420-wa0043.jpg) 21 | -------------------------------------------------------------------------------- /src/pages/news/rose-cup.md: -------------------------------------------------------------------------------- 1 | --- 2 | published: true 3 | title: 'Rose Cup 2018 ' 4 | date: 2018-05-13T18:51:04.114Z 5 | --- 6 | Brilliant results from the Rose Cup, thanks to Nene Valley club and Vicky for inviting us! 7 | 8 | 1′ Natalia L2 U8 9 | 10 | 3′ Sandra L4 U12 11 | 12 | 1′ Alexia L2 U12 13 | 14 | 1′ Elizabeth L4 U8 15 | 16 | 3′ Jessica L1 U8 17 | 18 | 2′ Tehila L2 U10 19 | 20 | 1′ Ema L3 U10 21 | 22 | 3′ Nastia L3 U10 23 | 24 | 1′ Dana L3 U12 25 | 26 | 3′ Livia L3 U12 27 | 28 | \ 29 | [Click here to see Instagram!](https://www.instagram.com/p/BiwsNQ_FyHr/?utm_source=ig_embed) 30 | -------------------------------------------------------------------------------- /src/pages/socials/facebook.md: -------------------------------------------------------------------------------- 1 | --- 2 | published: true 3 | title: Facebook 4 | icon: Facebook 5 | position: 2 6 | link: 'https://www.facebook.com/pages/Rhythmic-Excellence/787019504729313' 7 | --- 8 | -------------------------------------------------------------------------------- /src/pages/socials/instagram.md: -------------------------------------------------------------------------------- 1 | --- 2 | published: true 3 | title: Instagram 4 | icon: Instagram 5 | position: 4 6 | link: 'https://www.instagram.com/rhythmic_excellence/' 7 | --- 8 | -------------------------------------------------------------------------------- /src/pages/socials/twitter.md: -------------------------------------------------------------------------------- 1 | --- 2 | published: true 3 | title: Twitter 4 | icon: Twitter 5 | position: 1 6 | link: 'https://twitter.com/rhythmic_excel' 7 | --- 8 | -------------------------------------------------------------------------------- /src/pages/socials/youtube.md: -------------------------------------------------------------------------------- 1 | --- 2 | published: true 3 | title: YouTube 4 | icon: YouTube 5 | position: 5 6 | link: 'https://www.youtube.com/channel/UCjL65Cnt9yJ6cKUiE5UYafA' 7 | --- 8 | -------------------------------------------------------------------------------- /src/pages/team.css: -------------------------------------------------------------------------------- 1 | .Team { 2 | & .title { 3 | text-align: center; 4 | 5 | & .sub-title { 6 | font-weight: 500; 7 | } 8 | 9 | & h2 { 10 | margin-top: 0; 11 | font-size: 2.5rem; 12 | } 13 | } 14 | 15 | & .TeamList { 16 | display: grid; 17 | grid-template-columns: repeat(auto-fit, minmax(16rem, 1fr)); 18 | grid-gap: 3rem 2.2rem; 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /src/pages/team.js: -------------------------------------------------------------------------------- 1 | import React, { Component } from 'react'; 2 | import { TeamMember } from '../components/Team'; 3 | import { graphql } from 'gatsby'; 4 | 5 | import Layout from '../layouts/index'; 6 | 7 | import './team.css'; 8 | 9 | class Team extends Component { 10 | state = { 11 | activeMember: null, 12 | show: false, 13 | }; 14 | 15 | componentDidMount() { 16 | setTimeout(() => this.setState({ show: true })); 17 | } 18 | 19 | render() { 20 | return ( 21 | 22 |
23 |
24 |

Hi, have you met

25 |

Our Team?

26 |
27 | 28 |
29 | {this.props.data.allMarkdownRemark.edges.map((teamMembers, key) => ( 30 | this.bindActive(id)} 40 | onDismiss={this.bindActive} 41 | active={this.state.activeMember === key} 42 | /> 43 | ))} 44 |
45 |
46 |
47 | ); 48 | } 49 | 50 | bindActive = (elementToActivate = null) => { 51 | this.setState({ 52 | activeMember: elementToActivate, 53 | }); 54 | 55 | document.body.classList.toggle('no-scroll', elementToActivate !== null); 56 | }; 57 | } 58 | 59 | export default Team; 60 | 61 | export const pageQuery = graphql` 62 | { 63 | allMarkdownRemark( 64 | filter: { fields: { category: { eq: "team" } } } 65 | sort: { fields: [frontmatter___position], order: ASC } 66 | limit: 100 67 | ) { 68 | edges { 69 | node { 70 | fields { 71 | slug 72 | category 73 | } 74 | frontmatter { 75 | title 76 | titles 77 | avatar 78 | details 79 | } 80 | } 81 | } 82 | } 83 | } 84 | `; 85 | -------------------------------------------------------------------------------- /src/pages/team/eleonora-baio.md: -------------------------------------------------------------------------------- 1 | --- 2 | published: true 3 | position: 1 4 | title: Eleonora Baio 5 | titles: |- 6 | UKCC Level 3 Rhythmic Gymnastics Coach 7 | Rhythmic Excellence Head Coach 8 | avatar: /assets/eleonora-baio.jpg 9 | details: >- 10 | Eleonora moved to London in 2014 after having concluded her job as head coach 11 | at the club Gruppo Coreografico Stelline that she started as an assistant in 12 | 2008. 13 | 14 | As a gymnast she trained in Italy with Arianna Pittoni, Barbara Bernardo and Monica Visintin (former Italian National Team gymnast) at the club Societa' ginnastica Triestina (one of the most prestigious multi sports society with more than 100 years of activity). 15 | 16 | At the age of 11, Eleonora entered a Slovenian school as part of the Squad team of Olga Pavletic and Branka Vajngerl (Olympic Slovenian Brevet Judge). As a coach, she has attended countless courses, workshops and masterclasses, having the privilege to be taught by Maura Rota, Luca Zanforlini, Stefan Ivanov and Ruben 17 | 18 | Orihuela Gavilan and now she keeps up to date by attending all the GBR and English national squad training camps led by Maria Gateva (former Bulgarian champion) and ballet coach Suzanne Haslam. 19 | 20 | 21 | Eleonora is currently part of the GBR academy coaching team. 22 | --- 23 | Eleonora has an infinite love for RG that leads her to travel to any possible destination to watch live the main events (world championships, world cups and many more). 24 | 25 | This is what she says about herself: 26 | 27 | I never have enough of RG, since I first discovered it until now I haven’t stopped loving it! I keep studying (as my passion has now become my job) and researching as we never finish learning! 28 | 29 | I love my team: with Stefano it has been love at first sight, we understand each other just looking into our eyes, we make a great partnership even though we don’t miss out discussing sometimes; we’ve been through a lot together and he’s been supportive and helpful as a brother can be. We recently had the privilege to prepare a young gymnast to participate in the World Championships and I’ll never forget all the emotions we felt during that time. The weekend after that incredible event we won the junior national title with our top gymnast Saffron Severn, we became the happiest coaches in the world! 30 | Francesca and Asia are with us for quite a few years now and I couldn’t be happier, I feel we are a young team but a big family. 31 | 32 | ![](/assets/img_1821.jpg) 33 | 34 |
She is an awesome, kind, funny and open coach and one of the best coaches I’ve ever met. Loved making new routine with her and it’s already my favourite. She is an awesome, kind, funny and open coach and one of the best coaches I’ve ever met. Loved making new routine with her and it’s already my favouriteAmane T.
35 | 36 |
Eleonora was really welcoming when i first came to the club which was really nice because it made me feel comfortable moving to a new clubElizabeth P.
37 | 38 |
It is just coming up to a year me being with Rhythmic Excellence but it feels like so much longer as they made me feel so welcome when I joined. I have funny memories from the Italy competition, one was when we were having dinner one night I tried ordering the table whilst Eleonora was whispering in my ear what to say, one of the biggest reasons why I love the coaches here at Rhythmic Excellence is that even though they are strict we still have fun times.Rebecca Y.
-------------------------------------------------------------------------------- /src/pages/team/francesca-cavallerio.md: -------------------------------------------------------------------------------- 1 | --- 2 | published: true 3 | position: 7 4 | title: Francesca Cavallerio 5 | titles: |- 6 | Sports Psychologist 7 | UKCC Level 3 Rhythmic Gymnastics Coach 8 | National Judge 9 | avatar: /assets/screenshot-2020-10-06-at-12.53.13.png 10 | details: |- 11 | Level 3 rhythmic gymnastics coach and national judge, Francesca started her 12 | career as a gymnast at 4 in her hometown in Italy. Although gymnastics was 13 | always her passion, it was when she started to assist her coach that she 14 | realised that what she loved the most was coaching rhythmic gymnastics and be 15 | able to pass on her love for the sport to younger girls. Francesca has been 16 | coaching since 2001 and in 2005 she opened her own gymnastics club in Italy, 17 | S.G. Concordia. After many years working as head coach and developing gymnasts 18 | who competed at a regional and national level, Francesca decided to expand her 19 | horizons and, following her studies in Psychology in Turin, moved to London to 20 | do an MSc in Sports Psychology. The MSc turned into a PhD, during which 21 | Francesca studied and observed the environment of rhythmic gymnastics from a 22 | more academic perspective. Having completed her PhD in 2016, Francesca 23 | currently is a lecturer in Sports Psychology at Anglia Ruskin University but 24 | continues to nurture her passion for gymnastics through her role as a national 25 | judge, occasionally coaching, and helping gymnasts develop their love and 26 | experience in gymnastics in a positive and healthy way as a sports 27 | psychologist. 28 | --- 29 | Level 3 rhythmic gymnastics coach and national judge, Francesca started her 30 | career as a gymnast at 4 in her hometown in Italy. Although gymnastics was 31 | always her passion, it was when she started to assist her coach that she 32 | realised that what she loved the most was coaching rhythmic gymnastics and be 33 | able to pass on her love for the sport to younger girls. Francesca has been 34 | coaching since 2001 and in 2005 she opened her own gymnastics club in Italy, 35 | S.G. Concordia. After many years working as head coach and developing gymnasts 36 | who competed at a regional and national level, Francesca decided to expand her 37 | horizons and, following her studies in Psychology in Turin, moved to London to 38 | do an MSc in Sports Psychology. The MSc turned into a PhD, during which 39 | Francesca studied and observed the environment of rhythmic gymnastics from a 40 | more academic perspective. Having completed her PhD in 2016, Francesca 41 | currently is a lecturer in Sports Psychology at Anglia Ruskin University but 42 | continues to nurture her passion for gymnastics through her role as a national 43 | judge, occasionally coaching, and helping gymnasts develop their love and 44 | experience in gymnastics in a positive and healthy way as a sports 45 | psychologist. -------------------------------------------------------------------------------- /src/pages/team/francesca-fazzari.md: -------------------------------------------------------------------------------- 1 | --- 2 | published: true 3 | position: 3 4 | title: Francesca Fazzari 5 | titles: |- 6 | UKCC Level 2 Rhythmic Gymnastics Coach 7 | Level 2 Judge 8 | avatar: /assets/francesca-fazzari.jpg 9 | details: >- 10 | Francesca trained in Italy for ten years with Daniela Vergani and once senior 11 | 12 | she became part of her coaching team for 6 years. 13 | 14 | 15 | She competed, as member of the Italian junior team at the European 16 | 17 | Championship in 2005 in Moscow and the “Irina Deleanu Cup” in Bucharest, 18 | 19 | trained by Laura Lazzaroni. 20 | 21 | 22 | After finishing her university studies, Francesca moved to London in 2015. 23 | 24 | 25 | Francesca is the main coach of RE advance, pre-squad and adult groups, she also coach the squad group and is responsible of the coaches teaching R1 and R2 groups. 26 | --- 27 | Francesca trained in Italy for ten years with Daniela Vergani and once senior 28 | she became part of her coaching team for 6 years. 29 | 30 | She competed, as member of the Italian junior team at the European 31 | Championship in 2005 in Moscow and the “Irina Deleanu Cup” in Bucharest, 32 | trained by Laura Lazzaroni. 33 | 34 | After finishing her university studies, Francesca moved to London in 2015. 35 | 36 | Francesca is the main coach of RE advance, pre-squad and adult groups, she also coach the squad group and is responsible of the coaches teaching R1 and R2 groups. -------------------------------------------------------------------------------- /src/pages/team/francesca-majer.md: -------------------------------------------------------------------------------- 1 | --- 2 | published: true 3 | position: 7 4 | title: Francesca Majer 5 | titles: Assistant Coach 6 | avatar: /assets/whatsapp-image-2020-09-24-at-15.58.33.jpeg 7 | details: >- 8 | Former Italian National Team Gymnast. 9 | 10 | Francesca started rhythmic gymnastics at the age of 9 at "San Giorgio '79 Desio" in Milan. 11 | 12 | She competed at national and international level; at the age of 14 Francesca entered the national team as an individual gymnast. In 2017 she's been selected as part of the ensamble National Team led by Emanuela Maccarani where she trained for 3 years. 13 | 14 | Francesca started to collaborate with Rhythmic Excellence in 2019 and now teaches in the team alongside her studies of sports psychology at the University of London. 15 | --- 16 | -------------------------------------------------------------------------------- /src/pages/team/helpers.md: -------------------------------------------------------------------------------- 1 | --- 2 | published: true 3 | position: 10 4 | title: Helpers 5 | titles: "" 6 | avatar: /assets/rhythmicexcellence-copy.jpg 7 | details: >- 8 | Our lovely assistants Inna and Jelena are always there to help you and answer 9 | your questions. 10 | 11 | They take orders (apparatus and equipment), help with leotard measurements, explain everything about events and competitions and if you are new, they'll introduce you to our school, they'll explain our philosophy and all the things you need to know about us. 12 | 13 | 14 | All our helpers are DBS checked and are currently registered to the BG. 15 | --- 16 | -------------------------------------------------------------------------------- /src/pages/team/jelena-tihonova.md: -------------------------------------------------------------------------------- 1 | --- 2 | published: true 3 | position: 9 4 | title: Jelena Tihonova 5 | titles: Welfare Officer 6 | avatar: /assets/jelena-tihonova.jpg 7 | details: "" 8 | --- 9 | Welfare Officer -------------------------------------------------------------------------------- /src/pages/team/joanna-chudzik.md: -------------------------------------------------------------------------------- 1 | --- 2 | published: true 3 | position: 4 4 | title: Joanna (Asia) Chudzik 5 | titles: |- 6 | UKCC Level 1 Coach 7 | Level 2 judge 8 | avatar: /assets/img_20181013_142003.jpg 9 | details: >- 10 | Asia started her adventure with Rhythmic Gymnastics at the age of 7. She 11 | 12 | trained under a watchful eye of Alicja Urbaniak in UKS Jantar in Gdynia, 13 | 14 | Poland where her biggest achievement was the 4th place in under 10 free 15 | 16 | routine on National Competition. At the age of 12 Asia had to resign from 17 | 18 | sport due to an illness. 19 | 20 | 21 | Now she continues her passion for rhythmic gymnastics while coaching others and occasionally practicing on her own. 22 | 23 | 24 | Asia is currently attending the UKCC Level 2 Coaching course. 25 | --- 26 | Asia started her adventure with Rhythmic Gymnastics at the age of 7. She 27 | trained under a watchful eye of Alicja Urbaniak in UKS Jantar in Gdynia, 28 | Poland where her biggest achievement was the 4th place in under 10 free 29 | routine on National Competition. At the age of 12 Asia had to resign from 30 | sport due to an illness. 31 | 32 | Now she continues her passion for rhythmic gymnastics while coaching others and occasionally practicing on her own. 33 | 34 | Asia is currently attending the UKCC Level 2 Coaching course. -------------------------------------------------------------------------------- /src/pages/team/lauriane-pradeau.md: -------------------------------------------------------------------------------- 1 | --- 2 | published: true 3 | position: 8 4 | title: Rebecca Bunce 5 | titles: |+ 6 | Group Program Coach 7 | UKCC Level 4 Coach 8 | Brevet Judge 9 | 10 | avatar: /assets/rhythmicexcellence-copy.jpg 11 | details: "\n" 12 | --- 13 | -------------------------------------------------------------------------------- /src/pages/team/stefano-sirianni.md: -------------------------------------------------------------------------------- 1 | --- 2 | published: true 3 | position: 2 4 | title: Stefano Sirianni 5 | titles: |- 6 | Ballet Teacher 7 | UKCC Level 2 Rhythmic Gymnastics Coach 8 | National Judge 9 | British Gymnastics Technical committee Member 10 | avatar: /assets/stefano-sirianni.jpg 11 | details: |- 12 | Fun and experienced ballet and modern dance teacher to students of all skill 13 | levels and ages. Versatile and ambitious in a variety of dance idioms as a 14 | teacher, performer and choreographer. Stefano studied with world-renowned 15 | masters such as: Marianna Benedetti, Sveva Berti, Silvia Chirico, Mauro 16 | Bigonzetti, Eugenio Scigliano, Simonetta Ginnassi, Eugenio Buratti, Deanna 17 | Losi. Six years working experience in London working as ballet teacher and 18 | choreographer for rhythmic gymnastic training. In 2013 Stefano qualified as a 19 | rhythmic gymnastic level 3 judge. 20 | 21 | Stefano is currently attending the UKCC level 3 coaching course. 22 | --- 23 | Fun and experienced ballet and modern dance teacher to students of all skill 24 | levels and ages. Versatile and ambitious in a variety of dance idioms as a 25 | teacher, performer and choreographer. Stefano studied with world-renowned 26 | masters such as: Marianna Benedetti, Sveva Berti, Silvia Chirico, Mauro 27 | Bigonzetti, Eugenio Scigliano, Simonetta Ginnassi, Eugenio Buratti, Deanna 28 | Losi. Six years working experience in London working as ballet teacher and 29 | choreographer for rhythmic gymnastic training. In 2013 Stefano qualified as a 30 | rhythmic gymnastic level 3 judge. 31 | 32 | Stefano is currently attending the GB National Judging course. -------------------------------------------------------------------------------- /src/pages/team/stephani-sherlock.md: -------------------------------------------------------------------------------- 1 | --- 2 | published: true 3 | position: 5 4 | title: Stephani Sherlock 5 | titles: |- 6 | Coach of highest sports performance (RG) 7 | Department of Theory and Methodology of Gymnastics 8 | avatar: /assets/whatsapp-image-2020-09-23-at-13.51.40.jpeg 9 | details: >- 10 | Stephani Sherlock started Rhythmic Gymnastics at 10 years old in Moscow. 11 | 12 | 3,5 years later Stephani became a member of British National Team in 2011 and has since represented Great Britain and England at international events such as two Commonwealth Games (2014, 2018), two World Championships (2014, 2015), two European Championships (2015, 2017) and two World University Games (2015, 2017). 13 | 14 | Stephani is a multiple time British and English Champion and Medalist and 2016 All-Around British Senior Champion. 15 | --- 16 | -------------------------------------------------------------------------------- /src/pages/timetable.css: -------------------------------------------------------------------------------- 1 | .Timetable { 2 | display: grid; 3 | grid-gap: 1rem; 4 | grid-row-gap: 1rem; 5 | padding: 1rem; 6 | grid-template-columns: 1fr; 7 | } 8 | 9 | @media only screen and (min-width: 600px) { 10 | .Timetable { 11 | grid-template-columns: repeat(auto-fill, minmax(420px, 1fr)); 12 | } 13 | } 14 | 15 | .Timetable__day + .Timetable__day { 16 | margin-top: 1.25rem; 17 | } 18 | 19 | .Timetable__day { 20 | & strong { 21 | text-transform: capitalize; 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /src/pages/timetable.js: -------------------------------------------------------------------------------- 1 | import React, { PureComponent } from 'react'; 2 | import { graphql } from 'gatsby'; 3 | 4 | import Layout from '../layouts/index'; 5 | 6 | import './timetable.css'; 7 | 8 | class Timetable extends PureComponent { 9 | render() { 10 | const { data } = this.props; 11 | 12 | return ( 13 | 14 |
15 |

Timetable

16 | 17 |
18 | {data.allMarkdownRemark.edges.map(branchTimetable => ( 19 |
20 |

{branchTimetable.node.frontmatter.title}

21 |
22 | {[ 23 | 'monday', 24 | 'tuesday', 25 | 'wednesday', 26 | 'thursday', 27 | 'friday', 28 | 'saturday', 29 | 'sunday', 30 | ].map(day => { 31 | const key = `${day}-${branchTimetable.node.id}`; 32 | let dayTimetable = branchTimetable.node.frontmatter[day]; 33 | 34 | if (!dayTimetable) { 35 | return null; 36 | } 37 | 38 | dayTimetable = dayTimetable.replace(/\n\r?/g, '
'); 39 | 40 | return ( 41 |
42 | {day} 43 |

44 |

45 | ); 46 | })} 47 |
48 |
49 | ))} 50 |
51 |
52 |
53 | ); 54 | } 55 | } 56 | 57 | export default Timetable; 58 | 59 | export const pageQuery = graphql` 60 | { 61 | allMarkdownRemark( 62 | filter: { fields: { category: { eq: "timetable" } } } 63 | sort: { fields: [frontmatter___title], order: DESC } 64 | limit: 5 65 | ) { 66 | edges { 67 | node { 68 | id 69 | frontmatter { 70 | title 71 | monday 72 | tuesday 73 | wednesday 74 | thursday 75 | friday 76 | saturday 77 | sunday 78 | } 79 | } 80 | } 81 | } 82 | } 83 | `; 84 | -------------------------------------------------------------------------------- /src/pages/timetable/east-branch-hackney.md: -------------------------------------------------------------------------------- 1 | --- 2 | published: true 3 | title: East Branch - Hackney 2020/2021 4 | monday: "" 5 | tuesday: | 6 | 17:00 - 21:00 - Squad 7 | 17:30 - 19:30 - Foundation Squad 8 | 18:00 - 19:30 - Recreational 9 | 19:00 - 20:00 - Adult Fitness (from May 17th) 10 | wednesday: "" 11 | thursday: "" 12 | friday: |+ 13 | 10:00 - 15:00 - Academy 14 | 17:00 - 21:00 - Squad 15 | 17:30 - 19:30 - Foundation Squad ONLINE 16 | 17:30 - 18:30 - Baby group 17 | 18:00 - 19:00 - Adult RG Recreational Group (from May 17th) 18 | 19 | 20 | saturday: | 21 | 12:00 - 18:00 - Squad 22 | 13:00 - 15:30 - Foundation Squad 23 | 15:30 - 17:00 - Recreational 24 | sunday: "" 25 | --- 26 | -------------------------------------------------------------------------------- /src/pages/timetable/west-london.md: -------------------------------------------------------------------------------- 1 | --- 2 | published: true 3 | title: West Branch - Kensington 2020/2021 4 | monday: | 5 | 17:30 - 18:30 - Baby Group 6 | 17:30 - 19:30 - Foundation Squad 7 | 17:30 - 20:30 - Squad 8 | 18:30 - 20:00 - Recreational 9 | tuesday: "" 10 | wednesday: "" 11 | thursday: | 12 | 17:30 - 19:00 - Recreational 13 | 17:30 - 19:30 - Foundation Squad 14 | 17:30 - 20:30 - Squad 15 | friday: "" 16 | saturday: "" 17 | sunday: "" 18 | --- 19 | -------------------------------------------------------------------------------- /src/templates/discipline.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { graphql } from 'gatsby'; 3 | 4 | import Layout from '../layouts/index'; 5 | 6 | import './pages.css'; 7 | 8 | const DisciplinePage = ({ data }) => { 9 | const { markdownRemark: post } = data; 10 | 11 | return ( 12 | 13 |
14 |

{post.frontmatter.title}

15 |

{post.frontmatter.date}

16 |
17 |
18 | 19 | ); 20 | }; 21 | 22 | export default DisciplinePage; 23 | 24 | export const disciplineQuery = graphql` 25 | query($slug: String!) { 26 | markdownRemark(fields: { slug: { eq: $slug } }) { 27 | html 28 | frontmatter { 29 | date(formatString: "DD MMMM, YYYY") 30 | title 31 | } 32 | } 33 | } 34 | `; 35 | -------------------------------------------------------------------------------- /src/templates/legal.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { graphql } from 'gatsby'; 3 | 4 | import Layout from '../layouts/index'; 5 | 6 | const NewsPost = ({ data }) => { 7 | const { markdownRemark: post } = data; 8 | 9 | return ( 10 | 11 |
12 |

{post.frontmatter.title}

13 |

{post.frontmatter.date}

14 |
15 |
16 | 17 | ); 18 | }; 19 | 20 | export default NewsPost; 21 | 22 | export const postQuery = graphql` 23 | query($slug: String!) { 24 | markdownRemark(fields: { slug: { eq: $slug } }) { 25 | html 26 | frontmatter { 27 | title 28 | } 29 | } 30 | } 31 | `; 32 | -------------------------------------------------------------------------------- /src/templates/news.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { graphql } from 'gatsby'; 3 | 4 | import Layout from '../layouts/index'; 5 | 6 | const NewsPost = ({ data }) => { 7 | const { markdownRemark: post } = data; 8 | 9 | return ( 10 | 11 |
12 |

{post.frontmatter.title}

13 |

{post.frontmatter.date}

14 |
15 |
16 | 17 | ); 18 | }; 19 | 20 | export default NewsPost; 21 | 22 | export const postQuery = graphql` 23 | query($slug: String!) { 24 | markdownRemark(fields: { slug: { eq: $slug } }) { 25 | html 26 | frontmatter { 27 | date(formatString: "DD MMMM, YYYY") 28 | title 29 | } 30 | } 31 | } 32 | `; 33 | -------------------------------------------------------------------------------- /src/templates/pages.css: -------------------------------------------------------------------------------- 1 | .page { 2 | & img { 3 | border-radius: 6px; 4 | width: 100%; 5 | height: auto; 6 | margin: 2em auto; 7 | display: block; 8 | } 9 | } 10 | -------------------------------------------------------------------------------- /src/templates/teamMember.css: -------------------------------------------------------------------------------- 1 | .teamMember__avatar { 2 | border-radius: 50%; 3 | max-width: 500px; 4 | min-width: 200px; 5 | width: 100%; 6 | margin: 0 auto; 7 | text-align: center; 8 | display: block; 9 | } 10 | 11 | h2.teamMember__title { 12 | margin-top: 0.25em; 13 | margin-bottom: 1em; 14 | text-align: center; 15 | font-size: 3em; 16 | } -------------------------------------------------------------------------------- /src/templates/teamMember.js: -------------------------------------------------------------------------------- 1 | import React from 'react'; 2 | import { graphql } from 'gatsby'; 3 | 4 | import Layout from '../layouts/index'; 5 | 6 | import './teamMember.css'; 7 | 8 | const NewsPost = ({ data }) => { 9 | const { markdownRemark: post } = data; 10 | 11 | return ( 12 | 13 |
14 | {post.frontmatter.title} 19 |

{post.frontmatter.title}

20 |
21 |
22 | 23 | ); 24 | }; 25 | 26 | export default NewsPost; 27 | 28 | export const postQuery = graphql` 29 | query($slug: String!) { 30 | markdownRemark(fields: { slug: { eq: $slug } }) { 31 | html 32 | frontmatter { 33 | title 34 | avatar 35 | details 36 | } 37 | } 38 | } 39 | `; 40 | -------------------------------------------------------------------------------- /static/assets/1885e3a2-551e-4bc2-b78b-12193ce7de59.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stayForward09/Rythm_react_gatsby/2a3bd9165169d208b275be219d09c9d24f531560/static/assets/1885e3a2-551e-4bc2-b78b-12193ce7de59.jpg -------------------------------------------------------------------------------- /static/assets/253c22f8-a11d-4cef-be4e-34d1e492152b.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stayForward09/Rythm_react_gatsby/2a3bd9165169d208b275be219d09c9d24f531560/static/assets/253c22f8-a11d-4cef-be4e-34d1e492152b.jpg -------------------------------------------------------------------------------- /static/assets/2b735cce-230f-46d9-af10-ca9d8abf6151.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stayForward09/Rythm_react_gatsby/2a3bd9165169d208b275be219d09c9d24f531560/static/assets/2b735cce-230f-46d9-af10-ca9d8abf6151.jpg -------------------------------------------------------------------------------- /static/assets/46488081_1897268410371078_305960439236263936_n.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stayForward09/Rythm_react_gatsby/2a3bd9165169d208b275be219d09c9d24f531560/static/assets/46488081_1897268410371078_305960439236263936_n.jpg -------------------------------------------------------------------------------- /static/assets/46508001_1897268460371073_8999210989232586752_n.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stayForward09/Rythm_react_gatsby/2a3bd9165169d208b275be219d09c9d24f531560/static/assets/46508001_1897268460371073_8999210989232586752_n.jpg -------------------------------------------------------------------------------- /static/assets/5b74b74e-6b28-4077-84d0-10d50402ad31.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stayForward09/Rythm_react_gatsby/2a3bd9165169d208b275be219d09c9d24f531560/static/assets/5b74b74e-6b28-4077-84d0-10d50402ad31.jpg -------------------------------------------------------------------------------- /static/assets/5ee0f471-23f6-4f69-ad72-d66f93e96fcc.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stayForward09/Rythm_react_gatsby/2a3bd9165169d208b275be219d09c9d24f531560/static/assets/5ee0f471-23f6-4f69-ad72-d66f93e96fcc.jpg -------------------------------------------------------------------------------- /static/assets/61924335_2179967498767833_7517858287597912064_n.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stayForward09/Rythm_react_gatsby/2a3bd9165169d208b275be219d09c9d24f531560/static/assets/61924335_2179967498767833_7517858287597912064_n.jpg -------------------------------------------------------------------------------- /static/assets/62229713_2179967568767826_8540997966557609984_n.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stayForward09/Rythm_react_gatsby/2a3bd9165169d208b275be219d09c9d24f531560/static/assets/62229713_2179967568767826_8540997966557609984_n.jpg -------------------------------------------------------------------------------- /static/assets/66079534_1218095251647637_8550242806352838656_o.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stayForward09/Rythm_react_gatsby/2a3bd9165169d208b275be219d09c9d24f531560/static/assets/66079534_1218095251647637_8550242806352838656_o.jpg -------------------------------------------------------------------------------- /static/assets/70388935_2341859752578606_2079050044287221760_n.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stayForward09/Rythm_react_gatsby/2a3bd9165169d208b275be219d09c9d24f531560/static/assets/70388935_2341859752578606_2079050044287221760_n.jpg -------------------------------------------------------------------------------- /static/assets/80351351-0631-4dc0-a8ea-4b69ce6d0530-1-.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stayForward09/Rythm_react_gatsby/2a3bd9165169d208b275be219d09c9d24f531560/static/assets/80351351-0631-4dc0-a8ea-4b69ce6d0530-1-.jpg -------------------------------------------------------------------------------- /static/assets/807a2910.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stayForward09/Rythm_react_gatsby/2a3bd9165169d208b275be219d09c9d24f531560/static/assets/807a2910.jpg -------------------------------------------------------------------------------- /static/assets/8eff49f8-6f8c-4832-af7c-2922ef4ada85.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stayForward09/Rythm_react_gatsby/2a3bd9165169d208b275be219d09c9d24f531560/static/assets/8eff49f8-6f8c-4832-af7c-2922ef4ada85.jpg -------------------------------------------------------------------------------- /static/assets/adult-gymnastics.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stayForward09/Rythm_react_gatsby/2a3bd9165169d208b275be219d09c9d24f531560/static/assets/adult-gymnastics.jpeg -------------------------------------------------------------------------------- /static/assets/british-gymnastics-logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stayForward09/Rythm_react_gatsby/2a3bd9165169d208b275be219d09c9d24f531560/static/assets/british-gymnastics-logo.png -------------------------------------------------------------------------------- /static/assets/disciplines-rhythmic-gymnastics.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stayForward09/Rythm_react_gatsby/2a3bd9165169d208b275be219d09c9d24f531560/static/assets/disciplines-rhythmic-gymnastics.jpg -------------------------------------------------------------------------------- /static/assets/dsc_4867.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stayForward09/Rythm_react_gatsby/2a3bd9165169d208b275be219d09c9d24f531560/static/assets/dsc_4867.jpg -------------------------------------------------------------------------------- /static/assets/eleonora-baio.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stayForward09/Rythm_react_gatsby/2a3bd9165169d208b275be219d09c9d24f531560/static/assets/eleonora-baio.jpg -------------------------------------------------------------------------------- /static/assets/francesca-cavallerio.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stayForward09/Rythm_react_gatsby/2a3bd9165169d208b275be219d09c9d24f531560/static/assets/francesca-cavallerio.jpg -------------------------------------------------------------------------------- /static/assets/francesca-fazzari.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stayForward09/Rythm_react_gatsby/2a3bd9165169d208b275be219d09c9d24f531560/static/assets/francesca-fazzari.jpg -------------------------------------------------------------------------------- /static/assets/img-20180513-wa0048.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stayForward09/Rythm_react_gatsby/2a3bd9165169d208b275be219d09c9d24f531560/static/assets/img-20180513-wa0048.jpg -------------------------------------------------------------------------------- /static/assets/img-20180625-wa0037.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stayForward09/Rythm_react_gatsby/2a3bd9165169d208b275be219d09c9d24f531560/static/assets/img-20180625-wa0037.jpg -------------------------------------------------------------------------------- /static/assets/img-20180625-wa0038.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stayForward09/Rythm_react_gatsby/2a3bd9165169d208b275be219d09c9d24f531560/static/assets/img-20180625-wa0038.jpg -------------------------------------------------------------------------------- /static/assets/img-20180806-wa0033.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stayForward09/Rythm_react_gatsby/2a3bd9165169d208b275be219d09c9d24f531560/static/assets/img-20180806-wa0033.jpg -------------------------------------------------------------------------------- /static/assets/img-20180812-wa0009.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stayForward09/Rythm_react_gatsby/2a3bd9165169d208b275be219d09c9d24f531560/static/assets/img-20180812-wa0009.jpg -------------------------------------------------------------------------------- /static/assets/img-20180930-wa0030.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stayForward09/Rythm_react_gatsby/2a3bd9165169d208b275be219d09c9d24f531560/static/assets/img-20180930-wa0030.jpg -------------------------------------------------------------------------------- /static/assets/img-20181111-wa0050.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stayForward09/Rythm_react_gatsby/2a3bd9165169d208b275be219d09c9d24f531560/static/assets/img-20181111-wa0050.jpg -------------------------------------------------------------------------------- /static/assets/img-20181125-wa0028.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stayForward09/Rythm_react_gatsby/2a3bd9165169d208b275be219d09c9d24f531560/static/assets/img-20181125-wa0028.jpg -------------------------------------------------------------------------------- /static/assets/img-20181208-wa0018.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stayForward09/Rythm_react_gatsby/2a3bd9165169d208b275be219d09c9d24f531560/static/assets/img-20181208-wa0018.jpg -------------------------------------------------------------------------------- /static/assets/img-20190309-wa0009.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stayForward09/Rythm_react_gatsby/2a3bd9165169d208b275be219d09c9d24f531560/static/assets/img-20190309-wa0009.jpg -------------------------------------------------------------------------------- /static/assets/img-20190413-wa0050.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stayForward09/Rythm_react_gatsby/2a3bd9165169d208b275be219d09c9d24f531560/static/assets/img-20190413-wa0050.jpg -------------------------------------------------------------------------------- /static/assets/img-20190415-wa0034.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stayForward09/Rythm_react_gatsby/2a3bd9165169d208b275be219d09c9d24f531560/static/assets/img-20190415-wa0034.jpg -------------------------------------------------------------------------------- /static/assets/img-20190420-wa0043.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stayForward09/Rythm_react_gatsby/2a3bd9165169d208b275be219d09c9d24f531560/static/assets/img-20190420-wa0043.jpg -------------------------------------------------------------------------------- /static/assets/img-20190422-wa0016.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stayForward09/Rythm_react_gatsby/2a3bd9165169d208b275be219d09c9d24f531560/static/assets/img-20190422-wa0016.jpg -------------------------------------------------------------------------------- /static/assets/img-20190525-wa0090.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stayForward09/Rythm_react_gatsby/2a3bd9165169d208b275be219d09c9d24f531560/static/assets/img-20190525-wa0090.jpg -------------------------------------------------------------------------------- /static/assets/img-20190609-wa0084.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stayForward09/Rythm_react_gatsby/2a3bd9165169d208b275be219d09c9d24f531560/static/assets/img-20190609-wa0084.jpg -------------------------------------------------------------------------------- /static/assets/img-20190611-wa0078.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stayForward09/Rythm_react_gatsby/2a3bd9165169d208b275be219d09c9d24f531560/static/assets/img-20190611-wa0078.jpg -------------------------------------------------------------------------------- /static/assets/img-20190706-wa0112-1-.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stayForward09/Rythm_react_gatsby/2a3bd9165169d208b275be219d09c9d24f531560/static/assets/img-20190706-wa0112-1-.jpg -------------------------------------------------------------------------------- /static/assets/img-20190717-wa0056.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stayForward09/Rythm_react_gatsby/2a3bd9165169d208b275be219d09c9d24f531560/static/assets/img-20190717-wa0056.jpg -------------------------------------------------------------------------------- /static/assets/img-20190718-wa0055.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stayForward09/Rythm_react_gatsby/2a3bd9165169d208b275be219d09c9d24f531560/static/assets/img-20190718-wa0055.jpg -------------------------------------------------------------------------------- /static/assets/img-20190718-wa0065.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stayForward09/Rythm_react_gatsby/2a3bd9165169d208b275be219d09c9d24f531560/static/assets/img-20190718-wa0065.jpg -------------------------------------------------------------------------------- /static/assets/img-20190719-wa0084.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stayForward09/Rythm_react_gatsby/2a3bd9165169d208b275be219d09c9d24f531560/static/assets/img-20190719-wa0084.jpg -------------------------------------------------------------------------------- /static/assets/img-20190719-wa0086.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stayForward09/Rythm_react_gatsby/2a3bd9165169d208b275be219d09c9d24f531560/static/assets/img-20190719-wa0086.jpg -------------------------------------------------------------------------------- /static/assets/img-20190721-wa0044.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stayForward09/Rythm_react_gatsby/2a3bd9165169d208b275be219d09c9d24f531560/static/assets/img-20190721-wa0044.jpg -------------------------------------------------------------------------------- /static/assets/img-20190721-wa0112.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stayForward09/Rythm_react_gatsby/2a3bd9165169d208b275be219d09c9d24f531560/static/assets/img-20190721-wa0112.jpg -------------------------------------------------------------------------------- /static/assets/img-20190728-wa0065.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stayForward09/Rythm_react_gatsby/2a3bd9165169d208b275be219d09c9d24f531560/static/assets/img-20190728-wa0065.jpg -------------------------------------------------------------------------------- /static/assets/img-20191213-wa0041.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stayForward09/Rythm_react_gatsby/2a3bd9165169d208b275be219d09c9d24f531560/static/assets/img-20191213-wa0041.jpg -------------------------------------------------------------------------------- /static/assets/img_0222.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stayForward09/Rythm_react_gatsby/2a3bd9165169d208b275be219d09c9d24f531560/static/assets/img_0222.png -------------------------------------------------------------------------------- /static/assets/img_1821.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stayForward09/Rythm_react_gatsby/2a3bd9165169d208b275be219d09c9d24f531560/static/assets/img_1821.jpg -------------------------------------------------------------------------------- /static/assets/img_20180601_131253-e1528971438190.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stayForward09/Rythm_react_gatsby/2a3bd9165169d208b275be219d09c9d24f531560/static/assets/img_20180601_131253-e1528971438190.jpg -------------------------------------------------------------------------------- /static/assets/img_20180624_122106.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stayForward09/Rythm_react_gatsby/2a3bd9165169d208b275be219d09c9d24f531560/static/assets/img_20180624_122106.jpg -------------------------------------------------------------------------------- /static/assets/img_20180719_151004-e1532096327432.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stayForward09/Rythm_react_gatsby/2a3bd9165169d208b275be219d09c9d24f531560/static/assets/img_20180719_151004-e1532096327432.jpg -------------------------------------------------------------------------------- /static/assets/img_20180923_203037_526.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stayForward09/Rythm_react_gatsby/2a3bd9165169d208b275be219d09c9d24f531560/static/assets/img_20180923_203037_526.jpg -------------------------------------------------------------------------------- /static/assets/img_20180923_203037_537.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stayForward09/Rythm_react_gatsby/2a3bd9165169d208b275be219d09c9d24f531560/static/assets/img_20180923_203037_537.jpg -------------------------------------------------------------------------------- /static/assets/img_20180923_203037_548.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stayForward09/Rythm_react_gatsby/2a3bd9165169d208b275be219d09c9d24f531560/static/assets/img_20180923_203037_548.jpg -------------------------------------------------------------------------------- /static/assets/img_20181002_103403_871.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stayForward09/Rythm_react_gatsby/2a3bd9165169d208b275be219d09c9d24f531560/static/assets/img_20181002_103403_871.jpg -------------------------------------------------------------------------------- /static/assets/img_20181013_142003.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stayForward09/Rythm_react_gatsby/2a3bd9165169d208b275be219d09c9d24f531560/static/assets/img_20181013_142003.jpg -------------------------------------------------------------------------------- /static/assets/img_20181214_214522_390.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stayForward09/Rythm_react_gatsby/2a3bd9165169d208b275be219d09c9d24f531560/static/assets/img_20181214_214522_390.jpg -------------------------------------------------------------------------------- /static/assets/img_20190323_084723.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stayForward09/Rythm_react_gatsby/2a3bd9165169d208b275be219d09c9d24f531560/static/assets/img_20190323_084723.jpg -------------------------------------------------------------------------------- /static/assets/img_20190323_084749.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stayForward09/Rythm_react_gatsby/2a3bd9165169d208b275be219d09c9d24f531560/static/assets/img_20190323_084749.jpg -------------------------------------------------------------------------------- /static/assets/img_20190323_175307.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stayForward09/Rythm_react_gatsby/2a3bd9165169d208b275be219d09c9d24f531560/static/assets/img_20190323_175307.jpg -------------------------------------------------------------------------------- /static/assets/img_20190323_182748_1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stayForward09/Rythm_react_gatsby/2a3bd9165169d208b275be219d09c9d24f531560/static/assets/img_20190323_182748_1.jpg -------------------------------------------------------------------------------- /static/assets/img_20190407_135944.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stayForward09/Rythm_react_gatsby/2a3bd9165169d208b275be219d09c9d24f531560/static/assets/img_20190407_135944.jpg -------------------------------------------------------------------------------- /static/assets/img_20190408_100828_027.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stayForward09/Rythm_react_gatsby/2a3bd9165169d208b275be219d09c9d24f531560/static/assets/img_20190408_100828_027.jpg -------------------------------------------------------------------------------- /static/assets/img_20190408_100828_029.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stayForward09/Rythm_react_gatsby/2a3bd9165169d208b275be219d09c9d24f531560/static/assets/img_20190408_100828_029.jpg -------------------------------------------------------------------------------- /static/assets/img_20190414_134611.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stayForward09/Rythm_react_gatsby/2a3bd9165169d208b275be219d09c9d24f531560/static/assets/img_20190414_134611.jpg -------------------------------------------------------------------------------- /static/assets/img_20190503_121201.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stayForward09/Rythm_react_gatsby/2a3bd9165169d208b275be219d09c9d24f531560/static/assets/img_20190503_121201.jpg -------------------------------------------------------------------------------- /static/assets/img_20190504_094518.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stayForward09/Rythm_react_gatsby/2a3bd9165169d208b275be219d09c9d24f531560/static/assets/img_20190504_094518.jpg -------------------------------------------------------------------------------- /static/assets/img_20190505_202407.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stayForward09/Rythm_react_gatsby/2a3bd9165169d208b275be219d09c9d24f531560/static/assets/img_20190505_202407.jpg -------------------------------------------------------------------------------- /static/assets/img_20190505_203849.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stayForward09/Rythm_react_gatsby/2a3bd9165169d208b275be219d09c9d24f531560/static/assets/img_20190505_203849.jpg -------------------------------------------------------------------------------- /static/assets/img_20190506_100428_359.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stayForward09/Rythm_react_gatsby/2a3bd9165169d208b275be219d09c9d24f531560/static/assets/img_20190506_100428_359.jpg -------------------------------------------------------------------------------- /static/assets/img_20190506_100428_370.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stayForward09/Rythm_react_gatsby/2a3bd9165169d208b275be219d09c9d24f531560/static/assets/img_20190506_100428_370.jpg -------------------------------------------------------------------------------- /static/assets/img_20190608_122722.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stayForward09/Rythm_react_gatsby/2a3bd9165169d208b275be219d09c9d24f531560/static/assets/img_20190608_122722.jpg -------------------------------------------------------------------------------- /static/assets/img_20190609_094440.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stayForward09/Rythm_react_gatsby/2a3bd9165169d208b275be219d09c9d24f531560/static/assets/img_20190609_094440.jpg -------------------------------------------------------------------------------- /static/assets/img_20190701_100652_502.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stayForward09/Rythm_react_gatsby/2a3bd9165169d208b275be219d09c9d24f531560/static/assets/img_20190701_100652_502.jpg -------------------------------------------------------------------------------- /static/assets/img_20190718_112836.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stayForward09/Rythm_react_gatsby/2a3bd9165169d208b275be219d09c9d24f531560/static/assets/img_20190718_112836.jpg -------------------------------------------------------------------------------- /static/assets/img_20190720_162136.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stayForward09/Rythm_react_gatsby/2a3bd9165169d208b275be219d09c9d24f531560/static/assets/img_20190720_162136.jpg -------------------------------------------------------------------------------- /static/assets/img_20190721_115956.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stayForward09/Rythm_react_gatsby/2a3bd9165169d208b275be219d09c9d24f531560/static/assets/img_20190721_115956.jpg -------------------------------------------------------------------------------- /static/assets/img_20190722_194728_196.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stayForward09/Rythm_react_gatsby/2a3bd9165169d208b275be219d09c9d24f531560/static/assets/img_20190722_194728_196.jpg -------------------------------------------------------------------------------- /static/assets/img_20190722_194728_197.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stayForward09/Rythm_react_gatsby/2a3bd9165169d208b275be219d09c9d24f531560/static/assets/img_20190722_194728_197.jpg -------------------------------------------------------------------------------- /static/assets/img_20190722_194728_207.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stayForward09/Rythm_react_gatsby/2a3bd9165169d208b275be219d09c9d24f531560/static/assets/img_20190722_194728_207.jpg -------------------------------------------------------------------------------- /static/assets/img_20190722_194728_211.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stayForward09/Rythm_react_gatsby/2a3bd9165169d208b275be219d09c9d24f531560/static/assets/img_20190722_194728_211.jpg -------------------------------------------------------------------------------- /static/assets/img_20190722_194728_212.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stayForward09/Rythm_react_gatsby/2a3bd9165169d208b275be219d09c9d24f531560/static/assets/img_20190722_194728_212.jpg -------------------------------------------------------------------------------- /static/assets/img_20190727_204526_1.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stayForward09/Rythm_react_gatsby/2a3bd9165169d208b275be219d09c9d24f531560/static/assets/img_20190727_204526_1.jpg -------------------------------------------------------------------------------- /static/assets/img_20190727_204957.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stayForward09/Rythm_react_gatsby/2a3bd9165169d208b275be219d09c9d24f531560/static/assets/img_20190727_204957.jpg -------------------------------------------------------------------------------- /static/assets/img_20191102_154215.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stayForward09/Rythm_react_gatsby/2a3bd9165169d208b275be219d09c9d24f531560/static/assets/img_20191102_154215.jpg -------------------------------------------------------------------------------- /static/assets/img_4056.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stayForward09/Rythm_react_gatsby/2a3bd9165169d208b275be219d09c9d24f531560/static/assets/img_4056.png -------------------------------------------------------------------------------- /static/assets/img_4079.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stayForward09/Rythm_react_gatsby/2a3bd9165169d208b275be219d09c9d24f531560/static/assets/img_4079.png -------------------------------------------------------------------------------- /static/assets/img_4080.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stayForward09/Rythm_react_gatsby/2a3bd9165169d208b275be219d09c9d24f531560/static/assets/img_4080.png -------------------------------------------------------------------------------- /static/assets/img_4081.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stayForward09/Rythm_react_gatsby/2a3bd9165169d208b275be219d09c9d24f531560/static/assets/img_4081.png -------------------------------------------------------------------------------- /static/assets/img_4101.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stayForward09/Rythm_react_gatsby/2a3bd9165169d208b275be219d09c9d24f531560/static/assets/img_4101.png -------------------------------------------------------------------------------- /static/assets/img_4426.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stayForward09/Rythm_react_gatsby/2a3bd9165169d208b275be219d09c9d24f531560/static/assets/img_4426.jpg -------------------------------------------------------------------------------- /static/assets/img_5457.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stayForward09/Rythm_react_gatsby/2a3bd9165169d208b275be219d09c9d24f531560/static/assets/img_5457.png -------------------------------------------------------------------------------- /static/assets/img_6630.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stayForward09/Rythm_react_gatsby/2a3bd9165169d208b275be219d09c9d24f531560/static/assets/img_6630.jpg -------------------------------------------------------------------------------- /static/assets/img_6632.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stayForward09/Rythm_react_gatsby/2a3bd9165169d208b275be219d09c9d24f531560/static/assets/img_6632.jpg -------------------------------------------------------------------------------- /static/assets/img_9230.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stayForward09/Rythm_react_gatsby/2a3bd9165169d208b275be219d09c9d24f531560/static/assets/img_9230.jpg -------------------------------------------------------------------------------- /static/assets/img_9360.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stayForward09/Rythm_react_gatsby/2a3bd9165169d208b275be219d09c9d24f531560/static/assets/img_9360.jpg -------------------------------------------------------------------------------- /static/assets/img_9362.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stayForward09/Rythm_react_gatsby/2a3bd9165169d208b275be219d09c9d24f531560/static/assets/img_9362.jpg -------------------------------------------------------------------------------- /static/assets/jelena-tihonova.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stayForward09/Rythm_react_gatsby/2a3bd9165169d208b275be219d09c9d24f531560/static/assets/jelena-tihonova.jpg -------------------------------------------------------------------------------- /static/assets/mvi_5704.00_00_01_23.still071.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stayForward09/Rythm_react_gatsby/2a3bd9165169d208b275be219d09c9d24f531560/static/assets/mvi_5704.00_00_01_23.still071.jpg -------------------------------------------------------------------------------- /static/assets/mvi_5704.00_00_20_09.still064.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stayForward09/Rythm_react_gatsby/2a3bd9165169d208b275be219d09c9d24f531560/static/assets/mvi_5704.00_00_20_09.still064.jpg -------------------------------------------------------------------------------- /static/assets/mvi_5704.00_00_47_22.still045.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stayForward09/Rythm_react_gatsby/2a3bd9165169d208b275be219d09c9d24f531560/static/assets/mvi_5704.00_00_47_22.still045.jpg -------------------------------------------------------------------------------- /static/assets/mvi_5704.00_00_54_15.still003.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stayForward09/Rythm_react_gatsby/2a3bd9165169d208b275be219d09c9d24f531560/static/assets/mvi_5704.00_00_54_15.still003.jpg -------------------------------------------------------------------------------- /static/assets/mvimg_20190609_160732.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stayForward09/Rythm_react_gatsby/2a3bd9165169d208b275be219d09c9d24f531560/static/assets/mvimg_20190609_160732.jpg -------------------------------------------------------------------------------- /static/assets/mvimg_20190718_115133.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stayForward09/Rythm_react_gatsby/2a3bd9165169d208b275be219d09c9d24f531560/static/assets/mvimg_20190718_115133.jpg -------------------------------------------------------------------------------- /static/assets/mvimg_20190721_104247.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stayForward09/Rythm_react_gatsby/2a3bd9165169d208b275be219d09c9d24f531560/static/assets/mvimg_20190721_104247.jpg -------------------------------------------------------------------------------- /static/assets/re.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stayForward09/Rythm_react_gatsby/2a3bd9165169d208b275be219d09c9d24f531560/static/assets/re.png -------------------------------------------------------------------------------- /static/assets/rhythmic-137-edit.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stayForward09/Rythm_react_gatsby/2a3bd9165169d208b275be219d09c9d24f531560/static/assets/rhythmic-137-edit.jpg -------------------------------------------------------------------------------- /static/assets/rhythmic-192-edit.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stayForward09/Rythm_react_gatsby/2a3bd9165169d208b275be219d09c9d24f531560/static/assets/rhythmic-192-edit.jpg -------------------------------------------------------------------------------- /static/assets/rhythmic-gymnastic.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stayForward09/Rythm_react_gatsby/2a3bd9165169d208b275be219d09c9d24f531560/static/assets/rhythmic-gymnastic.jpeg -------------------------------------------------------------------------------- /static/assets/rhythmicexcellence-copy.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stayForward09/Rythm_react_gatsby/2a3bd9165169d208b275be219d09c9d24f531560/static/assets/rhythmicexcellence-copy.jpg -------------------------------------------------------------------------------- /static/assets/rhythmicexcellence2.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stayForward09/Rythm_react_gatsby/2a3bd9165169d208b275be219d09c9d24f531560/static/assets/rhythmicexcellence2.jpg -------------------------------------------------------------------------------- /static/assets/screenshot-2020-06-23-at-18.30.38.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stayForward09/Rythm_react_gatsby/2a3bd9165169d208b275be219d09c9d24f531560/static/assets/screenshot-2020-06-23-at-18.30.38.png -------------------------------------------------------------------------------- /static/assets/screenshot-2020-10-06-at-12.53.13.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stayForward09/Rythm_react_gatsby/2a3bd9165169d208b275be219d09c9d24f531560/static/assets/screenshot-2020-10-06-at-12.53.13.png -------------------------------------------------------------------------------- /static/assets/screenshot-2021-01-04-at-13.35.45.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stayForward09/Rythm_react_gatsby/2a3bd9165169d208b275be219d09c9d24f531560/static/assets/screenshot-2021-01-04-at-13.35.45.png -------------------------------------------------------------------------------- /static/assets/screenshot-2021-01-04-at-14.40.52.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stayForward09/Rythm_react_gatsby/2a3bd9165169d208b275be219d09c9d24f531560/static/assets/screenshot-2021-01-04-at-14.40.52.png -------------------------------------------------------------------------------- /static/assets/screenshot_20190525-221845.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stayForward09/Rythm_react_gatsby/2a3bd9165169d208b275be219d09c9d24f531560/static/assets/screenshot_20190525-221845.png -------------------------------------------------------------------------------- /static/assets/screenshot_20190525-221858.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stayForward09/Rythm_react_gatsby/2a3bd9165169d208b275be219d09c9d24f531560/static/assets/screenshot_20190525-221858.png -------------------------------------------------------------------------------- /static/assets/screenshot_20190610-142038.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stayForward09/Rythm_react_gatsby/2a3bd9165169d208b275be219d09c9d24f531560/static/assets/screenshot_20190610-142038.png -------------------------------------------------------------------------------- /static/assets/screenshot_20190725-092652.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stayForward09/Rythm_react_gatsby/2a3bd9165169d208b275be219d09c9d24f531560/static/assets/screenshot_20190725-092652.png -------------------------------------------------------------------------------- /static/assets/stefano-sirianni.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stayForward09/Rythm_react_gatsby/2a3bd9165169d208b275be219d09c9d24f531560/static/assets/stefano-sirianni.jpg -------------------------------------------------------------------------------- /static/assets/website.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stayForward09/Rythm_react_gatsby/2a3bd9165169d208b275be219d09c9d24f531560/static/assets/website.jpg -------------------------------------------------------------------------------- /static/assets/whatsapp-image-2020-09-23-at-13.51.40.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stayForward09/Rythm_react_gatsby/2a3bd9165169d208b275be219d09c9d24f531560/static/assets/whatsapp-image-2020-09-23-at-13.51.40.jpeg -------------------------------------------------------------------------------- /static/assets/whatsapp-image-2020-09-24-at-15.58.33.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stayForward09/Rythm_react_gatsby/2a3bd9165169d208b275be219d09c9d24f531560/static/assets/whatsapp-image-2020-09-24-at-15.58.33.jpeg -------------------------------------------------------------------------------- /static/img/404.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stayForward09/Rythm_react_gatsby/2a3bd9165169d208b275be219d09c9d24f531560/static/img/404.jpg -------------------------------------------------------------------------------- /static/img/curve-disciplines.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /static/img/curve-map.svg: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /static/img/home_background.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stayForward09/Rythm_react_gatsby/2a3bd9165169d208b275be219d09c9d24f531560/static/img/home_background.png -------------------------------------------------------------------------------- /static/img/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stayForward09/Rythm_react_gatsby/2a3bd9165169d208b275be219d09c9d24f531560/static/img/logo.png -------------------------------------------------------------------------------- /static/img/medal.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stayForward09/Rythm_react_gatsby/2a3bd9165169d208b275be219d09c9d24f531560/static/img/medal.png -------------------------------------------------------------------------------- /static/img/medal_bronze.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stayForward09/Rythm_react_gatsby/2a3bd9165169d208b275be219d09c9d24f531560/static/img/medal_bronze.png -------------------------------------------------------------------------------- /static/img/medal_gold.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stayForward09/Rythm_react_gatsby/2a3bd9165169d208b275be219d09c9d24f531560/static/img/medal_gold.png -------------------------------------------------------------------------------- /static/img/medal_silver.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stayForward09/Rythm_react_gatsby/2a3bd9165169d208b275be219d09c9d24f531560/static/img/medal_silver.png -------------------------------------------------------------------------------- /static/img/rhythmicexcellence.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/stayForward09/Rythm_react_gatsby/2a3bd9165169d208b275be219d09c9d24f531560/static/img/rhythmicexcellence.png --------------------------------------------------------------------------------