├── preview.jpg
├── design
├── focus-state.jpg
├── hover-state.jpg
├── loading-state.jpg
├── api-error-state.jpg
├── dropdown-state.jpg
├── no-results-state.jpg
├── desktop-design-metric.jpg
├── mobile-design-metric.jpg
├── desktop-design-imperial.jpg
├── mobile-design-imperial.jpg
└── search-in-progress-state.jpg
├── assets
├── images
│ ├── icon-fog.webp
│ ├── icon-rain.webp
│ ├── icon-snow.webp
│ ├── icon-storm.webp
│ ├── icon-sunny.webp
│ ├── favicon-32x32.png
│ ├── icon-drizzle.webp
│ ├── icon-overcast.webp
│ ├── icon-partly-cloudy.webp
│ ├── icon-checkmark.svg
│ ├── icon-dropdown.svg
│ ├── icon-error.svg
│ ├── icon-search.svg
│ ├── icon-retry.svg
│ ├── icon-loading.svg
│ ├── icon-units.svg
│ ├── bg-today-large.svg
│ ├── bg-today-small.svg
│ └── logo.svg
└── fonts
│ ├── DM_Sans
│ ├── static
│ │ ├── DMSans-Bold.ttf
│ │ ├── DMSans-Light.ttf
│ │ ├── DMSans-Medium.ttf
│ │ ├── DMSans-SemiBold.ttf
│ │ └── DMSans-SemiBoldItalic.ttf
│ ├── DMSans-VariableFont_opsz,wght.ttf
│ ├── DMSans-Italic-VariableFont_opsz,wght.ttf
│ ├── README.txt
│ └── OFL.txt
│ └── Bricolage_Grotesque
│ ├── static
│ └── BricolageGrotesque-Bold.ttf
│ ├── BricolageGrotesque-VariableFont_opsz,wdth,wght.ttf
│ ├── README.txt
│ └── OFL.txt
├── .gitignore
├── style-guide.md
├── README.md
├── index.html
├── script.js
└── styles.css
/preview.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Ayokanmi-Adejola/Weather-App/HEAD/preview.jpg
--------------------------------------------------------------------------------
/design/focus-state.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Ayokanmi-Adejola/Weather-App/HEAD/design/focus-state.jpg
--------------------------------------------------------------------------------
/design/hover-state.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Ayokanmi-Adejola/Weather-App/HEAD/design/hover-state.jpg
--------------------------------------------------------------------------------
/design/loading-state.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Ayokanmi-Adejola/Weather-App/HEAD/design/loading-state.jpg
--------------------------------------------------------------------------------
/assets/images/icon-fog.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Ayokanmi-Adejola/Weather-App/HEAD/assets/images/icon-fog.webp
--------------------------------------------------------------------------------
/design/api-error-state.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Ayokanmi-Adejola/Weather-App/HEAD/design/api-error-state.jpg
--------------------------------------------------------------------------------
/design/dropdown-state.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Ayokanmi-Adejola/Weather-App/HEAD/design/dropdown-state.jpg
--------------------------------------------------------------------------------
/design/no-results-state.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Ayokanmi-Adejola/Weather-App/HEAD/design/no-results-state.jpg
--------------------------------------------------------------------------------
/assets/images/icon-rain.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Ayokanmi-Adejola/Weather-App/HEAD/assets/images/icon-rain.webp
--------------------------------------------------------------------------------
/assets/images/icon-snow.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Ayokanmi-Adejola/Weather-App/HEAD/assets/images/icon-snow.webp
--------------------------------------------------------------------------------
/assets/images/icon-storm.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Ayokanmi-Adejola/Weather-App/HEAD/assets/images/icon-storm.webp
--------------------------------------------------------------------------------
/assets/images/icon-sunny.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Ayokanmi-Adejola/Weather-App/HEAD/assets/images/icon-sunny.webp
--------------------------------------------------------------------------------
/assets/images/favicon-32x32.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Ayokanmi-Adejola/Weather-App/HEAD/assets/images/favicon-32x32.png
--------------------------------------------------------------------------------
/assets/images/icon-drizzle.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Ayokanmi-Adejola/Weather-App/HEAD/assets/images/icon-drizzle.webp
--------------------------------------------------------------------------------
/assets/images/icon-overcast.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Ayokanmi-Adejola/Weather-App/HEAD/assets/images/icon-overcast.webp
--------------------------------------------------------------------------------
/design/desktop-design-metric.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Ayokanmi-Adejola/Weather-App/HEAD/design/desktop-design-metric.jpg
--------------------------------------------------------------------------------
/design/mobile-design-metric.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Ayokanmi-Adejola/Weather-App/HEAD/design/mobile-design-metric.jpg
--------------------------------------------------------------------------------
/design/desktop-design-imperial.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Ayokanmi-Adejola/Weather-App/HEAD/design/desktop-design-imperial.jpg
--------------------------------------------------------------------------------
/design/mobile-design-imperial.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Ayokanmi-Adejola/Weather-App/HEAD/design/mobile-design-imperial.jpg
--------------------------------------------------------------------------------
/assets/images/icon-partly-cloudy.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Ayokanmi-Adejola/Weather-App/HEAD/assets/images/icon-partly-cloudy.webp
--------------------------------------------------------------------------------
/design/search-in-progress-state.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Ayokanmi-Adejola/Weather-App/HEAD/design/search-in-progress-state.jpg
--------------------------------------------------------------------------------
/assets/fonts/DM_Sans/static/DMSans-Bold.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Ayokanmi-Adejola/Weather-App/HEAD/assets/fonts/DM_Sans/static/DMSans-Bold.ttf
--------------------------------------------------------------------------------
/assets/fonts/DM_Sans/static/DMSans-Light.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Ayokanmi-Adejola/Weather-App/HEAD/assets/fonts/DM_Sans/static/DMSans-Light.ttf
--------------------------------------------------------------------------------
/assets/fonts/DM_Sans/static/DMSans-Medium.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Ayokanmi-Adejola/Weather-App/HEAD/assets/fonts/DM_Sans/static/DMSans-Medium.ttf
--------------------------------------------------------------------------------
/assets/fonts/DM_Sans/static/DMSans-SemiBold.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Ayokanmi-Adejola/Weather-App/HEAD/assets/fonts/DM_Sans/static/DMSans-SemiBold.ttf
--------------------------------------------------------------------------------
/assets/fonts/DM_Sans/DMSans-VariableFont_opsz,wght.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Ayokanmi-Adejola/Weather-App/HEAD/assets/fonts/DM_Sans/DMSans-VariableFont_opsz,wght.ttf
--------------------------------------------------------------------------------
/assets/fonts/DM_Sans/static/DMSans-SemiBoldItalic.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Ayokanmi-Adejola/Weather-App/HEAD/assets/fonts/DM_Sans/static/DMSans-SemiBoldItalic.ttf
--------------------------------------------------------------------------------
/assets/fonts/DM_Sans/DMSans-Italic-VariableFont_opsz,wght.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Ayokanmi-Adejola/Weather-App/HEAD/assets/fonts/DM_Sans/DMSans-Italic-VariableFont_opsz,wght.ttf
--------------------------------------------------------------------------------
/assets/fonts/Bricolage_Grotesque/static/BricolageGrotesque-Bold.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Ayokanmi-Adejola/Weather-App/HEAD/assets/fonts/Bricolage_Grotesque/static/BricolageGrotesque-Bold.ttf
--------------------------------------------------------------------------------
/assets/fonts/Bricolage_Grotesque/BricolageGrotesque-VariableFont_opsz,wdth,wght.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/Ayokanmi-Adejola/Weather-App/HEAD/assets/fonts/Bricolage_Grotesque/BricolageGrotesque-VariableFont_opsz,wdth,wght.ttf
--------------------------------------------------------------------------------
/assets/images/icon-checkmark.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/images/icon-dropdown.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/images/icon-error.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/images/icon-search.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # Design files (please do not remove 🙂)
2 | *.sketch
3 | *.fig
4 | *.xd
5 |
6 | # Dependencies
7 | /node_modules
8 | /.pnp
9 | .pnp.js
10 | yarn.debug.log*
11 | yarn.error.log*
12 | npm-debug.log*
13 |
14 | # Environment and secrets
15 | .env
16 | .env.local
17 | .env.development.local
18 | .env.test.local
19 | .env.production.local
20 |
21 | # Testing
22 | /coverage
23 |
24 | # Production
25 | /build
26 | /dist
27 | /.next
28 | /out
29 |
30 | # IDEs and editors
31 | /.idea
32 | /.vscode
33 | *.swp
34 | *.swo
35 |
36 | # Misc
37 | *.log
38 | *.pem
39 | .DS_Store
40 | Thumbs.db
--------------------------------------------------------------------------------
/assets/images/icon-retry.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/images/icon-loading.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/style-guide.md:
--------------------------------------------------------------------------------
1 | # Front-end Style Guide
2 |
3 | ## Layout
4 |
5 | The designs were created to the following widths:
6 |
7 | - Mobile: 375px
8 | - Desktop: 1440px
9 |
10 | > 💡 These are just the design sizes. Ensure content is responsive and meets WCAG requirements by testing the full range of screen sizes from 320px to large screens.
11 |
12 | ## Colors
13 |
14 | ### Neutral
15 |
16 | - **Neutral 900**: hsl(243, 96%, 9%)
17 | - **Neutral 800**: hsl(243, 27%, 20%)
18 | - **Neutral 700**: hsl(243, 23%, 24%)
19 | - **Neutral 600**: hsl(243, 23%, 30%)
20 | - **Neutral 300**: hsl(240, 6%, 70%)
21 | - **Neutral 200**: hsl(250, 6%, 84%)
22 | - **Neutral 0**: hsl(0, 0%, 100%)
23 |
24 | ### Orange
25 |
26 | - **Orange 500**: hsl(28, 100%, 52%)
27 |
28 | ### Blue
29 |
30 | - **Blue 500**: hsl(233, 67%, 56%)
31 | - **Blue 700**: hsl(248, 70%, 36%)
32 |
33 | ## Typography
34 |
35 | ### Body Copy
36 |
37 | - Font size: 18px
38 |
39 | ### Font
40 |
41 | - Family: [DM Sans](https://fonts.google.com/specimen/DM+Sans)
42 | - Weights: 300, 500, 600, 600i, 700
43 |
44 | - Family: [Bricolage Grotesque](https://fonts.google.com/specimen/Bricolage+Grotesque)
45 | - Weights: 700
46 |
47 | > 💎 [Upgrade to Pro](https://www.frontendmentor.io/pro?ref=style-guide) for design file access to see all design details and get hands-on experience using a professional workflow with tools like Figma. The design file for this challenge also includes a design system and tablet layout to help you build a more accurate solution faster.
--------------------------------------------------------------------------------
/assets/images/icon-units.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/fonts/Bricolage_Grotesque/README.txt:
--------------------------------------------------------------------------------
1 | Bricolage Grotesque Variable Font
2 | =================================
3 |
4 | This download contains Bricolage Grotesque as both a variable font and static fonts.
5 |
6 | Bricolage Grotesque is a variable font with these axes:
7 | opsz
8 | wdth
9 | wght
10 |
11 | This means all the styles are contained in a single file:
12 | Bricolage_Grotesque/BricolageGrotesque-VariableFont_opsz,wdth,wght.ttf
13 |
14 | If your app fully supports variable fonts, you can now pick intermediate styles
15 | that aren’t available as static fonts. Not all apps support variable fonts, and
16 | in those cases you can use the static font files for Bricolage Grotesque:
17 |
18 | Bricolage_Grotesque/static/BricolageGrotesque-Bold.ttf
19 |
20 | Get started
21 | -----------
22 |
23 | 1. Install the font files you want to use
24 |
25 | 2. Use your app's font picker to view the font family and all the
26 | available styles
27 |
28 | Learn more about variable fonts
29 | -------------------------------
30 |
31 | https://developers.google.com/web/fundamentals/design-and-ux/typography/variable-fonts
32 | https://variablefonts.typenetwork.com
33 | https://medium.com/variable-fonts
34 |
35 | In desktop apps
36 |
37 | https://theblog.adobe.com/can-variable-fonts-illustrator-cc
38 | https://helpx.adobe.com/nz/photoshop/using/fonts.html#variable_fonts
39 |
40 | Online
41 |
42 | https://developers.google.com/fonts/docs/getting_started
43 | https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Fonts/Variable_Fonts_Guide
44 | https://developer.microsoft.com/en-us/microsoft-edge/testdrive/demos/variable-fonts
45 |
46 | Installing fonts
47 |
48 | MacOS: https://support.apple.com/en-us/HT201749
49 | Linux: https://www.google.com/search?q=how+to+install+a+font+on+gnu%2Blinux
50 | Windows: https://support.microsoft.com/en-us/help/314960/how-to-install-or-remove-a-font-in-windows
51 |
52 | Android Apps
53 |
54 | https://developers.google.com/fonts/docs/android
55 | https://developer.android.com/guide/topics/ui/look-and-feel/downloadable-fonts
56 |
57 | License
58 | -------
59 | Please read the full license text (OFL.txt) to understand the permissions,
60 | restrictions and requirements for usage, redistribution, and modification.
61 |
62 | You can use them in your products & projects – print or digital,
63 | commercial or otherwise.
64 |
65 | This isn't legal advice, please consider consulting a lawyer and see the full
66 | license for all details.
67 |
--------------------------------------------------------------------------------
/assets/fonts/DM_Sans/README.txt:
--------------------------------------------------------------------------------
1 | DM Sans Variable Font
2 | =====================
3 |
4 | This download contains DM Sans as both variable fonts and static fonts.
5 |
6 | DM Sans is a variable font with these axes:
7 | opsz
8 | wght
9 |
10 | This means all the styles are contained in these files:
11 | DM_Sans/DMSans-VariableFont_opsz,wght.ttf
12 | DM_Sans/DMSans-Italic-VariableFont_opsz,wght.ttf
13 |
14 | If your app fully supports variable fonts, you can now pick intermediate styles
15 | that aren’t available as static fonts. Not all apps support variable fonts, and
16 | in those cases you can use the static font files for DM Sans:
17 |
18 | DM_Sans/static/DMSans-Light.ttf
19 | DM_Sans/static/DMSans-Medium.ttf
20 | DM_Sans/static/DMSans-SemiBold.ttf
21 | DM_Sans/static/DMSans-Bold.ttf
22 | DM_Sans/static/DMSans-SemiBoldItalic.ttf
23 |
24 | Get started
25 | -----------
26 |
27 | 1. Install the font files you want to use
28 |
29 | 2. Use your app's font picker to view the font family and all the
30 | available styles
31 |
32 | Learn more about variable fonts
33 | -------------------------------
34 |
35 | https://developers.google.com/web/fundamentals/design-and-ux/typography/variable-fonts
36 | https://variablefonts.typenetwork.com
37 | https://medium.com/variable-fonts
38 |
39 | In desktop apps
40 |
41 | https://theblog.adobe.com/can-variable-fonts-illustrator-cc
42 | https://helpx.adobe.com/nz/photoshop/using/fonts.html#variable_fonts
43 |
44 | Online
45 |
46 | https://developers.google.com/fonts/docs/getting_started
47 | https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Fonts/Variable_Fonts_Guide
48 | https://developer.microsoft.com/en-us/microsoft-edge/testdrive/demos/variable-fonts
49 |
50 | Installing fonts
51 |
52 | MacOS: https://support.apple.com/en-us/HT201749
53 | Linux: https://www.google.com/search?q=how+to+install+a+font+on+gnu%2Blinux
54 | Windows: https://support.microsoft.com/en-us/help/314960/how-to-install-or-remove-a-font-in-windows
55 |
56 | Android Apps
57 |
58 | https://developers.google.com/fonts/docs/android
59 | https://developer.android.com/guide/topics/ui/look-and-feel/downloadable-fonts
60 |
61 | License
62 | -------
63 | Please read the full license text (OFL.txt) to understand the permissions,
64 | restrictions and requirements for usage, redistribution, and modification.
65 |
66 | You can use them in your products & projects – print or digital,
67 | commercial or otherwise.
68 |
69 | This isn't legal advice, please consider consulting a lawyer and see the full
70 | license for all details.
71 |
--------------------------------------------------------------------------------
/assets/fonts/DM_Sans/OFL.txt:
--------------------------------------------------------------------------------
1 | Copyright 2014 The DM Sans Project Authors (https://github.com/googlefonts/dm-fonts)
2 |
3 | This Font Software is licensed under the SIL Open Font License, Version 1.1.
4 | This license is copied below, and is also available with a FAQ at:
5 | https://openfontlicense.org
6 |
7 |
8 | -----------------------------------------------------------
9 | SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
10 | -----------------------------------------------------------
11 |
12 | PREAMBLE
13 | The goals of the Open Font License (OFL) are to stimulate worldwide
14 | development of collaborative font projects, to support the font creation
15 | efforts of academic and linguistic communities, and to provide a free and
16 | open framework in which fonts may be shared and improved in partnership
17 | with others.
18 |
19 | The OFL allows the licensed fonts to be used, studied, modified and
20 | redistributed freely as long as they are not sold by themselves. The
21 | fonts, including any derivative works, can be bundled, embedded,
22 | redistributed and/or sold with any software provided that any reserved
23 | names are not used by derivative works. The fonts and derivatives,
24 | however, cannot be released under any other type of license. The
25 | requirement for fonts to remain under this license does not apply
26 | to any document created using the fonts or their derivatives.
27 |
28 | DEFINITIONS
29 | "Font Software" refers to the set of files released by the Copyright
30 | Holder(s) under this license and clearly marked as such. This may
31 | include source files, build scripts and documentation.
32 |
33 | "Reserved Font Name" refers to any names specified as such after the
34 | copyright statement(s).
35 |
36 | "Original Version" refers to the collection of Font Software components as
37 | distributed by the Copyright Holder(s).
38 |
39 | "Modified Version" refers to any derivative made by adding to, deleting,
40 | or substituting -- in part or in whole -- any of the components of the
41 | Original Version, by changing formats or by porting the Font Software to a
42 | new environment.
43 |
44 | "Author" refers to any designer, engineer, programmer, technical
45 | writer or other person who contributed to the Font Software.
46 |
47 | PERMISSION & CONDITIONS
48 | Permission is hereby granted, free of charge, to any person obtaining
49 | a copy of the Font Software, to use, study, copy, merge, embed, modify,
50 | redistribute, and sell modified and unmodified copies of the Font
51 | Software, subject to the following conditions:
52 |
53 | 1) Neither the Font Software nor any of its individual components,
54 | in Original or Modified Versions, may be sold by itself.
55 |
56 | 2) Original or Modified Versions of the Font Software may be bundled,
57 | redistributed and/or sold with any software, provided that each copy
58 | contains the above copyright notice and this license. These can be
59 | included either as stand-alone text files, human-readable headers or
60 | in the appropriate machine-readable metadata fields within text or
61 | binary files as long as those fields can be easily viewed by the user.
62 |
63 | 3) No Modified Version of the Font Software may use the Reserved Font
64 | Name(s) unless explicit written permission is granted by the corresponding
65 | Copyright Holder. This restriction only applies to the primary font name as
66 | presented to the users.
67 |
68 | 4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
69 | Software shall not be used to promote, endorse or advertise any
70 | Modified Version, except to acknowledge the contribution(s) of the
71 | Copyright Holder(s) and the Author(s) or with their explicit written
72 | permission.
73 |
74 | 5) The Font Software, modified or unmodified, in part or in whole,
75 | must be distributed entirely under this license, and must not be
76 | distributed under any other license. The requirement for fonts to
77 | remain under this license does not apply to any document created
78 | using the Font Software.
79 |
80 | TERMINATION
81 | This license becomes null and void if any of the above conditions are
82 | not met.
83 |
84 | DISCLAIMER
85 | THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
86 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
87 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
88 | OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
89 | COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
90 | INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
91 | DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
92 | FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
93 | OTHER DEALINGS IN THE FONT SOFTWARE.
94 |
--------------------------------------------------------------------------------
/assets/fonts/Bricolage_Grotesque/OFL.txt:
--------------------------------------------------------------------------------
1 | Copyright 2022 The Bricolage Grotesque Project Authors (https://github.com/ateliertriay/bricolage)
2 |
3 | This Font Software is licensed under the SIL Open Font License, Version 1.1.
4 | This license is copied below, and is also available with a FAQ at:
5 | https://openfontlicense.org
6 |
7 |
8 | -----------------------------------------------------------
9 | SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
10 | -----------------------------------------------------------
11 |
12 | PREAMBLE
13 | The goals of the Open Font License (OFL) are to stimulate worldwide
14 | development of collaborative font projects, to support the font creation
15 | efforts of academic and linguistic communities, and to provide a free and
16 | open framework in which fonts may be shared and improved in partnership
17 | with others.
18 |
19 | The OFL allows the licensed fonts to be used, studied, modified and
20 | redistributed freely as long as they are not sold by themselves. The
21 | fonts, including any derivative works, can be bundled, embedded,
22 | redistributed and/or sold with any software provided that any reserved
23 | names are not used by derivative works. The fonts and derivatives,
24 | however, cannot be released under any other type of license. The
25 | requirement for fonts to remain under this license does not apply
26 | to any document created using the fonts or their derivatives.
27 |
28 | DEFINITIONS
29 | "Font Software" refers to the set of files released by the Copyright
30 | Holder(s) under this license and clearly marked as such. This may
31 | include source files, build scripts and documentation.
32 |
33 | "Reserved Font Name" refers to any names specified as such after the
34 | copyright statement(s).
35 |
36 | "Original Version" refers to the collection of Font Software components as
37 | distributed by the Copyright Holder(s).
38 |
39 | "Modified Version" refers to any derivative made by adding to, deleting,
40 | or substituting -- in part or in whole -- any of the components of the
41 | Original Version, by changing formats or by porting the Font Software to a
42 | new environment.
43 |
44 | "Author" refers to any designer, engineer, programmer, technical
45 | writer or other person who contributed to the Font Software.
46 |
47 | PERMISSION & CONDITIONS
48 | Permission is hereby granted, free of charge, to any person obtaining
49 | a copy of the Font Software, to use, study, copy, merge, embed, modify,
50 | redistribute, and sell modified and unmodified copies of the Font
51 | Software, subject to the following conditions:
52 |
53 | 1) Neither the Font Software nor any of its individual components,
54 | in Original or Modified Versions, may be sold by itself.
55 |
56 | 2) Original or Modified Versions of the Font Software may be bundled,
57 | redistributed and/or sold with any software, provided that each copy
58 | contains the above copyright notice and this license. These can be
59 | included either as stand-alone text files, human-readable headers or
60 | in the appropriate machine-readable metadata fields within text or
61 | binary files as long as those fields can be easily viewed by the user.
62 |
63 | 3) No Modified Version of the Font Software may use the Reserved Font
64 | Name(s) unless explicit written permission is granted by the corresponding
65 | Copyright Holder. This restriction only applies to the primary font name as
66 | presented to the users.
67 |
68 | 4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
69 | Software shall not be used to promote, endorse or advertise any
70 | Modified Version, except to acknowledge the contribution(s) of the
71 | Copyright Holder(s) and the Author(s) or with their explicit written
72 | permission.
73 |
74 | 5) The Font Software, modified or unmodified, in part or in whole,
75 | must be distributed entirely under this license, and must not be
76 | distributed under any other license. The requirement for fonts to
77 | remain under this license does not apply to any document created
78 | using the Font Software.
79 |
80 | TERMINATION
81 | This license becomes null and void if any of the above conditions are
82 | not met.
83 |
84 | DISCLAIMER
85 | THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
86 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
87 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
88 | OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
89 | COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
90 | INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
91 | DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
92 | FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
93 | OTHER DEALINGS IN THE FONT SOFTWARE.
94 |
--------------------------------------------------------------------------------
/assets/images/bg-today-large.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/images/bg-today-small.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/assets/images/logo.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Weather Application
2 |
3 | 
4 |
5 | A comprehensive, responsive weather application built with vanilla HTML, CSS, and JavaScript. Features real-time weather data, location search, favorites system, and delightful animations.
6 |
7 | ## 🌟 Features Implemented
8 |
9 | ### Core Requirements ✅
10 | - **Location Search**: Search for weather information by entering any location
11 | - **Current Weather**: Temperature, weather icon, and location details
12 | - **Weather Metrics**: "Feels like" temperature, humidity, wind speed, precipitation
13 | - **7-Day Forecast**: Daily high/low temperatures with weather icons
14 | - **Hourly Forecast**: Temperature changes throughout the day with day selector
15 | - **Units System**: Toggle between Imperial/Metric units with granular control
16 | - **Responsive Design**: Optimal layout for mobile, tablet, and desktop
17 | - **Interactive States**: Hover and focus states for all interactive elements
18 |
19 | ### Enhanced Features 🚀
20 | - **Geolocation Support**: Automatic current location detection
21 | - **Favorites System**: Save and quickly access frequently checked locations
22 | - **Dark/Light Mode**: Automatic theme switching based on time of day
23 | - **Weather Animations**: Dynamic backgrounds and particles based on conditions
24 | - **Additional Data**: UV index, visibility, air pressure, sunrise/sunset times
25 | - **Accessibility**: Full keyboard navigation, screen reader support, reduced motion
26 | - **Performance**: Debounced search, efficient DOM updates, optimized animations
27 |
28 | | Desktop view | Mobile view |
29 | | ------- | ------ |
30 | |  |  |
31 |
32 | ## 🚀 Getting Started
33 |
34 | 1. Clone or download the project files ```git clone https://github.com/Ayokanmi-Adejola/Weather-App```
35 | 2. Open `index.html` in a modern web browser
36 | 3. Allow location access for automatic weather detection (optional)
37 | 4. Start exploring weather data for any location!
38 |
39 | ## 🛠️ Technical Implementation
40 |
41 | ### APIs Used
42 | - **Open-Meteo Weather API**: Free weather data with no API key required
43 | - **Open-Meteo Geocoding API**: Location search and coordinates
44 |
45 | ### Browser Support
46 | - Chrome 90+ | Firefox 88+ | Safari 14+ | Edge 90+
47 |
48 | ### Architecture
49 | - **Vanilla JavaScript**: No frameworks, pure ES6+ features
50 | - **CSS Custom Properties**: Consistent design system
51 | - **Semantic HTML**: Accessible and SEO-friendly structure
52 | - **Progressive Enhancement**: Works without JavaScript for basic content
53 |
54 | ## 📱 Responsive Design
55 |
56 | - **Mobile**: 320px - 768px (Touch-optimized interface)
57 | - **Tablet**: 768px - 1024px (Hybrid layout)
58 | - **Desktop**: 1024px+ (Full feature set)
59 |
60 | ## ♿ Accessibility Features
61 |
62 | - **Keyboard Navigation**: Full keyboard support for all interactions
63 | - **Screen Reader Support**: Proper ARIA labels and semantic HTML
64 | - **High Contrast Mode**: Enhanced visibility for visual impairments
65 | - **Reduced Motion**: Respects user's motion preferences
66 | - **Skip Links**: Quick navigation for assistive technologies
67 |
68 | ## 🎨 Design System
69 |
70 | ### Colors
71 | - **Neutral Palette**: 9 shades from `hsl(243, 96%, 9%)` to `hsl(0, 0%, 100%)`
72 | - **Accent Colors**: Blue `hsl(233, 67%, 56%)` and Orange `hsl(28, 100%, 52%)`
73 | - **Weather Themes**: Dynamic backgrounds based on weather conditions
74 |
75 | ### Typography
76 | - **Primary Font**: DM Sans (300, 500, 600, 700)
77 | - **Display Font**: Bricolage Grotesque (700)
78 | - **Base Size**: 18px with responsive scaling
79 |
80 | ### Spacing & Layout
81 | - **Consistent Scale**: 0.5rem to 4rem using CSS custom properties
82 | - **Grid System**: CSS Grid for responsive layouts
83 | - **Component-based**: Reusable card and button components
84 |
85 | ## 🌦️ Weather Data
86 |
87 | ### Current Conditions
88 | - Temperature and "feels like" temperature
89 | - Weather description with animated icon
90 | - Humidity, wind speed, precipitation
91 | - UV index, visibility, air pressure
92 | - Sunrise and sunset times
93 |
94 | ### Forecasts
95 | - **Daily**: 7-day forecast with high/low temperatures
96 | - **Hourly**: 24-hour detailed forecast with day selector
97 |
98 | ## 🔧 Customization
99 |
100 | ### Adding Weather Icons
101 | 1. Add icon files to `assets/images/`
102 | 2. Update `WEATHER_CODES` object in `script.js`
103 | 3. Map weather codes to new icons
104 |
105 | ### Modifying Themes
106 | 1. Update CSS custom properties in `:root` and `[data-theme]` selectors
107 | 2. Add theme variants in theme management system
108 |
109 | ### Extending API Data
110 | 1. Modify API parameters in `getWeatherData` function
111 | 2. Update display functions for new data
112 | 3. Add corresponding HTML elements and CSS styles
113 |
114 | ## 🚀 Performance Features
115 |
116 | - **Debounced Search**: Reduces API calls during typing
117 | - **Efficient DOM Updates**: Minimal reflows and repaints
118 | - **Optimized Animations**: Uses `requestAnimationFrame` and CSS transforms
119 | - **Lazy Loading**: Weather particles created on demand
120 | - **Local Storage**: Caches user preferences and favorites
121 |
122 | ## 🐛 Known Issues & Limitations
123 |
124 | - Weather particles may impact performance on older devices
125 | - Some weather data may not be available for all locations
126 | - Geolocation requires HTTPS in production environments
127 | - API rate limits may apply for excessive usage
128 |
129 | ## 🚀 Future Enhancements
130 |
131 | - Weather alerts and notifications
132 | - Historical weather data visualization
133 | - Interactive weather maps
134 | - Social sharing capabilities
135 | - Offline support with service workers
136 | - Weather widgets for embedding
137 | - Multi-language support
138 | - Weather-based recommendations
139 |
140 | ## 📄 Project Structure
141 |
142 | ```
143 | weather-app-main/
144 | ├── index.html # Main HTML file
145 | ├── styles.css # Complete CSS with design system
146 | ├── script.js # JavaScript functionality
147 | ├── assets/
148 | │ └── images/ # Weather icons and UI assets
149 | ├── style-guide.md # Design specifications
150 | └── README.md # This file
151 | ```
152 |
153 | ## 🙏 Acknowledgments
154 |
155 | - **Frontend Mentor**: Original challenge and design inspiration
156 | - **Open-Meteo**: Free weather API with comprehensive data
157 | - **Google Fonts**: Typography (DM Sans, Bricolage Grotesque)
158 | - **Community**: Feedback and support during development
159 |
160 | ## 📞 Support & Troubleshooting
161 |
162 | ### Common Issues
163 | 1. **Location not found**: Try different search terms or check spelling
164 | 2. **Weather data not loading**: Check internet connection and browser console
165 | 3. **Geolocation not working**: Ensure HTTPS and location permissions
166 | 4. **Performance issues**: Disable animations in accessibility settings
167 |
168 | ### Browser Console
169 | Check the browser developer tools console for detailed error messages and debugging information.
170 |
171 |
172 | ## 🌟 Frontend Mentor Challenge
173 |
174 | This project was built as a solution to the [Frontend Mentor Weather App Challenge](https://www.frontendmentor.io).
175 |
176 | **Challenge completed with enhanced features beyond requirements:**
177 | - ✅ All original requirements implemented
178 | - 🚀 Additional features: Geolocation, Favorites, Themes, Animations
179 | - ♿ Enhanced accessibility and performance
180 | - 📱 Improved responsive design
181 |
--------------------------------------------------------------------------------
/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |