PageSourceSearch

https://saadtazi.com/stuff

html saadtazi.com collected 2026-10-04 14:33:23 UTC 18,421 bytes, 8 lines download raw bytes

1<!DOCTYPE html><html lang="en" class="__className_d891f1"><head><meta charSet="utf-8" data-next-head=""/><meta name="viewport" content="initial-scale=1, width=device-width" data-next-head=""/>
vendor: 66 bytes, line 1
1<script async="" src="https://www.googletagmanager.com/gtag/js?id=
1G-B0BSEND9TQ
vendor: 11 bytes, line 1
1"></script>
1<title data-next-head="">stuff = Saad Tazi</title><meta name="theme-color" content="#37474f"/><link rel="shortcut icon" href="/favicon.ico"/><meta name="emotion-insertion-point" content=""/><style data-emotion="mui-style-global 0"></style><style data-emotion="mui-style-global eo9jxx">html{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;box-sizing:border-box;-webkit-text-size-adjust:100%;}*,*::before,*::after{box-sizing:inherit;}strong,b{font-weight:700;}body{margin:0;color:rgba(0, 0, 0, 0.87);font-family:'Source Code Pro',monospace;font-weight:400;font-size:1rem;line-height:1.5;background-color:#fff;}@media print{body{background-color:#fff;}}body::backdrop{background-color:#fff;}</style><style data-emotion="mui-style 1z0un39 1tupbti awgou1 130f8nx n3b0t7 173y2gw 1vsz077 q7mezt 1obq2as 1hisb6e 9wvnva 177xvbk lscdn3 q8lpi9 15q2cw4 sk94ww auoq4t 15ofuwm 1l6e05h">.mui-style-1z0un39{font-size:2em;}.mui-style-1z0un39 .top-nav{background-color:#090909;}.mui-style-1z0un39 .top-nav .title{-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;}.mui-style-1z0un39 .map-container{position:absolute;top:0;right:0;left:0;bottom:0;z-index:-1;}.mui-style-1z0un39 .no-map{position:absolute;top:0;right:0;left:0;bottom:0;z-index:-1;}.mui-style-1z0un39 .map{min-width:100%;}.mui-style-1z0un39 .map .leaflet-control-attribution a{font-size:1em;color:white;}.mui-style-1z0un39 .MuiToolbar-root{color:white;}.mui-style-1z0un39 .hero-text{color:#090909;}@media (max-width:-0.05px){.mui-style-1z0un39 .hero-text h2{font-size:2.75em;}}.mui-style-1z0un39 .hero-text a{color:#090909;}.mui-style-1z0un39 .hero-text .MuiTypography-root{color:#73828b;text-shadow:1px 1px 2px #73828b;margin-bottom:40px;padding-left:20px;}.mui-style-1z0un39 .links a{padding:20px;}.mui-style-1z0un39 a{color:white;-webkit-text-decoration:none;text-decoration:none;}@media (max-width:899.95px){.mui-style-1z0un39{font-size:1.2em;}}.mui-style-1tupbti{background-color:#fff;color:rgba(0, 0, 0, 0.87);-webkit-transition:box-shadow 300ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:box-shadow 300ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;box-shadow:var(--Paper-shadow);background-image:var(--Paper-overlay);display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-flex-direction:column;-ms-flex-direction:column;flex-direction:column;width:100%;box-sizing:border-box;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;position:static;--AppBar-background:transparent;--AppBar-color:inherit;background-color:var(--AppBar-background);color:var(--AppBar-color);}.mui-style-awgou1{position:relative;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;padding-left:16px;padding-right:16px;min-height:56px;}@media (min-width:600px){.mui-style-awgou1{padding-left:24px;padding-right:24px;}}@media (min-width:0px){@media (orientation: landscape){.mui-style-awgou1{min-height:48px;}}}@media (min-width:600px){.mui-style-awgou1{min-height:64px;}}@media (min-width:0px){.mui-style-130f8nx{display:none;}}@media (min-width:600px){.mui-style-130f8nx{display:block;}}.mui-style-n3b0t7{display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;width:100%;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;}.mui-style-n3b0t7 .title{-webkit-box-flex:1;-webkit-flex-grow:1;-ms-flex-positive:1;flex-grow:1;}@media (max-width:599.95px){.mui-style-n3b0t7 .title{font-size:0.7em;padding-left:1em;}}.mui-style-n3b0t7 .language-selector{padding-left:20px;}@media (min-width:0px){.mui-style-173y2gw{display:display;}}@media (min-width:600px){.mui-style-173y2gw{display:none;}}.mui-style-1vsz077{display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;position:relative;box-sizing:border-box;-webkit-tap-highlight-color:transparent;background-color:transparent;outline:0;border:0;margin:0;border-radius:0;padding:0;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;vertical-align:middle;-moz-appearance:none;-webkit-appearance:none;-webkit-text-decoration:none;text-decoration:none;color:inherit;text-align:center;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;font-size:1.5rem;padding:8px;border-radius:50%;color:rgba(0, 0, 0, 0.54);-webkit-transition:background-color 150ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:background-color 150ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;--IconButton-hoverBg:rgba(0, 0, 0, 0.04);margin-left:-12px;color:inherit;}.mui-style-1vsz077::-moz-focus-inner{border-style:none;}.mui-style-1vsz077.Mui-disabled{pointer-events:none;cursor:default;}@media print{.mui-style-1vsz077{-webkit-print-color-adjust:exact;color-adjust:exact;}}.mui-style-1vsz077:hover{background-color:var(--IconButton-hoverBg);}@media (hover: none){.mui-style-1vsz077:hover{background-color:transparent;}}.mui-style-1vsz077.Mui-disabled{background-color:transparent;color:rgba(0, 0, 0, 0.26);}.mui-style-q7mezt{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;width:1em;height:1em;display:inline-block;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;-webkit-transition:fill 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:fill 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;fill:currentColor;font-size:1.5rem;}.mui-style-1obq2as{margin:0;font-family:'Source Code Pro',monospace;font-weight:300;font-size:3.75rem;line-height:1.2;}.mui-style-1hisb6e{margin:0;font-family:'Source Code Pro',monospace;font-weight:400;font-size:1rem;line-height:1.5;}.mui-style-9wvnva{width:100%;margin-left:auto;box-sizing:border-box;margin-right:auto;padding-left:16px;padding-right:16px;}@media (min-width:600px){.mui-style-9wvnva{padding-left:24px;padding-right:24px;}}@media (min-width:1200px){.mui-style-9wvnva{max-width:1200px;}}.mui-style-177xvbk{--Grid-columns:12;--Grid-columnSpacing:24px;--Grid-rowSpacing:24px;-webkit-flex-direction:row;-ms-flex-direction:row;flex-direction:row;min-width:0;box-sizing:border-box;display:-webkit-box;display:-webkit-flex;display:-ms-flexbox;display:flex;-webkit-box-flex-wrap:wrap;-webkit-flex-wrap:wrap;-ms-flex-wrap:wrap;flex-wrap:wrap;gap:var(--Grid-rowSpacing) var(--Grid-columnSpacing);}.mui-style-177xvbk >*{--Grid-parent-columns:12;}.mui-style-177xvbk >*{--Grid-parent-columnSpacing:24px;}.mui-style-177xvbk >*{--Grid-parent-rowSpacing:24px;}.mui-style-lscdn3{-webkit-box-flex:0;-webkit-flex-grow:0;-ms-flex-positive:0;flex-grow:0;-webkit-flex-basis:auto;-ms-flex-preferred-size:auto;flex-basis:auto;width:calc(100% * 12 / var(--Grid-parent-columns) - (var(--Grid-parent-columns) - 12) * (var(--Grid-parent-columnSpacing) / var(--Grid-parent-columns)));min-width:0;box-sizing:border-box;}@media (min-width:600px){.mui-style-lscdn3{-webkit-box-flex:0;-webkit-flex-grow:0;-ms-flex-positive:0;flex-grow:0;-webkit-flex-basis:auto;-ms-flex-preferred-size:auto;flex-basis:auto;width:calc(100% * 6 / var(--Grid-parent-columns) - (var(--Grid-parent-columns) - 6) * (var(--Grid-parent-columnSpacing) / var(--Grid-parent-columns)));}}.mui-style-q8lpi9{background-color:#fff;color:rgba(0, 0, 0, 0.87);
1-webkit-transition:box-shadow 300ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:box-shadow 300ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;border-radius:4px;box-shadow:var(--Paper-shadow);background-image:var(--Paper-overlay);overflow:hidden;}.mui-style-15q2cw4{padding:16px;}.mui-style-15q2cw4:last-child{padding-bottom:24px;}.mui-style-sk94ww{z-index:1000;position:fixed;bottom:10px;right:10px;border-radius:4px;background-color:#fff;box-shadow:0px 3px 1px -2px rgba(0, 0, 0, 0.2),0px 2px 2px 0px rgba(0, 0, 0, 0.14),0px 1px 5px 0px rgba(0, 0, 0, 0.12);border:1px solid #37474f;display:inline-grid;grid-column-gap:10px;-webkit-align-content:center;-ms-flex-line-pack:center;align-content:center;}.mui-style-sk94ww button.MuiIconButton-root{border-radius:0%;}.mui-style-sk94ww button.MuiIconButton-root a{font-size:40px;}.mui-style-auoq4t{display:-webkit-inline-box;display:-webkit-inline-flex;display:-ms-inline-flexbox;display:inline-flex;-webkit-align-items:center;-webkit-box-align:center;-ms-flex-align:center;align-items:center;-webkit-box-pack:center;-ms-flex-pack:center;-webkit-justify-content:center;justify-content:center;position:relative;box-sizing:border-box;-webkit-tap-highlight-color:transparent;background-color:transparent;outline:0;border:0;margin:0;border-radius:0;padding:0;cursor:pointer;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;vertical-align:middle;-moz-appearance:none;-webkit-appearance:none;-webkit-text-decoration:none;text-decoration:none;color:inherit;text-align:center;-webkit-flex:0 0 auto;-ms-flex:0 0 auto;flex:0 0 auto;font-size:1.5rem;padding:8px;border-radius:50%;color:rgba(0, 0, 0, 0.54);-webkit-transition:background-color 150ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:background-color 150ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;--IconButton-hoverBg:rgba(0, 0, 0, 0.04);}.mui-style-auoq4t::-moz-focus-inner{border-style:none;}.mui-style-auoq4t.Mui-disabled{pointer-events:none;cursor:default;}@media print{.mui-style-auoq4t{-webkit-print-color-adjust:exact;color-adjust:exact;}}.mui-style-auoq4t:hover{background-color:var(--IconButton-hoverBg);}@media (hover: none){.mui-style-auoq4t:hover{background-color:transparent;}}.mui-style-auoq4t.Mui-disabled{background-color:transparent;color:rgba(0, 0, 0, 0.26);}.mui-style-15ofuwm{margin:0;font:inherit;line-height:inherit;letter-spacing:inherit;color:#37474f;-webkit-text-decoration:underline;text-decoration:underline;text-decoration-color:var(--Link-underlineColor);--Link-underlineColor:rgba(55, 71, 79, 0.4);}.mui-style-15ofuwm:hover{text-decoration-color:inherit;}.mui-style-1l6e05h{-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none;width:1em;height:1em;display:inline-block;-webkit-flex-shrink:0;-ms-flex-negative:0;flex-shrink:0;-webkit-transition:fill 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;transition:fill 200ms cubic-bezier(0.4, 0, 0.2, 1) 0ms;fill:currentColor;font-size:inherit;}</style>
1<script>
2            
vendor: 163 bytes, lines 2-5
2window.dataLayer = window.dataLayer || [];
3            function gtag(){dataLayer.push(arguments);}
4            gtag('js', new Date());
5            gtag('config', '
5G-B0BSEND9TQ
vendor: 82 bytes, lines 5-8
5', {
6              page_path: window.location.pathname,
7            });
8          
8</script>
8<noscript data-n-css=""></noscript>
8<script defer="" noModule="" src="/_next/static/chunks/polyfills-42372ed130431b0a.js"></script>
8<script src="/_next/static/chunks/webpack-c5fe5fdb480dcc05.js" defer=""></script>
8<script src="/_next/static/chunks/framework-347879b5f592f130.js" defer=""></script>
8<script src="/_next/static/chunks/main-6c80932d252349fb.js" defer=""></script>
8<script src="/_next/static/chunks/pages/_app-7bccccc47a8951d8.js" defer=""></script>
8<script src="/_next/static/chunks/272-91223a2ae5159ce7.js" defer=""></script>
8<script src="/_next/static/chunks/826-10d61e7b1479f3d4.js" defer=""></script>
8<script src="/_next/static/chunks/503-65e556be25e6e808.js" defer=""></script>
8<script src="/_next/static/chunks/pages/stuff-580819b22966329b.js" defer=""></script>
8<script src="/_next/static/4WJs1wztThKFUxgws8rf9/_buildManifest.js" defer=""></script>
8<script src="/_next/static/4WJs1wztThKFUxgws8rf9/_ssgManifest.js" defer=""></script>
8</head><body><div id="__next"><div class="mui-style-1z0un39"><header class="MuiPaper-root MuiPaper-elevation MuiPaper-elevation4 MuiAppBar-root MuiAppBar-colorTransparent MuiAppBar-positionStatic top-nav mui-style-1tupbti" style="--Paper-shadow:0px 2px 4px -1px rgba(0,0,0,0.2),0px 4px 5px 0px rgba(0,0,0,0.14),0px 1px 10px 0px rgba(0,0,0,0.12)"><div class="MuiToolbar-root MuiToolbar-gutters MuiToolbar-regular mui-style-awgou1"><div class="MuiToolbar-root MuiToolbar-gutters MuiToolbar-regular mui-style-awgou1"><div class="MuiBox-root mui-style-130f8nx"><div class="mui-style-n3b0t7"><div class="title links"><a href="/">home</a></div>-<div class="links"><a href="/tuner">Tuner</a></div>-<div class="links"><a href="/stuff">stuff</a></div>-<div class="links"><a href="/minesweeper">mine sweeper</a></div>-<div class="language-selector"><a href="/fr/stuff">fr</a></div></div></div><div class="MuiBox-root mui-style-173y2gw"><button class="MuiButtonBase-root MuiIconButton-root MuiIconButton-colorInherit MuiIconButton-edgeStart MuiIconButton-sizeMedium mui-style-1vsz077" tabindex="0" type="button" aria-controls="simple-menu" aria-label="menu"><svg class="MuiSvgIcon-root MuiSvgIcon-fontSizeMedium mui-style-q7mezt" focusable="false" aria-hidden="true" viewBox="0 0 24 24" data-testid="MenuIcon"><path d="M3 18h18v-2H3zm0-5h18v-2H3zm0-7v2h18V6z"></path></svg></button></div></div></div></header><div class="map-container" style="height:100%"><div class="map"></div></div><div class="hero-text"><h2 class="MuiTypography-root MuiTypography-h2 mui-style-1obq2as">Hello, world!</h2><h4 class="MuiTypography-root MuiTypography-body1 mui-style-1hisb6e">I am a full stack developer from Montreal. Check out some of my personal projects below.</h4></div></div><div class="MuiContainer-root MuiContainer-maxWidthLg mui-style-9wvnva"><div class="mui-style-0"><div class="MuiGrid2-root MuiGrid2-container MuiGrid2-direction-xs-row MuiGrid2-spacing-xs-3 mui-style-177xvbk"><div class="MuiGrid2-root MuiGrid2-direction-xs-row MuiGrid2-grid-xs-12 MuiGrid2-grid-sm-6 mui-style-lscdn3"><div class="MuiPaper-root MuiPaper-elevation MuiPaper-rounded MuiPaper-elevation1 MuiCard-root mui-style-q8lpi9" style="--Paper-shadow:0px 2px 1px -1px rgba(0,0,0,0.2),0px 1px 1px 0px rgba(0,0,0,0.14),0px 1px 3px 0px rgba(0,0,0,0.12)"><div class="MuiCardContent-root mui-style-15q2cw4"></div></div></div><div class="MuiGrid2-root MuiGrid2-direction-xs-row MuiGrid2-grid-xs-12 MuiGrid2-grid-sm-6 mui-style-lscdn3"><div class="MuiPaper-root MuiPaper-elevation MuiPaper-rounded MuiPaper-elevation1 MuiCard-root mui-style-q8lpi9" style="--Paper-shadow:0px 2px 1px -1px rgba(0,0,0,0.2),0px 1px 1px 0px rgba(0,0,0,0.14),0px 1px 3px 0px rgba(0,0,0,0.12)"><div class="MuiCardContent-root mui-style-15q2cw4"></div></div></div><div class="MuiGrid2-root MuiGrid2-direction-xs-row MuiGrid2-grid-xs-12 MuiGrid2-grid-sm-6 mui-style-lscdn3"><div class="MuiPaper-root MuiPaper-elevation MuiPaper-rounded MuiPaper-elevation1 MuiCard-root mui-style-q8lpi9" style="--Paper-shadow:0px 2px 1px -1px rgba(0,0,0,0.2),0px 1px 1px 0px rgba(0,0,0,0.14),0px 1px 3px 0px rgba(0,0,0,0.12)"><div class="MuiCardContent-root mui-style-15q2cw4"></div></div></div><div class="MuiGrid2-root MuiGrid2-direction-xs-row MuiGrid2-grid-xs-12 MuiGrid2-grid-sm-6 mui-style-lscdn3"><div class="MuiPaper-root MuiPaper-elevation MuiPaper-rounded MuiPaper-elevation1 MuiCard-root mui-style-q8lpi9" style="--Paper-shadow:0px 2px 1px -1px rgba(0,0,0,0.2),0px 1px 1px 0px rgba(0,0,0,0.14),0px 1px 3px 0px rgba(0,0,0,0.12)"><div class="MuiCardContent-root mui-style-15q2cw4"></div></div></div><div class="MuiGrid2-root MuiGrid2-direction-xs-row MuiGrid2-grid-xs-12 MuiGrid2-grid-sm-6 mui-style-lscdn3"><div class="MuiPaper-root MuiPaper-elevation MuiPaper-rounded MuiPaper-elevation1 MuiCard-root mui-style-q8lpi9" style="--Paper-shadow:0px 2px 1px -1px rgba(0,0,0,0.2),0px 1px 1px 0px rgba(0,0,0,0.14),0px 1px 3px 0px rgba(0,0,0,0.12)"><div class="MuiCardContent-root mui-style-15q2cw4"></div></div></div><div class="MuiGrid2-root MuiGrid2-direction-xs-row MuiGrid2-grid-xs-12 MuiGrid2-grid-sm-6 mui-style-lscdn3"><div class="MuiPaper-root MuiPaper-elevation MuiPaper-rounded MuiPaper-elevation1 MuiCard-root mui-style-q8lpi9" style="--Paper-shadow:0px 2px 1px -1px rgba(0,0,0,0.2),0px 1px 1px 0px rgba(0,0,0,0.14),0px 1px 3px 0px rgba(0,0,0,0.12)"><div class="MuiCardContent-root mui-style-15q2cw4"></div></div></div></div></div></div><div class="mui-style-sk94ww"><button class="MuiButtonBase-root MuiIconButton-root MuiIconButton-sizeMedium mui-style-auoq4t" tabindex="0" type="button"><a class="MuiTypography-root MuiTypography-inherit MuiLink-root MuiLink-underlineAlways mui-style-15ofuwm" href="https://www.linkedin.com/in/saadtazi"><svg class="MuiSvgIcon-root MuiSvgIcon-fontSizeInherit mui-style-1l6e05h" focusable="false" aria-hidden="true" viewBox="0 0 24 24" data-testid="LinkedInIcon"><path d="M19 3a2 2 0 0 1 2 2v14a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V5a2 2 0 0 1 2-2h14m-.5 15.5v-5.3a3.26 3.26 0 0 0-3.26-3.26c-.85 0-1.84.52-2.32 1.3v-1.11h-2.79v8.37h2.79v-4.93c0-.77.62-1.4 1.39-1.4a1.4 1.4 0 0 1 1.4 1.4v4.93h2.79M6.88 8.56a1.68 1.68 0 0 0 1.68-1.68c0-.93-.75-1.69-1.68-1.69a1.69 1.69 0 0 0-1.69 1.69c0 .93.76 1.68 1.69 1.68m1.39 9.94v-8.37H5.5v8.37h2.77z"></path></svg></a></button><button class="MuiButtonBase-root MuiIconButton-root MuiIconButton-sizeMedium mui-style-auoq4t" tabindex="0" type="button"><a class="MuiTypography-root MuiTypography-inherit MuiLink-root MuiLink-underlineAlways mui-style-15ofuwm" href="https://github.com/saadtazi"><svg class="MuiSvgIcon-root MuiSvgIcon-fontSizeInherit mui-style-1l6e05h" focusable="false" aria-hidden="true" viewBox="0 0 24 24" data-testid="GitHubIcon"><path d="M12 1.27a11 11 0 00-3.48 21.46c.55.09.73-.28.73-.55v-1.84c-3.03.64-3.67-1.46-3.67-1.46-.55-1.29-1.28-1.65-1.28-1.65-.92-.65.1-.65.1-.65 1.1 0 1.73 1.1 1.73 1.1.92 1.65 2.57 1.2 3.21.92a2 2 0 01.64-1.47c-2.47-.27-5.04-1.19-5.04-5.5 0-1.1.46-2.1 1.2-2.84a3.76 3.76 0 010-2.93s.91-.28 3.11 1.1c1.8-.49 3.7-.49 5.5 0 2.1-1.38 3.02-1.1 3.02-1.1a3.76 3.76 0 010 2.93c.83.74 1.2 1.74 1.2 2.94 0 4.21-2.57 5.13-5.04 5.4.45.37.82.92.82 2.02v3.03c0 .27.1.64.73.55A11 11 0 0012 1.27"></path></svg></a></button></div></div>
8<script id="__NEXT_DATA__" type="application/json">{"props":{"pageProps":{}},"page":"/stuff","query":{},"buildId":"4WJs1wztThKFUxgws8rf9","nextExport":true,"autoExport":true,"isFallback":false,"locale":"en","locales":["en","fr"],"defaultLocale":"en","scriptLoader":[]}</script>
8</body></html>

Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.