-
Notifications
You must be signed in to change notification settings - Fork 8
Merge pull request #130 from bashmohandes/feature/about-page #131
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Merged
Merged
Changes from all commits
Commits
Show all changes
12 commits
Select commit
Hold shift + click to select a range
34c4031
Fix Battle Tanks narrow portrait layout
bashmohandes 3adfa89
Bump docker/setup-qemu-action in the action-versions group
dependabot[bot] 6447239
Merge pull request #128 from bashmohandes/dependabot/github_actions/a…
bashmohandes e4b0fd7
Merge pull request #116 from bashmohandes/fix/battle-tanks-narrow-por…
bashmohandes 80418b7
Bump node in the container-versions group across 1 directory
dependabot[bot] 8f2e1b9
Merge pull request #129 from bashmohandes/dependabot/docker/container…
bashmohandes c2d1141
Add game-native about page
bashmohandes 4bb4028
Mention About page in release notes
bashmohandes d87545b
Prepare 1.2.5 release notes
bashmohandes d4e0984
Address About page accessibility review
bashmohandes aa7f654
Improve About hero contrast
bashmohandes 18fd37d
Merge pull request #130 from bashmohandes/feature/about-page
bashmohandes File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,90 @@ | ||
| :root { | ||
| color-scheme:light; | ||
| --page:#fff4d6; | ||
| --ink:#192541; | ||
| --muted:#58647a; | ||
| --panel:#fff9e8; | ||
| --line:#192541; | ||
| --accent:#765cff; | ||
| --pink:#ff4fa3; | ||
| --pink-heading:#e13a87; | ||
| --pink-text:#a31558; | ||
| --mint:#6ef2d0; | ||
| --yellow:#ffd84d; | ||
| --sky:#56a8ff; | ||
| --focus:#4b2fc9; | ||
| --link-accent:#4b2fc9; | ||
| --shadow:#192541; | ||
| } | ||
| :root[data-color-mode="dark"] { color-scheme:dark;--page:#0a1020;--ink:#fff4d6;--muted:#b7c2dc;--panel:#111a33;--line:#fff4d6;--pink-heading:#ff70b7;--pink-text:#ff70b7;--focus:#6ef2d0;--link-accent:#ffd84d;--shadow:#030712; } | ||
| * { box-sizing:border-box; } | ||
| body { min-height:100vh;margin:0;color:var(--ink);background:linear-gradient(90deg,#ffffff06 1px,transparent 1px),linear-gradient(#ffffff06 1px,transparent 1px),radial-gradient(circle at 8% 0,#765cff38,transparent 34rem),var(--page);background-size:32px 32px,32px 32px,auto,auto;font-family:var(--pixel-body,ui-monospace,"SFMono-Regular",Consolas,monospace);overflow-x:hidden; } | ||
| a { color:inherit; } | ||
| .about-shell { width:min(1120px,calc(100% - 40px));margin:0 auto;padding:clamp(38px,6vw,78px) 0 72px; } | ||
| .about-hero { display:grid;grid-template-columns:minmax(0,1.45fr) minmax(280px,.55fr);gap:clamp(32px,6vw,76px);align-items:center;margin-bottom:52px; } | ||
| .eyebrow,.panel-kicker { margin:0 0 18px;color:var(--pink-text);font:700 12px/1.2 var(--pixel-font,ui-monospace,monospace);letter-spacing:.1em;text-transform:uppercase; } | ||
| .eyebrow { display:inline-block;padding:8px 12px;color:#192541;background:var(--yellow);border:2px solid var(--line);box-shadow:4px 4px 0 var(--line); } | ||
| h1,h2,.player-card strong,.button,.resource-links span,.social-grid strong { font-family:var(--pixel-font,ui-monospace,monospace); } | ||
| h1 { max-width:740px;margin:0;font-size:clamp(40px,7vw,76px);font-weight:700;letter-spacing:-.065em;line-height:1.08;text-wrap:balance;text-shadow:5px 5px 0 var(--accent); } | ||
| h1 span { color:var(--pink-heading); } | ||
| .lede { max-width:720px;margin:28px 0 0;color:var(--muted);font-size:clamp(17px,2vw,20px);line-height:1.65; } | ||
| .hero-actions { display:flex;flex-wrap:wrap;gap:14px;margin-top:30px; } | ||
| .button { display:inline-flex;align-items:center;justify-content:center;gap:9px;min-height:48px;padding:10px 16px;border:2px solid var(--line);font-size:11px;font-weight:700;text-decoration:none;box-shadow:4px 4px 0 var(--line);transition:transform 140ms steps(2,end),box-shadow 140ms steps(2,end); } | ||
| .button-primary { color:#192541;background:var(--mint); } | ||
| .button-secondary { background:var(--panel); } | ||
| .button:hover { transform:translate(4px,4px);box-shadow:0 0 0 var(--line); } | ||
| .button:focus-visible,.resource-links a:focus-visible,.patent-list a:focus-visible,.social-grid a:focus-visible { outline:3px solid var(--focus);outline-offset:4px; } | ||
| .player-card { position:relative;padding:28px;background:var(--panel);border:3px solid var(--line);box-shadow:8px 8px 0 var(--pink),12px 12px 0 var(--line);transform:rotate(1.5deg); } | ||
| .player-card::after { position:absolute;top:14px;right:14px;width:42px;height:42px;background:linear-gradient(90deg,var(--yellow) 0 30%,transparent 30% 70%,var(--yellow) 70%),linear-gradient(var(--yellow) 0 30%,transparent 30% 70%,var(--yellow) 70%);content:"";opacity:.8; } | ||
| .player-label { margin:0 0 10px;color:var(--pink-text);font-size:11px;font-weight:800;letter-spacing:.12em;text-transform:uppercase; } | ||
| .player-card>strong { display:block;padding-right:46px;font-size:clamp(19px,3vw,27px); } | ||
| .player-card dl { display:grid;gap:0;margin:24px 0 0; } | ||
| .player-card dl div { display:grid;grid-template-columns:90px 1fr;gap:12px;padding:12px 0;border-top:1px solid color-mix(in srgb,var(--line) 22%,transparent); } | ||
| .player-card dt { color:var(--muted);font-size:12px;text-transform:uppercase; } | ||
| .player-card dd { margin:0;font-size:14px;font-weight:800; } | ||
| .about-grid { display:grid;grid-template-columns:1.25fr .75fr;gap:24px; } | ||
| .panel { position:relative;padding:clamp(25px,4vw,40px);background:var(--panel);border:3px solid var(--line);box-shadow:7px 7px 0 var(--accent),11px 11px 0 var(--line); } | ||
| .panel::before { position:absolute;top:0;right:0;left:0;height:8px;background:repeating-linear-gradient(90deg,var(--accent) 0 20px,color-mix(in srgb,var(--accent) 42%,transparent) 20px 28px);content:""; } | ||
| .panel h2,.social-section h2 { margin:0;font-size:clamp(26px,4vw,38px);letter-spacing:-.045em;line-height:1.2; } | ||
| .panel>p:not(.panel-kicker) { margin:20px 0 0;color:var(--muted);font-size:16px;line-height:1.7; } | ||
| .career-path { display:grid;grid-template-columns:repeat(5,minmax(0,1fr));gap:8px;margin:30px 0 0;padding:0;list-style:none; } | ||
| .career-path li { position:relative;padding-top:19px;text-align:center; } | ||
| .career-path li::before { position:absolute;top:3px;right:50%;left:-58%;height:3px;background:var(--accent);content:""; } | ||
| .career-path li:first-child::before { left:50%; } | ||
| .career-path li::after { position:absolute;top:0;left:calc(50% - 5px);width:10px;height:10px;background:var(--mint);border:2px solid var(--line);content:""; } | ||
| .career-path span { font-size:12px;font-weight:800; } | ||
| .community-panel { --accent:var(--mint); } | ||
| .resource-links { display:grid;gap:12px;margin-top:28px; } | ||
| .resource-links a { display:grid;grid-template-columns:1fr auto;gap:5px 12px;padding:15px;color:inherit;background:color-mix(in srgb,var(--accent) 9%,transparent);border:1px solid color-mix(in srgb,var(--line) 28%,transparent);text-decoration:none; } | ||
| .resource-links span { font-size:13px; } | ||
| .resource-links small { grid-column:1;color:var(--muted);font-size:12px;line-height:1.45; } | ||
| .resource-links b { grid-area:1/2/3;font-size:20px;align-self:center; } | ||
| .patent-panel { --accent:var(--yellow);display:grid;grid-template-columns:.4fr 1.6fr;gap:28px;margin-top:30px; } | ||
| .patent-list { display:grid;grid-template-columns:repeat(2,minmax(0,1fr));gap:14px; } | ||
| .patent-list a { display:flex;flex-direction:column;gap:10px;min-height:170px;padding:18px;background:color-mix(in srgb,var(--yellow) 12%,transparent);border:2px solid var(--line);text-decoration:none; } | ||
| .patent-list small { color:var(--muted);font-size:11px;font-weight:800;text-transform:uppercase; } | ||
| .patent-list span { flex:1;font-size:15px;font-weight:800;line-height:1.45; } | ||
| .patent-list b { color:var(--link-accent);font-size:12px; } | ||
| .patent-list i { font-style:normal; } | ||
| .social-section { margin-top:58px; } | ||
| .social-grid { display:grid;grid-template-columns:repeat(4,minmax(0,1fr));gap:14px;margin-top:24px; } | ||
| .social-grid a { display:grid;grid-template-columns:38px 1fr;gap:3px 11px;align-items:center;min-height:92px;padding:16px;background:var(--panel);border:2px solid var(--line);box-shadow:4px 4px 0 var(--line);text-decoration:none;transition:transform 140ms steps(2,end),box-shadow 140ms steps(2,end); } | ||
| .social-grid a:hover { transform:translate(3px,3px);box-shadow:1px 1px 0 var(--line); } | ||
| .social-grid a>span { grid-row:1/3;display:grid;width:38px;height:38px;place-items:center;color:#192541;background:var(--sky);border:2px solid var(--line);font-size:13px;font-weight:950; } | ||
| .social-grid a:nth-child(2n)>span { background:var(--mint); } | ||
| .social-grid a:nth-child(3n)>span { background:var(--pink); } | ||
| .social-grid strong { font-size:12px; } | ||
| .social-grid small { color:var(--muted);font-size:11px; } | ||
| :root[data-arcade-theme="cabinet"] .about-shell { width:min(1240px,calc(100% - 32px)); } | ||
| :root[data-arcade-theme="cabinet"] :is(.player-card,.panel) { box-shadow:5px 5px 0 var(--yellow); } | ||
| :root[data-arcade-theme="calm"] { --page:#eef4f1;--ink:#223a33;--muted:#61746d;--panel:#f8fbf9;--line:#527068;--accent:#356f61;--pink:#9b5548;--pink-heading:#9b5548;--pink-text:#854238;--mint:#789d90;--yellow:#d9b968;--sky:#668e9b;--focus:#315f54;--link-accent:#315f54;--shadow:#263c34; } | ||
| :root[data-arcade-theme="calm"][data-color-mode="dark"] { --page:#111917;--ink:#e5efeb;--muted:#9fb0a9;--panel:#18231f;--line:#91a59d;--pink-heading:#e8a092;--pink-text:#e8a092;--focus:#d9b968;--link-accent:#d9b968;--shadow:#000; } | ||
| :root[data-arcade-theme="calm"] body { background:var(--page);font-family:Georgia,"Times New Roman",serif; } | ||
| :root[data-arcade-theme="calm"] .about-shell { width:min(1020px,calc(100% - 48px)); } | ||
| :root[data-arcade-theme="calm"] :is(h1,h2,.player-card strong,.button,.resource-links span,.social-grid strong) { font-family:Georgia,"Times New Roman",serif; } | ||
| :root[data-arcade-theme="calm"] h1 { text-shadow:none; } | ||
| :root[data-arcade-theme="calm"] :is(.player-card,.panel,.social-grid a) { border-width:1px;box-shadow:none;transform:none; } | ||
| :root[data-arcade-theme="calm"] .panel::before { height:3px; } | ||
| @media (max-width:800px) { .about-hero,.about-grid,.patent-panel { grid-template-columns:1fr; } .player-card { width:min(100%,520px);transform:none; } .social-grid { grid-template-columns:repeat(2,minmax(0,1fr)); } } | ||
| @media (max-width:520px) { .about-shell,:root[data-arcade-theme="calm"] .about-shell { width:min(100% - 28px,1120px);padding-top:32px; } .about-hero { margin-bottom:38px; } .hero-actions { flex-direction:column; } .panel { padding:26px 20px;box-shadow:5px 5px 0 var(--accent),8px 8px 0 var(--line); } .career-path { grid-template-columns:1fr;gap:0; } .career-path li { padding:0 0 14px 25px;text-align:left; } .career-path li::before { top:0;bottom:0;right:auto;left:5px;width:3px;height:auto; } .career-path li:first-child::before { left:5px;top:5px; } .career-path li:last-child::before { bottom:calc(100% - 5px); } .career-path li::after { top:3px;left:0; } .patent-list,.social-grid { grid-template-columns:1fr; } .patent-list a { min-height:0; } } | ||
| @media (prefers-reduced-motion:reduce) { .button,.social-grid a { transition:none; } } | ||
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,91 @@ | ||
| <!doctype html> | ||
| <html lang="en"> | ||
| <head> | ||
| <meta charset="utf-8"> | ||
| <meta name="viewport" content="width=device-width,initial-scale=1,viewport-fit=cover"> | ||
| <meta name="theme-color" content="#101827"> | ||
| <meta name="description" content="Meet Mohamed Elsherif, the software architect and community builder behind JavaScript Playground."> | ||
| <title>About Mohamed Elsherif · JavaScript Playground</title> | ||
| <script src="theme-init.js"></script> | ||
| <link rel="icon" href="icon.svg" type="image/svg+xml"> | ||
| <link rel="stylesheet" href="arcade.css"> | ||
| <link rel="stylesheet" href="about.css"> | ||
| </head> | ||
| <body> | ||
| <main class="about-shell"> | ||
| <section class="about-hero" aria-labelledby="about-title"> | ||
| <div class="about-intro"> | ||
| <p class="eyebrow">Meet the maker</p> | ||
| <h1 id="about-title">Built by <span>Mohamed Elsherif.</span></h1> | ||
| <p class="lede">I’m a software architect with more than 20 years in software engineering. I build systems, share what I learn, and still make time for a good JavaScript game.</p> | ||
| <div class="hero-actions"> | ||
| <a class="button button-primary" href="https://www.bashmohandes.com/" target="_blank" rel="me noopener noreferrer">Visit bashmohandes.com <span aria-hidden="true">↗</span></a> | ||
| <a class="button button-secondary" href="https://ask.bashmohandes.com/" target="_blank" rel="noopener noreferrer">Ask me a question <span aria-hidden="true">↗</span></a> | ||
| </div> | ||
| </div> | ||
| <aside class="player-card" aria-label="Mohamed Elsherif at a glance"> | ||
| <p class="player-label">Player one</p> | ||
| <strong>@bashmohandes</strong> | ||
| <dl> | ||
| <div><dt>Role</dt><dd>Software Architect</dd></div> | ||
| <div><dt>Experience</dt><dd>20+ years</dd></div> | ||
| <div><dt>Education</dt><dd>Cairo University</dd></div> | ||
| <div><dt>Based near</dt><dd>Seattle</dd></div> | ||
| </dl> | ||
| </aside> | ||
| </section> | ||
|
|
||
| <section class="about-grid" aria-label="About Mohamed Elsherif"> | ||
| <article class="panel career-panel"> | ||
| <p class="panel-kicker">Career map</p> | ||
| <h2>Building services that scale</h2> | ||
| <p>I work on Apple’s Services Architecture and Efficiency team, helping online services scale reliably and run efficiently. Earlier chapters of my career include Azure identity at Microsoft, integrations at Okta, enterprise mobility at VMware, and Metrics and Reporting infrastructure at Hulu.</p> | ||
| <ol class="career-path" aria-label="Career path"> | ||
| <li><span>Hulu</span></li> | ||
| <li><span>VMware</span></li> | ||
| <li><span>Okta</span></li> | ||
| <li><span>Microsoft</span></li> | ||
| <li><span>Apple</span></li> | ||
| </ol> | ||
| </article> | ||
|
|
||
| <article class="panel community-panel"> | ||
| <p class="panel-kicker">Community side quest</p> | ||
| <h2>Sharing the lessons</h2> | ||
| <p>Through open-source projects, Q&A, and the Arabic-language AskDeveloper Podcast, I share practical lessons about software architecture and engineering careers with the Arabic-speaking developer community.</p> | ||
| <div class="resource-links"> | ||
| <a href="https://askdeveloper.com/" target="_blank" rel="noopener noreferrer"><span>AskDeveloper Podcast</span><small>Conversations about software and the people building it</small><b aria-hidden="true">↗</b></a> | ||
| <a href="https://ask.bashmohandes.com/" target="_blank" rel="noopener noreferrer"><span>Ask Bashmohandes</span><small>Questions about technology, careers, and more</small><b aria-hidden="true">↗</b></a> | ||
| </div> | ||
| </article> | ||
| </section> | ||
|
|
||
| <section class="panel patent-panel" aria-labelledby="patents-title"> | ||
| <div> | ||
| <p class="panel-kicker">Granted achievements</p> | ||
| <h2 id="patents-title">Patents</h2> | ||
| </div> | ||
| <div class="patent-list"> | ||
| <a href="https://patents.google.com/patent/US11531532B2/en" target="_blank" rel="noopener noreferrer"><small>VMware · Granted 2022</small><span>Remote deployment of provisioned packages</span><b>US11531532B2 <i aria-hidden="true">↗</i></b></a> | ||
| <a href="https://patents.google.com/patent/US11956232B2/en" target="_blank" rel="noopener noreferrer"><small>Okta · Granted 2024</small><span>Integration packaging for a multi-tenant computing environment</span><b>US11956232B2 <i aria-hidden="true">↗</i></b></a> | ||
| </div> | ||
| </section> | ||
|
|
||
| <section class="social-section" aria-labelledby="social-title"> | ||
| <p class="panel-kicker">Continue the conversation</p> | ||
| <h2 id="social-title">Find me online</h2> | ||
| <div class="social-grid"> | ||
| <a href="https://www.linkedin.com/in/mohammedhossam" target="_blank" rel="me noopener noreferrer"><span aria-hidden="true">in</span><strong>LinkedIn</strong><small>Work & writing</small></a> | ||
| <a href="https://github.com/bashmohandes" target="_blank" rel="me noopener noreferrer"><span aria-hidden="true"></></span><strong>GitHub</strong><small>Open-source projects</small></a> | ||
| <a href="https://www.youtube.com/bashmohandes" target="_blank" rel="me noopener noreferrer"><span aria-hidden="true">▶</span><strong>YouTube</strong><small>Talks & podcast</small></a> | ||
| <a href="https://soundcloud.com/askdeveloper" target="_blank" rel="me noopener noreferrer"><span aria-hidden="true">◖</span><strong>SoundCloud</strong><small>Podcast episodes</small></a> | ||
| <a href="https://www.tiktok.com/@bashmohandesx" target="_blank" rel="me noopener noreferrer"><span aria-hidden="true">♪</span><strong>TikTok</strong><small>@bashmohandesx</small></a> | ||
| <a href="https://x.com/bashmohandes" target="_blank" rel="me noopener noreferrer"><span aria-hidden="true">X</span><strong>X</strong><small>@bashmohandes</small></a> | ||
| <a href="https://www.facebook.com/bashmohandesx" target="_blank" rel="me noopener noreferrer"><span aria-hidden="true">f</span><strong>Facebook</strong><small>@bashmohandesx</small></a> | ||
| </div> | ||
| </section> | ||
| </main> | ||
| <script src="scripts/game-events.js"></script> | ||
| <script src="arcade.js"></script> | ||
| </body> | ||
| </html> |
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Oops, something went wrong.
Oops, something went wrong.
Oops, something went wrong.
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Uh oh!
There was an error while loading. Please reload this page.