Skip to content
  • Unlock Pro
  • Log in with GitHub
Profile
OverviewSolutions
11
Comments
15
Gregor de Cillia
@GregorDeCillia

All comments

  • Dhia•710
    @Dhia-18
    Submitted 11 months ago
    What are you most proud of, and what would you do differently next time?

    I'm still learning JavaScript, but I feel like I'm making good progress. In this recent challenge, I'm particularly proud of the clean and organized code I created.

    What challenges did you encounter, and how did you overcome them?

    The biggest challenge I faced was figuring out how to structure my JavaScript code properly while accounting for all the edge cases in the app

    What specific areas of your project would you like help with?

    I'd appreciate it if someone could review my code and offer suggestions on how to improve it.

    Tip Calculator App

    1
    Gregor de Cillia•190
    @GregorDeCillia
    Posted about 1 month ago

    Nice work!

    You said you are mainly interested in feedback on the JS, so I'll focus on that. Before I get to some recommendations, I want to state that your code is very organized and the naming decisions were great. This is a very important aspect to keep growing whether you do markup languages or coding languages.

    Consider Continuous Evaluation

    It initially took me some time to ralise the outputs are only generated from the return key. It might be better to update them continuously as the user types. If things start lagging as a result (unlikely), you could add a debounce.

    Helper functions for input checks

    The input checks for the three inputs are very similar. To avoid duplication, you could add a helper function that performs the checks.

    function inputValid(input, error, checkZero = false) {
        if(input.value===""){
            showError(billAmount,error,"Can't be empty");
            return false;
        }
        else if(checkZero && input.value==="0"){
            showError(billAmount,error,"Can't be zero");
            return false;
        }
        else if(!isFloat(input.value)){
            showError(input,error,"Must be a number");
            return false;
        }
        return true;
    }
    

    Use the built-in validity checks

    Inputs have a validity property which could be used to simplify some of the logic.

    billAmount.validity
    // {badInput: false, rangeUnderflow: false, valueMissing: false,
    //   valid: true, ...}
    

    For example, the isFloat() helper function could be replaced by a check against badInput. If you set min/max/step on an input, you can also see if things are inside or outside the range and wether the number of decimals is too high.

    <input type="text" id="number-of-people" placeholder="0"
     min="1" max="8005176000" step="1">
    
    if (numberOfPeople.validity.badInput) 
      showError(numberOfPeople,numberOfPeopleError,"Must be a number")
    if (numberOfPeople.validity.rangeOverflow)
      showError(numberOfPeople,numberOfPeopleError,"more people than world population")
    if (numberOfPeople.validity.stepMismatch)
      showError(numberOfPeople,numberOfPeopleError,"must be an integer")
    

    Closing remarks

    Very nice how you used <form> and <input type="radio">. It was also very interesting to see how you used grid for some things, where I used 2 levels of flex instead (e.g. .bill-input).

  • P
    joeabrahamian•140
    @joeabrahamian
    Submitted about 1 month ago
    What are you most proud of, and what would you do differently next time?

    I got my media queries better than how I had them last project. I would have used a for loop or forEach to loop through the data and adjust DOM elements.

    What challenges did you encounter, and how did you overcome them?

    Some unfamiliarity with fetch api, promises, and async/await. Did some research and was able to use them in this project.

    What specific areas of your project would you like help with?

    Iterating over my data with the different loops and updating the DOM that way. I manually did each element.

    Time Tracking Dashboard

    1
    Gregor de Cillia•190
    @GregorDeCillia
    Posted about 1 month ago

    Hey, great work!

    Some quick words about the css: you could have made a 2-column and 3-column layout via additional breakpoints. It's not as hard as it sounds since the styling for the inividual cards would be the same as in the 4 column layout.

    Fetching and Iterating

    Getting started with iteration (loops) and the fetch api can be daunting. Your approach ended up using a lot of repetition on the HTML side. What I ended up doing instead was creating html strings and inserting them.

    const template = ({name, current, previous, unit, img, color}) => `
    <section class="card activity-card" style="background: ${color}">
      <img class="activity-img" src="images/icon-${img}.svg" alt="">
      <div class="card-top">
        <div class="activity-title">
          <h2>${name}</h2>
          <div class="activity-menu"></div>
        </div>
        <div class="activity-values">
          <div class="value-current">${current}hrs</div>
          <div class="value-previous">${unit} - ${previous}hrs</div>
        </div>
      </div>
    </section>`;
    

    This means that if you want to make changes to the HTML structure, you only need to do it in one place.

    But let's talk about extending your approach

    If you don't want to touch the HTML again, another thing you could do is to add functions to your code that return DOM nodes

    const qs = q => document.querySlector(q)
    const getCurrent = item => qs(`#current-${item}`)
    const getPrevious = item => qs(`#previous-${item}`)
    const getTitle = item => qs(`#${item}`)
    

    The dataset is an arry, so you can use many techniques to loop over them. I would recommend a for...of loop.

    let timeframe = "weekly"
    for (const {title, timeframes} of data) {
      const {current, previous} = timeframes[timeframe];
      console.log({title, current, previous})
    }
    

    Running this will show you that you iterate over the relevant data. The next step is modifying the DOM. For that I define another helper function toKebapCase(), which converts the titles from the data into a shape that is compatible with your ids.

    const toKebapCase = str => str.toLowerCase().replace(" ", "-");
    toKebapCase("Self Care")
    // "self-care"
    

    Combining those techniques allows you to define a function that upates the DOM. It is very similar to the update functions from your js file.

    const updateTime(timeframe = "weekly") {
      for (const {title, timeframes} of data) {
        const {current, previous} = timeframes[timeframe];
        const item = toKebapCase(title)
        getCurrent(item).innerText = current;
        getPrevious(item).innerText = previous;
        getTitle(item).innerText = title;
      }
    }
    

    Now you bind all this to click events

    qs("#daily-button").addEventListener("click", _ => updateTime("daily"));
    qs("#weekly-button").addEventListener("click", _ => updateTime("weekly"));
    qs("#monthly-button").addEventListener("click", _ => updateTime("monthly"));
    

    Summary

    I know this is a lot to take in. Take your time to understand what these elements do. One technique I used in the loop is called destructuring. It allows you to make js codes shorter and more expressive, especially with 2 dimensional data.

  • Olasubomi123•250
    @Olasubomi123
    Submitted about 1 month ago

    newsletter

    1
    Gregor de Cillia•190
    @GregorDeCillia
    Posted about 1 month ago

    Hey!

    Looking through your site, I found an unmatched } in styles.css#L78 which seems to break a major part of your layout. The lines before (L64-77) are indented which makes me think they are supposed to go into a different media query?

    The error handling looks good and is even augmented by the bootstrap messages, which is great. Here are some suggestions

    • The email input would look better with more padding and a less subtle styling of the error state
    • Triggering a full reload of the page when the "dismiss message" button is clicked isn't necessary and in bigger projects, you would most likely keep the user on the same page.
    • There are some instances where your user-supplied error messages are not executed because the error handling get shortcut by bootstrap. I'm not sure if that's what you want. The reason this is happening is that the form never gets a submit event if the html/botstrap-side input checks fail. You could listen for a click directly on the button if yo want your validation to be run.
    • The custom images for the <li> bullets seem a bit too close to the text. You could try disabling the bullets an use ::before and ::after instead.
    li {
      position: relative;
    }
    
    li::before {
      content: url('./assets/images/icon-list.svg');
      position: absolute;
      left: -1.5rem;
    }
    
  • Duy Tran•110
    @DuyTM0508
    Submitted about 1 month ago

    Reponsive and style UI using scss file

    2
    Gregor de Cillia•190
    @GregorDeCillia
    Posted about 1 month ago

    Nice job with the responsive layout shift (flex-direction)!

    Here are some points where I think you could improve things in a relatively straightforward way while learning some techniques along the way.

    • You are not importing any fonts. If you want to keep things simple and only use web safe fonts, I would still recommend using a serif font for the title and the price.
    • At some screen sizes, the image width and height do not have the aspect ratio of the source image. Try object-fit (or other options) to avoid distortion.
    • Consider using button:focus to style the button if it is focused via keyboard navigation. Usually you can use the same styling as in the hover state.
    .card__image {
      object-fit: cover;
    }
    
    button:hover, button:focus {
      /* ... */
    }
    

    Happy coding!

  • Andrés•10
    @Darsen00
    Submitted about 1 month ago

    Responsive article using HTML, CSS and Vanilla JS

    1
    Gregor de Cillia•190
    @GregorDeCillia
    Posted about 1 month ago

    Very nice work! I like how the image resizes with the viewport width. It seems the mobile version of the "hare menu" cannot be closed though. In the design, they attached the share icon to the menu and I think the intention is that the menu closes when the button i clicked again.

    In case the missing piece was re-coloring the share icon, this will help you: https://stackoverflow.com/questions/22252472/.

    Here is how you can apply it for this particular project

    svg.share-icon:hover {
      filter: brightness(0%) invert(73%) sepia(58%) 
        saturate(328%) hue-rotate(355deg) 
        brightness(102%) contrast(102%);
    }
    
  • ictory2000•20
    @ictory2000
    Submitted 2 months ago

    css grid

    1
    Gregor de Cillia•190
    @GregorDeCillia
    Posted about 1 month ago

    Nice work! Styling looks great. The breakpoint between the two layouts is well chosen. Here are some suggestions on improving accessibility

    • The white cards have a very low color contrast for the small text (#BEBCBC/#ffffff=1.89). I would suggest a darker grey for the text.
    • Images don't have an alt-text. If you consider the images "cosmetic", you can add alt="" but the attribute should always be present.
    • You are using headers (<h1>/<h4>) for styling. It is usually better to use classes instead since headers are semantic tags.
    • <nav> tags are semantic and should contain site navigation.
  • P
    Juan Vallejo•230
    @CiaoGab
    Submitted about 1 month ago

    Four card feature section solution

    1
    Gregor de Cillia•190
    @GregorDeCillia
    Posted about 1 month ago

    Nice work! I like the 2 column layout in the middle. Looks good on all screen sizes. I think the mobile layout could have the title and slogan a little bit larger though.

    I personally used grid-areas instead of grouping the 2 middle cards into a <div> but it seems to work well.

    .cards {
      grid-template: 1fr 1fr 1fr 1fr / 1fr 1fr 1fr;
      grid-template-areas:
        ". T ."
        "S T C"
        "S K C"
        ". K .";
    }
    
  • Dariusz-Wolontariusz•70
    @Dariusz-Wolontariusz
    Submitted about 1 month ago

    Product preview card

    2
    Gregor de Cillia•190
    @GregorDeCillia
    Posted about 1 month ago

    Nice one!

    That font import via a single url is something I definitely want to use in the future.

    @import url('https://fonts.googleapis.com/css2?family=Fraunces:wght@700&family=Montserrat:wght@500;700&display=swap');
    

    I think you could adjust the breakpoints to switch to the desktop layout a bit earlier, but that's really just a matter of taste.

  • P
    Weyehn Reeves•190
    @WeyehnR
    Submitted about 1 month ago
    What are you most proud of, and what would you do differently next time?

    I am proud of splitting styling guide sheets into sub-problems for styling, and it was way easier to manage them.

    What challenges did you encounter, and how did you overcome them?

    Ironically, using underscores at the beginning of file names since GitHub pages don't like underscores as the string's first character. so I ended up changing it to no underscore as a first character

    What specific areas of your project would you like help with?

    maybe how to simplify more of the different style in style guide?

    Recipe page CSS grid

    2
    Gregor de Cillia•190
    @GregorDeCillia
    Posted about 1 month ago

    Nice work!

    It seems the design doesn't scale down to width of 375px though. You could try setting a max-width on your .card.

    .card { 
      max-width: calc(100% + 80px);
    }
    

    From a semantic/accessibility perspective, I think it makes a lot of sense to replace the the ordered list with <h3> elements. Very nice use of <article> and aria-labels.

  • P
    James Miller•50
    @JamboMiller314
    Submitted about 2 months ago

    Social Links Profile

    1
    Gregor de Cillia•190
    @GregorDeCillia
    Posted about 1 month ago

    Very nicely done!

    • I like the transition on hover. Easy to do but feels a lot more organic.
    • Fetching the fonts from google instead of using the included ones is interesting - keeps the repo a bit lighter.
    • Loved the naming choices for the custom properties.
    :root {
        /* colors */
        --green: hsl(75, 94%, 57%);
        --white: hsl(0, 0%, 100%);
        --grey-700: hsl(0, 0%, 20%);
        --grey-800: hsl(0, 0%, 12%);
        --grey-900: hsl(0, 0%, 8%);
    
        /* Typography */
        --font-inter: 'Inter', sans-serif;
        --font-size-body: 14px;
    }
    
  • AnthonyLPZ0•40
    @AnthonyLPZ0
    Submitted about 1 month ago

    Responsive landing page using image

    1
    Gregor de Cillia•190
    @GregorDeCillia
    Posted about 1 month ago

    Nice work!

    I noticed your font-size does not adjust based on the width of the viewport. You might be able to improve on that by using clamp like this

    body{
      font-size: clamp(0.75rem, 3.82vw, 1rem);
    }
    

    It makes it so the font size scales linearly with the viewport width but also sets a maximum and a minumum.

    If you look closer at the mobile design, it also turns out that parts of the image are being cropped out hen screens get smaller. Yu could use object-fit to improve on this.

    the "active state" from the design can be implemented with pseudo selectors (:hover and :active).

    Marked as helpful
  • GiiN•20
    @GiiNtoki
    Submitted about 1 month ago
    What are you most proud of, and what would you do differently next time?

    I’m most proud of my growth in building clean, accessible, and maintainable UI components using semantic HTML and modern CSS techniques. One particular project that stands out is when I developed a modular blog preview card system. It wasn’t just about making it look good — I applied best practices like using custom properties for theme consistency, logical properties for i18n support, and flexible layout patterns like Flexbox and Grid.

    What made me especially proud was not just delivering a polished UI, but also making it easy for other developers to reuse and scale it. That balance between design and engineering is something I really value.

    I designed the layout with a mobile-first approach and implemented two breakpoints — one for mobile and one for larger devices — which worked well for the core experience. However, next time I’d add an additional breakpoint for mid-sized devices like tablets or small laptops. I realized that the transition between mobile and desktop wasn’t always smooth, and having a dedicated breakpoint for those in-between sizes would make the design more flexible and visually consistent across a wider range of screens.

    What challenges did you encounter, and how did you overcome them?

    One of the main challenges I encountered was getting the illustration image to properly fit its container inside the <figure> element. Initially, the image wasn’t respecting the container’s border radius and was leaving unwanted space on the right side, which disrupted the visual balance of the card layout.

    I realized the issue was due to the image’s default inline behavior and missing sizing constraints. To fix it, I applied display: block, set the image’s width and height to 100%, and used object-fit: cover to ensure it filled the container without distortion. I also made sure the parent <figure> had overflow: hidden and the correct border-radius applied. These adjustments made the image scale correctly and align with the card’s design intent.

    What specific areas of your project would you like help with?

    I’d appreciate help with refining the responsiveness of the layout across a wider range of screen sizes — particularly mid-range breakpoints like tablets. Since I only implemented two breakpoints (mobile and large screens), I’d like feedback on how to better handle scaling and spacing in that in-between range.

    I’m also open to guidance on accessibility best practices, especially around semantic HTML and how to improve keyboard and screen reader support for interactive elements. Lastly, any tips on structuring CSS more efficiently for scalability and reusability would be valuable as I continue building out components.

    blog-preview-card

    #node
    1
    Gregor de Cillia•190
    @GregorDeCillia
    Posted about 1 month ago

    Nice work!

    One thing you might try is to use clamp() for the medium screen sizes. I just completed this challenge and instead of breakpoints I used this.

    body {
      font-size: clamp(12px, 3.82vw, 16px);
    }
    

    It makes it so all em units scale linearly for mid-sized screens and have a fixed min and max.

  • emmanuel-ugwu•80
    @emmanuel-ugwu
    Submitted about 1 month ago

    Blog Preview Card

    1
    Gregor de Cillia•190
    @GregorDeCillia
    Posted about 1 month ago

    Nice work!

    It seems the button uses a serif font because of a typo in style.css#L41.

  • ChibugoOhanyiri•10
    @ChibugoOhanyiri
    Submitted about 1 month ago
    What are you most proud of, and what would you do differently next time?

    I'm most proud of actually completing the challenge and making the layout look exactly like the reference image. It was my first project using just HTML and CSS, and it felt good to see something work. Next time, I would focus more on making the layout responsive, and organizing my CSS better using more reusable classes.

    What challenges did you encounter, and how did you overcome them?

    A major challenge was setting up Git, GitHub, and VS Code together. I kept running into authentication errors and push issues, but I learned how to use the terminal to commit and push properly, and also how to troubleshoot using Git messages. I also struggled a bit with centering the card properly and making the desktop and mobile view look the same. I wasn't able to figure it out

    What specific areas of your project would you like help with?

    I’d love feedback on:

    Whether my CSS layout is clean and efficient

    How I can improve structure or readability in my HTML

    Any tips on naming conventions or organizing my files better And any beginner-friendly tips on making this layout responsive using media queries or grid!

    QR Code Component using basic HTML and CSS

    #contentful#semantic-ui#styled-components#web-components#pure-css
    1
    Gregor de Cillia•190
    @GregorDeCillia
    Posted about 1 month ago

    Looks great!

    According to the "design comparison", there are some small differences in the margins but that's really not a big deal. Here are some thoughts about your questions.

    Whether my CSS layout is clean and efficient

    I would suggest to add padding to your card that matches the difference between the card width and the image width. That way, you won't need any margins on the image and the text below the image is automatically bounded by that padding as well (text should never be wider than image for a design like this AFAIK).

    You can also use display: flex to center the card on the screen. This will do the job if the card is the only direct child of your <body> element.

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

    How I can improve structure or readability in my HTML

    My experience is that the best way is to use html only for content and outsource everything else. In particular, I would add a separate css file and import it from your <head>. If you later add javascript (not necessary here), also use separate .js files rather than <code> tags with code directly inside. Having an <h3> without an <h2> and <h1> "above" it is considered bad for accessibility. In this case, I would change the <h3> to an <h1> since it is the top-level title of the site.

    Any tips on naming conventions or organizing my files better And any beginner-friendly tips on making this layout responsive using media queries or grid!

    Naming is hard. For the card, I would use class="card" and use card- as a prefix for everything that goes inside the card. For example <h1 class="card-title">.

    I don't think grid or flex helps with flexibility for this project. Usually, these technologies are useful if you have elements that are aligned horizontally and need to add "line breaks" at some point.

    I would suggest you play around with properties like max-width/min-height and relative units (%, em). Another useful technique is using calc() and min()/max().

    .card {
      width: 300px;
      max-width: calc(100vw - 5px);
    }
    

    I don't think @media queries will be useful for this project either. Getting a better understanding of the min/max/calc/% approaches is probably the best way to maximize the responsiveness for this deign.

    Marked as helpful
  • Alexxeyrp•10
    @Alexxeyrp
    Submitted about 1 month ago
    What are you most proud of, and what would you do differently next time?

    I'm proud that I was able to complete and submit my very first project. Although I received some initial help with the HTML structure, I had to build the CSS myself and figure out how to format the layout as closely as possible to the challenge’s design. It was a great learning experience. Next time, I’d like to try building everything from scratch on my own, including the HTML, and improve my understanding of layout techniques and responsiveness.

    What challenges did you encounter, and how did you overcome them?

    One of the main challenges I faced was formatting the layout without breaking the design. It was tricky to make sure everything stayed aligned and looked like the reference image. I also found it challenging to write the CSS in a clean and structured way, making sure that all the required elements and instructions were properly included in the code. I overcame these challenges by testing frequently, using browser developer tools, and reviewing my code step by step.

    What specific areas of your project would you like help with?

    I would like to improve my skills in working with CSS. I know that with more practice it will become easier, but I’d appreciate guidance on how to structure my styles more efficiently and how to make designs more responsive and visually accurate.

    I used a clean code, making a separate file in css format,

    2
    Gregor de Cillia•190
    @GregorDeCillia
    Posted about 1 month ago

    Nice work!

    The design never uses pure black for text but the color codes from style-guide.md instead. It also seems the custom google-fonts font is not applied.

    For the colors, I would set up some custom properties at the top of the css and reference them throughout the stylesheet. Even if you apply the custom properties only once, the fact that you can name the variables improves readability in my opinion.

    :root{
      --col-white: hsl(0, 0%, 100%);
      --col-300: hsl(212, 45%, 89%);
      --col-500: hsl(216, 15%, 48%);
      --col-900: hsl(218, 44%, 22%);
      --col-link: hsl(228, 45%, 44%);
    }
    
    body{
      background: var(--col-300);
      color: var(--col-900);
    }
    

    There seems to be an overwrite of the font to Arial in style.css#L36.

    .qr-card {
      font-family: Arial, sans-serif;
    }
    

    Getting all the font-sizes, line-heights and so on right is tricky. I personally use browser devtools, but you might also use live-server instead.

    It seems the card-div in index.html#L16 is never closed. Did you mean to put the attribution inside the card? I gave the attribution a position: absolute to put it at the bottom of the viewport.

    I like the shadow effect on hover. Makes it feel more alive.

Frontend Mentor logo

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

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