diff --git a/.eleventy.js b/.eleventy.js index ad9df7d..5de35b3 100644 --- a/.eleventy.js +++ b/.eleventy.js @@ -7,6 +7,7 @@ const hljs = require('highlight.js/lib/common'); const { setup } = require('highlightjs-glimmer'); const markdownit = require('markdown-it'); const markdownitClass = require('@toycode/markdown-it-class'); +const markdownitImageFigures = require('markdown-it-image-figures'); const anchor = require('markdown-it-anchor'); const cheerio = require('cheerio'); @@ -34,15 +35,19 @@ const markdownClassMapping = { em: ['italic', 'text-green'], img: ['max-w-full', 'rounded-lg', 'max-h-600px', 'contrast-more:contrast-50'], // (contrast-more-50 here undoes the content contrast boost elsewhere) video: ['max-w-full', 'rounded-lg', 'max-h-600px', 'contrast-more:contrast-50'], // (contrast-more-50 here undoes the content contrast boost elsewhere) - ul: ['list-disc', 'ml-4', 'text-subtext0'], + hr: ['mt-2', 'mb-4', 'border-yellow'], + ul: ['list-disc', 'ml-4', 'mb-4', 'text-subtext0'], li: ['text-subtext0'], - code: ['hljs'] + figure: ['inline-block', 'mb-4'], + figcaption: ['text-flamingo', 'text-xs'], + code: ['font-mono', 'text-saphire'] }; setup(hljs); const md = markdownit({ linkify: true, html: true, + typographer: true, highlight: function (str, lang) { if (lang && hljs.getLanguage(lang)) { try { @@ -53,6 +58,9 @@ const md = markdownit({ return ''; // use external default escaping } }); +md.use(markdownitImageFigures, { + figcaption: "title", +}); md.use(markdownitClass, markdownClassMapping); md.use(anchor, { permalink: anchor.permalink.headerLink() diff --git a/.obsidian/workspace.json b/.obsidian/workspace.json index 353382a..ebe9edd 100644 --- a/.obsidian/workspace.json +++ b/.obsidian/workspace.json @@ -4,21 +4,17 @@ "type": "split", "children": [ { - "id": "b4acd2dd631ab8d1", + "id": "5fec0627342eb82b", "type": "tabs", "children": [ { - "id": "97b5602fe03321b5", + "id": "c9b66ad850a244ea", "type": "leaf", "state": { - "type": "markdown", - "state": { - "file": "blog/modding-minecraft.md", - "mode": "source", - "source": false - }, + "type": "empty", + "state": {}, "icon": "lucide-file", - "title": "modding-minecraft" + "title": "New tab" } } ] @@ -168,8 +164,10 @@ "command-palette:Open command palette": false } }, - "active": "97b5602fe03321b5", + "active": "c9b66ad850a244ea", "lastOpenFiles": [ + "2025-06-05.md", + "blog/modding-minecraft.md", "_site/blog/modding-minecraft/index.html", "_site/blog/modding-minecraft", "_site/img/content/projbesy-photon-shader.png", @@ -181,7 +179,6 @@ "img/content/minimap.png", "img/content/modding-minecraft.webp", "blog/ember-atx-2020-spring.md", - "blog/modding-minecraft.md", "img/content/distant-horizons.jpg", "img/content/projbesy-photon-shader.png", "blog/arizona_school_finance.md", diff --git a/_includes/content.njk b/_includes/content.njk index 551c1a0..5c452fb 100644 --- a/_includes/content.njk +++ b/_includes/content.njk @@ -13,9 +13,9 @@ {{description | markdown | safe}} -
+
+
- {{ content | safe }}
diff --git a/blog/miniature_deer.md b/blog/miniature_deer.md index e9c12de..e971f38 100644 --- a/blog/miniature_deer.md +++ b/blog/miniature_deer.md @@ -1,15 +1,13 @@ --- title: A Beautiful Deer -description: My proudest I have been of competently painting a miniature. -coverImage: /img/content/deer1.jpg -date: 2022-08-23 tags: - TTRPG +date: "2022-08-23" +description: My proudest I have been of competently painting a miniature. +coverImage: /img/content/deer1.jpg +imageDescription: D&D sized miniature close up of a deer with white spots, antlers, with clean shading walking through an implied grassy meadow with shrubs. --- _Note: This is an article backfill, meaning I neglected my blog for some time and inserted this article back into history as for when it happened._ -Recently I set up a hobby painting station where I have been churning out some new miniatures I am becoming increasingly proud of. It's also helped that I invested in [The Army Painter's Speedpaints](https://www.thearmypainter.com/speedpaint/) Etsy has some wonderful [paint stations]([https://www.etsy.com/listing/976336032/corner-paint-brush-holder?ref=cart](https://www.etsy.com/listing/976336032/corner-paint-brush-holder?ref=cart "https://www.etsy.com/listing/976336032/corner-paint-brush-holder?ref=cart")for this hobby as well. - -![D&D sized miniature close up of a deer with white spots, antlers, with clean shading walking through an implied grassy meadow with shrubs.](img/content/deer2.jpg) - +Recently I set up a hobby painting station where I have been churning out some new miniatures I am becoming increasingly proud of. It's also helped that I invested in [The Army Painter's Speedpaints](https://www.thearmypainter.com/speedpaint/) Etsy has some wonderful [paint stations](https://www.etsy.com/listing/976336032/corner-paint-brush-holder) for this hobby as well. diff --git a/blog/multimedia_for_invisible.md b/blog/multimedia_for_invisible.md index 6f7a69e..22438c4 100644 --- a/blog/multimedia_for_invisible.md +++ b/blog/multimedia_for_invisible.md @@ -1,6 +1,5 @@ --- -id: multimedia_for_invisible -aliases: [] +title: Crafting Better Multimedia for the Invisible People All Around Us tags: - College - Writing @@ -8,7 +7,6 @@ tags: coverImage: /img/content/multimedia_for_invisible.webp date: "2023-03-11" description: For a more universally accessible web, educators are adjusting how they teach software engineering, user experience design, content writing, and multimedia production. -title: Crafting Better Multimedia for the Invisible People All Around Us --- Posted originally on [Medium: Crafting Better Multimedia for the Invisible People All Around Us](https://medium.com/@hergaiety/crafting-better-multimedia-for-the-invisible-people-all-around-us-952f22070e6b) diff --git a/community/a11yautomationtesting.md b/community/a11yautomationtesting.md index 64959a0..9af830a 100644 --- a/community/a11yautomationtesting.md +++ b/community/a11yautomationtesting.md @@ -1,8 +1,9 @@ --- -tags: community title: "Talk: Achieving A11y Automation Testing" -description: "A success story and a look at how anyone can automate **A11y** regardless of framework." +tags: + - community date: 2021-02-29 +description: A success story and a look at how anyone can automate **A11y** regardless of framework. image: /img/content/testjssummit2021.jpg imageDescription: Photo of Ava's at-home setup with a microphone resting atop of a Macbook Pro showing the slides onscreen pinned: true @@ -10,12 +11,9 @@ pinned: true > Accessibility testing in has come a long way in recent years. We'll dive into how EmberJS prioritized A11y with meaningful RFC's, Addons, tooling and docs. Most importantly, we'll discuss how these successes can be applied to your very own apps be they Vue, React, Angular or anything else! -![Photo of Ava's at-home setup with a microphone resting atop of a Macbook Pro showing the slides onscreen](/img/content/testjssummit2021.jpg) - [Watch the recorded talk here](https://portal.gitnation.org/contents/achieving-a11y-automation-testing) -## Talk given at: +## Talk given at * [TestJS Summit 2021](https://portal.gitnation.org/contents/achieving-a11y-automation-testing) * Ember-LA - diff --git a/community/components-first.md b/community/components-first.md index 13889d8..43912e5 100644 --- a/community/components-first.md +++ b/community/components-first.md @@ -14,11 +14,8 @@ pinned: true _[“Slides”, relevant URL’s used in presentation](https://www.notion.so/hergaiety/Thinking-in-Stories-Component-First-66c7c795e4864ed0a81fddbf777a6f86)_ -[![Still frame from a YouTube video of Ava presenting split-screen with a smile looking at the camera on the left and a web interface showing a web component built in Storybook on the right.](/img/content/emberconf2022-2.png)](https://www.youtube.com/watch?v=88xWS0QeJUo&list=PLE7tQUdRKcya7rPej9KkDwUpBkQXT7Lw5) - [Watch the recorded talk here](https://www.youtube.com/watch?v=88xWS0QeJUo&list=PLE7tQUdRKcya7rPej9KkDwUpBkQXT7Lw5) -## Talk given at: +## Talk given at [EmberConf 2022](https://2022.emberconf.com/) - diff --git a/img/content/contractor-header.png b/img/content/contractor-header.png new file mode 100644 index 0000000..15d7306 Binary files /dev/null and b/img/content/contractor-header.png differ diff --git a/index.md b/index.md index 946d012..762cb94 100644 --- a/index.md +++ b/index.md @@ -1,11 +1,8 @@ --- -id: index -aliases: [] -tags: [] +title: Ava Gaiety W. description: Portfolio containing work experience, code, volunteering and more! eleventyExcludeFromCollections: true layout: pinned.njk -title: Ava Gaiety W. --- diff --git a/package-lock.json b/package-lock.json index c6d70f9..9a7fcfe 100644 --- a/package-lock.json +++ b/package-lock.json @@ -23,6 +23,7 @@ "highlightjs-glimmer": "^2.2.1", "install": "^0.13.0", "markdown-it-anchor": "^9.2.0", + "markdown-it-image-figures": "^2.1.1", "npm": "^10.5.0", "npm-run-all": "^4.1.5", "postcss": "^8.3.11", @@ -5490,6 +5491,19 @@ "markdown-it": "*" } }, + "node_modules/markdown-it-image-figures": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/markdown-it-image-figures/-/markdown-it-image-figures-2.1.1.tgz", + "integrity": "sha512-mwXSQ2nPeVUzCMIE3HlLvjRioopiqyJLNph0pyx38yf9mpqFDhNGnMpAXF9/A2Xv0oiF2cVyg9xwfF0HNAz05g==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=12.0.0" + }, + "peerDependencies": { + "markdown-it": "*" + } + }, "node_modules/markdown-it/node_modules/argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", diff --git a/package.json b/package.json index 4becfb2..f4256b7 100644 --- a/package.json +++ b/package.json @@ -43,6 +43,7 @@ "highlightjs-glimmer": "^2.2.1", "install": "^0.13.0", "markdown-it-anchor": "^9.2.0", + "markdown-it-image-figures": "^2.1.1", "npm": "^10.5.0", "npm-run-all": "^4.1.5", "postcss": "^8.3.11", diff --git a/repos/11ty.md b/repos/11ty.md index 30fcbdb..433f437 100644 --- a/repos/11ty.md +++ b/repos/11ty.md @@ -9,8 +9,6 @@ imageDescription: Mockup of four overlapping phones showing screenshots of diffe pinned: true --- -![Mockup of four overlapping phones showing screenshots of different websites each relating to Gaiety's pet projects. These include combinations of dark and light themed sights with prominant text such as Gaiety's Life and Faetale a youtube site with a motto of Once Upon a Time.](/img/content/11ty.jpg) - Something a little different! This is a collection of several repositories that house my personal websites. They are all built in [Eleventy](https://www.11ty.dev/) a zero-config really superb static site generator with markdown content. Except for Faetale, which leverages [Nuxt and Vue which you can read my jourey on here](https://gaiety.life/posts/faetale-launch/). Most use [Tailwind](https://tailwindcss.com/) and [Tailwind UI](https://tailwindui.com/) with manual customizations to achieve easy to update sites. Each are run through [Digital Ocean Apps](https://www.digitalocean.com/products/app-platform) to automatically rebuild the static site when the repository is updated. ## Sites diff --git a/repos/pronounmonster.md b/repos/pronounmonster.md index f746af6..c72d237 100644 --- a/repos/pronounmonster.md +++ b/repos/pronounmonster.md @@ -13,9 +13,7 @@ pinned: true > Because while we are silly, your gender identity is important. Be your genuine self. Share how you are to be referred to by newer users of neopronouns or English language learners. -![Mockup image with a focus on a mobile phone showing a web app called Pronoun Monster. It has a logo of overlapping three circles in an intricate pattern. In very large text it reads fae/faer/femme/femmeself with example pronoun usage below including Fae went to the park, I went with faer, Fae brought faer frisbee, at least I think it was femme, fae threw the frisbee to femmeself. Just before the image is cropped within the phone area it also reads a portion of a table indicating pronoun usage by nomintative, accusative, prenominal possessive and presumably others below the fold.](/img/content/pronoun-monster-mockup.jpg) - -Visit the site at https://pronoun.monster/ +Visit the site at Powered by **NodeJS** with **TailwindCSS** and **svg spritesheets** leveraging my own work (dogfooding) [svgdir2sprite (repo project page)](/repos/svgdir2sprite/). Hosted on my own _Ubuntu_ server via **nginx** and **Docker**. @@ -23,5 +21,3 @@ Powered by **NodeJS** with **TailwindCSS** and **svg spritesheets** leveraging m * [Angela](http://argylewerewolf.com/) who uses [it/its](https://pronoun.monster/it/it/its/its/itself), [she/her](https://pronoun.monster/she/her/hers/herself) * [Rizzo](https://goth.dev/) who uses [he/his](https://pronoun.monster/he/him/his/him/himself) [they/them](https://pronoun.monster/they/them/their/themself), [xier/xien](https://nibi.space/pronomen#xier) - - diff --git a/styles.css b/styles.css index fe7c8fb..4d0c2c4 100644 --- a/styles.css +++ b/styles.css @@ -52,49 +52,6 @@ } } -pre, p > code { - font-family: "VictorMono", monospace; - font-variant-ligatures: contextual; - color: rgb(var(--ctp-text)); -} -p > code { - padding: 0 .25rem; - display: inline-block; - background-color: rgb(var(--ctp-mantle)); - color: rgb(var(--ctp-red)); - border: 1px solid rgb(var(--ctp-surface0)); - border-radius: 0.25rem; - font-size: 0.875rem; -} -pre { - position: relative; - padding: 1rem 0.75rem; - margin: 1rem 0 ; - overflow: auto; - max-width: 100%; - white-space: pre-wrap; - page-break-inside: avoid; - background-color: rgb(var(--ctp-crust)); - mask: - radial-gradient(0.56rem at 50% 0.75rem,#000 99%,#0000 101%) calc(50% - 0.5rem) 0/1rem 51% repeat-x, - radial-gradient(0.56rem at 50% -0.5rem,#0000 99%,#000 101%) 50% .25rem/1rem calc(51% - .25rem) repeat-x, - radial-gradient(0.56rem at 50% calc(100% - 0.75rem),#000 99%,#0000 101%) calc(50% - 0.5rem) 100%/1rem 51% repeat-x, - radial-gradient(0.56rem at 50% calc(100% + 0.5rem),#0000 99%,#000 101%) 50% calc(100% - .25rem)/1rem calc(51% - .25rem) repeat-x; - - .hljs-language-icon { - position: absolute; - top: 0; - right: 0; - padding: .2rem .25rem; - color: rgb(var(--ctp-subtext1)); - background-color: rgb(var(--ctp-base)); - border-left: 1px solid rgb(var(--ctp-surface0)); - border-bottom: 1px solid rgb(var(--ctp-surface0)); - border-radius: 0 0 0 0.25rem; - font-size: 0.875rem; - } -} - .hljs-comment { font-style: italic; } @@ -158,6 +115,63 @@ pre { } } +.markdown-content { + hr { + margin-bottom: 1rem; + border-color: rgba(var(--ctp-yellow)); + } + + code { + color: rgba(var(--ctp-mauve)); + } + + pre code { + color: rgb(var(--ctp-text)); + } + + pre, code { + font-family: "VictorMono", monospace; + font-variant-ligatures: contextual; + } + p code { + padding: 0 .25rem; + display: inline-block; + background-color: rgb(var(--ctp-mantle)); + color: rgb(var(--ctp-red)); + border: 1px solid rgb(var(--ctp-surface0)); + border-radius: 0.25rem; + font-size: 0.875rem; + } + pre { + position: relative; + padding: 1rem 0.75rem; + margin: 1rem 0 ; + overflow: auto; + max-width: 100%; + white-space: pre-wrap; + page-break-inside: avoid; + background-color: rgb(var(--ctp-crust)); + mask: + radial-gradient(0.56rem at 50% 0.75rem,#000 99%,#0000 101%) calc(50% - 0.5rem) 0/1rem 51% repeat-x, + radial-gradient(0.56rem at 50% -0.5rem,#0000 99%,#000 101%) 50% .25rem/1rem calc(51% - .25rem) repeat-x, + radial-gradient(0.56rem at 50% calc(100% - 0.75rem),#000 99%,#0000 101%) calc(50% - 0.5rem) 100%/1rem 51% repeat-x, + radial-gradient(0.56rem at 50% calc(100% + 0.5rem),#0000 99%,#000 101%) 50% calc(100% - .25rem)/1rem calc(51% - .25rem) repeat-x; + + .hljs-language-icon { + position: absolute; + top: 0; + right: 0; + padding: .2rem .25rem; + color: rgb(var(--ctp-subtext1)); + background-color: rgb(var(--ctp-base)); + border-left: 1px solid rgb(var(--ctp-surface0)); + border-bottom: 1px solid rgb(var(--ctp-surface0)); + border-radius: 0 0 0 0.25rem; + font-size: 0.875rem; + } + } +} + @keyframes blink-animation { to { visibility: hidden; diff --git a/work/allovue.md b/work/allovue.md index 9809205..02dc75f 100644 --- a/work/allovue.md +++ b/work/allovue.md @@ -3,11 +3,15 @@ tags: work title: Senior Software Engineer at Allovue (PowerSchool) description: _(Aug 2019 - Jul 2020, April 2022 - February 2024)_ Functional programming in **Elixir**, **Ember.js** and **Postgres** powering school budgeting nationwide. date: 2024-02-29 -image: /img/content/allovue-thumb.png -imageDescription: Screenshots of an Allovue web app on the overview page indicating a school district's number of institutions, school characacteristics, job types, sub-enrollment types as well as a section below for enrollment projections, formulas, and scenarios. The indication is that this allows a school district to manage their institutions budgets. +image: /img/content/allovue3.jpg +imageDescription: Mockup of two phone screens showing previews of the Arizona School Spending website. They speak on Arizona's K-12 School Finance with a goal of making education dollars easier to understand with an option to search. On the second screen are graphs with dates and an indicator on tracking total enrollment over time. There's also an indicator of a custom report comparing 2/4 institutions. pinned: false --- +I've been digging in deep with the rest of product in a very cross-function design, QA and engineering on something ~~I wish I could talk more about~~ and now I can proudly say it's released! Read more at [Allovue Partners with Arizona on School Finance Transparency](https://blog.allovue.com/press/announces-arizona-school-financial-transparency-portal). + +--- + Building budgeting software to give educators the tools and support they need to allocate resources to the needs of students for a more equitable world. Empowering educators to strategically and equitably allocate resources to best support the needs of students. We're building budgeting software to give school districts the tools they need to give educators the tools they need. @@ -18,10 +22,6 @@ Furthermore, Allovue stands for equity and antiracism. I get to work with fellow This has been my first full-time venture into functional programming with [Elixir](https://elixir-lang.org/) and [Phoenix](https://www.phoenixframework.org/) and I'm loving every minute of it. -I've been digging in deep with the rest of product in a very cross-function design, QA and engineering on something ~~I wish I could talk more about~~ and now I can proudly say it's released! Read more at [Allovue Partners with Arizona on School Finance Transparency](https://blog.allovue.com/press/announces-arizona-school-financial-transparency-portal). - -![Mockup of two phone screens showing previews of the Arizona School Spending website. They speak on Arizona's K-12 School Finance with a goal of making education dollars easier to understand with an option to search. On the second screen are graphs with dates and an indicator on tracking total enrollment over time. There's also an indicator of a custom report comparing 2/4 institutions.](/img/content/allovue3.jpg) - ## Prior to 2020 Leveraging modern web technologies we built an ambitious web app with Microstates within [EmberJS](https://emberjs.com/) powered by a [Rails](https://rubyonrails.org/) API. Pushing the boundaries of what is possible with [Ember Data](https://guides.emberjs.com/release/models/) with an advanced [Graphiti](https://www.graphiti.dev) data management layer to ensure payloads are handled efficiently for a better UX. diff --git a/work/contractor.md b/work/contractor.md index 6540941..8d93d11 100644 --- a/work/contractor.md +++ b/work/contractor.md @@ -1,13 +1,21 @@ --- -tags: work title: Independent Contractor (PowerSchool, Bill & Melinda Gates Foundation) +tags: + - work +date: "2025-03-27" description: _(June 2024 - Current)_ Surfacing scientific papers for educators who can make a difference. Built with **Phoenix**, **Typescript**, **Lit** and **PostgreSQL**. -date: 2025-03-27 -image: /img/content/contractor.png +image: /img/content/contractor-header.png imageDescription: Cropped screenshot of a webpage called Implement for Impact showing an Intervention for Zoology suggesting various statistics about the study. pinned: true --- -[Bill & Melinda Gates Foundation](https://www.gatesfoundation.org/) project in collaboration with PowerSchool. Solo built a full-stack **Elixir**, **Phoenix**, **Lit** (web components), **Typescript** with a **PostgreSQL** DB app through it’s deployment to production where [it's live today](https://implementforimpact.org/). +Lead and was the primary developer for a greenfield project exceeding timeline and quality expectations. -![Cropped screenshot of a webpage called Implement for Impact showing an Intervention for Zoology suggesting various statistics about the study.](/img/content/contractor.png) +- Collaborated in tech stack choice of `Elixir`, `Phoenix`, `Lit` (web components), `TypeScript`, with a `PostgreSQL` database +- Hand-crafted dynamic charts with zero-dependency `SVG` pie charts for **data visualization** + +![Cropped screenshot of a webpage called Implement for Impact showing an Intervention for Zoology suggesting various statistics about the study.](/img/content/contractor.png "View showing an individual study known as an 'Intervention' derived from a scientific paper. Shows Subject, Academic Programs, Duration (length of time to implement), a Summary, Grades and more.") + +--- + +_Thanks to [mokkify](https://mokkify.com) for mockups used on this page._ diff --git a/work/deque.md b/work/deque.md index fd7a1b5..ecd6b87 100644 --- a/work/deque.md +++ b/work/deque.md @@ -8,5 +8,3 @@ imageDescription: Screenshots of a web app called axe DevTools Mobile with a des --- Submitted contributions to [axe-core](https://github.com/dequelabs/axe-core) (open-source), [axe DevTools Linter](https://www.deque.com/axe/devtools/linter/), and more tooling to empower web engineers to build a more _accessible_ web. Technologies are focused on **Typescript** and **Playwright**. - -![Screenshots of a web app called axe DevTools Mobile with a desktop and mobile preview showing you may test any app with an indicator of how many issues remain, a scale rating, and the number of total scans ran across different apps](/img/content/deque.png) diff --git a/work/oncue.md b/work/oncue.md index 164327f..7310b48 100644 --- a/work/oncue.md +++ b/work/oncue.md @@ -17,9 +17,7 @@ Oncue has been supporting small moving companies through innovative simple to us From `git init` I've worked with the talented team at Oncue to build out a design system of react components that are accessible, automation tested, mobile-first and ready for both current and future projects to consume. It was really exciting taking the lead on a project that is now widely being adopted within the company in such a short time-span. -[![Design System in Storybook](/img/content/oncue-designsystem.jpg) Check it out at https://designsystem.oncueapp.com/](https://designsystem.oncueapp.com/) - -I truly believe this project has changed the way Oncue will build software forever moving forward for the better. +I truly believe this project has changed the way Oncue will build software forever moving forward for the better. [Check it out at https://designsystem.oncueapp.com/](https://designsystem.oncueapp.com/) ### Using it in the Product @@ -28,4 +26,3 @@ The design system has successfully been integrated into the product to reimagine It's great to see the same amount of attention given to mobile as has been given to the desktop site. We're making major strides in usability and accessibility. - diff --git a/work/q2.md b/work/q2.md index 0e10015..8909ce6 100644 --- a/work/q2.md +++ b/work/q2.md @@ -2,6 +2,7 @@ tags: work title: Developer III at Q2ebanking description: _(Jan 2016 - Aug 2019)_ Enterprise **Ember.js** & **Vue.js** powered banking software used by tens of millions worldwide. Mentoring, writing test automation, and writing a component for native HTML **Web Components**. +image: /img/content/q21.jpg date: 2019-08-01 --- @@ -9,11 +10,8 @@ date: 2019-08-01 ## Stronger communities with better financial tools -![Mobile banking software](/img/content/q21.jpg) - Built [Ember.js](https://emberjs.com/) powered banking software used by tens of millions worldwide. _Mentored_ new hires, reforged _automation_ testing standards, improved **A11y**. ![Desktop banking software](/img/content/q22.jpg) Lead an innovative [HTML5 **Web Components** project](https://gaiety.life/posts/on-web-components) to achieve ambitious cross-team goals. [Read more about that here...](https://gaiety.life/on-web-components) -