Skip to content
  • Unlock Pro
  • Log in with GitHub
Profile
OverviewSolutions
20
Comments
15

Shawn Lee

@OGShawnLeeMexico600 points

Married to Svelte, TypeScript and EdgeDB and the Vite ecosystem (Vitest is awesome!). Hope one day I will release a cool fullstack app and do some digital concept art. Love Ghost in the Shell, Ergo Proxy, Cowboy Bebop, Avatar Aang, Bladerunner, Bleach, AoT and more.

I’m currently learning...

Software Engineering, React, Java, SQL.

Latest solutions

  • Responsive Browser Extension Manager with TS React and custom hooks!

    #react#tailwind-css#typescript#vite

    Shawn Lee•600
    Submitted 20 days ago

    I would appreciate any feedback on the way I used React. I am not an expert with it.

    Shawn would be happy.


    1 comment
  • Product List Cart with Svelte 5, TypeScript and UnoCSS

    #svelte#typescript

    Shawn Lee•600
    Submitted 7 months ago

    I would like some help with semantic HTML and accessibility. Those are often the most overlooked aspects of web development. I often get kinda lazy with those things and leave it for a future feature update.


    0 comments
  • URL Shortening Landing Page | Animated | Responsive

    #svelte

    Shawn Lee•600
    Submitted over 3 years ago

    1 comment
  • Fully Animated and Responsive Bookmark Landing Page with Malachite UI!

    #svelte

    Shawn Lee•600
    Submitted over 3 years ago

    0 comments
  • Animated FAQ section with fully functional Accordion Component

    #svelte

    Shawn Lee•600
    Submitted over 3 years ago

    0 comments
  • Fully Responsive Animated Article Preview Component!

    #svelte

    Shawn Lee•600
    Submitted over 3 years ago

    1 comment
View more solutions

Latest comments

  • birunthakarthikeyan•90
    @birunthakarthikeyan
    Submitted about 1 month ago

    QRCode

    1
    Shawn Lee•600
    @OGShawnLee
    Posted 20 days ago

    It looks good. But I don't understand why you used a router and material since the project is so simple. I get that it is good to practice the tech but still.

    I would recommend deleting empty files and unused dependencies. It is good practice to clear out rubbish.

    If you are a beginner I recommend focusing on the basics like pure React.

    Hope this helps in any way.

  • Gareth•410
    @Gareth-Moore
    Submitted about 3 years ago

    The ULTIMATE PATIENCE tester 5000! Using JS to hurt myself today...

    2
    Shawn Lee•600
    @OGShawnLee
    Posted about 3 years ago

    Hey. Shawn here. I am glad you managed to make it work! My solution took a lot of time and no time at the same time.

    Here is some feedback for you:

    An Accordion is a widget that should follow a pattern documented in the ARIA Authoring Practices Guide. Which would be something like this:

    An Accordion has a structure similar to this.

    <Accordion> -> div
      <AccordionItem> -> div
        <AccordionHeader> -> (h1-h6) or element with aria-role="heading" and aria-level={1-6}
          <AccordionButton> -> button
              This toggles the Panel
          </AccordionButton>
        </AccordionHeader>
        <AccordionPanel> -> div
            This is the content of your Accordion Item.
        </AccordionPanel>
     </AccordionItem>
    </Accordion>
    

    The Button must have aria-controls set to the id of the Panel it controls, when it is visible. It also should have aria-expanded set to either true or false. Should be the only child of the Header.

    The Panel should have aria-labelledby set to the id of the Button, and might have aria-role set to region.

    And optionally, the user should be able to move focus around the Buttons using the Arrow Keys from the keyboard (ArrowUp - ArrowDown).

    This challange was easy for me because I had already built an Accordion component for my headless component library for Svelte. All I had to do was install, import and style. If you havent tried Svelte you should try as it is really beginner friendly and easy to use, and maybe you could check out my library xd. I am working on version 0.9.0 which will have a massive refactor and a new component.

    I hope this is useful for you and best wishes. Have a great day mate!

    ps: I think you should upload your projects in an individual repo so that it is easier to check them and quickly know what languages or frameworks you used.

    ps2: here is the link of the Accordion pattern! https://www.w3.org/WAI/ARIA/apg/patterns/accordion/

  • Dust98•130
    @Dust1100010
    Submitted over 3 years ago

    Cocial Proof Section HTML CSS

    1
    Shawn Lee•600
    @OGShawnLee
    Posted over 3 years ago

    ¿Ey que pasa? Según tu perfil, eres de Perú así que te voy a escribir en Español colega xD.

    Bastante buena la solución! Se ve genial en todos los tamaños de pantalla. Solo que yo le pondría un poco mas de padding a los paneles con las estrellas en desktop, se ven un poco flaquitos en mi opinión.

    Sobre los testimonios, yo usaría un article como tag contenedor y usaría el nombre de las personas como el heading. En este caso sería un h3, pero para ello pondría un h2 para toda la section de los testimonios y lo haría sr-only para que solo lo vean screenreaders. Algo así:

    <section>
      <h2 class="sr-only">Testimonials</h2>
      <div>
          <article>
            <h3>/* nombre */</h3>
          </article>
     </div>
    <section/>
    

    Así usas HTML semántico y es mucho más fácil de leer y entender el código.

    Eso es todo mi feedback. Buena solución colega. Ten un excelente día! :D

    Marked as helpful
  • Mohamed Ehab•350
    @MOHAMED-EHAB-DEV
    Submitted over 3 years ago

    Order Summary Component with Flexbox

    #react#sass/scss#next
    1
    Shawn Lee•600
    @OGShawnLee
    Posted over 3 years ago

    Hey mate. How is it going?

    I checked your project and I have some feedback for you.

    • I suggest wrapping all of your content inside of a main tag.
    • Every page should have an h1. And I would have used a span instead of the h5. By the way headings should go down in order. If you have and h1 then the next one in your page should be and h2 then h3 and so on and so forth. Doesn't apply if your are going up, though.
    • Always have and alt attribute in your images, you can leave them empty if the image is a decoration.
    • I would use this to align your card properly and correct the background pattern and color.
    body {
      background-image: url("../images/pattern-background-desktop.svg");
      background-repeat: no-repeat;
      background-color:  hsl(225, 100%, 94%);
      background-size: 100%; /* the pattern stretches the whole view width*/
      display: flex;
      flex-direction: column;
      align-items: center;
      justify-content: center;
      gap: 3.5rem; /* separation between the card and attribution */
      min-height: 100vh;
    }
    

    I hope this helps, mate. Have a great day!

    Marked as helpful
  • Kristine•310
    @sn-tin
    Submitted over 3 years ago

    FAQ accordion card HTML, CSS (Sass), Bootstrap 5, Vanilla JavaScript

    2
    Shawn Lee•600
    @OGShawnLee
    Posted over 3 years ago

    Hello! How's it going? You did an excellent job!

    Here is some quick feedback to you. Since I am not a big fan of plain CSS or SCSS I won't help you there sorry :'( Instead I will help you out with the Accordion implementation.

    • Accordion Button should be nested inside of a heading or an element with role set to heading and an appropiate aria-level, and it should be the only child element. Something like this:
    <h2>
       <button> Your Accordion Item Title Here! </button>
    </h2>
    <div role="heading" aria-level="2">
       <button> Your Accordion Item Title Here! </button>
    </div>
    
    • Accordion Button should always have aria-expanded set to true (panel is visible) or false (panel is not visible).

    • Each Accordion Button and its related Accordion Panel should be linked to each other: the button should have aria-controls set to the id of the Accordion Panel (when the Panel is visible) and the Panel might have aria-labelledby pointing to the button id. Something like this:

    <h2>
      <button id="button-1" aria-controls="panel-1"> Accordion Button </button>
    </h2>
     <div id="panel 1" aria-labelledby="button-1">
      Accordion Panel
     </div>
    
    • An Accordion may implement navigation using the vertical keyboard arrows (ArrowUp - ArrowDown). This is optional.

    I recommend looking at the WAI-ARIA Authoring Practices. It explains all the behaviour and accessibility you need to build cool HTML patterns like accordions, dialogs, menus, tabs, etc.

    Hope this helps you. Keep working on your projects and have fun. Best wishes!

    Marked as helpful
  • Rocky Gurung•50
    @grgrocky
    Submitted over 3 years ago

    qr-code using html and css

    1
    Shawn Lee•600
    @OGShawnLee
    Posted over 3 years ago

    Hey. Good job! Here's my feedback for you mate.

    • Yep. You can target both paragraph using a common class and add styles that they share. However you should have not added two paragraphs, instead you could have used an h1 for the big boi and a paragraph for the small one.
    • Your markup should have an h1 which would be the one I mentioned.
    • You images must have alt attributes, you can leave them empty if the image is used for decoration.
    • I think you should have used CSS variables to store the theme from the the style guide.
    • For centering your content I would have coded something like this.
    body {
      display: flex;
      flex-direction: column;
      align-items: center;
      justify-content: center;
      gap: 7.5rem;
      font-family: 'Outfit', sans-serif; /* apply the font globally here */
      min-height: 100vh;
    }
    

    And removed the margin from the #container selector.

    Hope this helps mate. Have a great day!

    Marked as helpful
View more comments

Stay up to datewith new challenges, featured solutions, selected articles, and our latest news

Frontend Mentor

  • Unlock Pro
  • Contact us
  • FAQs
  • Become a partner

Explore

  • Learning paths
  • Challenges
  • Solutions
  • Articles

Community

  • Discord
  • Guidelines

For companies

  • Hire developers
  • Train developers
© Frontend Mentor 2019 - 2025
  • Terms
  • Cookie Policy
  • Privacy Policy
  • License

Oops! 😬

You need to be logged in before you can do that.

Log in with GitHub

Oops! 😬

You need to be logged in before you can do that.

Log in with GitHub

Oops! 😬

You need to be logged in before you can do that.

Log in with GitHub

Oops! 😬

You need to be logged in before you can do that.

Log in with GitHub

Oops! 😬

You need to be logged in before you can do that.

Log in with GitHub

Oops! 😬

You need to be logged in before you can do that.

Log in with GitHub

Oops! 😬

You need to be logged in before you can do that.

Log in with GitHub

Oops! 😬

You need to be logged in before you can do that.

Log in with GitHub

Oops! 😬

You need to be logged in before you can do that.

Log in with GitHub

Oops! 😬

You need to be logged in before you can do that.

Log in with GitHub

Oops! 😬

You need to be logged in before you can do that.

Log in with GitHub

Oops! 😬

You need to be logged in before you can do that.

Log in with GitHub

Oops! 😬

You need to be logged in before you can do that.

Log in with GitHub

Oops! 😬

You need to be logged in before you can do that.

Log in with GitHub

Oops! 😬

You need to be logged in before you can do that.

Log in with GitHub

Oops! 😬

You need to be logged in before you can do that.

Log in with GitHub

Oops! 😬

You need to be logged in before you can do that.

Log in with GitHub

Oops! 😬

You need to be logged in before you can do that.

Log in with GitHub

Oops! 😬

You need to be logged in before you can do that.

Log in with GitHub

Oops! 😬

You need to be logged in before you can do that.

Log in with GitHub

Oops! 😬

You need to be logged in before you can do that.

Log in with GitHub

Oops! 😬

You need to be logged in before you can do that.

Log in with GitHub

Oops! 😬

You need to be logged in before you can do that.

Log in with GitHub

Oops! 😬

You need to be logged in before you can do that.

Log in with GitHub

Oops! 😬

You need to be logged in before you can do that.

Log in with GitHub

Oops! 😬

You need to be logged in before you can do that.

Log in with GitHub

Oops! 😬

You need to be logged in before you can do that.

Log in with GitHub

Oops! 😬

You need to be logged in before you can do that.

Log in with GitHub

Oops! 😬

You need to be logged in before you can do that.

Log in with GitHub

Oops! 😬

You need to be logged in before you can do that.

Log in with GitHub

Oops! 😬

You need to be logged in before you can do that.

Log in with GitHub