Pen Settings

HTML

CSS

CSS Base

Vendor Prefixing

Add External Stylesheets/Pens

Any URLs added here will be added as <link>s in order, and before the CSS in the editor. You can use the CSS from another Pen by using its URL and the proper URL extension.

+ add another resource

JavaScript

Babel includes JSX processing.

Add External Scripts/Pens

Any URL's added here will be added as <script>s in order, and run before the JavaScript in the editor. You can use the URL of any other Pen and it will include the JavaScript from that Pen.

+ add another resource

Packages

Add Packages

Search for and use JavaScript packages from npm here. By selecting a package, an import statement will be added to the top of the JavaScript editor for this package.

Behavior

Save Automatically?

If active, Pens will autosave every 30 seconds after being saved once.

Auto-Updating Preview

If enabled, the preview panel updates automatically as you code. If disabled, use the "Run" button to update.

Format on Save

If enabled, your code will be formatted when you actively save your Pen. Note: your code becomes un-folded during formatting.

Editor Settings

Code Indentation

Want to change your Syntax Highlighting theme, Fonts and more?

Visit your global Editor Settings.

HTML

              
                <!-- <script src="https://cdn.freecodecamp.org/testable-projects-fcc/v1/bundle.js"></script> -->

<body>
  <nav id="navbar">
    <header>
      <h2>Table of Contents</h2>
    </header>
    <div class="nav-link-wrapper">
      <a class="nav-link" href="#voice_commands">Voice Commands</a>
      <a class="nav-link" href="#text_commands">Text Commands</a>
      <a class="nav-link" href="#emote_actions">Emote Actions</a>
      <a class="nav-link" href="#stream_pet">Stream Pet</a>
      <a class="nav-link" href="#flappy_jason">Flappy Jason</a>
    </div>
  </nav>
  
  <div class="border"></div>

  <main id="main-doc">
    <h1> Learn With Jason Commands</h1>
    <p>Want to have some fun with Jason and the chat? Here's the full list of available commands for you!</p>
    <p>Each command is written how it should be used - so if it shows an <strong>!</strong> don't forget to add that!</p>
    <p>A few of the text examples shown might have some odd-looking words - these are likely the names of different Twitch emotes. When added to the chat, they will turn into the named emote.</p>
    <div class="border-horiz"></div>
    <section class="main-section" id="voice_commands">
      <header>
        <h2>Voice Commands</h2>
      </header>
      <p>For when you just need to make some noise. These commands are often used to get Jason's attention, celebrate when things work, commiserate when they don't, and generally cause some mayhem.</p>
      <p>These will trigger a command to play a soundclip and show an image on the bottom left-hand side of the screen. Some of them will also add text to the chat.</p>
      <ul>
        <li>
          <code>!adult</code>
          <p>Audio played: "I think I need, ah, adult supervision here."</p>
        </li>
        <li>
          <code>!ahem</code>
          <p>Audio played: Jason loudly going "Ahem!"</p>
        </li>
        <li>
          <code>!behold</code>
          <p>Audio played: "Ah-ha! Behold! My Bucket!"</p>
        </li>
        <li>
          <code>!blitzed</code>
          <p>Chat text: "KAPOW YOU GOT BLITZED! MorphinTime"</p>
          <p>Audio played: "You just got blitzed!" then a booming explosion.</p>
        </li>
        <li>
          <code>!code</code>
          <p>Chat text: "oh, so we need to add code? Kappa"</p>
          <p>Audio played: "Oh, so we would need to add code, is that right?"</p>
        </li>
        <li>
          <code>!compooper</code>
          <p>Chat text: "C’mon lil’ compooper!"</p>
          <p>Audio played: "Oh you can do it! C'mon lil' compooper!"</p>
        </li>
        <li>
          <code>!focusup</code>
          <p>Chat text: "What were we doing again?"</p>
          <p>Audio played: "Should we focus up? Should we write some code?"</p>
        </li>
        <li>
          <code>!haxxors</code>
          <p>Chat text: "MorphinTime no0o0o0 my c0d3z y0u h4x0rz! NotLikeThis"</p>
          <p>Audio played: "You hackers! You, you dirty hackers."</p>
        </li>
        <li>
          <code>!holybuckets</code>
          <p>Chat text: "PogChamp jlengsHolyBucket holy buckets! did that just work?!"</p>
          <p>Audio played: "Hooly buckets, did that just work?"</p>
        </li>
        <li>
          <code>!jamstack</code>
          <p>Audio played: "Jamstack!" then quieter "Jamstack!"</p>
        </li>
        <li>
          <code>!justwork</code>
          <p>Audio played: "It would be neat if this just worked."</p>
        </li>
        <li>
          <code>!nope</code>
          <p>Audio played: "And that's just not something I'm willing to do."</p>
        </li>
        <li>
          <code>!offtherails</code>
          <p>Audio played: "I'm sure there's something I was supposed to be doing that I've completely gone off the rails about."</p>
        </li>
        <li>
          <code>!oofda</code>
          <p>Chat text: "riPepperonis riPepperonis riPepperonis riPepperonis riPepperonis riPepperonis"</p>
          <p>Audio played: "Oofda! Alright, so that's exciting."</p>
        </li>
        <li>
          <code>!plzhold</code>
          <p>Chat text: "SeriousSloth compiling..."</p>
          <p>Audio played: Plays elevator music.</p>
        </li>
        <li>
          <code>!potato-salad</code>
          <p>Audio played: "Show me potato salad!"</p>
        </li>
        <li>
          <code>!sonofa</code>
          <p>Chat text: "NotLikeThis NotLikeThis NotLikeThis"</p>
          <p>Audio played: "Ah, sonofa biscuit!"</p>
        </li>
        <li>
          <code>!thiswillwork</code>
          <p>Chat text: "PowerUpL jlengsHolyBucket PowerUpR"</p>
          <p>Audio played: "Oh this will work, this will work." then "Yeesssss!"</p>
        </li>
        <li>
          <code>!whyyy</code>
          <p>Audio played: "What are you doing, computer? Why? Why are you like this?"</p>
        </li>
        <li>
          <code>!youmatter</code>
          <p>Audio played: "Your code has value. Your code matters." then "You have value. You matter."</p>
        </li>
      </ul>
    </section>
    <div class="border-horiz"></div>
    <section class="main-section" id="text_commands">
      <header>
        <h2>Text Commands</h2>
      </header>
      <p>These will add some extra text to the chat, often used as a shortcut to writing out longer text.</p>
      <ul>
        <li>
          <code>!so @username</code>
          <p>Send a shout-out to someone in chat! The <em>@username</em> will be the person's Twitch username.</p>
          <p>Chat text: "Please check out {@username} at {link to username Twitch channel} jlengsStreamBlitz jlengsHolyBucket jlengsBOOP"</p>
        </li>
      </ul>
    </section>
    <div class="border-horiz"></div>
    <section class="main-section" id="emote_actions">
      <header>
        <h2>Emote Actions</h2>
      </header>
      <p>These specific emotes are used to trigger reactions on the screen!</p>
      <ul>
        <li>
          <code>jlengsBOOP</code>
          <p>This will cause a boop emote to rain down on the screen from a random location, and stay on the bottom for a minute. The more boops you do, the more fall down! You can even bury the streamers if enough people boop at once!</p>
        </li>
        <li>
          <code>jlengsCorgi</code>
          <p>Each time a corgi emote is sent, a counter will show on screen with the current corgi count. If the chat sends 60 total corgis, a corgi stampede will occur! This will cause a fun little song to play, and a herd of corgis to frolic across the screen.</p>
        </li>
      </ul>
    </section>
    <div class="border-horiz"></div>
    <section class="main-section" id="stream_pet">
      <header>
        <h2>Stream Pet</h2>
      </header>
      <p>Jason's stream has a pet, and the chat can change it's appearance and control it's placement.</p>
      <ul>
        <li>
          <code>!pet name</code>
          <p>Change which pet is shown on the screen. Valid options for <em>name</em> are <code>submarine</code> or <code>dumpster-fire</code>.</p>
        </li>
        <li>
          <code>!up</code>
          <p>Move the pet up on the screen.</p>
        </li>
        <li>
          <code>!down</code>
          <p>Move the pet down on the screen.</p>
        </li>
        <li>
          <code>!left</code>
          <p>If the pet is currently facing to the left, will move the pet to the left on the screen. Otherwise, will turn the pet to face to the left.</p>
        </li>
        <li>
          <code>!right</code>
          <p>If the pet is currently facing to the right, will move the pet to the right on the screen. Otherwise, will turn the pet to face to the right.</p>
        </li>
      </ul>
    </section>
    <div class="border-horiz"></div>
    <section class="main-section" id="flappy_jason">
      <header>
        <h2>Flappy Jason</h2>
      </header>
      <p>Show a special CSS version of Jason on the bottom left of the screen, make him flap, and change his beard length!</p>
      <p>This animation was created during an episode with Cassidy Williams, <a href="https://codepen.io/jlengstorf/pen/xxwJKvM">you can see the initial CodePen here.</a></p>
      <ul>
        <li>
          <code>!flap</code>
          <p>Makes CSS Jason flap his arms.</p>
        </li>
        <li>
          <code>!grow</code>
          <p>Makes CSS Jason's beard grow a few inches. If you can make it grow long enough, it will turn into a rainbow beard!</p>
        </li>
        <li>
          <code>!shave</code>
          <p>Makes CSS Jason's beard grow shorter a few inches. If the beard is currently in rainbow mode, making it short enough will turn it back to brown.</p>
        </li>
      </ul>
    </section>
    <div class="border-horiz"></div>
    <p>The code for Jason's stream is open sourced online, so you can add new commands if you'd like! You can <a href="https://github.com/learnwithjason/learnwithjason.dev/tree/main/functions">find the repo for the audio and text commands here</a> and <a href="https://github.com/learnwithjason/scenes/blob/main/src/components/submarine.js">the pet functionality here</a>. Enjoy your time during the stream!</p>
  </main>
</body>
              
            
!

CSS

              
                :root {
  --white: #fff;
  --text: #403c4a;
  --text-pink: #c10b7e;
  --yellow: #ffe742;
  --pink: #ff87d4;
  --blue: #87fffb;
  --black: #171321;
  --font-family: jwf, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto,
    Helvetica, Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji",
    "Segoe UI Symbol";
  --gradient: linear-gradient(
    2deg,
    var(--pink),
    var(--yellow) 50%,
    var(--blue)
  );
}

body {
  display: grid;
  grid-template-columns: 0.25fr 5px 1fr;
  grid-template-rows: 1fr;
  font-family: var(--font-family);
  color: var(--text);
}

nav {
  grid-column: 1 / 2;
  background: var(--black);
  color: var(--white);
}

nav header {
  margin-left: 6%;
}

.nav-link-wrapper {
  position: sticky;
  top: 0;
  left: 0;
  display: flex;
  flex-direction: column;
  margin-left: 6%;
}

.nav-link {
  color: white;
  font-size: 1.5rem;
  margin: 3%;
}

.nav-link:hover {
  color: var(--pink);
}

.border {
  width: 5px;
  height: 100%;
  background: var(--gradient);
  grid-column: 2 / 3;
}

main {
  grid-column: 3;
  margin-left: 3%;
}

h1 {
  font-size: 2.5rem;
}

h2 {
  font-size: 2rem;
  margin-bottom: 0.5%;
}

.border-horiz {
  width: 70%;
  height: 3px;
  background: var(--gradient);
  margin: 3% auto 2%;
}

p {
  margin: 1.25% 3%;
}

li {
  margin: 2.5% 1%;
}

code {
  background: var(--black);
  color: var(--white);
  padding: 0.35% 1%;
  font-size: 1.2rem;
  border-radius: 5px;
}

a {
  color: var(--text-pink);
}

@media screen and (max-width: 700px) {
  body {
    display: grid;
    grid-template-rows: 450px 5px 1fr;
    grid-template-columns: 1fr;
    font-family: var(--font-family);
    color: var(--text);
  }

  nav {
    grid-row: 1 / 2;
    grid-column: 1;
  }
  
  nav header {
    text-align: center;
    margin-left: 0;
  }

  .nav-link-wrapper {
    position: relative;
    align-items: center;
    margin-left: 0;
  }

  .border {
    width: 100%;
    height: 5px;
    background: var(--gradient);
    grid-row: 2 / 3;
    grid-column: 1;
  }
  
  main {
  grid-column: 1;
    grid-row: 3;
  margin-left: 3%;
}
  
  p {
  margin: 3%;
}

li {
  margin: 5% 1%;
}
}

              
            
!

JS

              
                
              
            
!
999px

Console