Not Found
Not Found
Not Found
Not Found
Not Found
Not Found
Not Found
Not Found
Not Found
Not Found
Not Found
Not Found
Not Found
Not Found
Not Found
Not Found
Not Found
Not Found
Not Found
Not Found

All comments

  • P
    Szeri 60

    @Szeri323

    Submitted

    Hello I'm Szeri 👋, This is my solution. What do you think about it?

    Technology💻:

    • HTML, SASS/SCSS, JavaScript
    • Gulp
    • NPM

    Adventages🏅:

    • minified CSS and JavaScript code
    • optimalized images

    Conclusion💡:

    It was a very simple and at the same time very difficult project. I had to choose between writing entirely my own code or using <details> and <summary> tags and losing full control of the code. What I mean is that if you use ready-made code, you have to read a lot and know exactly what it does. During my first session, I chose the predefined tags and everything was fine. I styled them and started animating them. I used CSS animation and JavaScript eventListener. At first glance, everything was fine. On the first click, all sections were animated and accessibility worked fine, but... when I opened the same section a second time, the animation didn't work. In my readme file you will find a link to a very useful article that I received from Klrfl in the discord group. I knew this could be problematic and I was right, so I decided to write my own code that animates and triggers the animation when the button is clicked. I will give myself time and come back stronger to complete the task based on predefined elements, for now the job has been done and all assumptions have been met.

    If you have any tips regarding my code or problem, please let me know.

    FAQ Accordion - Gulp, SASS/SCSS, Accessibility

    #accessibility#animation#sass/scss#gulp

    1

    P
    Fluffy Kas 7,735

    @FluffyKas

    Posted

    Heyo,

    First of all, your solution looks really nice and it works well. The animations you added are great. Maybe it would a nice addition if only one answer could be opened at a time, and all the other opened answers would close when you open a new one.

    Unfortunately, it looks like you forgot to upload your readme file which is a shame, I would've liked to take a look! It's also useful to upload the original version of your CSS and JS, not only the minified version so other developers can take a look at your actual code (minified code is not really for humans).

    From what little I can tell, I would suggest the following small changes:

    • Remove alt tags from your images, there is no need for them (in a sense that the text saying plus or minus icon is in no way helpful to any user to figure out the functionality of the button itself). Your question button already has a text, but maybe it's not quite clear what it does without the visual cue of the +/- icon so perhaps adding an aria-label to the button is a good idea. I'm guessing a bit here, probably someone more well-versed in accessibility could suggest a good solution for this.
    • There are a lot of places where using pixels isn't really great. Most importantly, font-size. You shouldn't make an assumption that your users will use the default browser size of 16px. Using rem here would make sure that your font size scales correctly when those default settings are changed.

    Without looking at the code, I can't really say more, but I think overall you did a great job, well done!

    Marked as helpful

    0
  • P

    @CloudOfAlemar

    Submitted

    Hello everyone, I just completed the Meet Landing Page challenge! I feel that I'm gaining experience and that is allowing me to complete these challenges at a faster pace. My focus on the next project is to make sure that I organize my code so that I'm not repeating myself too much and to keep it organized so that everything runs smooth. I was excited when using CSS Grid this time for the four images. I can't believe how much easier it was to get consistent spacing, instead of using Flexbox. After a few more projects I want to try out a CSS framework. Maybe Tailwind CSS? And maybe add some animations to the designs as well. It's going to be fun, so stay tuned :D

    P
    Fluffy Kas 7,735

    @FluffyKas

    Posted

    Heyo,

    This looks great, well done! There is one small issue I noticed: there is an overflow on your header (probably the images causing this). You could just get rid of this with an overflow: hidden on the header, so no big deal.

    1
  • @J3r3mia

    Submitted

    Struggled with making my buttons to stick to the bottom for equal space when responsive. Again, with buttons when you hover over they have a blackish outline instead of white one{background-color: transparent}.

    3 column preview card

    #accessibility

    1

    P
    Fluffy Kas 7,735

    @FluffyKas

    Posted

    Heyo,

    Buttons come with some ugly default styles you need to overwrite, one of these styles is the border. Your problem is being caused by this: border-style: outset. Instead, there is an easier way to overwrite the default look: border: 2px solid white.

    I'd also say, you could adjust the breakpoint a bit, it switches way too early from the mobile to the desktop view, so the desktop view looks really squished. The min-width could easily be around 870px instead of 600.

    The alt texts of the little icons can be left blank, they are decorative only (this goes for most icons).

    Other than these, your solution looks pretty good! Well done.

    Marked as helpful

    1
  • P
    Fluffy Kas 7,735

    @FluffyKas

    Posted

    Hey there,

    There are a few problems with your code but the main issue that's causing this behaviour is where you placed your preventDefault:

    btnOne.addEventListener('click', function (e) {
      errorMessage.innerHTML = '';
      if (!emailRe.test(email.value)) {
        e.preventDefault();
        errorMessage.innerHTML = 'valid email required';
        email.style.borderColor = 'hsl(4, 100%, 67%)';
        email.style.color = 'hsl(4, 100%, 67%)';
        email.style.backgroundColor = 'hsl(4, 100%, 90%)';
      } else {
        container.classList.add('hidden');
        subscribing.classList.add('show');
      }
    });
    

    So preventDefault will only trigger if the regex test fails. Really, it should be always triggered, no matter the test outcome:

    btnOne.addEventListener('click', function (e) {
      errorMessage.innerHTML = '';
      e.preventDefault();
      if (!emailRe.test(email.value)) {
        errorMessage.innerHTML = 'valid email required';
        email.style.borderColor = 'hsl(4, 100%, 67%)';
        email.style.color = 'hsl(4, 100%, 67%)';
        email.style.backgroundColor = 'hsl(4, 100%, 90%)';
      } else {
        container.classList.add('hidden');
        subscribing.classList.add('show');
      }
    });
    

    You should read the MDN article about preventDefault but basically the problem is the following:

    The default behaviour of any form would be to trigger an action (defined by the action attribute in your html) and make a call to the backend. This action would take a pre-defined route to create, update, etc the database with the data within the form. It's all defined in the backend. Validation checks would also happen in the backend. Depending on what framework you're using, you can catch these validation error messages and display them on the frontend.

    What we're doing in these purely frontend challenges is something different. What we want is to prevent this default behaviour, no matter what, as we have no backend to call. We don't define an action (you can remove the action attr entirely from the html), we just add an eventListener and first we always specify that we don't want the default behaviour (see second code snippet). After this, we can play around however we see fit, implement frontend-only validation checks, apply classes, etc.

    What I described here is obviously a basic scenario, backend isn't always called by the action, there are more "controlled" methods to do that depending on the framework but you'll see that once you try React, Vue, etc.

    Hope the explanation was clear enough, if not ask away.

    There are a few other problems with the code that might cause bugs in the future. I keep it simple because this feedback is getting long already :D

    CSS specificity: I'm sure you've heard of this. We always want to keep specificity as low as possible. Consider the following:

    .information {
      padding: 3rem;
    }
    
     /* INSTEAD OF THIS: */
    
    main .container .information {
      padding: 3rem;
    }
    

    The 2 selectors do the same thing, but the first one has a lower specificity. Higher specificity can lead to unexpected behaviour (like, if you didn't use main .show class but just .show class, it wouldn't overwrite the original CSS rules which had a higher specificity).

    Also, your hidden and show classes don't ever get removed by the JS. If you go back to the main card from the success card, you can see that it has a show AND a hidden class as well. For now this isn't causing bugs, but it could. It's best to add rules to remove them when they are no longer needed.

    Hope this was helpful. Good luck!

    Marked as helpful

    2
  • P
    Fluffy Kas 7,735

    @FluffyKas

    Posted

    Hey,

    This looks great! Just a few small things you could perhaps do:

    • remove alt text from icons: as they are decorative, they can be left blank
    • you could add some left and right margin to the container - on certain screen sizes (770-920px) it's touching the sides of the screen

    The rest looks awesome, well done!

    Marked as helpful

    2
  • amoeba25 40

    @amoeba25

    Submitted

    My approach

    This was my first react project. I decided I also wanted to learn tailwind so I have used tailwind here. It made the dev fast but I am not sure if I like it that much. This project also taught me about fetching data and working with state.

    Advice One area I wanted to ask the community about was if my code had proper folder structure and if I was missing best practices in any way, please let me know. This is my first time using tailwind and used React after a long time

    P
    Fluffy Kas 7,735

    @FluffyKas

    Posted

    Hey,

    Your solution looks good! Seems to work as intended. Folder structure wise, i'm not sure what you're asking about. Vite generated a folder structure for you and this challenge didn't require you to add anything on your own really. One thing, I'd say maybe, don't put the README file in the assets, just overwrite the README generated by Vite - using the README template provided for the challenge by Frontend Mentor - and fill it out (screenshots, thought process, etc).

    The React part of the challenge looks good otherwise. There are only a few accessiblity and markup issues:

    • setting a fixed height on you body isn't ideal. Instead of a width: 100% you could go for a min-width: 100vh to make sure you don't have any height issues on any devices
    • always wrap everything in landmark elements, if nothing else, use at least a <main> as a landmark
    • the divider is decorative, therefor it doesn't require an alt text, you can leave its alt blank (like you did for the other image)

    Question: why did you do this: {JSON.stringify(quote.advice)} instead of just {quote.advice}?

    Overall looks great, so well done (:

    0
  • @ucolinmee

    Submitted

    After struggling slightly with the previous NFT challenge, I decided to take the feedback I got from my peers, as well as some of their good coding practices to quickly tackle another HTML & CSS challenge. Not sure if it's due to the new tips I picked up or if this challenge is easier, but I felt good doing this challenge. One of the biggest places that I struggled with was aligning the "Annual Plan" and the "$59.99/yr" on top of one another, but that was where I learned about nesting flexbox items in different orientations to achieve the layout you want.

    Also, a quick shoutout to @MachadoA for the tips on working on the mobile display first and adding 'cursor: pointer' to make the hover effect look better.

    P
    Fluffy Kas 7,735

    @FluffyKas

    Posted

    Hey,

    First of all, it looks great. I'm glad to hear you got some useful feedback and was able to tackle this challenge more easily! Some general tips - for this challenge and for the future ones:

    There is a very easy way to place everything in the center - even vertically:

    body {
    min-height: 100vh;
    display: flex;
    align-items: center;
    justify-content: center;
    }
    

    Or you can do the same with grid and place-items center, as you prefer. Giving the body a min-height will make sure your card is centered vertically. This way you won't need to rely on %-s for margins. Defining margins with % isn't super reliable anyway, you'd do better with em, rem.

    Getting units right: so apart from margins, generally it's best to use rem when you're uncertain what units you should use - like your card width (where you now use px). Px values shouldn't be used widely, apart from setting smaller things, like a border-radius or box-shadow.

    Alt texts: really nice to see you paid attention to this. Just a note: for decorative images, you can leave alts blank - like the music icon here.

    Semantic stuff: make sure to wrap everything in a main tag. Of course you can have other landmark elements, like header, footer, etc in your websites, but there very least you should use a main.

    All in all, really well done!

    Marked as helpful

    1
  • P
    Fluffy Kas 7,735

    @FluffyKas

    Posted

    Heyo,

    Nice solution! Usually it's not the best idea to use position absolute to center something that could be done by flexbox or grid. This is going to help you with what you want to achieve with the footer:

    body {
        display: flex;
        justify-content: space-around;
        flex-direction: column;
        align-items: center;
        min-height: 100vh;
    }
    

    If you get rid of the position absolute (and left, top positions), this is going work just fine. Everything else looks nice, well done!

    Marked as helpful

    1
  • P
    Fluffy Kas 7,735

    @FluffyKas

    Posted

    Hey Karol,

    Looks like a good solution. There are only 2 things I'd mention:

    • For interactions, always choose native interactive elements, inputs elements for inputs, a tags for links, and in this case, a button for making the API call.
    • This is a small thing but in cases like this, instead of giving your card 2 different widths, it might be easier to define just one max-width. This way you could avoid that width-jump at 768px.

    Overall great job though, well done.

    Marked as helpful

    0
  • P
    Joseph 50

    @joeehis1

    Submitted

    For the most part I am comfortable with how the slice I wrote to manage the document state turned out. However I am curious to know if what I did regarding ensuring persistence of the previously selected document and the documents added was okay.

    P
    Fluffy Kas 7,735

    @FluffyKas

    Posted

    Heyo,

    I think you did a great job here. I couldn't find any weird or unexpected behaviour. This must've been really tough to do. One thing you could add is some sort of visual clue on successful save. Perhaps a little toast notification in the corner that times out after a few seconds. Without any, it's a bit confusing whether I managed to save my changes. But again, hats off to you, this challenge seems like a lot of work.

    Marked as helpful

    0
  • lasse-cs 50

    @lasse-cs

    Submitted

    I was not able to get the background colours right for this project.

    How should the rating circles be made accessible? Should this component be a form with HTML radiobuttons and a submit button? Is it possible to style these appropriately?

    I was also not sure how best to enforce that the container should be the same size for both states. I wasn't sure if I should be setting explicit dimensions on the container for this.

    P
    Fluffy Kas 7,735

    @FluffyKas

    Posted

    Heyo,

    Your solution looks great! I think it's okay to deviate from the original challenge every now and then, I think your background gradient is actually nice.

    As you said, the best solution for this would be a form with radio buttons. It's a bit tricky to style it but possible. Essentially, you'd want to visually hide the original radio buttons and style their labels to look like the numbered buttons. Probably adding a legend as a title ("Ratings") is a good idea too.

    I think the only way to ensure the cards are the same size would be setting their width to be a fixed value which yes, might lead to issues with responsiveness (although you could play around with media queries but it's a lot of hassle for a small problem). I think, what you did here looks great, the two cards, at least to me, seem almost identical so I wouldn't worry about it.

    Overall, even if you didn't choose the most accessible path for this challenge what you did is great. Looks like you put a lot of effort into it, so well done!

    0
  • n3ey 50

    @vojtakala-it

    Submitted

    Even though I do use ChatGPT, Stack Overflow, documentations, listed below are the things I still struggle the most with. Mostly, because there are just so many options and the answer doesn't always seem to be clear enough.

    What is the best way to write your CSS ? The nested syntax I used or are there better alternatives. Of course, I know it probably depends, but how did I do when you take a look at my CSS, what should I improve ?

    What about the responsive design ? You can use vmin/vmax, rem/em, %, vw/vh. How do you choose when to use which and why ? I always burn a lot of time at that.

    I mixed using CSS Grid and Flebox, did I use it correctly or is it an overkill ?

    Thank you very much!

    P
    Fluffy Kas 7,735

    @FluffyKas

    Posted

    Hey,

    First off, your solution looks great. And it's nice that you made a detailed README, as well. To answer your questions - or more like, I guess to just add my own take on it:

    You will not get a clear answer from ChatGPT, documentation, etc purely because there isn't one best way to write CSS, or code in general. Everyone has their own preferences. In professional settings, there will be company/team guidelines you will need to follow. If you work alone, you can set your own rules. You should ask yourself, how readable your code is. Would you understand it even if you came back to it in a few months?

    But to be a bit more useful, I can give you my own opinion on this.

    CSS vs SCSS

    For small projects, I tend to go for vanilla CSS. Nowadays vanilla CSS is great and it has almost every feature you'd ever need. With the exception of nesting, which doesn't have a great browser support as of yet. If the code is getting longer and I'm not using a framework and my CSS lives in one file, then I go for SCSS. I love it, nesting is easily and improves readability, especially if you follow BEM class naming. +1: If you feel comfortable with CSS, you could look into Tailwind. I'm using Tailwind for most of my projects as of late, and I hugely prefer it over regular CSS or SCSS. If you know what you're doing, it can be an incredibly fast way of styling a page.

    Units

    Eh, this is a tough one. I use em/rem for almost everything (paddings, margins, max-width, etc). For very small things, like border-radius or box-shadow, I use px. vh/vw I use if I want to position stuff in the background - or giving the body a min-height of 100vh. % I honestly rarely use, but I'm sure there are use cases of it. I'd suggest you try a few approaches, but don't stress over this too much. As long as you're using rems and not pixels and not setting a fixed width and height on things, you're mostly good to go.

    Looking at your code what you could do: stop using px for font-size. Rem is the most optimal for this. The height on the body has to be min-height. Margins, paddings you can set in em or rem, vmin... (Kevin Powell has loads of videos on this, with examples).

    Grid&Flexbox

    Again, whatever works for you. In this regard, as long as it looks good, there isn't really a bad way to do it or such things as too much flexbox.

    Ok, I think I wrote enough. :)) As I mentioned, if you don't already know Kevin Powell's channel, do check it out, he has a video on everything that is CSS related, probably. You did great, I'd suggest not to stress too much and just practice. :) You'll get a feel to it.

    Marked as helpful

    1
  • Asif Patel 280

    @Asifp6021

    Submitted

    while building the project I faced some difficulties in placing elements properly as per the layout.

    P
    Fluffy Kas 7,735

    @FluffyKas

    Posted

    Heyo,

    Your solution looks really good. I noticed a few small things you could improve:

    • Double-check the hover color on the links and buttons, I'm assuming that green colour isn't in the design originally?
    • For small transition animations, like the ones you use in the navbar 0.5s is really long. 0.2s or 0.25s is usually more pleasing to the eye.

    Your markup could be more semantic:

    • You're using a div where you should be using buttons (the div with arrows). Alt texts for these arrows should also be left blank, instead, you could add an aria-label to the buttons with a helper text like "Left" and "Right". Similar goes for the Shop Now button, you should use a link not a p tag.
    • The whole page should be wrapped in a main container instead of a section.
    • Your nav links should be living in a <nav>, and the list of links should be a <ul> with links inside wrapped in <li> tags.
    • There should be a h1 on every page (kinda like a main page title), in this design it would make sense if the "Discover innovative ways to decorate" would be that one.
    • Not every image has to live in a figure. I'd really only add a figure if I wanted to add a caption to my image. There might be other use cases but tbh I personally never had to use it before for anything else than adding caption.

    You got the looks right, so well done! It's a good idea though to stop sometimes and think about the function of each element on the webpage you're developing. Getting a semantic markup right is just as important as the looks.

    1
  • @AbderrahmaneGuerinik

    Submitted

    Hello community👋

    Here is another project finished

    • Responsive for tablet-desktop and mobile📱.

    • 99% Performance 100% SEO 92% Accessibility

    • Your feedback can really help me!

    Enjoy coding!👨‍💻✨

    P
    Fluffy Kas 7,735

    @FluffyKas

    Posted

    Heyo,

    Looks like a really good solution! One thing you could do is to disable the submit button until the user chooses a rating to prevent empty submissions. Few tips to improve on accessibility:

    • They best solution for this sort of rating system is radio buttons. The function of a list of regular buttons may not be immediately obvious for someone who doesn't rely on visuals to use the internet (e.g. ppl using screen readers). To achieve this, you can visually hide the radio buttons and display their labels as the clickable "buttons". Plus, this makes handling the JS bit much easier too. Probably you won't rework the challenge, but I thought it's something you might wanna keep in mind the next time you face a problem like this.
    • Although this is just a component, it's generally a good idea to wrap all your content in at least a <main> tag.
    • For decorative images, you should leave the alt text blank (the star icon and the little image on the thank you page could be both considered decorative images).

    Well done :)

    Marked as helpful

    2
  • P
    Fluffy Kas 7,735

    @FluffyKas

    Posted

    Heyo,

    Looks pretty good! JS wise the only thing I'd double-check is the regex. test@test passed as a valid email address even though it's not exactly valid.

    Semantic markup:

    • You should wrap everything in a <main>. This could be instead of the div called main-wrapper. Alternatively, you can separate the content of the page into header (ping logo), main (form and image) and footer (socials).
    • The social links should be actual links with aria-labels describing where they lead. Best to wrap these in a <ul>.
    • The input and button should be wrapped in a <form>. A label is also missing. Each input should have a label describing what they do, a placeholder is not a reliable equivalent of this. Since the design doesn't contain the label itself, it can be easily hidden with an sr-only (for screen readers) class, like so:
    .sr-only {
    position: absolute;
    width: 1px;
    height: 1px;
    padding: 0;
    margin: -1px;
    overflow: hidden;
    clip: rect(0, 0, 0, 0);
    white-space: nowrap;
    border-width: 0;
    }
    

    CSS:

    • The mobile and desktop sizes are good, but the tablet size is a bit lacking. You could give a max-width to the image and to the form as well so they don't stretch the whole width of the screen.
    • The input has a huge left padding in desktop view, you could perhaps reduce this a bit to look nicer.
    • Socials: I saw this code there:
    @media (min-width: 1440px)
    .social-wrapper {
        padding: 0rem 40.9375rem;
    }
    .social-wrapper {
        display: grid;
        grid-template-columns: repeat(3, 1fr);
        grid-template-rows: 1fr;
        padding: 0rem 7.8125rem;
    }
    

    I see what you're trying to achieve here but instead of the huge padding, you could do something easier:

    display: flex;
    justify-content: center;
    gap: 1.5rem; (note that this is just a guess)
    

    This would be a bit harder to achieve with a grid, at least how you have done it. With flexbox you probably won't even need a media query.

    I hope I was able to help! (:

    Marked as helpful

    1
  • Oanh Ho 180

    @oanh-hth

    Submitted

    Hello, I have a problem with the screenshot generation. My code works normally in browsers, but the generated screenshot is different from my code. How could I solve this problem? Thank you very much :)

    P
    Fluffy Kas 7,735

    @FluffyKas

    Posted

    Hey,

    Your solution looks great! I'm not a 100% sure what's causing the problem with the screenshot. If I had to take a guess it has to do something with the font-size: inherit. I changed the font size to 1rem and that way I was able to recreate the weird behaviour that you can see on the screenshot. If you leave it on inherit, the computed value is only 15px, so that's 1px difference. Maybe you could try to set the font-size in your code explicitly to 0.9375rem. The problem didn't show up on my end so I'm not a 100% sure but that's all I could think of now.

    Some other things to note:

    • Your website your should only have one h1. This is like a main title for a webpage. In this case, since it's just a component you probably don't even need a h1, these headings could be h2 or h3.
    • Alt texts are displayed in lieu of an image but if the image only serves decorative purposes (like these icons do), you should leave the alt texts blank, so screen readers can skip it.

    Everything else seems great to me, responsiveness is really nice too. Well done!

    Marked as helpful

    1
  • @JeysonFR

    Submitted

    How can I add folders to the repository on Github? Like image folder.

    I 'm considering my CSS code is not really clean, I trayed so many thinks and forgot delete some lines, please if there is any advice to get better on CSS is welcome.

    Try to give my personal touch to the task adding a different background. Please, let me know if this was a correct desition or not .

    P
    Fluffy Kas 7,735

    @FluffyKas

    Posted

    Heyo,

    So there's a few things to cover here:

    1. Adding a folder: this is something you need to do in your code editor and not in Github. Usually you can just right-click on the project's folder to add a new folder or file inside.
    2. You image doesn't show up in the live site because the source path you defined is slightly incorrect: it should be "./image-qr-code.png" instead of "/image-qr-code.png"
    3. If you'd like to use a certain font family, you first you need to import it (which you did) and then apply it (this you forgot). Usually you can apply this to the body itself unless the challenge has multiple font families. Google Fonts even gives you a code snippet for this, but it should be something like this: font-family: Outfit, sans-serif.
    4. The alt text of images should be human-readable. This is what gets displayed when your image doesn't show up or if someone's using a screen reader. Since the challenge is in English, it should be like this: "QR code" or "Frontend Mentor's QR code".
    5. You can add a custom background but if you add an image, download it and add it to your images folder, the performance might be better that way. The effect you're going for here can be achieved through other means, it looks like a gradient. You can read more on how to do this on MDN.
    6. For the body, instead of a fixed height, it's better to use a min-height: 100vh, it's more responsive that way.

    I hope this helped you a bit. Good luck!

    Marked as helpful

    0
  • P

    @mickoymouse

    Submitted

    Another one for today!

    I had fun doing this one. As usual, I set my expectation on how long I think it would take me to do this and my expectations are more or less accurate. That being said, I am definitely rusty and in need of many more challenges to get back on groove!

    Specific part I would like to get feedback here is the socials part. I was wondering what other approach or what the best approach is to put it on the lower right with the rest of the items still dead center. My approach was using absolute positioning but I feel it's a bit scuffed. I can't shake the feeling that there is definitely a better approach.

    That being said, I am excited to see how my fellow developers implemented their solution!

    As usual, feedback and constructive criticism are definitely welcome and appreciated. Thank you!

    P
    Fluffy Kas 7,735

    @FluffyKas

    Posted

    Hello,

    Very neat solution! Kate has already answered your question, so I'm just gonna mention something else: your social links would be better off semantically as a <ul> with list items. Each image could be wrapped in a link with the appropriate aria-label to describe where they are leading to (for people who don't rely on visuals, but use screen readers for example). Everything else seems great, well done!

    Marked as helpful

    2
  • P
    Oleksandr 690

    @Oleksandr-Berd

    Submitted

    The Maker's landing page. Was made by React, Typescript, and Emotions for styles. Be welcome for review!

    Maker Landing Page

    #react#typescript#emotion

    1

    P
    Fluffy Kas 7,735

    @FluffyKas

    Posted

    Hey,

    Your solution looks really nice! Just one thing: your email validation seems off? I could submit the following as a valid email address: kitten@kitten, though this obviously shouldn't pass as valid. Is there a reason you're not using email type input instead of text? If there is, you could double check how the validation is being done. I'm not familiar with Yup but there seems to be a problem with either this:

     const validationSchema = Yup.object().shape({
        email: Yup.string()
          .email("Oops! That doesn’t look like an email address")
          .required("Oops! Please add your email"),
      });
    

    or rather how you pass in that validationSchema. Either case, it's worth checking. Apart from this, great job (:

    0
  • P

    @KrishnaVishwakarma1595

    Submitted

    Hi, Mentors

    What users can do

    • View the optimal layout for the site depending on their device's screen size
    • See hover states for all interactive elements on the page
    • Toggle color theme to their preference
    • Bonus: As per their computer preferences of the color scheme they will have the default theme automatically activated.

    Built with

    • Semantic HTML5 markup
    • CSS custom properties
    • CSS Flexbox
    • CSS Grid
    • Mobile-first workflow
    • Browser Local storage to store user theme preferences

    All comments are welcome. Thanks!

    Happy mentoring

    Responsive Theme Based Social Media Dashboard With Theme Switcher

    #accessibility#progressive-enhancement#semantic-ui#theme-ui#fresh

    1

    P
    Fluffy Kas 7,735

    @FluffyKas

    Posted

    Heyo,

    It looks really very neat, kinda pixel-perfect! Awesome that it detects OS settings and you even set the chosen theme in local storage. Accessibility wise, there's some room for improvement. There's a few things you could do, for example:

    • Your theme switch is just an svg, not a fully functional switch. Regardless of the theme setting, the button of the switch will always return to the left if I refresh the page. Also, it can't be focused (so no keyboard navigation), and pretty much inaccessible for screen readers too. There are a few ways to approach this problem, but for example, here's a really awesome article about accessible switches that might be helpful. If you're using a framework and don't want to build your own accessible switch from scratch (which is pretty valid, ngl), there are solutions for that too. My personal favourite is shadcn, although this is React-specific but super easy to use. I'm sure there are other good solutions out there too.
    • Alt texts: images that are decorative should have a blank alt text. Just think about it: "Icon Up Green" or "Icon Twitter" doesn't convey a lot of information to the user, does it?
    • I would also think about the purpose of these social media cards. You put a cursor: pointer on them, so I'm assuming they are links leading somewhere. If this is the case, you should indeed wrap them in links. If you wrap them in links, those should have an aria-label stating where they lead (Twitter, FB, etc). Maybe a screen reader only title would also be useful for each card.

    Another thing that isn't accessibility-related: decide on a naming convention for your classes and stick to it. Right now there are both kebab case ("d-flex justify-content-between") and snake case ("social_icon_top_card") classes. I'd say kebab case is the most frequently used for css class naming, but if you prefer something else, go for it, just stick to it consistently.

    Overall, I think you did great. There's just some accessibility issues to work through, but that's always a long learning process (: Hope I managed to help a bit.

    Marked as helpful

    1
  • P

    @Vinicius-PR

    Submitted

    👋Hello, I'm Vinicius.

    👨🏼‍💻This is my solution for the Tic Tac Toe game

    🛠️ Built with

    • Semantic HTML5
    • Styled-Component
    • TypeScrpt
    • ReactJS

    📜 What I learned?

    I learned more about the hook useReducer. My previous code was messy with useState. I hade a lot of state to take care of. So I studied about this awesome hook and now the code is much better.

    With useReducer, I can build more complex state and change it at once with one function.

    😁 Thanks

    I'll be happy to hear any feedback and advice!🤗

    Thank you very much

    Tic Tac Toe game with React, TypeScript and useReducer

    #react#typescript#styled-components

    1

    P
    Fluffy Kas 7,735

    @FluffyKas

    Posted

    Heyo,

    This is awesome and for the most part it works great. Few things I noticed:

    • The url you provided for the site brings me here: https://tic-tac-toe-react-two-sand.vercel.app/game instead of here: https://tic-tac-toe-react-two-sand.vercel.app/. This is obviously an issue, since the player hasn't selected a game mode, the game just lets you put in as many O characters as you want. I'm guessing some states are missing and causing this bug. You should change the url in this submission but even so, it's a good idea to protect your routes against stuff like this and only let the /game page be accessible if the game mode has been selected (it could just automatically redirect to the homepage if no game mode is selected).
    • you might want to consider having the game logic somewhere else than the App.tsx, it looks a bit chaotic at the moment. Creating a context might be a good solution.
    • If I start a game (Player vs. CPU) and make a few moves without finishing it, then navigate back to the homepage to start a new game, the game isn't being reset, I'm met with the game I left off previously. Would be nice if the New Game option would start a new game everytime, regardless of previously existing sessions.

    Apart from these few small bugs, what you did is really impressive. The design looks on point. Well done!

    Marked as helpful

    2
  • P
    Fluffy Kas 7,735

    @FluffyKas

    Posted

    Heyo,

    Your solution looks nice! There's a few small things you could check though.

    • your QR code image is missing its alt text
    • Regarding Tailwind: there are built-in Tailwind classes for both of these: h-[100%] and h-[100vh], these would be h-full and h-screen if I recall correctly. but heights shouldn't really be fixed anyway, so a min-h-full/min-h-screen would be better suited.
    • bg-[#d5e1ef] => Things like colours or other variables that you may reuse in the future should be ideally set in the tailwind config file

    All in all, good job on this one!

    1
  • P
    Fluffy Kas 7,735

    @FluffyKas

    Posted

    Heyo, this looks really cool! Love the hover animation on the button, it's really fun! There are maybe 1-2 small things you could change if you wanted:

    • all images in this challenge are decorative only (checkmarks and the big orange sign up image too) so their alt texts should be left blank
    • the 3 bulletpoints with the checkmark icons would be better off as a list rather than individual divs

    Again, great job on this one (:

    0
  • P
    Fluffy Kas 7,735

    @FluffyKas

    Posted

    Heyo,

    Your solution looks nice! However, I'd suggest you look up a video or two about the basics of React. Here you're essentially using vanilla javascript in a React setup and then just put everything in a useEffect (it's not what useEffect is used for). Try looking up how event handling works in React and rework your logic accordingly.

    As a sidenote, the use of create-react-app is no longer encouraged, and has been removed from the official React documentation, for a number of reasons ( tl;dr, it's bulky and slow). There are a bunch of better options out there, check out the React docs. There's also Vite, as a very beginner-friendly option, perhaps I'd recommend this one for you. Tailwind has an easy setup guide for Vite as well.

    Regarding everything else:

    1. Instead of the button type input, it's preferable to just use a button element.
    2. All inputs need to have a label attached to them, even if they are not visible. Placeholders are not a replacement for this. Luckily, Tailwind has a really handy "sr-only" class you can put on the labels to keep them from showing up.
    3. Terms and Services should be a clickable link.
    4. The "Try it free for 7 days..." element shouldn't be a label. Labels are used to provide description for input. Here most probably you could just use a <p>.

    I hope this was somewhat helpful. Good luck (:

    Marked as helpful

    1