├── images
├── bg-quotes.png
├── profile-1.jpg
├── profile-2.jpg
├── profile-3.jpg
├── favicon-32x32.png
├── illustration-intro.png
├── illustration-stay-productive.png
├── icon-email.svg
├── icon-location.svg
├── icon-phone.svg
├── bg-curvy-mobile.svg
├── bg-curvy-desktop.svg
├── icon-arrow.svg
├── icon-security.svg
├── icon-any-file.svg
├── icon-access-anywhere.svg
├── logo.svg
└── icon-collaboration.svg
├── design
├── active-states.jpg
├── desktop-design.jpg
├── desktop-preview.jpg
└── mobile-design.jpg
├── .gitignore
├── LICENSE
├── style-guide.md
├── script.js
├── README.md
├── index.html
└── style.css
/images/bg-quotes.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/all-my-frontend-mini-projects/Fylo-dark-theme-landing-page_frontend_project/HEAD/images/bg-quotes.png
--------------------------------------------------------------------------------
/images/profile-1.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/all-my-frontend-mini-projects/Fylo-dark-theme-landing-page_frontend_project/HEAD/images/profile-1.jpg
--------------------------------------------------------------------------------
/images/profile-2.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/all-my-frontend-mini-projects/Fylo-dark-theme-landing-page_frontend_project/HEAD/images/profile-2.jpg
--------------------------------------------------------------------------------
/images/profile-3.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/all-my-frontend-mini-projects/Fylo-dark-theme-landing-page_frontend_project/HEAD/images/profile-3.jpg
--------------------------------------------------------------------------------
/design/active-states.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/all-my-frontend-mini-projects/Fylo-dark-theme-landing-page_frontend_project/HEAD/design/active-states.jpg
--------------------------------------------------------------------------------
/design/desktop-design.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/all-my-frontend-mini-projects/Fylo-dark-theme-landing-page_frontend_project/HEAD/design/desktop-design.jpg
--------------------------------------------------------------------------------
/design/desktop-preview.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/all-my-frontend-mini-projects/Fylo-dark-theme-landing-page_frontend_project/HEAD/design/desktop-preview.jpg
--------------------------------------------------------------------------------
/design/mobile-design.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/all-my-frontend-mini-projects/Fylo-dark-theme-landing-page_frontend_project/HEAD/design/mobile-design.jpg
--------------------------------------------------------------------------------
/images/favicon-32x32.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/all-my-frontend-mini-projects/Fylo-dark-theme-landing-page_frontend_project/HEAD/images/favicon-32x32.png
--------------------------------------------------------------------------------
/images/illustration-intro.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/all-my-frontend-mini-projects/Fylo-dark-theme-landing-page_frontend_project/HEAD/images/illustration-intro.png
--------------------------------------------------------------------------------
/images/illustration-stay-productive.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/all-my-frontend-mini-projects/Fylo-dark-theme-landing-page_frontend_project/HEAD/images/illustration-stay-productive.png
--------------------------------------------------------------------------------
/images/icon-email.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/images/icon-location.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/images/icon-phone.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/images/bg-curvy-mobile.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # Avoid accidental Sketch file upload
2 | ###############################################
3 | ## Please do not remove line 5 - thanks! 🙂 ##
4 | ###############################################
5 | *.sketch
6 |
7 | # Avoid accidental XD or Figma upload if you convert the design file
8 | #######################################################
9 | ## Please do not remove lines 11 and 12 - thanks! 🙂 ##
10 | #######################################################
11 | *.xd
12 | *.fig
13 |
14 | # Avoid your project being littered with annoying .DS_Store files!
15 | .DS_Store
16 |
--------------------------------------------------------------------------------
/images/bg-curvy-desktop.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/images/icon-arrow.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/images/icon-security.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2024 Sarthak Sachdev
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/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 | ## Colors
11 |
12 | ### Primary
13 |
14 | - Dark Blue (intro and email sign up background): hsl(217, 28%, 15%)
15 | - Dark Blue (main background): hsl(218, 28%, 13%)
16 | - Dark Blue (footer background): hsl(216, 53%, 9%)
17 | - Dark Blue (testimonials background): hsl(219, 30%, 18%)
18 |
19 | ### Accent
20 |
21 | - Cyan (inside call-to-action gradient): hsl(176, 68%, 64%)
22 | - Blue (inside call-to-action gradient): hsl(198, 60%, 50%)
23 | - Light Red (error): hsl(0, 100%, 63%)
24 |
25 | ### Neutral
26 |
27 | - White: hsl(0, 0%, 100%)
28 |
29 | ## Typography
30 |
31 | ### Body Copy
32 |
33 | - Font size: 14px
34 |
35 | ### Headings, Call-to-actions, Header Navigation
36 |
37 | - Family: [Raleway](https://fonts.google.com/specimen/Raleway)
38 | - Weights: 400, 700
39 |
40 | ### Body
41 |
42 | - Family: [Open Sans](https://fonts.google.com/specimen/Open+Sans)
43 | - Weights: 400, 700
44 |
45 | ## Icons
46 |
47 | For the social icons, you can use a font icon library. Some suggestions can be found below:
48 |
49 | - [Font Awesome](https://fontawesome.com/)
50 | - [IcoMoon](https://icomoon.io/)
51 | - [Ionicons](https://ionicons.com/)
--------------------------------------------------------------------------------
/images/icon-any-file.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/images/icon-access-anywhere.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/images/logo.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/images/icon-collaboration.svg:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/script.js:
--------------------------------------------------------------------------------
1 | import AttributionFooter from "./attribution-footer-element.js";
2 | import "./valid-form.js";
3 |
4 | customElements.define("attribution-footer", AttributionFooter);
5 |
6 | "use strict";
7 |
8 | const singUpInput = document.querySelector(".sing-up__input");
9 | const singUpBtn = document.querySelector(".sing-up__btn");
10 | const singUpError = document.querySelector(".sing-up__error");
11 |
12 | singUpInput.addEventListener("input", () => {
13 | if (singUpInput.validity.valid && singUpInput.value.length > 0) {
14 | singUpError.innerText = "";
15 | }
16 | });
17 |
18 | singUpBtn.addEventListener("click", (e) => {
19 | if (!singUpInput.validity.valid || singUpInput.value.length === 0) {
20 | singUpError.innerText = "Please enter a valid email address";
21 | e.preventDefault();
22 | } else {
23 | singUpInput.innerText = "";
24 | }
25 | });
26 |
27 | "use strict";
28 |
29 | export default class AttributionFooter extends HTMLElement {
30 |
31 | static get observedAttributes() {
32 | return ["link-profile", "link-portfolio", "color-label", "color-link"];
33 | }
34 |
35 | constructor() {
36 | super();
37 | this.urlProfile = "https://www.frontendmentor.io/profile/rafaeldgeo";
38 | this.urlPortfolio = "https://www.linkedin.com/in/rafael-dias-de-almeida-devmap/";
39 | this.colorLabel = "#000000";
40 | this.colorLink = "#0000FF";
41 | }
42 |
43 | attributeChangedCallback(attributeName, oldValue, newValue){
44 | if (attributeName === "link-profile") {
45 | this.urlProfile = newValue;
46 | } else if (attributeName === "link-portfolio") {
47 | this.urlPortfolio = newValue;
48 | } else if (attributeName === "color-label") {
49 | this.colorLabel = newValue;
50 | } else if (attributeName === "color-link") {
51 | this.colorLink = newValue;
52 | }
53 | }
54 |
55 | connectedCallback(){
56 |
57 | const shadowRoot = this.attachShadow({mode:"open"});
58 |
59 | shadowRoot.innerHTML = ` Challenge by Frontend Mentor. Code by Rafael Dias de Almeida.
61 | `;
62 |
63 | const style = document.createElement("style");
64 | style.textContent = `
65 |
66 | :host {
67 | text-align: center;
68 | font-size: 11px;
69 | color: ${this.colorLabel};
70 | }
71 |
72 | .attributation__link { color: ${this.colorLink}; }
73 | `;
74 |
75 | shadowRoot.appendChild(style);
76 | }
77 |
78 | set urlProfile(newValue) {
79 | this._urlProfile = newValue;
80 | if (!this.shadowRoot) {
81 | return;
82 | }
83 |
84 | const aProfile = this.shadowRoot.querySelector(".attributation__link--profile");
85 | if (aProfile) {
86 | aProfile.innerText = this._urlProfile;
87 | }
88 | }
89 |
90 | get urlProfile() { return this._urlProfile; }
91 |
92 | set urlPortfolio(newValue) {
93 | this._urlPortfolio = newValue;
94 | if (!this.shadowRoot) {
95 | return;
96 | }
97 |
98 | const aPortfolio = this.shadowRoot.querySelector(".attributation__link--portfolio");
99 | if (aPortfolio) {
100 | aPortfolio.innerText = this._urlPortfolio;
101 | }
102 | }
103 |
104 | get urlPortfolio() { return this._urlPortfolio }
105 |
106 | set colorLabel(newValue) {
107 | this._colorLabel = newValue;
108 | if (!this.shadowRoot) {
109 | return;
110 | }
111 |
112 | const spanElement = this.shadowRoot.querySelectorAll(".attributation__wrapper");
113 | if (spanElement) {
114 | spanElement.innerText = this._colorLabel;
115 | }
116 | }
117 |
118 | get colorLabel() { return this._colorLabel }
119 |
120 | set colorLink(newValue) {
121 | this._colorLink = newValue;
122 | if (!this.shadowRoot) {
123 | return;
124 | }
125 |
126 | const aElement = this.shadowRoot.querySelectorAll(".attributation__link");
127 | if (aElement) {
128 | aElement.innerText = this._colorLink;
129 | }
130 | }
131 |
132 | get colorLink() { return this._colorLink }
133 | }
134 |
135 | // include in index.js
136 | /* customElements.define("attribution-footer", AttributionFooter); */
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Fylo Dark Theme Landing Page
2 |
3 | ## Welcome! 👋
4 |
5 | ## Table of contents
6 |
7 | - [Overview](#overview)
8 | - [The challenge](#the-challenge)
9 | - [How to setup the project](#how-to-setup-the-project)
10 | - [Screenshot](#screenshot)
11 | - [Links](#links)
12 | - [My process](#my-process)
13 | - [Built with](#built-with)
14 | - [What I learned](#what-i-learned)
15 | - [Continued development](#continued-development)
16 | - [Useful resources](#useful-resources)
17 | - [Author](#author)
18 | - [Acknowledgments](#acknowledgments)
19 |
20 | ## Overview
21 |
22 | ### The challenge
23 |
24 | The challenge is to create the Fylo Dark Theme Landing Page, the landing page of a website called Fylo designed for storing and easy accessing of files uploaded on Fylo.
25 |
26 | Users should be able to-
27 | - View the optimal layout for the site depending on their device's screen size
28 | - See hover states for all interactive elements on the page.
29 |
30 | ### How to setup the project
31 |
32 | To set up the project locally, follow these steps:
33 |
34 | 1. Clone the repository using GitHub Desktop or Git Bash:
35 | ```bash
36 | git clone https://github.com/SartHak-0-Sach/Fylo-dark-theme-landing-page_frontend_project.git
37 | ```
38 | 2. Open the project folder in your code editor.
39 | 3. Run the project using a live server extension or deploy it using Netlify, Vercel, or another web hosting and deployment service.
40 |
41 | ### Screenshot
42 |
43 | 
44 |
45 | ### Links
46 |
47 | - Solution URL: [GitHub Repository](https://github.com/SartHak-0-Sach/Fylo-dark-theme-landing-page_frontend_project)
48 | - Live Site URL: [Live Site](https://fylo-dark-theme-frontend.netlify.app/)
49 |
50 | ## My process
51 |
52 | ### Built with
53 |
54 | - HTML5
55 | - CSS3
56 |
57 | You will find all the required assets in the `/images` folder. The assets are already optimized.
58 |
59 | There is also a `style-guide.md` file containing the information you'll need, such as color palette and fonts.
60 |
61 | ### What I learned
62 |
63 | This project is my first project of handling error methods in JavaScript for unfilled, or wrongly filled entries, doing input validation at a primitive level in frontend itself before verifying it.
64 | ```js
65 | singUpInput.addEventListener("input", () => {
66 | if (singUpInput.validity.valid && singUpInput.value.length > 0) {
67 | singUpError.innerText = "";
68 | }
69 | });
70 |
71 | singUpBtn.addEventListener("click", (e) => {
72 | if (!singUpInput.validity.valid || singUpInput.value.length === 0) {
73 | singUpError.innerText = "Please enter a valid email address";
74 | e.preventDefault();
75 | } else {
76 | singUpInput.innerText = "";
77 | }
78 | });
79 | ```
80 |
81 | ### Continued development
82 |
83 | The continuously learning journey of a programmer never ends. This project made me realize that there are many concepts that I need to work upon including fundamentals like flex-box and its properties, to more complex concepts like working with fetch and async await in javascript. These areas are some that I think I need to work more upon in the upcoming future as they highlight some of the most significant regions of web development that are important for every developer to know of.
84 |
85 | These key points mentioned here will help me grow accountable and consistent towards improving at writing good quality code and be a successful full stack developer one day.
86 |
87 | ### Useful resources
88 |
89 | - [Harkirat Singh course notes](https://github.com/SartHak-0-Sach/harkirat-singh-course_code_and_notes) - I have added notes of all lectures along with code and lecture insights of all weeks along with bonus lectures to help you all as much as I can.
90 | - [My development code and notes](https://github.com/SartHak-0-Sach/cwh-web-dev-playlist_code_and_notes) - These are my notes that I made while working on my development skills in initial days and did these courses. Make sure to star the repository if you like it.✨💫
91 | - [mdn documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/async_function) - This is an amazing article which helped me finally understand promises, async and await syntax. I'd recommend it to anyone still learning this concept.
92 |
93 | ## Author
94 |
95 | Sarthak Sachdev
96 | - Website - [Sarthak Sachdev](https://itsmesarthak.netlify.app/)
97 | - LeetCode - [@sarthak_sachdev](https://leetcode.com/u/sarthak_sachdev/)
98 | - Twitter - [@sarthak_sach69](https://www.twitter.com/sarthak_sach69)
99 |
100 | ## Acknowledgments
101 |
102 | I feel like the solutions provided on the website and the continuous doubt solving by industry experts on discord for free is something that is unmatched by anyone else and need to be acknowledged for their efforts in improving me as a developer by suggesting the best practices in your respective tech stack.
103 |
104 | ## Got feedback for me?
105 |
106 | I love receiving feedback! I am always looking to improve my code and take up new innovative ideas to work upon. So if you have anything you'd like to mention, please email 'hi' at saarsaach30[at]gmail[dot]com.
107 |
108 | If you found this project helpful, consider sharing it with others to spread the knowledge!
109 |
110 | **Happy exploring Fylo!** 🌌🚀
--------------------------------------------------------------------------------
/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
All your files in one secure location, accessible anywhere.
26 |
Fylo stores all your most important files in one secure location. Access them wherever
27 | you need, share and collaborate with friends family, and co-workers.
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
Access your files, anywhere
38 |
The ability to use a smartphone, tablet, or computer to access your account means your
39 | files follow you everywhere.
40 |
41 |
42 |
43 |
44 |
45 |
Security you can trust
46 |
2-factor authentication and user-controlled encryption are just a couple of the security
47 | features we allow to help secure your files.
48 |
49 |
50 |
51 |
52 |
53 |
Real-time collaboration
54 |
Securely share files and folders with friends, family and colleagues for live collaboration.
55 | No email attachments required.
56 |
57 |
58 |
59 |
60 |
61 |
Store any type of filen
62 |
Whether you're sharing holidays photos or work documents, Fylo has you covered allowing for all
63 | file types to be securely stored and shared.
64 |
65 |
66 |
67 |
68 |
69 |
Stay productive, wherever you are
70 |
Never let location be an issue when accessing your files. Fylo has you covered for all of your file storage needs.
71 |
Securely share files and folders with friends, family and colleagues for live collaboration. No email attachments required.
Fylo has improved our team productivity by an order of magnitude. Since making the switch our team has
104 | become a well-oiled collaboration machine.
105 |
106 |
107 |
108 | Iva Boyd
109 | Founder & CEO, Huddle
110 |
111 |
112 |
113 |
114 |
115 |
Get early access today
116 |
It only takes a minute to sign up and our free starter tier is extremely generous. If you have any
117 | questions, our support team would be happy to help you.