Skip to content
  • Unlock Pro
  • Log in with GitHub
Solution
Submitted about 2 years ago

Portfolio for Web Developer using Grid - Flexbox, SASS and JS

sass/scss
Guille Di Nanno•160
@guiyee89
A solution to the Single-page developer portfolio challenge
View live sitePreview (opens in new tab)View codeCode (opens in new tab)

Solution retrospective


During this project, I faced several challenges such as implementing form validation using regular expressions, adding animation and dynamic error messages to the form, and improving the accessibility of the website. Additionally, I also had to optimize the website's responsiveness for different screen sizes using CSS media queries. Overall, this project helped me improve my front-end development skills and taught me how to tackle complex problems while maintaining good coding practices.

Code
Select a file

Please log in to post a comment

Log in with GitHub

Community feedback

  • Brendan•1,120
    @OneManBanned
    Posted about 2 years ago

    Hi, the solution looks nice but I have a few suggestions.

    • your project links are all buttons and don't go anywhere. They should be <a></a> that point to the corresponding projects

    • Most of the images in your html would make more sense as background-images in css.

    • I would use <h2></h2> for the section headers - projects, contact - and turn the skills-container into a <dl></dl> .

    • The spans underneath your <h3>'s would be better as <li>'s inside a <ul>

    I hope you find that useful.

    well done, Brendan

    Marked as helpful
  • Grace•32,130
    @grace-snow
    Posted about 2 years ago

    Hi

    I struggled to use this because you've removed focus-visible styles from some interactive elements (it must work for keyboard users).

    When I investigated this I noticed deep nesting in your css selectors, which is a very very bad thing! You want to keep specificity as low as possible. Stick to single class selectors in your css, placing classes directly on what you need to style

    Other feedback

    • This is using landmarks incorrectly. You must have a header at the top level (not inside a section) then a main, then a footer. No sections outside of those landmarks. The hero content like page heading should all live within main ideally
    • The alignment of the header looks incorrect
    • Social links have no content at the moment. You must give links an accessible name (i.e. the platform) and in this case say that they open in a new tab. This would be better done inside the link with sr-only text instead of aria-label simply because aria-label is not reliably translated for all users
    • "Profile picture" is not descriptive alt text
    • You seem to have loads of repetition in the CSS. For example I can see in devtools that the html has FIVE different style declarations that are all exactly the same, and the hidden class declaration is declared 10 times...! This is terrible for performance, making the browser work hard to calculate and then overwrite styles again and again
    • Buttons are for actions, anchors are for navigation!! Contact me is navigation. Do not mess with window href, just use the correct element
    • The skills section is OK, but i think it would be better with a visually hidden h2 "skills" then all the subheadings turned into h3s. I also think this would benefit from being presented as an unordered list instead of a load of divs (optional though)
    • The projects all need to be in the same section as their heading! projects-container can be a div - it's only needed for layout, no other reason
    • All projects are inaccessible to me as a keyboard user because the buttons are hidden to me. Those buttons must be anchors again (they navigate)
    • Do not capitalise text in HTML. Do that in CSS
    • Whenever links repeat lots of times on a page (view project, view code, view project, view code... etc) they should be associated to the project name (heading) for screenreader users. EG aria-labelledby="unique-id-of-link unique-id-of-project-heading" or aria-describedby="unique-id-of-project-heading"
    • The technologies used underneath each project should be a list. They are definitely not headings! Headings are titles for other bits of content, so this makes no sense at the moment
    • You must never add a pointer cursor on non-interactive elements. That's very confusing for users
    • Similar to the previous section, I'd recommend making the project list into an unordered list
    • The contact section cannot sit outside of main. And similar to before, the form is not its own section! It belongs to the contact section already
    • The form is totally inaccessible because you've made labels display none
    • You also need to learn to programmatically link error messages to their input. The error messages can be display none until needed. But there should be a DOM element with a unique ID and an aria-live attribute wrapping each input's errors. Then the input needs aria-describedby pointing to that unique ID
    • It's much better for performance to call fonts in the HTML head instead of importing in CSS. You rarely if ever want to use CSS @imports
    • I beg you not to try and use bootstrap while learning! It is adding loads of unnecessary bloat in those CSS imports and is only going to hold back your learning. You don't need it. Once you've got CSS, HTML and JS on their own you will be able to pick up Bootstrap or any other library really quickly. I really cant work out how you've ended up with this CSS, it feels like loads of repetition has been copy-pasted in from other sources
    Marked as helpful

Join our Discord community

Join thousands of Frontend Mentor community members taking the challenges, sharing resources, helping each other, and chatting about all things front-end!

Join our Discord

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

How does the accessibility report work?

When a solution is submitted, we use axe-core to run an automated audit of your code.

This picks out common accessibility issues like not using semantic HTML and not having proper heading hierarchies, among others.

This automated audit is fairly surface level, so we encourage to you review the project and code in more detail with accessibility best practices in mind.

How does the CSS report work?

When a solution is submitted, we use stylelint to run an automated check on the CSS code.

We've added some of our own linting rules based on recommended best practices. These rules are prefixed with frontend-mentor/ which you'll see at the top of each issue in the report.

The report will audit all CSS, SCSS and Less files in your repository.

How does the HTML validation report work?

When a solution is submitted, we use html-validate to run an automated check on the HTML code.

The report picks out common HTML issues such as not using headings within section elements and incorrect nesting of elements, among others.

Note that the report can pick up “invalid” attributes, which some frameworks automatically add to the HTML. These attributes are crucial for how the frameworks function, although they’re technically not valid HTML. As such, some projects can show up with many HTML validation errors, which are benign and are a necessary part of the framework.

How does the JavaScript validation report work?

When a solution is submitted, we use eslint to run an automated check on the JavaScript code.

The report picks out common JavaScript issues such as not using semicolons and using var instead of let or const, among others.

The report will audit all JS and JSX files in your repository. We currently do not support Typescript or other frontend frameworks.

Oops! 😬

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

Log in with GitHub

Frontend Mentor for Teams

Frontend Mentor for Teams helps companies and schools onboard and train developers through project-based learning. Our industry-standard projects give developers hands-on experience tackling real coding problems, helping them master their craft.

If you work in a company or are a student in a coding school, feel free to share Frontend Mentor for Teams with your manager or instructor, as they may use it to help with your coding education.

Learn more

Oops! 😬

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

Log in with GitHub