<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: ​</title>
    <description>The latest articles on DEV Community by ​ (@kizjkre).</description>
    <link>https://dev.to/kizjkre</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F390120%2Fb230384a-9e0b-4565-a120-bc3a1b478b4f.png</url>
      <title>DEV Community: ​</title>
      <link>https://dev.to/kizjkre</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/kizjkre"/>
    <language>en</language>
    <item>
      <title>Google Summer of Code 2024: A Retrospective</title>
      <dc:creator>​</dc:creator>
      <pubDate>Mon, 26 Aug 2024 01:20:32 +0000</pubDate>
      <link>https://dev.to/kizjkre/google-summer-of-code-2024-a-retrospective-106c</link>
      <guid>https://dev.to/kizjkre/google-summer-of-code-2024-a-retrospective-106c</guid>
      <description>&lt;p&gt;&lt;a href="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fay9k3nf86inhwwvt32bv.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fay9k3nf86inhwwvt32bv.png" alt="Google Summer of Code logo" width="300" height="38"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Organization:&lt;/strong&gt; Chromium&lt;br&gt;
&lt;strong&gt;Projects Overview:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;a href="https://github.com/GoogleChromeLabs/web-audio-samples/blob/main/src/tests/playwright/README.md" rel="noopener noreferrer"&gt;Web Audio Test and Live Suite&lt;/a&gt;&lt;/li&gt;
&lt;li&gt;Rainfly: Audio Worklets Playground&lt;/li&gt;
&lt;/ul&gt;
&lt;h1&gt;
  
  
  Projects
&lt;/h1&gt;
&lt;h2&gt;
  
  
  Web Audio Test and Live Suite
&lt;/h2&gt;

&lt;p&gt;The Web Audio Test Suite is comprised of performance and benchmark tests for Web Audio. These tests can be run either through Playwright or the Live Suite. Playwright is a browser automation testing framework that runs via CLI or CI. This is useful for automated testing across different browsers or browser versions. Web Audio Test Live Suite is an interactive webpage for running tests locally in your browser and monitoring runtime.&lt;/p&gt;
&lt;h3&gt;
  
  
  Contributions
&lt;/h3&gt;

&lt;p&gt;My contribution to the Web Audio Test and Live Suite centered around its creation, design, and development with &lt;a href="https://github.com/terryzfeng" rel="noopener noreferrer"&gt;@terryzfeng&lt;/a&gt;. After researching between Puppeteer and Playwright, we decided to use Playwright due to its testing capabilities in addition to its browser automation, which we could use for CI.&lt;/p&gt;
&lt;h3&gt;
  
  
  Documentation
&lt;/h3&gt;
&lt;h4&gt;
  
  
  The original draft PR for integrating the Web Audio Test Suite into &lt;code&gt;web-audio-samples&lt;/code&gt;
&lt;/h4&gt;


&lt;div class="ltag_github-liquid-tag"&gt;
  &lt;h1&gt;
    &lt;a href="https://github.com/GoogleChromeLabs/web-audio-samples/pull/368" rel="noopener noreferrer"&gt;
      &lt;img class="github-logo" alt="GitHub logo" src="https://res.cloudinary.com/practicaldev/image/fetch/s--A9-wwsHG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg"&gt;
      &lt;span class="issue-title"&gt;
        [Working Draft] Introduce Playwright test framework
      &lt;/span&gt;
      &lt;span class="issue-number"&gt;#368&lt;/span&gt;
    &lt;/a&gt;
  &lt;/h1&gt;
  &lt;div class="github-thread"&gt;
    &lt;div class="timeline-comment-header"&gt;
      &lt;a href="https://github.com/terryzfeng" rel="noopener noreferrer"&gt;
        &lt;img class="github-liquid-tag-img" src="https://res.cloudinary.com/practicaldev/image/fetch/s--4Nh8894o--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://avatars.githubusercontent.com/u/50178575%3Fv%3D4" alt="terryzfeng avatar"&gt;
      &lt;/a&gt;
      &lt;div class="timeline-comment-header-text"&gt;
        &lt;strong&gt;
          &lt;a href="https://github.com/terryzfeng" rel="noopener noreferrer"&gt;terryzfeng&lt;/a&gt;
        &lt;/strong&gt; posted on &lt;a href="https://github.com/GoogleChromeLabs/web-audio-samples/pull/368" rel="noopener noreferrer"&gt;&lt;time&gt;Jun 11, 2024&lt;/time&gt;&lt;/a&gt;
      &lt;/div&gt;
    &lt;/div&gt;
    &lt;div class="ltag-github-body"&gt;
      &lt;p&gt;Preparing Playwright Test Framework for AudioWorklet Testing&lt;/p&gt;
&lt;p&gt;Tests written here &lt;code&gt;src/tests/playwright&lt;/code&gt; (.spec.ts)
Test pages are in &lt;code&gt;src/tests/playwrights/pages&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;More documentation is written here
&lt;a href="https://docs.google.com/document/d/1e7G9jc4kuVZWvjylTtFE76DzQBsOG6lZSFmV19Kc5cY/edit#heading=h.wb3akxg1nco" rel="nofollow noopener noreferrer"&gt;https://docs.google.com/document/d/1e7G9jc4kuVZWvjylTtFE76DzQBsOG6lZSFmV19Kc5cY/edit#heading=h.wb3akxg1nco&lt;/a&gt;&lt;/p&gt;

    &lt;/div&gt;
    &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/GoogleChromeLabs/web-audio-samples/pull/368" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;


&lt;h4&gt;
  
  
  The first PR to introduce the Web Audio Test and Live Suite
&lt;/h4&gt;


&lt;div class="ltag_github-liquid-tag"&gt;
  &lt;h1&gt;
    &lt;a href="https://github.com/GoogleChromeLabs/web-audio-samples/pull/372" rel="noopener noreferrer"&gt;
      &lt;img class="github-logo" alt="GitHub logo" src="https://res.cloudinary.com/practicaldev/image/fetch/s--A9-wwsHG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg"&gt;
      &lt;span class="issue-title"&gt;
        Playwright Test Suite: realtime-sine (MVP)
      &lt;/span&gt;
      &lt;span class="issue-number"&gt;#372&lt;/span&gt;
    &lt;/a&gt;
  &lt;/h1&gt;
  &lt;div class="github-thread"&gt;
    &lt;div class="timeline-comment-header"&gt;
      &lt;a href="https://github.com/terryzfeng" rel="noopener noreferrer"&gt;
        &lt;img class="github-liquid-tag-img" src="https://res.cloudinary.com/practicaldev/image/fetch/s--4Nh8894o--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://avatars.githubusercontent.com/u/50178575%3Fv%3D4" alt="terryzfeng avatar"&gt;
      &lt;/a&gt;
      &lt;div class="timeline-comment-header-text"&gt;
        &lt;strong&gt;
          &lt;a href="https://github.com/terryzfeng" rel="noopener noreferrer"&gt;terryzfeng&lt;/a&gt;
        &lt;/strong&gt; posted on &lt;a href="https://github.com/GoogleChromeLabs/web-audio-samples/pull/372" rel="noopener noreferrer"&gt;&lt;time&gt;Jul 10, 2024&lt;/time&gt;&lt;/a&gt;
      &lt;/div&gt;
    &lt;/div&gt;
    &lt;div class="ltag-github-body"&gt;
      &lt;p&gt;This PR Implements the "realtime-sine" test with basic infrastructure/framework.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Instruction for local testing&lt;/h2&gt;
&lt;span class="octicon octicon-link"&gt;&lt;/span&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;code&gt;npm install&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;npx playwright install&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;Then &lt;code&gt;npm run test&lt;/code&gt; or &lt;code&gt;npm run test-live&lt;/code&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;code&gt;npm run test&lt;/code&gt; for Playwright tests.&lt;/li&gt;
&lt;li&gt;
&lt;code&gt;npm run test-live&lt;/code&gt; for live suite; after the comment, open up a browser and go to &lt;code&gt;localhost:8080&lt;/code&gt;.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The test result looks like this for &lt;code&gt;npm run test&lt;/code&gt;:
&lt;a rel="noopener noreferrer" href="https://github.com/user-attachments/assets/5e83cf71-b14b-4761-9e5e-e9eef775c429"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--9OauXh7f--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://github.com/user-attachments/assets/5e83cf71-b14b-4761-9e5e-e9eef775c429" alt="Screenshot 2024-07-15 at 8 41 09 AM"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;The test result looks like this for &lt;code&gt;npm run test-live&lt;/code&gt;:
&lt;a rel="noopener noreferrer" href="https://github.com/user-attachments/assets/aa96989e-733a-48e0-937a-576b2c019523"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--9rmuhAvY--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://github.com/user-attachments/assets/aa96989e-733a-48e0-937a-576b2c019523" alt="Screenshot 2024-07-15 at 8 44 37 AM"&gt;&lt;/a&gt;&lt;/p&gt;

    &lt;/div&gt;
    &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/GoogleChromeLabs/web-audio-samples/pull/372" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;


&lt;h4&gt;
  
  
  Adding documentation to the Test and Live Suites, allowing for more crowdsourced tests
&lt;/h4&gt;


&lt;div class="ltag_github-liquid-tag"&gt;
  &lt;h1&gt;
    &lt;a href="https://github.com/GoogleChromeLabs/web-audio-samples/pull/381" rel="noopener noreferrer"&gt;
      &lt;img class="github-logo" alt="GitHub logo" src="https://res.cloudinary.com/practicaldev/image/fetch/s--A9-wwsHG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg"&gt;
      &lt;span class="issue-title"&gt;
        Web Audio Test Suite Documentation
      &lt;/span&gt;
      &lt;span class="issue-number"&gt;#381&lt;/span&gt;
    &lt;/a&gt;
  &lt;/h1&gt;
  &lt;div class="github-thread"&gt;
    &lt;div class="timeline-comment-header"&gt;
      &lt;a href="https://github.com/Kizjkre" rel="noopener noreferrer"&gt;
        &lt;img class="github-liquid-tag-img" src="https://res.cloudinary.com/practicaldev/image/fetch/s--lYQTJ6Ux--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://avatars.githubusercontent.com/u/24882191%3Fv%3D4" alt="Kizjkre avatar"&gt;
      &lt;/a&gt;
      &lt;div class="timeline-comment-header-text"&gt;
        &lt;strong&gt;
          &lt;a href="https://github.com/Kizjkre" rel="noopener noreferrer"&gt;Kizjkre&lt;/a&gt;
        &lt;/strong&gt; posted on &lt;a href="https://github.com/GoogleChromeLabs/web-audio-samples/pull/381" rel="noopener noreferrer"&gt;&lt;time&gt;Jul 17, 2024&lt;/time&gt;&lt;/a&gt;
      &lt;/div&gt;
    &lt;/div&gt;
    &lt;div class="ltag-github-body"&gt;
      &lt;p&gt;Includes:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;How to write tests for Playwright and Live Suite running&lt;/li&gt;
&lt;li&gt;Sample &lt;code&gt;template.html&lt;/code&gt; for test writing&lt;/li&gt;
&lt;li&gt;Notes for Playwright Configuration and Browser setup&lt;/li&gt;
&lt;li&gt;API documentation of &lt;code&gt;audit.js&lt;/code&gt; and &lt;code&gt;recorder&lt;/code&gt; object.&lt;/li&gt;
&lt;/ul&gt;

    &lt;/div&gt;
    &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/GoogleChromeLabs/web-audio-samples/pull/381" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;


&lt;h4&gt;
  
  
  Overcoming cold start on the Test and Live Suites by porting performance tests from WPT
&lt;/h4&gt;


&lt;div class="ltag_github-liquid-tag"&gt;
  &lt;h1&gt;
    &lt;a href="https://github.com/GoogleChromeLabs/web-audio-samples/pull/384" rel="noopener noreferrer"&gt;
      &lt;img class="github-logo" alt="GitHub logo" src="https://res.cloudinary.com/practicaldev/image/fetch/s--A9-wwsHG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg"&gt;
      &lt;span class="issue-title"&gt;
        Playwright Port Performance Tests
      &lt;/span&gt;
      &lt;span class="issue-number"&gt;#384&lt;/span&gt;
    &lt;/a&gt;
  &lt;/h1&gt;
  &lt;div class="github-thread"&gt;
    &lt;div class="timeline-comment-header"&gt;
      &lt;a href="https://github.com/terryzfeng" rel="noopener noreferrer"&gt;
        &lt;img class="github-liquid-tag-img" src="https://res.cloudinary.com/practicaldev/image/fetch/s--4Nh8894o--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://avatars.githubusercontent.com/u/50178575%3Fv%3D4" alt="terryzfeng avatar"&gt;
      &lt;/a&gt;
      &lt;div class="timeline-comment-header-text"&gt;
        &lt;strong&gt;
          &lt;a href="https://github.com/terryzfeng" rel="noopener noreferrer"&gt;terryzfeng&lt;/a&gt;
        &lt;/strong&gt; posted on &lt;a href="https://github.com/GoogleChromeLabs/web-audio-samples/pull/384" rel="noopener noreferrer"&gt;&lt;time&gt;Jul 20, 2024&lt;/time&gt;&lt;/a&gt;
      &lt;/div&gt;
    &lt;/div&gt;
    &lt;div class="ltag-github-body"&gt;
      &lt;p&gt;Porting Performance Tests from &lt;a href="https://source.chromium.org/chromium/chromium/src/+/main:third_party/blink/perf_tests/webaudio/" rel="nofollow noopener noreferrer"&gt;https://source.chromium.org/chromium/chromium/src/+/main:third_party/blink/perf_tests/webaudio/&lt;/a&gt;
to Web Audio Test Suite&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;[x] Gain Test&lt;/li&gt;
&lt;li&gt;[x] Panner Test&lt;/li&gt;
&lt;li&gt;[x] Timeline Insert Event&lt;/li&gt;
&lt;li&gt;[x] Audio Buffer Source Node&lt;/li&gt;
&lt;li&gt;[x] Audio Worklet Node&lt;/li&gt;
&lt;li&gt;[x] Biquad FIlter Node&lt;/li&gt;
&lt;li&gt;[x] Dynamics Compressor Node Knee&lt;/li&gt;
&lt;li&gt;[x] Dynamics Compressor Node Post Knee&lt;/li&gt;
&lt;li&gt;[x] Dynamics Compressor Node Pre Knee&lt;/li&gt;
&lt;/ul&gt;

    &lt;/div&gt;
    &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/GoogleChromeLabs/web-audio-samples/pull/384" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;


&lt;h4&gt;
  
  
  Fix an issue where the build process did not include all relevant files
&lt;/h4&gt;


&lt;div class="ltag_github-liquid-tag"&gt;
  &lt;h1&gt;
    &lt;a href="https://github.com/GoogleChromeLabs/web-audio-samples/pull/385" rel="noopener noreferrer"&gt;
      &lt;img class="github-logo" alt="GitHub logo" src="https://res.cloudinary.com/practicaldev/image/fetch/s--A9-wwsHG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg"&gt;
      &lt;span class="issue-title"&gt;
        Add style and realtime sine reference to live suite build
      &lt;/span&gt;
      &lt;span class="issue-number"&gt;#385&lt;/span&gt;
    &lt;/a&gt;
  &lt;/h1&gt;
  &lt;div class="github-thread"&gt;
    &lt;div class="timeline-comment-header"&gt;
      &lt;a href="https://github.com/Kizjkre" rel="noopener noreferrer"&gt;
        &lt;img class="github-liquid-tag-img" src="https://res.cloudinary.com/practicaldev/image/fetch/s--lYQTJ6Ux--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://avatars.githubusercontent.com/u/24882191%3Fv%3D4" alt="Kizjkre avatar"&gt;
      &lt;/a&gt;
      &lt;div class="timeline-comment-header-text"&gt;
        &lt;strong&gt;
          &lt;a href="https://github.com/Kizjkre" rel="noopener noreferrer"&gt;Kizjkre&lt;/a&gt;
        &lt;/strong&gt; posted on &lt;a href="https://github.com/GoogleChromeLabs/web-audio-samples/pull/385" rel="noopener noreferrer"&gt;&lt;time&gt;Jul 20, 2024&lt;/time&gt;&lt;/a&gt;
      &lt;/div&gt;
    &lt;/div&gt;
    &lt;div class="ltag-github-body"&gt;
      &lt;p&gt;Fix #382.&lt;/p&gt;

    &lt;/div&gt;
    &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/GoogleChromeLabs/web-audio-samples/pull/385" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;


&lt;h4&gt;
  
  
  Linking the Live Suite to the index page of &lt;code&gt;web-audio-samples&lt;/code&gt;
&lt;/h4&gt;


&lt;div class="ltag_github-liquid-tag"&gt;
  &lt;h1&gt;
    &lt;a href="https://github.com/GoogleChromeLabs/web-audio-samples/pull/386" rel="noopener noreferrer"&gt;
      &lt;img class="github-logo" alt="GitHub logo" src="https://res.cloudinary.com/practicaldev/image/fetch/s--A9-wwsHG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg"&gt;
      &lt;span class="issue-title"&gt;
        Add live suite to tests page and tests page to homepage
      &lt;/span&gt;
      &lt;span class="issue-number"&gt;#386&lt;/span&gt;
    &lt;/a&gt;
  &lt;/h1&gt;
  &lt;div class="github-thread"&gt;
    &lt;div class="timeline-comment-header"&gt;
      &lt;a href="https://github.com/Kizjkre" rel="noopener noreferrer"&gt;
        &lt;img class="github-liquid-tag-img" src="https://res.cloudinary.com/practicaldev/image/fetch/s--lYQTJ6Ux--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://avatars.githubusercontent.com/u/24882191%3Fv%3D4" alt="Kizjkre avatar"&gt;
      &lt;/a&gt;
      &lt;div class="timeline-comment-header-text"&gt;
        &lt;strong&gt;
          &lt;a href="https://github.com/Kizjkre" rel="noopener noreferrer"&gt;Kizjkre&lt;/a&gt;
        &lt;/strong&gt; posted on &lt;a href="https://github.com/GoogleChromeLabs/web-audio-samples/pull/386" rel="noopener noreferrer"&gt;&lt;time&gt;Jul 23, 2024&lt;/time&gt;&lt;/a&gt;
      &lt;/div&gt;
    &lt;/div&gt;
    &lt;div class="ltag-github-body"&gt;
      
    &lt;/div&gt;
    &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/GoogleChromeLabs/web-audio-samples/pull/386" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;


&lt;h2&gt;
  
  
  Rainfly
&lt;/h2&gt;

&lt;p&gt;Rainfly is an Audio Worklet playground, useful for inspecting, developing, and rapid prototyping of Audio Worklet code.&lt;/p&gt;

&lt;h3&gt;
  
  
  Contributions
&lt;/h3&gt;

&lt;p&gt;Along with &lt;a href="https://github.com/terryzfeng" rel="noopener noreferrer"&gt;@terryzfeng&lt;/a&gt;, we created, designed, and developed an MVP of Rainfly using SvelteKit and TailwindCSS.&lt;/p&gt;

&lt;h3&gt;
  
  
  Documentation
&lt;/h3&gt;

&lt;h4&gt;
  
  
  Figma med-fi prototype
&lt;/h4&gt;

&lt;p&gt;&lt;a href="https://www.figma.com/proto/NrpvA1wwQNoc4hnKTAORIg/Rainfly?node-id=1-2&amp;amp;t=VBSHkeRFtwhvNIfU-0&amp;amp;scaling=scale-down&amp;amp;content-scaling=fixed&amp;amp;page-id=0%3A1&amp;amp;starting-point-node-id=1%3A2" rel="noopener noreferrer"&gt;&lt;img src="https://media.dev.to/cdn-cgi/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Feosafuca9s69ur78yr8z.png" alt="Figma prototype" width="800" height="482"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  The original MVP hosted on a separate repository due to separate framework and development environment
&lt;/h4&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--A9-wwsHG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/Kizjkre" rel="noopener noreferrer"&gt;
        Kizjkre
      &lt;/a&gt; / &lt;a href="https://github.com/Kizjkre/rainfly" rel="noopener noreferrer"&gt;
        rainfly
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Google Chrome Labs Web Audio Samples Audio Worklets Sandbox v1.0.0-beta
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;Rainfly&lt;/h1&gt;

&lt;/div&gt;
&lt;div&gt;
  &lt;a rel="noopener noreferrer" href="https://github.com/Kizjkre/rainflysrc/lib/assets/splash.svg"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--FV6xoYpW--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://github.com/Kizjkre/rainflysrc/lib/assets/splash.svg" alt="Rainfly logo"&gt;&lt;/a&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;An AudioWorklet DSP Playground for Chromium Web Audio API Project (2024)&lt;/strong&gt;&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Developing&lt;/h2&gt;

&lt;/div&gt;
&lt;p&gt;Install dependencies with &lt;code&gt;npm install&lt;/code&gt; (or &lt;code&gt;pnpm install&lt;/code&gt; or &lt;code&gt;yarn&lt;/code&gt;), and then start a development server:&lt;/p&gt;
&lt;div class="highlight highlight-source-shell notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;npm run dev

&lt;span class="pl-c"&gt;&lt;span class="pl-c"&gt;#&lt;/span&gt; or start the server and open the app in a new browser tab&lt;/span&gt;
npm run dev -- --open&lt;/pre&gt;

&lt;/div&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Building&lt;/h2&gt;

&lt;/div&gt;
&lt;p&gt;To create a production version of Rainfly:&lt;/p&gt;
&lt;div class="highlight highlight-source-shell notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;npm run build&lt;/pre&gt;

&lt;/div&gt;
&lt;p&gt;You can preview the production build with &lt;code&gt;npm run preview&lt;/code&gt;.&lt;/p&gt;
&lt;/div&gt;



&lt;/div&gt;
&lt;br&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/Kizjkre/rainfly" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;br&gt;
&lt;/div&gt;
&lt;br&gt;


&lt;h4&gt;
  
  
  Introducing Rainfly into &lt;code&gt;web-audio-samples&lt;/code&gt;
&lt;/h4&gt;


&lt;div class="ltag_github-liquid-tag"&gt;
  &lt;h1&gt;
    &lt;a href="https://github.com/GoogleChromeLabs/web-audio-samples/pull/395" rel="noopener noreferrer"&gt;
      &lt;img class="github-logo" alt="GitHub logo" src="https://res.cloudinary.com/practicaldev/image/fetch/s--A9-wwsHG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg"&gt;
      &lt;span class="issue-title"&gt;
        Rainfly - An AudioWorklet DSP Playground [MVP]
      &lt;/span&gt;
      &lt;span class="issue-number"&gt;#395&lt;/span&gt;
    &lt;/a&gt;
  &lt;/h1&gt;
  &lt;div class="github-thread"&gt;
    &lt;div class="timeline-comment-header"&gt;
      &lt;a href="https://github.com/terryzfeng" rel="noopener noreferrer"&gt;
        &lt;img class="github-liquid-tag-img" src="https://res.cloudinary.com/practicaldev/image/fetch/s--4Nh8894o--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://avatars.githubusercontent.com/u/50178575%3Fv%3D4" alt="terryzfeng avatar"&gt;
      &lt;/a&gt;
      &lt;div class="timeline-comment-header-text"&gt;
        &lt;strong&gt;
          &lt;a href="https://github.com/terryzfeng" rel="noopener noreferrer"&gt;terryzfeng&lt;/a&gt;
        &lt;/strong&gt; posted on &lt;a href="https://github.com/GoogleChromeLabs/web-audio-samples/pull/395" rel="noopener noreferrer"&gt;&lt;time&gt;Aug 25, 2024&lt;/time&gt;&lt;/a&gt;
      &lt;/div&gt;
    &lt;/div&gt;
    &lt;div class="ltag-github-body"&gt;
      &lt;p&gt;This PR is to introduce Rainfly: An AudioWorklet DSP Playground for Web Audio. This online AudioWorklet IDE streamlines writing custom JavaScript AudioWorklet code, building Web Audio DSP graphs, and recording output for easy visualization, analysis and validation.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Rainfly MVP Features:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Monaco Code Editor for writing &lt;code&gt;AudioWorkletProcessor&lt;/code&gt; and &lt;code&gt;AudioContext&lt;/code&gt; graph&lt;/li&gt;
&lt;li&gt;Realtime DSP execution via &lt;code&gt;AudioContext&lt;/code&gt;, can pause and play&lt;/li&gt;
&lt;li&gt;Recording and visualization of DSP output a la &lt;a href="https://github.com/hoch/canopy" rel="noopener noreferrer"&gt;Canopy&lt;/a&gt;
&lt;/li&gt;
&lt;li&gt;Example AudioWorklet code and boilerplate&lt;/li&gt;
&lt;li&gt;Error console for JS execution error feedback&lt;/li&gt;
&lt;li&gt;Exporting JS code or recorded output to a .wav&lt;/li&gt;
&lt;li&gt;Vim support&lt;/li&gt;
&lt;li&gt;Built with Svelte&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Authors:&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;@terryzfeng&lt;/li&gt;
&lt;li&gt;&lt;a class="mentioned-user" href="https://dev.to/kizjkre"&gt;@kizjkre&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;GSoC 2024&lt;/p&gt;

    &lt;/div&gt;
    &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/GoogleChromeLabs/web-audio-samples/pull/395" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;


&lt;h2&gt;
  
  
  Other Miscellaneous Work
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Onboarding PR to familiarize myself with Google standards
&lt;/h3&gt;


&lt;div class="ltag_github-liquid-tag"&gt;
  &lt;h1&gt;
    &lt;a href="https://github.com/GoogleChromeLabs/web-audio-samples/pull/359" rel="noopener noreferrer"&gt;
      &lt;img class="github-logo" alt="GitHub logo" src="https://res.cloudinary.com/practicaldev/image/fetch/s--A9-wwsHG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg"&gt;
      &lt;span class="issue-title"&gt;
        Preparing resources documentation for Audio Worklets playground.
      &lt;/span&gt;
      &lt;span class="issue-number"&gt;#359&lt;/span&gt;
    &lt;/a&gt;
  &lt;/h1&gt;
  &lt;div class="github-thread"&gt;
    &lt;div class="timeline-comment-header"&gt;
      &lt;a href="https://github.com/Kizjkre" rel="noopener noreferrer"&gt;
        &lt;img class="github-liquid-tag-img" src="https://res.cloudinary.com/practicaldev/image/fetch/s--lYQTJ6Ux--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://avatars.githubusercontent.com/u/24882191%3Fv%3D4" alt="Kizjkre avatar"&gt;
      &lt;/a&gt;
      &lt;div class="timeline-comment-header-text"&gt;
        &lt;strong&gt;
          &lt;a href="https://github.com/Kizjkre" rel="noopener noreferrer"&gt;Kizjkre&lt;/a&gt;
        &lt;/strong&gt; posted on &lt;a href="https://github.com/GoogleChromeLabs/web-audio-samples/pull/359" rel="noopener noreferrer"&gt;&lt;time&gt;May 10, 2024&lt;/time&gt;&lt;/a&gt;
      &lt;/div&gt;
    &lt;/div&gt;
    &lt;div class="ltag-github-body"&gt;
      &lt;p&gt;Added a comment to landing_data in anticipation of the Audio Worklets playground.&lt;/p&gt;

    &lt;/div&gt;
    &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/GoogleChromeLabs/web-audio-samples/pull/359" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;


&lt;h3&gt;
  
  
  Fixing linter issues
&lt;/h3&gt;


&lt;div class="ltag_github-liquid-tag"&gt;
  &lt;h1&gt;
    &lt;a href="https://github.com/GoogleChromeLabs/web-audio-samples/pull/373" rel="noopener noreferrer"&gt;
      &lt;img class="github-logo" alt="GitHub logo" src="https://res.cloudinary.com/practicaldev/image/fetch/s--A9-wwsHG--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg"&gt;
      &lt;span class="issue-title"&gt;
        Downgrade eslint to be compatible with eslintrc
      &lt;/span&gt;
      &lt;span class="issue-number"&gt;#373&lt;/span&gt;
    &lt;/a&gt;
  &lt;/h1&gt;
  &lt;div class="github-thread"&gt;
    &lt;div class="timeline-comment-header"&gt;
      &lt;a href="https://github.com/Kizjkre" rel="noopener noreferrer"&gt;
        &lt;img class="github-liquid-tag-img" src="https://res.cloudinary.com/practicaldev/image/fetch/s--lYQTJ6Ux--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_800/https://avatars.githubusercontent.com/u/24882191%3Fv%3D4" alt="Kizjkre avatar"&gt;
      &lt;/a&gt;
      &lt;div class="timeline-comment-header-text"&gt;
        &lt;strong&gt;
          &lt;a href="https://github.com/Kizjkre" rel="noopener noreferrer"&gt;Kizjkre&lt;/a&gt;
        &lt;/strong&gt; posted on &lt;a href="https://github.com/GoogleChromeLabs/web-audio-samples/pull/373" rel="noopener noreferrer"&gt;&lt;time&gt;Jul 10, 2024&lt;/time&gt;&lt;/a&gt;
      &lt;/div&gt;
    &lt;/div&gt;
    &lt;div class="ltag-github-body"&gt;
      &lt;p&gt;Downgrade eslint from 9.5.0 to 8.57.0 to be compatible with eslintrc.&lt;/p&gt;

    &lt;/div&gt;
    &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/GoogleChromeLabs/web-audio-samples/pull/373" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
  &lt;/div&gt;
&lt;/div&gt;


</description>
    </item>
    <item>
      <title>AbleMail: Furthering independence through email</title>
      <dc:creator>​</dc:creator>
      <pubDate>Thu, 21 May 2020 19:58:05 +0000</pubDate>
      <link>https://dev.to/kizjkre/ablemail-furthering-independence-through-email-3ngi</link>
      <guid>https://dev.to/kizjkre/ablemail-furthering-independence-through-email-3ngi</guid>
      <description>&lt;h2&gt;
  
  
  My Final Project
&lt;/h2&gt;

&lt;h3&gt;
  
  
  What is AbleMail?
&lt;/h3&gt;

&lt;p&gt;AbleMail is an email client designed for people with cognitive disabilities. This started as a project addressing the needs of my school community, but ended up growing much further and much bigger. I originally wanted to make this for Jon, an important member of our school community. He works in our school’s media department with recording assemblies as well as organizing all of the A/V equipment. He was introduced to our school via On-the-Move, a nonprofit organization dedicated to helping people with intellectual and developmental disabilities find employment opportunities. I had the fortune of working with him and his parents throughout the development of AbleMail. The hope of this project is to let Jon, and others like him, be able to use email independently.&lt;/p&gt;

&lt;h3&gt;
  
  
  Why?
&lt;/h3&gt;

&lt;p&gt;Email is a crucial tool for workplace communication and collaboration; however, current email clients present accessibility barriers for people with cognitive disabilities. For example, Jon is unable to use email independently. Any job related communication, such as changes to his work schedule, must be emailed to his job coach or his mother who handle the logistics of his employment. AbleMail features a visually simple interface so Jon can (1) comprehend, (2) respond, and (3) compose emails independently. Since Jon struggles with a slow reading rate, text-to-speech capability converts the text of an email into audible words to improve email comprehension. AbleMail provides large and colorful icons that allow Jon to respond to emails with customized pre-written responses. Under AbleMail settings, icons and written responses can easily be changed and new ones added. Lastly, AbleMail allows Jon to compose emails through dictation and to attach an audio clip of his recorded response. AbleMail empowers Jon to communicate with his employer by email, thereby increasing his independence, ownership of his work, privacy, and self-esteem.&lt;/p&gt;

&lt;h2&gt;
  
  
  Demo Link
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://ablemail.github.io/"&gt;AbleMail&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Link to Code
&lt;/h2&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--vWogaON8--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://practicaldev-herokuapp-com.freetls.fastly.net/assets/github-logo-28d89282e0daa1e2496205e2f218a44c755b0dd6536bbadf5ed5a44a7ca54716.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/ablemail"&gt;
        ablemail
      &lt;/a&gt; / &lt;a href="https://github.com/ablemail/ablemail"&gt;
        ablemail
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Furthering independence through email.
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;h1&gt;
&lt;a rel="noopener noreferrer" href="https://raw.githubusercontent.com/ablemail/ablemail/next/static/logo-blue.png"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--X9X1ZetH--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://raw.githubusercontent.com/ablemail/ablemail/next/static/logo-blue.png" alt="AbleMail"&gt;&lt;/a&gt;
&lt;/h1&gt;
&lt;p&gt;&lt;strong&gt;Furthering independence through email:&lt;/strong&gt; AbleMail is a free email client web app that allows people with cognitive disabilities to independently use email.&lt;/p&gt;
&lt;p&gt;Try the app &lt;a href="https://ablemail.herokuapp.com" rel="nofollow"&gt;here&lt;/a&gt;!&lt;/p&gt;
&lt;p&gt;Created and maintained by &lt;a href="https://www.github.com/theamazingness"&gt;Tristan Peng&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;This project was made with &lt;a href="https://nextjs.org/" rel="nofollow"&gt;Next.js&lt;/a&gt;, &lt;a href="https://material-ui.com" rel="nofollow"&gt;Material UI&lt;/a&gt;, &lt;a href="http://expressjs.com" rel="nofollow"&gt;Express&lt;/a&gt;, and &lt;a href="https://reactjs.org" rel="nofollow"&gt;React&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;
Setup&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Clone this repository
&lt;code&gt;git clone https://github.com/TheAmazingness/ablemail.git &amp;lt;your-project-folder&amp;gt;&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Run &lt;code&gt;yarn&lt;/code&gt; on the folder to install all dependencies.&lt;/li&gt;
&lt;li&gt;Run &lt;code&gt;yarn run dev&lt;/code&gt; for the dev version.&lt;/li&gt;
&lt;li&gt;Visit &lt;a href="http://localhost:3000" rel="nofollow"&gt;&lt;code&gt;http://localhost:3000&lt;/code&gt;&lt;/a&gt;.&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;
Signing In With a Gmail Account&lt;/h2&gt;
&lt;ol&gt;
&lt;li&gt;Visit &lt;a href="https://myaccount.google.com/" rel="nofollow"&gt;https://myaccount.google.com/&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Click on &lt;code&gt;Security&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Turn on &lt;code&gt;Less secure app access&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Go back to AbleMail&lt;/li&gt;
&lt;li&gt;Sign in&lt;/li&gt;
&lt;/ol&gt;
&lt;h2&gt;
Usage&lt;/h2&gt;
&lt;p&gt;It is recommended to use Google Chrome to use AbleMail because AbleMail uses experimential Web APIs such as &lt;a href="https://caniuse.com/#feat=speech-recognition" rel="nofollow"&gt;&lt;code&gt;SpeechRecognition&lt;/code&gt;&lt;/a&gt; and &lt;a href="https://caniuse.com/#feat=speech-synthesis" rel="nofollow"&gt;&lt;code&gt;SpeechSynthesis&lt;/code&gt;&lt;/a&gt;. To see what browsers to support these experimental technologies, click on the words to learn more.&lt;/p&gt;
&lt;h2&gt;
Next&lt;/h2&gt;
&lt;p&gt;This branch is for AbleMail with Next.js, React hooks…&lt;/p&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/ablemail/ablemail"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;
&lt;br&gt;
&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--vWogaON8--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://practicaldev-herokuapp-com.freetls.fastly.net/assets/github-logo-28d89282e0daa1e2496205e2f218a44c755b0dd6536bbadf5ed5a44a7ca54716.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/ablemail"&gt;
        ablemail
      &lt;/a&gt; / &lt;a href="https://github.com/ablemail/ablemail-backend"&gt;
        ablemail-backend
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      Backend for AbleMail. Written in Node.js
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;h1&gt;
AbleMail Backend&lt;/h1&gt;
&lt;p&gt;This repository holds the server code for AbleMail. Check out the &lt;a href="https://raw.githubusercontent.com/ablemail/ablemail-backend/master/#API"&gt;api&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;
API&lt;/h2&gt;
&lt;h3&gt;
GET&lt;/h3&gt;
&lt;h4&gt;
GET &lt;code&gt;/&lt;/code&gt;
&lt;/h4&gt;
&lt;p&gt;Redirects to the &lt;a href="https://ablemail.github.io" rel="nofollow"&gt;AbleMail client&lt;/a&gt;.&lt;/p&gt;
&lt;h4&gt;
GET &lt;code&gt;/auth/signup&lt;/code&gt;
&lt;/h4&gt;
&lt;p&gt;Signs up a new non-Google user and generates a session.&lt;/p&gt;
&lt;h5&gt;
Query&lt;/h5&gt;
&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;code&gt;key&lt;/code&gt;&lt;/th&gt;
&lt;th&gt;&lt;code&gt;email&lt;/code&gt;&lt;/th&gt;
&lt;th&gt;&lt;code&gt;pass&lt;/code&gt;&lt;/th&gt;
&lt;th&gt;&lt;code&gt;first&lt;/code&gt;&lt;/th&gt;
&lt;th&gt;&lt;code&gt;pass&lt;/code&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;String&lt;/td&gt;
&lt;td&gt;String&lt;/td&gt;
&lt;td&gt;String&lt;/td&gt;
&lt;td&gt;String&lt;/td&gt;
&lt;td&gt;String&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;A key that authorizes the connection.&lt;/td&gt;
&lt;td&gt;User's email. Make sure it does not end in &lt;code&gt;@gmail.com&lt;/code&gt;.&lt;/td&gt;
&lt;td&gt;User's password.&lt;/td&gt;
&lt;td&gt;User's first name.&lt;/td&gt;
&lt;td&gt;User's last name.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;h4&gt;
GET &lt;code&gt;/auth/google&lt;/code&gt;
&lt;/h4&gt;
&lt;p&gt;Authorizes a Google user&lt;/p&gt;
&lt;h5&gt;
Query&lt;/h5&gt;
&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;code&gt;key&lt;/code&gt;&lt;/th&gt;
&lt;th&gt;&lt;code&gt;email&lt;/code&gt;&lt;/th&gt;
&lt;th&gt;&lt;code&gt;pass&lt;/code&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;String&lt;/td&gt;
&lt;td&gt;String&lt;/td&gt;
&lt;td&gt;String&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;A key that authorizes the connection.&lt;/td&gt;
&lt;td&gt;User's email. Make sure it does not end in &lt;code&gt;@gmail.com&lt;/code&gt;.&lt;/td&gt;
&lt;td&gt;User's password.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;h4&gt;
GET &lt;code&gt;/auth/google/redirect&lt;/code&gt;
&lt;/h4&gt;
&lt;p&gt;Redirects to Google auth page.&lt;/p&gt;
&lt;h5&gt;
Query&lt;/h5&gt;
&lt;p&gt;None&lt;/p&gt;
&lt;h4&gt;
GET &lt;code&gt;/auth/google/callback&lt;/code&gt;
&lt;/h4&gt;
&lt;p&gt;Redirects to the &lt;a href="https://ablemail.github.io" rel="nofollow"&gt;AbleMail client&lt;/a&gt; with the access token.&lt;/p&gt;
&lt;h5&gt;
Query&lt;/h5&gt;
&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;code&gt;code&lt;/code&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;String&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Google access token.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;
&lt;h4&gt;
GET &lt;code&gt;/get-mail/google&lt;/code&gt;
&lt;/h4&gt;
&lt;p&gt;Gets last 6 messages from Google.&lt;/p&gt;
&lt;h5&gt;
Query&lt;/h5&gt;
&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;&lt;code&gt;key&lt;/code&gt;&lt;/th&gt;
&lt;th&gt;&lt;code&gt;token&lt;/code&gt;&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;String&lt;/td&gt;
&lt;td&gt;String&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;A key that authorizes the connection.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;…&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/ablemail/ablemail-backend"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


&lt;h2&gt;
  
  
  How I built it
&lt;/h2&gt;

&lt;p&gt;This is probably my largest project I've worked on, and I have learned a lot throughout my development process. For AbleMail, I used React, Redux and Express to build the application. Since I was also just starting to learn React when I built AbleMail, I faced a lot of challenges with React's steep learning curve, especially getting used to React's model of organizing components. Even though the syntax presented a lot of things for me to learn, I think the biggest challenge that I faced during this process is the mail protocols. At the inception of this project, I knew nothing about IMAP, SMTP, and POP, but this was integral to AbleMail, so I had to learn about how each protocol worked and its implementation in Node.js.&lt;/p&gt;

&lt;p&gt;Another learning opportunity that I'm facing right now has to do with authentication and security. I use passport.js to manage all of the logging in and authentication, but I am facing bugs relating to sessions that are giving me lots of trouble at the moment. However, I am confident that, like the other bugs that have challenged me, that I will be able to fix it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Additional Thoughts / Feelings / Stories
&lt;/h2&gt;

&lt;h3&gt;
  
  
  YouTube Video
&lt;/h3&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/tpSiwp1Ka14"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

</description>
      <category>octograd2020</category>
      <category>githubsdp</category>
    </item>
  </channel>
</rss>
