{"version":3,"sources":["components/Footer.tsx","components/Header.tsx","scenes/Main.tsx","Theme.ts","components/Section.tsx","scenes/Main/AboutMe.tsx","components/Skill.tsx","scenes/Main/Skills.tsx","scenes/Main/Slogan.tsx","components/ProjectCard.tsx","components/AvailableProjectCard.tsx","scenes/Main/Projects.tsx","utils/colorUtils.ts","scenes/Main/Availability.tsx","scenes/Home.tsx","scenes/SubmitProject.tsx","stores/ProjectStore.ts","App.tsx","stores/RootStore.ts","serviceWorker.ts","index.tsx"],"names":["useStyles","makeStyles","theme","root","backgroundColor","palette","text","primary","color","secondary","height","link","margin","spacing","Footer","props","classes","Box","display","alignItems","justifyContent","className","Link","href","LinkedIn","GitHub","Twitter","MailOutline","fontSize","zIndex","boxShadow","toolbar","minHeight","logo","toolbarTitle","flex","toolbarLink","padding","flexShrink","cursor","menuButton","drawer","drawerPaper","width","drawerHeader","borderBottom","borderColor","light","drawerMenuItem","Header","observer","useState","menuAnchorEl","setMenuAnchorEl","menuItems","label","to","handleClose","AppBar","Container","Toolbar","disableGutters","style","srcSet","type","src","alt","Typography","component","Hidden","xsDown","map","item","i","offset","smooth","smUp","IconButton","edge","onClick","event","currentTarget","Menu","Drawer","anchor","open","Boolean","onClose","paper","Close","MenuItem","Main","colors","darkGrey","lightGrey","white","yellow","blue","lightBlue","cyan","createTheme","main","contrastText","typography","fontFamily","fontWeightLight","fontWeightRegular","fontWeightMedium","h1","fontWeight","lineHeight","letterSPacing","h2","components","MuiAppBar","styleOverrides","fontsize","paddingTop","paddingBottom","header","textTransform","marginBottom","shaded","position","top","visibility","Section","id","sx","pt","pb","bgcolor","variant","title","children","defaultProps","AboutMe","paragraph","marginTop","barContainer","bar","Component","barHeight","value","rowHeader","Skills","Grid","container","xs","sm","md","Skill","slanted","transform","overflow","content","image","backgroundRepeat","backgroundSize","backgroundPosition","slogan","breakpoints","down","textAlign","Slogan","left","direction","lg","imagePosition","highlight","marginLeft","ProjectCard","Card","elevation","CardActionArea","project","headerImage","CardMedia","onError","e","target","onerror","headerImageFallback","CardContent","gutterBottom","summary","flexWrap","highlights","hl","Chip","externalLink","CardActions","Button","size","rel","externalLinkLabel","AvailableProjectCard","mt","textDecoration","Projects","inject","useTheme","one","useMediaQuery","two","between","projects","setProjects","useEffect","a","rootStore","projectStore","loadProjects","data","Masonry","columns","getColorForPercentage","colorRanges","percentage","length","lower","upper","range","rangePct","pctLower","pctUpper","r","Math","floor","g","b","join","Availability","submitProjectUrl","MonthTile","p","availability","Education","lazy","Home","fallback","SubmitProject","TextField","fullWidth","FormControl","RadioGroup","row","name","FormControlLabel","control","Radio","FormGroup","Checkbox","defaultChecked","ProjectStore","undefined","action","App","ThemeProvider","path","element","index","window","location","hostname","match","ReactDOM","render","StrictMode","document","getElementById","navigator","serviceWorker","ready","then","registration","unregister","catch","error","console","message"],"mappings":"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","file":"static/js/main.dff0fa1e.chunk.js","sourcesContent":["import { Box, Link, Theme } from '@mui/material';\r\nimport { makeStyles } from '@mui/styles';\r\nimport { GitHub, LinkedIn, MailOutline, Twitter } from '@mui/icons-material';\r\nimport React from 'react';\r\n\r\n\r\nconst useStyles = makeStyles((theme: Theme) => ({\r\n\troot: {\r\n\t\tbackgroundColor: theme.palette.text.primary,\r\n\t\tcolor: theme.palette.text.secondary,\r\n\t\theight: '200px'\r\n\t},\r\n\tlink: {\r\n\t\tmargin: theme.spacing(2)\r\n\t}\r\n}));\r\n\r\nexport const Footer = (props: {}) => {\r\n\tlet classes = useStyles();\r\n\r\n\treturn (\r\n\t\t\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t\r\n\t);\r\n}\r\n","import { AppBar, Box, Container, Drawer, Hidden, IconButton, MenuItem, Theme, Toolbar, Typography } from '@mui/material';\r\nimport { Menu, Close } from '@mui/icons-material';\r\nimport { makeStyles } from '@mui/styles';\r\nimport { observer } from 'mobx-react';\r\nimport React, { useState } from 'react';\r\nimport { Link } from 'react-scroll';\r\nimport { Link as RouterLink } from 'react-router-dom';\r\n\r\nconst backgroundColor = `rgba(29, 30, 34, 1)`;\r\n\r\nconst useStyles = makeStyles((theme: Theme) => ({\r\n\troot: {\r\n\t\tbackgroundColor: backgroundColor,\r\n\t\tcolor: theme.palette.text.secondary,\r\n\t\tfontSize: '20px',\r\n\t\tzIndex: 10,\r\n\t\tboxShadow: 'none'\r\n\t},\r\n\ttoolbar: { \r\n\t\tminHeight: '80px'\r\n\t},\r\n\tlogo: {\r\n\t\theight: '50px'\r\n\t},\r\n\ttoolbarTitle: {\r\n\t\tflex: 1,\r\n\t},\r\n\ttoolbarLink: {\r\n\t\tpadding: theme.spacing(3),\r\n\t\tflexShrink: 0,\r\n\t\tcursor: 'pointer',\r\n\t\tfontSize: '16px',\r\n\t\tcolor: theme.palette.text.secondary,\r\n\t},\r\n\tmenuButton: {\r\n\t},\r\n\tdrawer: {\r\n\t},\r\n\tdrawerPaper: {\r\n\t\twidth: '80%',\r\n\t\tbackgroundColor: backgroundColor,\r\n\t\tcolor: theme.palette.text.secondary,\r\n\t},\r\n\tdrawerHeader: {\r\n\t\tborderBottom: 'solid 1px',\r\n\t\tborderColor: theme.palette.primary.light,\r\n\t},\r\n\tdrawerMenuItem: {\r\n\r\n\t}\r\n}));\r\n\r\n\r\nexport const Header = observer((props: {}) => {\r\n\tconst classes = useStyles();\r\n\tconst [menuAnchorEl, setMenuAnchorEl] = useState(null);\r\n\r\n\tconst menuItems = [{\r\n\t\tlabel: 'about me',\r\n\t\tto: 'about-me'\r\n\t}, {\r\n\t\tlabel: 'availability',\r\n\t\tto: 'availability'\r\n\t}, {\r\n\t\tlabel: 'skills',\r\n\t\tto: 'skills'\r\n\t}, {\r\n\t\tlabel: 'projects',\r\n\t\tto: 'projects'\r\n\t}, {\r\n\t\tlabel: 'education',\r\n\t\tto: 'education'\r\n\t}];\r\n\r\n\tconst onMenuButtonClick = (event: React.MouseEvent) => {\r\n\t\tsetMenuAnchorEl(event.currentTarget as any);\r\n\t};\r\n\r\n\tconst handleClose = () => {\r\n\t\tsetMenuAnchorEl(null);\r\n\t}\r\n\r\n\treturn (<>\r\n\t\t\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t{menuItems.map((item, i) =>\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t{item.label}\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t)}\r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\r\n\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t{menuItems.map((item, i) =>\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t)}\r\n\t\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t\r\n\t>);\r\n});\r\n","import React from 'react';\r\nimport { Footer } from '../components/Footer';\r\nimport { Header } from '../components/Header';\r\nimport { Outlet } from 'react-router-dom';\r\nimport { Toolbar } from '@mui/material';\r\n\r\nexport const Main = () => {\r\n\treturn (\r\n\t\t<>\r\n\t\t\t\r\n\t\t\t\r\n\t\t\t\r\n\t\t\t\r\n\t\t>);\r\n}\r\n","import { cyan } from '@mui/material/colors';\r\nimport { createTheme } from '@mui/material/styles';\r\n\r\nexport const colors = {\r\n\tdarkGrey: '#1D1E22',\r\n\tlightGrey: '#D4D4DC',\r\n\twhite: '#fff',\r\n\tyellow: '#FEDA6A',\r\n\tblue: '#2B7BA6', //'#3797CB';\r\n\tlightBlue: cyan[600]\r\n}\r\n\r\nconst theme = createTheme({\r\n\tpalette: {\r\n\t\tprimary: {\r\n\t\t\t//main: colorDarkGrey,\r\n\t\t\t//dark: colorDarkGrey,\r\n\t\t\t//light: colorLightGrey\r\n\t\t\tmain: colors.blue,\r\n\t\t\tcontrastText: colors.white\r\n\t\t},\r\n\t\tsecondary: {\r\n\t\t\tmain: colors.yellow,\r\n\t\t\tcontrastText: colors.darkGrey\r\n\t\t\t//contrastText: accentColorYellow\r\n\t\t},\r\n\t\ttext: {\r\n\t\t\tprimary: colors.darkGrey,\r\n\t\t\tsecondary: colors.lightGrey\r\n\t\t}\t\t\r\n\t},\r\n\ttypography: {\r\n\t\tfontFamily: `\"Roboto\", \"Helvetica\", \"Arial\", sans-serif`,\r\n\t\tfontSize: 14,\r\n\t\tfontWeightLight: 100,\r\n\t\tfontWeightRegular: 300,\r\n\t\tfontWeightMedium: 400,\r\n\t\th1: {\r\n\t\t\tfontSize: '2.125rem',\r\n\t\t\tfontWeight: 300,\r\n\t\t\tlineHeight: 1.235,\r\n\t\t\tletterSPacing: '0.00735em'\r\n\t\t},\r\n\t\th2: {\r\n\t\t\tfontSize: '1.25rem',\r\n\t\t\tfontWeight: 400,\r\n\t\t\tlineHeight: 1.6,\r\n\t\t\tletterSPacing: '0.0075em'\r\n\t\t}\r\n\t},\r\n\tcomponents: {\r\n\t\tMuiAppBar: {\r\n\t\t\tstyleOverrides: {\r\n\t\t\t\troot: {\r\n\t\t\t\t\tfontsize: '20px',\r\n\t\t\t\t\tbackgroundColor: colors.darkGrey,\r\n\t\t\t\t\tboxShadow: 'none'\r\n\t\t\t\t}\r\n\t\t\t}\r\n\t\t}\r\n\t}\r\n});\r\n\r\nexport default theme;","import { Box, Container, Theme, Typography, useTheme } from '@mui/material';\r\nimport { makeStyles } from '@mui/styles';\r\nimport { StandardCSSProperties, SxProps } from '@mui/system';\r\nimport React from 'react';\r\nimport { colors } from '../Theme';\r\n\r\nconst useStyles = makeStyles((theme: Theme) => ({\r\n\troot: {\r\n\t\tpaddingTop: theme.spacing(5),\r\n\t\tpaddingBottom: theme.spacing(5)\r\n\t},\r\n\theader: {\r\n\t\ttextTransform: 'uppercase',\r\n\t\tmarginBottom: theme.spacing(5)\r\n\t},\r\n\tshaded: {\r\n\t\tbackgroundColor: theme.palette.text.secondary\r\n\t},\r\n\tanchor: {\r\n\t\t'&:target': {\r\n\t\t\tdisplay: 'block',\r\n\t\t\tposition: 'relative',\r\n\t\t\ttop: '-100px',\r\n\t\t\tvisibility: 'hidden'\r\n\t\t}\r\n\t}\r\n}));\r\n\r\ninterface IProps {\r\n\ttitle?: string,\r\n\tchildren: React.ReactNode,\r\n\tvariant: 'normal' | 'contained',\r\n\tid?: string,\r\n\tcolor: StandardCSSProperties['backgroundColor']\r\n}\r\n\r\nconst Section = (props: IProps) => {\r\n\tconst classes = useStyles();\r\n\r\n\treturn (\r\n\t\t ({\r\n\t\t\t\tpt: theme.spacing(4),\r\n\t\t\t\tpb: theme.spacing(4),\r\n\t\t\t\tbgcolor: props.variant === 'contained' ? props.color : 'transparent'\r\n\t\t\t})}\r\n\t\t>\r\n\t\t\t\r\n\t\t\t\t{props.title &&\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t{props.title}\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\t\t{props.children}\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t\r\n\t);\r\n}\r\n\r\nSection.defaultProps = {\r\n\tvariant: 'normal',\r\n\tcolor: colors.lightGrey\r\n}\r\n\r\nexport { Section };","import { Typography } from '@mui/material';\r\nimport React from 'react';\r\n\r\nexport const AboutMe = () => {\r\n\r\n\treturn (\r\n\t\t<>\r\n\t\t\t\r\n\t\t\t\tLooking for an experienced and versatile freelancer to tackle your next project? You've come to the right place!\r\n\t\t\t\r\n\t\t\t\r\n\t\t\t\tHello, I am Sander. As a passionate IT professional with expertise in software development, architectures, CI/CD, and AWS CloudNative, I'm here to deliver exceptional results for your assignments.\r\n\t\t\t\r\n\t\t\t{/* \r\n\t\t\t\tI live in Rijswijk with my wife and two sons, in a beautiful house at the water. In my spare time I love to do some gardening, woodworking,\r\n\t\t\t\tgo on a bike and spend time with my family. I have travelled around the world and I can’t wait until the boys are a bit older,\r\n\t\t\t\tso we can show them all the beautiful things the world has to offer. I am an enthusiastic person who works hard, but is always in for a joke.\r\n\t\t\t */}\r\n\t\t\t\r\n\t\t\t\tWith a track record of leading successful projects and seamlessly integrating applications, I take pride in bringing a \"can do\" mentality to every challenge. Fail fast, learn fast – that's how we grow!\r\n\t\t\t\r\n\t\t\t{/* \t\r\n\t\t\t\tI am passionate about technology, and how technology can be a business excellerator. I have a natural curiosity in architectural styles and extensive experience within distributed systems.\r\n\t\t\t\tI have a creative mindset if it comes to problem solving and determined to complete whatever job I do in the highest possible way.\r\n\t\t\t */}\r\n\t\t\t{/* \r\n\t\t\t\tIn my profile you can find more detailed information about my skills and a selection of projects I was involved in. If you want more information, don't hesitate to\r\n\t\t\t\tcontact me.\r\n\t\t\t */}\r\n\t\t\t\r\n\t\t\t\tWhether you need innovative solutions, a fresh perspective, or a reliable partner to elevate your projects, I'm ready to make a difference. Reach out to me with your project details, and together, we'll create something remarkable.\r\n\t\t\t\r\n\t\t\t\r\n\t\t\t\tLet's embark on a journey of success and make your vision a reality. Connect with me today and let's get started!\r\n\t\t\t\r\n\t\t>\r\n\t);\r\n}","import { Box, Theme, Typography } from '@mui/material';\r\nimport { makeStyles } from '@mui/styles';\r\nimport React from 'react';\r\n\r\n\r\nconst useStyles = makeStyles((theme: Theme) => ({\r\n\troot: {\r\n\t\tmarginTop: theme.spacing(2)\r\n\t},\r\n\tbarContainer: {\r\n\t\tbackgroundColor: theme.palette.primary.contrastText,\r\n\t},\r\n\tbar: {\r\n\t\tbackgroundColor: theme.palette.primary.main\r\n\t}\r\n}));\r\n\r\ninterface IProps {\r\n\tlabel: string,\r\n\tvalue: number,\r\n\tbarHeight: number,\r\n\tclassName?: string\r\n}\r\n\r\nconst Component = (props: IProps) => {\r\n\tconst classes = useStyles();\r\n\r\n\treturn (\r\n\t\t\r\n\t\t\t{props.label}\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t\r\n\t);\r\n}\r\n\r\nComponent.defaultProps = {\r\n\tlabel: '',\r\n\tvalue: 0,\r\n\tbarHeight: 10\r\n}\r\n\r\nexport default Component;","import { Box, Theme, Typography, Grid } from '@mui/material';\r\nimport { makeStyles } from '@mui/styles';\r\nimport React from 'react';\r\nimport Skill from '../../components/Skill';\r\n\r\nconst useStyles = makeStyles((theme: Theme) => ({\r\n\trowHeader: {\r\n\t\tmarginTop: theme.spacing(4),\r\n\t}\r\n}));\r\n\r\nexport const Skills = () => {\r\n\tconst classes = useStyles();\r\n\treturn (\r\n\t\t<>\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\tArchitectural Styles\r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\tCoding & Frameworks\r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\tData\r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\tCI/CD\r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t\t\r\n\t\t\t\tAmazon Web Services\r\n\t\t\t\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t\t\r\n\t\t\t\tAzure\r\n\t\t\t\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t>\r\n\t);\r\n}","import { Box, Container, Grid, Theme } from '@mui/material';\r\nimport { makeStyles } from '@mui/styles';\r\nimport React from 'react';\r\n\r\nconst useStyles = makeStyles((theme: Theme) => {\r\n\treturn ({\r\n\t\troot: {\r\n\t\t\tcolor: theme.palette.secondary.main,\r\n\t\t\tbackgroundColor: theme.palette.text.primary,\r\n\t\t\tmarginTop: '-80px' // to ignore the default app bar (with height 80) on top of every page.\r\n\t\t},\r\n\t\tslanted: {\r\n\t\t\ttransform: 'skewY(-4deg)',\r\n\t\t\tposition: 'relative',\r\n\t\t\ttop:'-10px',\r\n\t\t\tzIndex: -1,\r\n\t\t\toverflow: 'hidden'\r\n\t\t},\r\n\t\tcontent: {\r\n\t\t\tposition: 'relative',\r\n\t\t\ttop: '100px',\r\n\t\t\ttransform: 'skewY(4deg)',\r\n\t\t\theight: '380px',\r\n\t\t\twidth: '100%'\r\n\t\t},\r\n\t\tcontainer: {\r\n\t\t\theight: '100%',\r\n\t\t\t//paddingTop: '20px'\r\n\t\t},\r\n\t\timage: {\r\n\t\t\t//backgroundImage: 'url(./content/assets/sander.png)',\r\n\t\t\tbackgroundRepeat: 'no-repeat',\r\n\t\t\tbackgroundSize: 'auto 340px',\r\n\t\t\tbackgroundPosition: 'left 10% bottom'\r\n\t\t},\r\n\t\tslogan: {\r\n\t\t\tfontSize: '43px',\r\n\t\t\tfontWeight: 100,\r\n\t\t\tcolor: theme.palette.secondary.main,\r\n\t\t\t[theme.breakpoints.down('md')]: {\r\n\t\t\t\tfontSize: '35px',\r\n\t\t\t},\r\n\t\t\t[theme.breakpoints.down('sm')]: {\r\n\t\t\t\tfontSize: '30px',\r\n\t\t\t\ttextAlign: 'right'\r\n\t\t\t}\r\n\t\t}\r\n\t});\r\n});\r\n\r\ninterface IProps {\r\n\timagePosition: 'left' | 'right';\r\n}\r\n\r\nconst Slogan = (props: IProps) => {\r\n\tconst classes = useStyles();\r\n\treturn (\r\n\t\t\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t{/* \r\n\t\t\t\t\t\t\t\t\t\tToday is \r\n\t\t\t\t\t\t\t\t\t\tthe IMPROVED version \r\n\t\t\t\t\t\t\t\t\t\tof yesterday\r\n\t\t\t\t\t\t\t\t\t */}\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\tFail fast, \r\n\t\t\t\t\t\t\t\t\t\tLEARN \r\n\t\t\t\t\t\t\t\t\t\tfaster\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\r\n\r\n\t\t\t\t{/* \r\n\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\tToday is \r\n\t\t\t\t\t\t\t\t\tthe IMPROVED version \r\n\t\t\t\t\t\t\t\t\tof yesterday\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t */}\r\n\t\t\t\r\n\t\t)\r\n}\r\n\r\nSlogan.defaultProps = {\r\n\timagePosition: 'right'\r\n}\r\n\r\nexport default Slogan;","import { Box, Button, Card, CardActionArea, CardActions, CardContent, CardMedia, Chip, Link, Theme, Typography } from '@mui/material';\r\nimport { makeStyles } from '@mui/styles';\r\nimport React from 'react';\r\nimport Project from \"../models/Project\";\r\n\r\nconst useStyles = makeStyles((theme: Theme) => ({\r\n\troot: {\r\n\t},\r\n\thighlight: {\r\n\t\tmarginLeft: theme.spacing(2),\r\n\t\tmarginTop: theme.spacing(2)\r\n\t},\r\n}));\r\n\r\ninterface IProps {\r\n\tproject: Project;\r\n\twidth?: number;\r\n}\r\n\r\nexport const ProjectCard = (props: IProps) => {\r\n\tconst classes = useStyles();\r\n\r\n\tconst handleImageError = (e: any) => {\r\n\t\te.target.onerror = null;\r\n\t\t// e.target.style.display = 'none'\r\n\t\te.target.src = props.project.headerImageFallback;\r\n\t}\r\n\r\n\treturn (\r\n\t\t\r\n\t\t\t\r\n\t\t\t\t{props.project.headerImage && \r\n\t\t\t\t\t\r\n\t\t\t\t}\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t{props.project.title}\r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t{props.project.summary}\r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t{props.project.highlights?.map((hl, i) =>\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t)}\r\n\t\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t\t{props.project.externalLink &&\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t}\r\n\t\t\r\n\t)\r\n}\r\n","import { Link, Box, Button, Card, CardActionArea, CardActions, CardContent, CardMedia, Typography } from '@mui/material';\r\n//import { Link } from 'react-router-dom';\r\n\r\nexport const AvailableProjectCard = () => {\r\n\tconst handleImageError = (e: any) => {\r\n\t\te.target.onerror = null;\r\n\t\t e.target.style.display = 'none'\r\n\t\te.target.src = './content/assets/projects/your-project-here.jpg';\r\n\t}\r\n\r\n\treturn (\r\n\t\t\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\tYour project here?\r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\tFeel free to contact me to explore the possibilities and discuss how I can contribute to your project's success!\r\n\t\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t{/* \r\n\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t */}\r\n\t\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t\r\n\t)\r\n}\r\n","import { useMediaQuery, useTheme } from '@mui/material';\r\nimport Masonry from '@mui/lab/Masonry';\r\nimport { inject } from 'mobx-react';\r\nimport React, { useEffect, useState } from 'react';\r\nimport { ProjectCard } from '../../components/ProjectCard';\r\nimport { AvailableProjectCard } from '../../components/AvailableProjectCard';\r\nimport RootStore from '../../stores/RootStore';\r\nimport Project from '../../models/Project';\r\n\r\ninterface IProps {\r\n\trootStore?: RootStore\r\n}\r\n\r\nexport const Projects = inject('rootStore')((props: IProps) => {\r\n\tconst theme = useTheme();\r\n\tconst one = useMediaQuery(theme.breakpoints.down('sm'));\r\n\tconst two = useMediaQuery(theme.breakpoints.between('sm', 'md'));\r\n\tconst [projects, setProjects] = useState([]);\r\n\t\r\n\tuseEffect(() => {\r\n\t\t(async () => {\r\n\t\t\tconst data = await props.rootStore?.projectStore.loadProjects();\r\n\t\t\tif (data) {\r\n\t\t\t\tsetProjects(data);\r\n\t\t\t}\r\n\t\t})();\r\n\t}, [props.rootStore?.projectStore]);\r\n\r\n\treturn (\r\n\t\t\r\n\t\t\t<>\r\n\t\t\t\t\r\n\t\t\t\t{projects.map((project) => \r\n\t\t\t\t\t\r\n\t\t\t\t)}\r\n\t\t\t>\r\n\t\t\r\n\t);\r\n});","\r\nexport type ColorRange = {\r\n percentage: number,\r\n color: {\r\n r: number,\r\n g: number,\r\n b: number\r\n }\r\n};\r\n\r\n/**\r\n * Calculates color based on percentage using a predefined color range.\r\n * @param colorRanges\r\n * const percentColors = [\r\n * { percentage: 0.0, color: { r: 0x8e, g: 0x8e, b: 0x8e } },\r\n * { percentage: 0.5, color: { r: 0xff, g: 0xa5, b: 0 } },\r\n * { percentage: 1.0, color: { r: 0x00, g: 0xff, b: 0 } } ];\r\n * @param percentage\r\n * @returns \r\n */\r\nexport function getColorForPercentage(colorRanges: ColorRange[], percentage: number) {\r\n for (var i = 1; i < colorRanges.length - 1; i++) {\r\n if (percentage < colorRanges[i].percentage) {\r\n break;\r\n }\r\n }\r\n var lower = colorRanges[i - 1];\r\n var upper = colorRanges[i];\r\n var range = upper.percentage - lower.percentage;\r\n var rangePct = (percentage - lower.percentage) / range;\r\n var pctLower = 1 - rangePct;\r\n var pctUpper = rangePct;\r\n var color = {\r\n r: Math.floor(lower.color.r * pctLower + upper.color.r * pctUpper),\r\n g: Math.floor(lower.color.g * pctLower + upper.color.g * pctUpper),\r\n b: Math.floor(lower.color.b * pctLower + upper.color.b * pctUpper)\r\n };\r\n return 'rgb(' + [color.r, color.g, color.b].join(',') + ')';\r\n // or output as hex if preferred\r\n};","import { Box, Button, Grid, Typography, Link } from '@mui/material';\r\nimport { ColorRange, getColorForPercentage } from '../../utils/colorUtils';\r\nimport { Link as RouterLink } from 'react-router-dom';\r\n\r\ninterface IProps {\r\n}\r\n\r\nexport const Availability = (props: IProps) => {\r\n\r\n //const submitProjectUrl = '/submit-project';\r\n const submitProjectUrl = '#';\r\n const colorRanges: ColorRange[] = [\r\n //{ pct: 0.0, color: { r: 0xff, g: 0x00, b: 0 } },\r\n //{ percentage: 0.0, color: { r: 0x8e, g: 0x8e, b: 0x8e } },\r\n { percentage: 0.0, color: { r: 0x1d, g: 0x1e, b: 0x22 } },\r\n //{ pct: 0.3, color: { r: 0xff, g: 0xa5, b: 0 } },\r\n //{ percentage: 1.0, color: { r: 0x00, g: 0xff, b: 0 } };\r\n { percentage: 0.6, color: { r: 0x2e, g: 0x7d, b: 32 } },\r\n { percentage: 1.0, color: { r: 0x2e, g: 0x7d, b: 32 } } \r\n ];\r\n\r\n const MonthTile = (props: {\r\n to?: string,\r\n title: string,\r\n availability?: number\r\n }) => (\r\n \r\n {/* */}\r\n \r\n {props.title}\r\n \r\n {/* */}\r\n \r\n );\r\n\r\n\treturn (\r\n\t\t<>\r\n \r\n In the bar below you can check Sander's availability. Lucky for you, there is still some room for new projects. \r\n Don't hesitate and submit your project now.\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \t\t\t\t\t\t\r\n \r\n \r\n {/* \r\n \r\n */}\r\n \r\n >\r\n\t);\r\n};\r\n","import React, { lazy, Suspense } from 'react';\r\nimport { Footer } from '../components/Footer';\r\nimport { Header } from '../components/Header';\r\nimport { Section } from '../components/Section';\r\nimport { AboutMe } from './Main/AboutMe';\r\nimport { Skills } from './Main/Skills';\r\nimport Slogan from './Main/Slogan';\r\nimport { Projects } from './Main/Projects';\r\nimport { Availability } from './Main/Availability';\r\nimport { Box } from '@mui/material';\r\n//const Projects = lazy(() => import('./Main/Projects').then(module => ({ default: module.Projects })));\r\nconst Education = lazy(() => import('./Main/Education'));\r\n\r\nexport const Home = () => {\r\n\treturn (\r\n\t\t<>\r\n\t\t\t\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t\t>)}>\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t>);\r\n}\r\n","import { Box, FormControl, FormControlLabel, FormLabel, Grid, FormGroup, Checkbox, Radio, RadioGroup, TextField, Typography } from \"@mui/material\";\r\nimport { Section } from \"../components/Section\";\r\nimport { colors } from '../Theme';\r\n\r\nexport const SubmitProject = () => {\r\n\r\n return (\r\n <>\r\n \r\n SUBMIT PROJECT\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n Technologies \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n {/* Location */}\r\n \r\n } label=\"Fully remote\" />\r\n } label=\"Fully at the office\" />\r\n } label=\"Hybrid\" />\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n\r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n \r\n Other covered expenses\r\n \r\n } label=\"Travel expenses\" />\r\n } label=\"Lunch included at the office\" />\r\n } label=\"Free parking at the office\" />\r\n \r\n \r\n \r\n \r\n \r\n >\r\n );\r\n}","import { action } from 'mobx';\r\nimport Project from \"../models/Project\";\r\n\r\nexport default class ProjectStore {\r\n\r\n\t@action async loadProjects() : Promise {\r\n\t\treturn [{\r\n\t\t\tid: 14,\r\n\t\t\ttitle: 'Blis Digital',\r\n\t\t\tsummary: `As the Lead Developer for accreditation tooling, I take pride in spearheading the technical vision and execution of this essential platform. My role involves overseeing the development team, ensuring impeccable code quality, and aligning the tooling with the accreditation standards. By driving innovation and continuous improvement, I empower our team to deliver a robust and user-friendly solution that streamlines the accreditation process, enabling our clients to achieve their business objectives with greater efficiency and confidence. Together, we embrace the challenge of creating cutting-edge tooling that upholds the customer's commitment to excellence and elevates our clients' experiences to new heights.`,\r\n\t\t\thighlights: ['C#', 'ASP.Net', 'Vue', 'Azure'],\r\n\t\t\theaderImage: './content/assets/projects/14/header1.webp',\r\n\t\t\theaderImageFallback: './content/assets/projects/14/header1.jpg',\r\n\t\t\texternalLinkLabel: 'visit Blis Digital',\r\n\t\t\texternalLink: 'https://blisdigital.nl'\r\n\t\t}, {\r\n\t\t\tid: 12,\r\n\t\t\ttitle: 'RailApp',\r\n\t\t\tsummary: 'Fulfilling the role as ad interim CTO.' +\r\n\t\t\t\t'RailApp is an online planning application and a hire and secondment platform for rail services and rail professionals at the same time. ' +\r\n\t\t\t\t'When assigning a job, qualifications/certifications will be checked ensuring that only 100% qualified professionals can be assigned.',\r\n\t\t\thighlights: ['CTO a.i.'],\r\n\t\t\theaderImage: './content/assets/projects/12/header.webp',\r\n\t\t\theaderImageFallback: './content/assets/projects/12/header.jpg',\r\n\t\t\texternalLinkLabel: 'visit RailApp',\r\n\t\t\texternalLink: 'https://railapp.nl'\r\n\t\t}, {\r\n\t\t\tid: 13,\r\n\t\t\ttitle: 'PrimeVision (PostNL)',\r\n\t\t\tsummary: 'Migration of the existing Sorting Decision System into a AWS Serverless solution. ' +\r\n\t\t\t\t'All PostNL Parcel sorting centers will be migrated to this system eventually.',\r\n\t\t\thighlights: ['AWS Serverless', 'GitLab', 'CI/CD', 'TypeScript'],\r\n\t\t\theaderImage: './content/assets/projects/13/header.webp',\r\n\t\t\theaderImageFallback: './content/assets/projects/13/header.jpg',\r\n\t\t\texternalLinkLabel: 'visit PrimeVision',\r\n\t\t\texternalLink: 'https://www.primevision.com/sorting-decision-systems/'\r\n\t\t}, {\r\n\t\t\tid: 1,\r\n\t\t\ttitle: 'Tijdprikker.nl',\r\n\t\t\tsummary: 'Create an event and divide the event in timeblocks. Invitees can select a timeblock of their choice. Per timeblock a limited number of ' +\r\n\t\t\t\t'seats is available.',\r\n\t\t\thighlights: ['Co-founder', 'React', 'AWS CloudFront', 'MongoDB Atlas', 'node'],\r\n\t\t\theaderImage: './content/assets/projects/1/header.webp',\r\n\t\t\theaderImageFallback: './content/assets/projects/1/header.jpg',\r\n\t\t\texternalLinkLabel: 'Visit Tijdprikker >',\r\n\t\t\texternalLink: 'https://tijdprikker.nl',\r\n\t\t}, {\r\n\t\t\tid: 6,\r\n\t\t\ttitle: 'Cloud Migration',\r\n\t\t\tsummary: 'Migrate from an on-premise environment to AWS. In multiple phases the infrastructure, databases and software was migrated with minimal downtime.',\r\n\t\t\thighlights: ['AWS CloudFormation', 'AWS VPC', 'AWS RDS'],\r\n\t\t\theaderImage: './content/assets/projects/6/header.webp',\r\n\t\t\theaderImageFallback: './content/assets/projects/6/header.jpg',\r\n\t\t\texternalLinkLabel: undefined,\r\n\t\t\texternalLink: undefined,\r\n\t\t}, {\r\n\t\t\tid: 2,\r\n\t\t\ttitle: 'Click-2-call',\r\n\t\t\tsummary: 'Click-to-call based on WebRTC technology. Via the browser a voice connection is established with a call center agent like ' +\r\n\t\t\t\t'any traditional telephone call.',\r\n\t\t\thighlights: ['WebRTC', 'React', 'C#', 'AWS CloudFront'],\r\n\t\t\theaderImage: './content/assets/projects/2/header.webp',\r\n\t\t\theaderImageFallback: './content/assets/projects/2/header.jpg',\r\n\t\t\texternalLinkLabel: 'visit talk',\r\n\t\t\texternalLink: 'https://www.soundofdata.com/talk/',\r\n\t\t}, {\r\n\t\t\tid: 3,\r\n\t\t\ttitle: 'Junior Eurovision Song Contest Voting System',\r\n\t\t\tsummary: 'Creating a voting system for the European Broadcast Union in which 16 countries participate simultaniously in a voting window ' +\r\n\t\t\t\t'of 15 minutes. The system calculates the results near realtime according the regulations.',\r\n\t\t\thighlights: ['C#', 'NServiceBus', 'Azure', 'Redis'],\r\n\t\t\theaderImage: './content/assets/projects/3/header.webp',\r\n\t\t\theaderImageFallback: './content/assets/projects/3/header.jpg',\r\n\t\t\texternalLinkLabel: undefined,\r\n\t\t\texternalLink: undefined,\r\n\t\t}, {\r\n\t\t\tid: 11,\r\n\t\t\ttitle: 'Data Warehousing',\r\n\t\t\tsummary: 'Created an ETL to move and normalize data from different systems into a central Data Warehousing data store.',\r\n\t\t\thighlights: ['C#', 'AWS Redshift', 'AWS Kinesis'],\r\n\t\t\theaderImage: './content/assets/projects/11/header.webp',\r\n\t\t\theaderImageFallback: './content/assets/projects/11/header.jpg',\r\n\t\t\texternalLinkLabel: undefined,\r\n\t\t\texternalLink: undefined,\r\n\t\t}, {\r\n\t\t\tid: 4,\r\n\t\t\ttitle: 'Integrated QuickSight dashboards.',\r\n\t\t\tsummary: 'Amazon QuickSight, does it ring a bell? It might if your job involves business intelligence and delivering insight in your organization. ' +\r\n\t\t\t\t'QuickSight lets you easily create and publish interactive dashboards. We have incorporate it in Gearbox to provide embedded call data ' +\r\n\t\t\t\t'analytics to out customers.',\r\n\t\t\thighlights: ['AWS QuickSight', 'C#', 'JavaScript', 'AWS Redshift'],\r\n\t\t\theaderImage: './content/assets/projects/4/header.webp',\r\n\t\t\theaderImageFallback: './content/assets/projects/4/header.jpg',\r\n\t\t\texternalLinkLabel: undefined,\r\n\t\t\texternalLink: undefined,\r\n\t\t}, {\r\n\t\t\tid: 5,\r\n\t\t\ttitle: 'Gearbox',\r\n\t\t\tsummary: 'Integration platform for multiple voice interaction systems. Gearbox deliveres standardized voice solutions composed of multiple other ' +\r\n\t\t\t\t'voice systems.',\r\n\t\t\thighlights: ['Distributed Systems', 'C#', 'NServiceBus', 'ASP.Net Core', 'MongoDB', 'SOA'],\r\n\t\t\theaderImage: './content/assets/projects/5/header.webp',\r\n\t\t\theaderImageFallback: './content/assets/projects/5/header.jpg',\r\n\t\t\texternalLinkLabel: 'visit sound of data',\r\n\t\t\texternalLink: 'https://soundofdata.com',\r\n\t\t}, {\r\n\t\t\tid: 7,\r\n\t\t\ttitle: 'IAM with Auth0',\r\n\t\t\tsummary: 'Identity and access management implemented in an portal and APIs using Auth0.',\r\n\t\t\thighlights: ['Auth0', 'JWT', 'OpenID Connect', 'OAuth2'],\r\n\t\t\theaderImage: './content/assets/projects/7/header.webp',\r\n\t\t\theaderImageFallback: './content/assets/projects/7/header.jpg',\r\n\t\t\texternalLinkLabel: undefined,\r\n\t\t\texternalLink: undefined,\r\n\t\t}, {\r\n\t\t\tid: 8,\r\n\t\t\ttitle: 'Plug & Ride',\r\n\t\t\tsummary: 'Making private charging stations, used by electric vehicles, available to the public. Charging station owners can register their ' +\r\n\t\t\t\t'stations with Plug and Ride and EV-drivers can make a reservation.',\r\n\t\t\thighlights: ['Azure', 'NServiceBus', 'Azure Table Storage'],\r\n\t\t\theaderImage: './content/assets/projects/8/header.jpg',\r\n\t\t\theaderImageFallback: './content/assets/projects/8/header.webp',\r\n\t\t\texternalLinkLabel: undefined,\r\n\t\t\texternalLink: undefined,\r\n\t\t}, {\r\n\t\t\tid: 10,\r\n\t\t\ttitle: 'Lavart.nl Wordpress Webshop',\r\n\t\t\tsummary: 'Creation of a wordpress webshop for unique hand made jewelry.',\r\n\t\t\thighlights: ['Wordpress', 'Ubuntu', 'Azure SQL Database'],\r\n\t\t\theaderImage: './content/assets/projects/10/header.webp',\r\n\t\t\theaderImageFallback: './content/assets/projects/10/header.jpg',\r\n\t\t\texternalLinkLabel: 'Visit Lavart >',\r\n\t\t\texternalLink: 'https://lavart.nl',\r\n\t\t}] as Project[];\r\n\t}\r\n}","import { ThemeProvider } from '@mui/material/styles';\r\nimport { Provider } from 'mobx-react';\r\nimport React from 'react';\r\nimport { BrowserRouter, Route, Routes } from 'react-router-dom';\r\nimport { Main } from './scenes/Main';\r\nimport { Home } from './scenes/Home';\r\nimport { SubmitProject } from './scenes/SubmitProject';\r\nimport RootStore from './stores/RootStore';\r\nimport theme from './Theme';\r\n\r\nconst rootStore = new RootStore();\r\n\r\nfunction App() {\r\n\treturn (\r\n\t\t\r\n\t\t\t\r\n\t\t\t\t\r\n\t\t\t\t\t\r\n\t\t\t\t\t\t}>\r\n\t\t\t\t\t\t\t} />\r\n\t\t\t\t\t\t\t} />\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t\t\t
Oops! This page does not exist.
\r\n\t\t\t\t\t\t\t\t\r\n\t\t\t\t\t\t\t}\r\n\t\t\t\t\t\t/>\r\n\t\t\t\t\t\t\t\t\t\r\n\t\t\t\t\r\n\t\t\t\r\n\t\t\r\n\t);\r\n}\r\n\r\nexport default App;\r\n","import ProjectStore from \"./ProjectStore\"\r\n\r\nexport default class RootStore {\r\n projectStore: ProjectStore = new ProjectStore();\r\n}","// This optional code is used to register a service worker.\r\n// register() is not called by default.\r\n\r\n// This lets the app load faster on subsequent visits in production, and gives\r\n// it offline capabilities. However, it also means that developers (and users)\r\n// will only see deployed updates on subsequent visits to a page, after all the\r\n// existing tabs open on the page have been closed, since previously cached\r\n// resources are updated in the background.\r\n\r\n// To learn more about the benefits of this model and instructions on how to\r\n// opt-in, read https://bit.ly/CRA-PWA\r\n\r\nconst isLocalhost = Boolean(\r\n window.location.hostname === 'localhost' ||\r\n // [::1] is the IPv6 localhost address.\r\n window.location.hostname === '[::1]' ||\r\n // 127.0.0.0/8 are considered localhost for IPv4.\r\n window.location.hostname.match(\r\n /^127(?:\\.(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)){3}$/\r\n )\r\n);\r\n\r\ntype Config = {\r\n onSuccess?: (registration: ServiceWorkerRegistration) => void;\r\n onUpdate?: (registration: ServiceWorkerRegistration) => void;\r\n};\r\n\r\nexport function register(config?: Config) {\r\n if (process.env.NODE_ENV === 'production' && 'serviceWorker' in navigator) {\r\n // The URL constructor is available in all browsers that support SW.\r\n const publicUrl = new URL(\r\n process.env.PUBLIC_URL,\r\n window.location.href\r\n );\r\n if (publicUrl.origin !== window.location.origin) {\r\n // Our service worker won't work if PUBLIC_URL is on a different origin\r\n // from what our page is served on. This might happen if a CDN is used to\r\n // serve assets; see https://github.com/facebook/create-react-app/issues/2374\r\n return;\r\n }\r\n\r\n window.addEventListener('load', () => {\r\n const swUrl = `${process.env.PUBLIC_URL}/service-worker.js`;\r\n\r\n if (isLocalhost) {\r\n // This is running on localhost. Let's check if a service worker still exists or not.\r\n checkValidServiceWorker(swUrl, config);\r\n\r\n // Add some additional logging to localhost, pointing developers to the\r\n // service worker/PWA documentation.\r\n navigator.serviceWorker.ready.then(() => {\r\n console.log(\r\n 'This web app is being served cache-first by a service ' +\r\n 'worker. To learn more, visit https://bit.ly/CRA-PWA'\r\n );\r\n });\r\n } else {\r\n // Is not localhost. Just register service worker\r\n registerValidSW(swUrl, config);\r\n }\r\n });\r\n }\r\n}\r\n\r\nfunction registerValidSW(swUrl: string, config?: Config) {\r\n navigator.serviceWorker\r\n .register(swUrl)\r\n .then(registration => {\r\n registration.onupdatefound = () => {\r\n const installingWorker = registration.installing;\r\n if (installingWorker == null) {\r\n return;\r\n }\r\n installingWorker.onstatechange = () => {\r\n if (installingWorker.state === 'installed') {\r\n if (navigator.serviceWorker.controller) {\r\n // At this point, the updated precached content has been fetched,\r\n // but the previous service worker will still serve the older\r\n // content until all client tabs are closed.\r\n console.log(\r\n 'New content is available and will be used when all ' +\r\n 'tabs for this page are closed. See https://bit.ly/CRA-PWA.'\r\n );\r\n\r\n // Execute callback\r\n if (config && config.onUpdate) {\r\n config.onUpdate(registration);\r\n }\r\n } else {\r\n // At this point, everything has been precached.\r\n // It's the perfect time to display a\r\n // \"Content is cached for offline use.\" message.\r\n console.log('Content is cached for offline use.');\r\n\r\n // Execute callback\r\n if (config && config.onSuccess) {\r\n config.onSuccess(registration);\r\n }\r\n }\r\n }\r\n };\r\n };\r\n })\r\n .catch(error => {\r\n console.error('Error during service worker registration:', error);\r\n });\r\n}\r\n\r\nfunction checkValidServiceWorker(swUrl: string, config?: Config) {\r\n // Check if the service worker can be found. If it can't reload the page.\r\n fetch(swUrl, {\r\n headers: { 'Service-Worker': 'script' }\r\n })\r\n .then(response => {\r\n // Ensure service worker exists, and that we really are getting a JS file.\r\n const contentType = response.headers.get('content-type');\r\n if (\r\n response.status === 404 ||\r\n (contentType != null && contentType.indexOf('javascript') === -1)\r\n ) {\r\n // No service worker found. Probably a different app. Reload the page.\r\n navigator.serviceWorker.ready.then(registration => {\r\n registration.unregister().then(() => {\r\n window.location.reload();\r\n });\r\n });\r\n } else {\r\n // Service worker found. Proceed as normal.\r\n registerValidSW(swUrl, config);\r\n }\r\n })\r\n .catch(() => {\r\n console.log(\r\n 'No internet connection found. App is running in offline mode.'\r\n );\r\n });\r\n}\r\n\r\nexport function unregister() {\r\n if ('serviceWorker' in navigator) {\r\n navigator.serviceWorker.ready\r\n .then(registration => {\r\n registration.unregister();\r\n })\r\n .catch(error => {\r\n console.error(error.message);\r\n });\r\n }\r\n}\r\n","import React from 'react';\r\nimport ReactDOM from 'react-dom';\r\nimport './index.css';\r\nimport App from './App';\r\nimport * as serviceWorker from './serviceWorker';\r\n\r\nReactDOM.render(\r\n \r\n \r\n ,\r\n document.getElementById('root')\r\n);\r\n\r\n// If you want your app to work offline and load faster, you can change\r\n// unregister() to register() below. Note this comes with some pitfalls.\r\n// Learn more about service workers: https://bit.ly/CRA-PWA\r\nserviceWorker.unregister();\r\n"],"sourceRoot":""}