diff --git a/LessonCraft-1/README.md b/LessonCraft-1/README.md new file mode 100644 index 0000000..6aa6927 --- /dev/null +++ b/LessonCraft-1/README.md @@ -0,0 +1,33 @@ + +# LESSON CRAFT - Educational Website +"Grow your skills to advance your career path - Lesson Craft offers you a variety of courses that help in your skill development and make you confident for the job. Enroll and get started." + +Lesson Craft is an educational website that provides users with various courses Lesson Craft can offer. It revolves around creating a responsive website using HTML, CSS, and JavaScript. The website is being provided with multi-paged functionalities where users can visit various pages related to the website like Home, About, Courses, and Contact pages. Also, the website is being deployed using the Netlify service. + +## Table of Contents +- [Project Overview](#project-overview) +- [Live Demo](#live-demo) +- [Features](#features) +- [Tech Stack](#tech-stack) +- [Website Preview](#website-preview) + +## Project Overview +Lesson Craft - Education Website is an online platform where Lesson Craft offers various courses for users or students who are tech enthusiasts and are willing to either learn a new skill in a technical field or are willing to upskill themselves. The website is responsive according to various screen sizes and also shows the navigation bar according to the different screen sizes. + +## Live Demo +Checkout the live demonstration of this responsive website: [Lesson Craft - Educational Website](https://edify-educational-app.vercel.app/) + +## Features +- **Home:** The page has various features like a header section, a fixed navigation section, categories, popular courses, FAQs, and some testimonials. +- **About:** The page has an achievement section where Lesson Craft talks about their achievements and shows a section for the team of tutors Lesson Craft has. +- **Courses:** It shows the various courses that are provided by Lesson Craft for their students or users. +- **Contact:** The page shows the various methods through which a user or student can reach the Lesson Craft team and a section where they can write their messages to them. + +## Tech Stack +The Lesson Craft - Educational Website was built using the following technologies and tools: + +- **HTML:** The foundation of the website's structure and content. +- **CSS:** For styling and making the website visually appealing. +- **JavaScript**: For changing properties of the navigation bar to be shown while scrolling and other functionalities. +- **Netlify:** The website is deployed and hosted on Netlify, making it accessible online. + diff --git a/LessonCraft-1/about.html b/LessonCraft-1/about.html new file mode 100644 index 0000000..1fde624 --- /dev/null +++ b/LessonCraft-1/about.html @@ -0,0 +1,264 @@ + + + + + + + + + + + EDIFY - Educational Website + + + + + +
+
+
+ achievements-img +
+
+

Achievements

+

Edify has achieved great a feat of offering online courses in India and global for a decade and above, and it still is on its path of nurturing talents across the globe. With around 450+ courses provided by Edify in the last decade, Edify has certified 79,000+ students across the globe and were awarded 25+ times in this field. Edify hopes to keep improving its courses and nurtures the upcoming students who are joining us on their journey to be successful.

+
+
+ +

450+

+

Courses

+
+
+ +

79,000+

+

Students

+
+
+ +

26+

+

Awards

+
+
+
+
+
+ +
+

Meet Our Team

+
+
+
+ tm1 +
+
+

Shatta Vale

+

Expert Tutor

+
+
+ + + +
+
+
+
+ tm2 +
+
+

Mia Jones

+

Expert Tutor

+
+
+ + + +
+
+
+
+ tm3 +
+
+

Diana Ayi

+

Expert Tutor

+
+
+ + + +
+
+
+
+ tm4 +
+
+

John Dumelo

+

Expert Tutor

+
+
+ + + +
+
+
+
+ tm5 +
+
+

Ruth Stockings

+

Expert Tutor

+
+
+ + + +
+
+
+
+ tm6 +
+
+

Edem Quist

+

Expert Tutor

+
+
+ + + +
+
+
+
+ tm7 +
+
+

Lila James

+

Expert Tutor

+
+
+ + + +
+
+
+
+ tm8 +
+
+

Menz Gold

+

Expert Tutor

+
+
+ + + +
+
+
+
+ tm9 +
+
+

Lily Adams

+

Expert Tutor

+
+
+ + + +
+
+
+
+ tm10 +
+
+

Josephine Stuart

+

Expert Tutor

+
+
+ + + +
+
+
+
+ + + + + + \ No newline at end of file diff --git a/LessonCraft-1/app.py b/LessonCraft-1/app.py new file mode 100644 index 0000000..e35d046 --- /dev/null +++ b/LessonCraft-1/app.py @@ -0,0 +1,84 @@ +from flask import Flask, render_template +import gradio as gr +from llamaapi import LlamaAPI +from langchain_experimental.llms import ChatLlamaAPI +import PyPDF2 + +# Initialize Flask app +app = Flask(__name__) + +# Initialize the LlamaAPI +llama = LlamaAPI("LL-QoWL9fXItXVpIn4aeAJrWF5ktefdgE5y6iBvV0sIbEgpd62qyKGbTi1fKkFfDnZh") +model = ChatLlamaAPI(client=llama) + +def extract_text_from_pdf(file_path): + """Extracts text from a PDF file, handling potential access errors.""" + try: + with open(file_path, 'rb') as pdf_file: + pdf_reader = PyPDF2.PdfReader(pdf_file) + text = "" + for page_num in range(len(pdf_reader.pages)): + page = pdf_reader.pages[page_num] + text += page.extract_text() or "" + return text + except (FileNotFoundError, PermissionError) as e: + return f"Error: {e}. Please check the file path and permissions." + +def create_study_plan(file_path_1, file_path_2): + """Extracts text from two PDF files, then starts conversation with LLM.""" + extracted_text_1 = extract_text_from_pdf(file_path_1) + extracted_text_2 = extract_text_from_pdf(file_path_2) + + # Check if there were errors during extraction + if "Error:" in extracted_text_1: + return extracted_text_1 # Return error message from the first PDF + if "Error:" in extracted_text_2: + return extracted_text_2 # Return error message from the second PDF + + # Split the extracted texts into parts + calendar_part = extracted_text_1.split("Syllabus Content", 1) + syllabus_part = extracted_text_2 + + if len(calendar_part) < 2: + return "Error: 'Syllabus Content' section not found in the academic calendar PDF." + + prompt = ( + f"Based on the following academic calendar content:\n{calendar_part[0]}\n\n" + f"And the syllabus content:\n{syllabus_part}\n\n" + "Please generate a comprehensive and detailed study plan for the upcoming semester. " + "Include the following elements for each unit:\n" + "- Title: The name of the unit or topic\n" + "- Weeks: The week number and title of the unit\n" + "- Daily Schedule: A detailed daily schedule including specific activities and duration\n" + "- Study Methods: Recommended methods for studying each topic\n" + "- Resources: Suggested books, articles, or websites for reference\n" + "- Assessments: Suggested quizzes or assignments to reinforce learning\n" + "Structure the plan clearly with bullet points for easy readability. Ensure to provide sufficient detail for each topic." + ) + + convo = model.invoke(prompt) + return convo.content + +# Define the Gradio interface +iface = gr.Interface( + fn=create_study_plan, + inputs=["file", "file"], + outputs="text", + title="Generate Comprehensive Study Plan from Two PDFs", + description="Upload two PDFs - one for the academic calendar and one for the syllabus - and receive a detailed study plan.", + allow_flagging=False +) + +# Flask route for the homepage +@app.route('/') +def home(): + return render_template('index.html') + +# Flask route for Gradio interface +@app.route('/generate') +def generate_study_plan(): + return iface.launch(share=False, inline=True) + +# Run the Flask app +if __name__ == "__main__": + app.run(debug=True) diff --git a/LessonCraft-1/contact.html b/LessonCraft-1/contact.html new file mode 100644 index 0000000..b8f69dd --- /dev/null +++ b/LessonCraft-1/contact.html @@ -0,0 +1,139 @@ + + + + + + + + + + + + LESSON CRAFT - Educational Website + + + + +
+
+ + +
+
+ + +
+ + + +
+
+
+ + + + + + \ No newline at end of file diff --git a/LessonCraft-1/courses.html b/LessonCraft-1/courses.html new file mode 100644 index 0000000..ac760b2 --- /dev/null +++ b/LessonCraft-1/courses.html @@ -0,0 +1,20 @@ + + + + + + Generate Study Plan + + +

Generate Study Plan from Two PDFs

+
+ +

+ + +

+ + +
+ + diff --git a/LessonCraft-1/css/about.css b/LessonCraft-1/css/about.css new file mode 100644 index 0000000..dca1e50 --- /dev/null +++ b/LessonCraft-1/css/about.css @@ -0,0 +1,164 @@ +/* achievements */ +.about__achievements { + margin-top: 3rem; +} + +.about__achievements-container { + display: grid; + grid-template-columns: 40% 60%; + gap: 5rem; +} + +.about__achievements-right > p { + margin: 1.6rem 0 2.5rem; +} + +.achievements__cards { + display: grid; + grid-template-columns: repeat(3, 1fr); + gap: 1.5rem; +} + +.achievement__card { + background: var(--color-bg-1); + padding: 1.6rem; + border-radius: 1rem; + text-align: center; + transition: var(--transition); +} + +.achievement__card:hover { + background: var(--color-bg-2); + box-shadow: 0 3rem 3rem rgba(0, 0, 0, .3); +} + +.achievement__icon { + background: var(--color-danger); + padding: .6rem 1rem; + font-size: 1.2rem; + border-radius: 1rem; + display: inline-block; + margin-bottom: 2rem; +} + +.achievement__card:nth-child(2) .achievement__icon { + background: var(--color-success); +} + +.achievement__card:nth-child(3) .achievement__icon { + background: var(--color-primary); +} + +/* team members */ +.team { + box-shadow: inset 0 0 3rem rgba(0, 0, 0, .5); + background: var(--color-bg-1); +} + +.team__container { + display: grid; + grid-template-columns: repeat(5, 1fr); + gap: 1rem; +} + +.team__member { + background: var(--color-bg-2); + padding: 2rem; + border-radius: 1rem; + text-align: center; + border: 1px solid transparent; + transition: var(--transition); + position: relative; + overflow: hidden; +} + +.team__member:hover { + background: transparent; + border: 1px solid var(--color-primary); + box-shadow: 0 2rem 2rem rgba(0, 0, 0, .3); +} + +.team__member-image img { + border-radius: 1rem; + filter: saturate(0); +} + +.team__member:hover img { + filter: saturate(1); +} + +.team__member-info * { + margin-top: 1rem; +} + +.team__member-info p { + color: var(--color-light); +} + +.team__member-socials { + position: absolute; + right: 0; + top: 30%; + display: flex; + flex-direction: column; + background: var(--color-primary); + font-size: 1.2rem; + border-radius: 1rem 0 0 1rem; + box-shadow: -2rem 0 2rem rgba(0, 0, 0, .7); + padding: 1rem; + transform: translateX(3rem); + opacity: 0; + transition: var(--transition); +} + +.team__member:hover .team__member-socials { + transform: translateX(0); + opacity: 1; +} + +/* for tablet */ +@media screen and (max-width: 1024px) { + /* achievement */ + .about__achievements { + margin-top: 2rem; + } + .about__achievements-container { + grid-template-columns: 1fr; + gap: 4rem; + } + .about__achievements-left { + width: 80%; + margin: 0 auto; + } + + /* team members */ + .team__container { + grid-template-columns: repeat(4, 1fr); + } + .team__member { + padding: 1rem; + } +} + +@media screen and (max-width: 600px) { + /* achievement */ + .achievements__cards { + grid-template-columns: 1fr 1fr; + gap: .7rem; + } + + /* team members */ + .team__container { + grid-template-columns: 1fr 1fr; + gap: 2rem; + } + .team__member { + padding: 0; + } + .team__member-image img { + border-radius: 0; + } + .team__member p { + margin-bottom: 2rem; + } +} \ No newline at end of file diff --git a/LessonCraft-1/css/contact.css b/LessonCraft-1/css/contact.css new file mode 100644 index 0000000..96a3fac --- /dev/null +++ b/LessonCraft-1/css/contact.css @@ -0,0 +1,136 @@ +.contact__container { + background: var(--color-bg-1); + padding: 4rem; + display: grid; + grid-template-columns: 40% 60%; + gap: 4rem; + height: 30rem; + margin: 7rem auto; + border-radius: 1rem; +} + +.contact__aside { + background: var(--color-primary); + padding: 3rem; + border-radius: 1rem; + position: relative; + bottom: 8rem; +} + +.aside__image { + width: 12rem; + margin-bottom: 2rem; +} + +.contact__aside h2 { + text-align: left; + margin-bottom: 1rem; +} + +.contact__aside p { + font-size: .9rem; + margin-bottom: 2rem; +} + +.contact__details li { + display: flex; + gap: 1rem; + align-items: center; + margin-bottom: 1rem; +} + +.contact__socials { + display: flex; + gap: .8rem; + margin-top: 3rem; + align-items: center; +} + +.contact__socials a { + background: var(--color-bg-2); + padding: .5rem; + border-radius: 50%; + font-size: 1.4rem; + transition: var(--transition); +} + +.contact__socials a:hover { + background: transparent; +} + +/* form */ +.contact__form { + display: flex; + flex-direction: column; + gap: 1.2rem; + margin-right: 4rem; +} + +.form__name { + display: flex; + gap: 1.2rem; +} + +.contact__form input[type="text"] { + width: 50%; +} + +input, textarea { + width: 100%; + padding: 1rem; + background: var(--color-bg); + color: var(--color-white); + font-family: "Montserrat", sans-serif; +} + +input::placeholder, +textarea::placeholder { + font-family: "Montserrat", sans-serif; +} + +.contact__form .btn { + width: max-content; + margin-top: 1rem; + cursor: pointer; +} + +/* for tablets */ +@media screen and (max-width: 1024px) { + .contact { + /* padding-bottom: 0; */ + } + .contact__container { + gap: 1.5rem; + margin-top: 3rem; + height: auto; + padding: 1.5rem; + } + .contact__aside { + width: auto; + padding: 1.5rem; + bottom: 0; + } + .contact__form { + align-self: center; + margin-right: 1.5rem; + } +} + +/* for mobile phones */ +@media screen and (max-width: 600px) { + .contact__container { + grid-template-columns: 1fr; + gap: 3rem; + margin-top: 0; + padding: 0; + } + .contact__form { + margin: 0 1.5rem 3rem; + } + .form__name { + flex-direction: column; + } + .form__name input[type="text"] { + width: 100%; + } +} \ No newline at end of file diff --git a/LessonCraft-1/css/style.css b/LessonCraft-1/css/style.css new file mode 100644 index 0000000..360fbe4 --- /dev/null +++ b/LessonCraft-1/css/style.css @@ -0,0 +1,628 @@ +@import url('https://fonts.googleapis.com/css2?family=Montserrat:wght@300;400;500;600;700;800;900&display=swap'); + +* { + margin: 0; + padding: 0; + border: 0; + outline: 0; + text-decoration: none; + list-style: none; + box-sizing: border-box; +} + +:root { + --color-primary: #6C63FF; + --color-success: #00BF8E; + --color-warning: #F7C94B; + --color-danger: #F75842; + --color-danger-variant: rgba(247, 88, 66, 0.4); + --color-white: #FFF; + --color-light: rgba(255, 255, 255, 0.7); + --color-black: #000; + --color-bg: #1F2641; + --color-bg-1: #2E3267; + --color-bg-2: #424890; + + --container-width-lg: 80%; + --container-width-md: 90%; + --container-width-sm: 94%; + + --transition: all .25s ease; +} + +body { + font-family: "Montserrat", sans-serif; + line-height: 1.7; + color: var(--color-white); + background: var(--color-bg); + +} + +body::-webkit-scrollbar { + background: var(--color-bg); + width: .65rem; +} + +body::-webkit-scrollbar-thumb { + background: var(--color-bg-2); + border-radius: 2rem; +} + +.container { + width: var(--container-width-lg); + margin: 0 auto; +} + +section { + padding: 6rem 0; +} + +section h2 { + text-align: center; + margin-bottom: 4rem; +} + +h1, h2, h3, h4, h5 { + line-height: 1.2; +} + +h1 { + font-size: 2.4rem; +} + +h2 { + font-size: 2rem; +} + +h3 { + font-size: 1.6rem; +} + +h4 { + font-size: 1.3rem; +} + +a { + color: var(--color-white); +} + +img { + width: 100%; + display: block; + object-fit: cover; +} + +.btn { + display: inline-block; + background: var(--color-white); + color: var(--color-black); + padding: 1rem 2rem; + border: 1px solid transparent; + font-weight: 500; + transition: var(--transition); +} + +.btn:hover { + background: transparent; + color: var(--color-white); + border-color: var(--color-white); +} + +.btn-primary { + background: var(--color-danger); + color: var(--color-white); +} + +/* Navbar */ +nav { + background-color: transparent; + width: 100vw; + height: 5rem; + position: fixed; + top: 0; + z-index: 11; +} + +/* on scroll class */ +.window-scroll { + background: var(--color-primary); + box-shadow: 0 1rem 2rem rgba(0, 0, 0, 0.2); +} + +.nav__container { + height: 100%; + display: flex; + justify-content: space-between; + align-items: center; +} + +nav button { + display: none; +} + +.nav__menu { + display: flex; + align-items: center; + gap: 4rem; +} + +.nav__menu a { + font-size: .9rem; + transition: var(--transition); +} + +.nav__menu a:hover { + border-bottom: 1px solid var(--color-white); +} + +/* Header section */ + +header { + position: relative; + top: 5rem; + overflow: hidden; + height: 70vh; + margin-bottom: 5rem; +} + +.header__container { + display: grid; + grid-template-columns: 1fr 1fr; + align-items: center; + gap: 5rem; + height: 100%; +} + +.header__left p { + margin: 1rem 0 2.5rem; +} + +/* Categories section */ + +.categories { + background: var(--color-bg-1); + //height: 34rem; + height:auto; +} + +.categories h1 { + line-height: 1; + margin-bottom: 3rem; +} + +.categories__container { + display: grid; + grid-template-columns: 40% 60%; +} + +.categories__left { + margin-right: 4rem; +} + +.categories__left p { + margin: 1rem 0 3rem; +} + +.categories__right { + display: grid; + grid-template-columns: repeat(3, 1fr); + gap: 1.2rem; +} + +.category { + background: var(--color-bg-2); + padding: 1rem; + border-radius: 1rem; + transition: var(--transition); +} + +.category:nth-child(2) .category__icon { + background: var(--color-danger); +} + +.category:nth-child(3) .category__icon { + background: var(--color-success); +} + +.category:nth-child(4) .category__icon { + background: var(--color-warning); +} + +.category:nth-child(5) .category__icon { + background: var(--color-success); +} + +.category:hover { + box-shadow: 0 3rem 3rem rgba(0, 0, 0, 0.3); + z-index: 1; +} + +.category__icon { + background: var(--color-primary); + padding: .55rem; + border-radius: .9rem; +} + +.category h5 { + margin: 1rem 0 .5rem; +} + +.category p { + font-size: 12px; +} + +/* Popular Courses section */ +.courses { + margin-top: 10rem; +} + +.courses__container { + display: grid; + grid-template-columns: repeat(3, 1fr); + gap: 2rem; +} + +.course { + background-color: var(--color-bg-1); + text-align: center; + border: 1px solid transparent; + transition: var(--transition); +} + +.course:hover { + background: transparent; + border-color: var(--color-primary); +} + +.course__info { + padding: 2rem; +} + +.course__info p { + margin: 1.2rem 0 2rem; + font-size: .9rem; +} + +/* faqs */ +.faqs { + background: var(--color-bg-1); + box-shadow: inset 0 0 3rem rgba(0, 0, 0, 0.5); +} + +.faqs__container { + display: flex; + flex-direction: column; + gap: 1rem; +} + +.faq { + display: flex; + gap: 1.4rem; + padding: 2rem; + height: fit-content; + background-color: var(--color-primary); + cursor: pointer; +} + +.faq h4 { + font-size: 1rem; + line-height: 2; +} + +.faq__icon { + font-size: 1.2rem; +} + +.faq p { + margin-top: .8rem; + display: none; +} + +.faq.open p { + display: block; +} + +/* testimonials */ +.testimonials__container { + overflow-x: hidden; + position: relative; + margin-bottom: 5rem; +} + +.testimonial { + padding-top: 2rem; +} + +.avatar { + width: 6rem; + height: 6rem; + border-radius: 50%; + overflow: hidden; + margin: 0 auto 1rem; + border: 1rem solid var(--color-bg-1); +} + +.testimonial__info { + text-align: center; +} + +.testimonial__body { + background: var(--color-primary); + padding: 2rem; + margin-top: 3rem; + position: relative; + height: 11rem; +} + +@media screen and (max-width: 1000px) { + .testimonial__body { + height: 15rem; + } +} + +@media screen and (max-width: 800px) { + .testimonial__body { + height: 9rem; + } +} + +@media screen and (max-width: 600px) { + .testimonial__body { + height: 13rem; + } +} + +.testimonial__body:before { + content: ""; + display: block; + background: linear-gradient(135deg, transparent, var(--color-primary), var(--color-primary), var(--color-primary)); + width: 3rem; + height: 3rem; + position: absolute; + left: 46%; + top: -1.5rem; + transform: rotate(45deg); +} + +/* swiper animation for autoplay */ +.swiper { + width: 100%; + height: 100%; +} + +.swiper-slide { + text-align: center; + display: flex; + flex-direction: column; + justify-content: center; + align-items: center; +} + +.swiper-slide img { + display: block; + width: 100%; + height: 100%; + object-fit: cover; +} + +footer { + background: var(--color-bg-1); + padding-top: 5rem; + font-size: .9rem; +} + +.footer__container { + display: grid; + grid-template-columns: repeat(4, 1fr); + gap: 5rem; +} + +.footer__container > div h4 { + margin-bottom: 1.2rem; +} + +.footer__1 { + width: 10rem; +} + +footer ul li { + margin-bottom: .7rem; +} + +footer ul li:hover { + text-decoration: underline; +} + +.footer__socials { + display: flex; + gap: 1rem; + font-size: 1.2rem; + margin-top: 2rem; +} + +.footer__copyright { + text-align: center; + margin-top: 4rem; + padding: 1.2rem 0; + background: var(--color-bg); +} + +/* for tablets */ +@media screen and (max-width: 1024px) { + .container { + width: var(--container-width-md); + } + h1 { + font-size: 2rem; + } + h2 { + font-size: 1.7rem; + } + h3 { + font-size: 1.4rem; + } + h4 { + font-size: 1.2rem; + } + + /* navbar */ + nav button { + display: inline-block; + background: transparent; + font-size: 1.8rem; + color: var(--color-white); + cursor: pointer; + } + nav button#close-menu-btn { + display: none; + } + .nav__menu { + display: none; + position: fixed; + top: 5rem; + right: 5%; + height: fit-content; + width: 18rem; + flex-direction: column; + gap: 0; + } + .nav__menu li { + width: 100%; + height: 5.8rem; + animation: animateNavItems .4s linear forwards; + transform-origin: translateX(100px); + opacity: 0; + } + .nav__menu li:nth-child(2) { + animation-delay: .2s; + } + .nav__menu li:nth-child(3) { + animation-delay: .4s; + } + .nav__menu li:nth-child(4) { + animation-delay: .6s; + } + @keyframes animateNavItems { + 0% { + transform: translateZ(100px) translateX(100px) scale(.1); + } + 100% { + transform: translateZ(0) translateX(0) scale(1); + opacity: 1; + } + } + .nav__menu li a { + background-color: var(--color-primary); + box-shadow: -4rem 6rem 10rem rgba(0, 0, 0, 0.6); + width: 100%; + height: 100%; + display: flex; + justify-content: center; + align-items: center; + } + .nav__menu li a:hover { + background: var(--color-bg-2); + color: var(--color-white); + } + + /* header section */ + header { + height: 60vh; + margin-bottom: 4rem; + } + .header__container { + gap: 0; + padding-bottom: 3rem; + } + + /* categories section */ + .categories { + height: auto; + } + .categories__container { + grid-template-columns: 1fr; + gap: 3rem; + } + .categories__left { + margin-right: 0; + } + + /* popular courses */ + .courses { + margin-top: 0; + } + .courses__container { + grid-template-columns: 1fr 1fr; + } + + /* footer */ + .footer__socials { + font-size: 1.6rem; + } +} + +/* for mobiles */ +@media screen and (max-width: 600px) { + .container { + width: var(--container-width-sm); + } + + /* navbar */ + .nav__menu { + right: 3%; + } + + /* header */ + header { + height: 105vh; + padding-bottom: 8rem; + } + .header__container { + grid-template-columns: 1fr; + text-align: center; + margin-top: 2rem; + width: calc(var(--container-width-sm) - 12%); + gap: 2rem; + } + + /* categories */ + .categories__right { + grid-template-columns: 1fr 1fr; + gap: .7rem; + } + .category { + padding: 1rem; + border-radius: .7rem; + } + .category__icon { + margin-top: 4px; + padding: .8rem; + font-size: 1.4rem; + } + + /* popular courses */ + .courses__container { + grid-template-columns: 1fr; + } + + /* testimonials */ + .testimonial__body { + height: auto; + } + + /* footer */ + footer { + font-size: .8rem; + } + .footer__container { + grid-template-columns: 1fr; + text-align: center; + gap: 2rem; + } + .footer__1 { + margin: 1rem auto; + } + .footer__socials { + justify-content: center; + } +} \ No newline at end of file diff --git a/LessonCraft-1/images/about achievements.svg b/LessonCraft-1/images/about achievements.svg new file mode 100644 index 0000000..901c3b0 --- /dev/null +++ b/LessonCraft-1/images/about achievements.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/LessonCraft-1/images/avatar1.jpg b/LessonCraft-1/images/avatar1.jpg new file mode 100644 index 0000000..892b6c3 Binary files /dev/null and b/LessonCraft-1/images/avatar1.jpg differ diff --git a/LessonCraft-1/images/avatar2.jpg b/LessonCraft-1/images/avatar2.jpg new file mode 100644 index 0000000..0070a9e Binary files /dev/null and b/LessonCraft-1/images/avatar2.jpg differ diff --git a/LessonCraft-1/images/avatar3.jpg b/LessonCraft-1/images/avatar3.jpg new file mode 100644 index 0000000..0131300 Binary files /dev/null and b/LessonCraft-1/images/avatar3.jpg differ diff --git a/LessonCraft-1/images/avatar4.jpg b/LessonCraft-1/images/avatar4.jpg new file mode 100644 index 0000000..7719382 Binary files /dev/null and b/LessonCraft-1/images/avatar4.jpg differ diff --git a/LessonCraft-1/images/avatar5.jpg b/LessonCraft-1/images/avatar5.jpg new file mode 100644 index 0000000..e2c9979 Binary files /dev/null and b/LessonCraft-1/images/avatar5.jpg differ diff --git a/LessonCraft-1/images/avatar6.jpg b/LessonCraft-1/images/avatar6.jpg new file mode 100644 index 0000000..134802d Binary files /dev/null and b/LessonCraft-1/images/avatar6.jpg differ diff --git a/LessonCraft-1/images/avatar7.jpg b/LessonCraft-1/images/avatar7.jpg new file mode 100644 index 0000000..3b271db Binary files /dev/null and b/LessonCraft-1/images/avatar7.jpg differ diff --git a/LessonCraft-1/images/background texture.psd b/LessonCraft-1/images/background texture.psd new file mode 100644 index 0000000..6b976d4 Binary files /dev/null and b/LessonCraft-1/images/background texture.psd differ diff --git a/LessonCraft-1/images/bg-texture.png b/LessonCraft-1/images/bg-texture.png new file mode 100644 index 0000000..c0feb51 Binary files /dev/null and b/LessonCraft-1/images/bg-texture.png differ diff --git a/LessonCraft-1/images/c1.jpg b/LessonCraft-1/images/c1.jpg new file mode 100644 index 0000000..dfd39f1 Binary files /dev/null and b/LessonCraft-1/images/c1.jpg differ diff --git a/LessonCraft-1/images/c2.jpg b/LessonCraft-1/images/c2.jpg new file mode 100644 index 0000000..808da96 Binary files /dev/null and b/LessonCraft-1/images/c2.jpg differ diff --git a/LessonCraft-1/images/c3.jpg b/LessonCraft-1/images/c3.jpg new file mode 100644 index 0000000..2552fbe Binary files /dev/null and b/LessonCraft-1/images/c3.jpg differ diff --git a/LessonCraft-1/images/c4.jpg b/LessonCraft-1/images/c4.jpg new file mode 100644 index 0000000..ffa38d4 Binary files /dev/null and b/LessonCraft-1/images/c4.jpg differ diff --git a/LessonCraft-1/images/c5.jpg b/LessonCraft-1/images/c5.jpg new file mode 100644 index 0000000..528f9cc Binary files /dev/null and b/LessonCraft-1/images/c5.jpg differ diff --git a/LessonCraft-1/images/c6.jpg b/LessonCraft-1/images/c6.jpg new file mode 100644 index 0000000..63d620e Binary files /dev/null and b/LessonCraft-1/images/c6.jpg differ diff --git a/LessonCraft-1/images/contact.svg b/LessonCraft-1/images/contact.svg new file mode 100644 index 0000000..93eb6e2 --- /dev/null +++ b/LessonCraft-1/images/contact.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/LessonCraft-1/images/course1.jpg b/LessonCraft-1/images/course1.jpg new file mode 100644 index 0000000..36e115f Binary files /dev/null and b/LessonCraft-1/images/course1.jpg differ diff --git a/LessonCraft-1/images/course10.jpg b/LessonCraft-1/images/course10.jpg new file mode 100644 index 0000000..fcc26b2 Binary files /dev/null and b/LessonCraft-1/images/course10.jpg differ diff --git a/LessonCraft-1/images/course11.jpg b/LessonCraft-1/images/course11.jpg new file mode 100644 index 0000000..888881d Binary files /dev/null and b/LessonCraft-1/images/course11.jpg differ diff --git a/LessonCraft-1/images/course12.jpg b/LessonCraft-1/images/course12.jpg new file mode 100644 index 0000000..71c44a2 Binary files /dev/null and b/LessonCraft-1/images/course12.jpg differ diff --git a/LessonCraft-1/images/course13.jpg b/LessonCraft-1/images/course13.jpg new file mode 100644 index 0000000..c27ad54 Binary files /dev/null and b/LessonCraft-1/images/course13.jpg differ diff --git a/LessonCraft-1/images/course14.jpg b/LessonCraft-1/images/course14.jpg new file mode 100644 index 0000000..7e9c958 Binary files /dev/null and b/LessonCraft-1/images/course14.jpg differ diff --git a/LessonCraft-1/images/course15.jpg b/LessonCraft-1/images/course15.jpg new file mode 100644 index 0000000..1e46fac Binary files /dev/null and b/LessonCraft-1/images/course15.jpg differ diff --git a/LessonCraft-1/images/course16.jpg b/LessonCraft-1/images/course16.jpg new file mode 100644 index 0000000..b54266d Binary files /dev/null and b/LessonCraft-1/images/course16.jpg differ diff --git a/LessonCraft-1/images/course17.jpg b/LessonCraft-1/images/course17.jpg new file mode 100644 index 0000000..6233258 Binary files /dev/null and b/LessonCraft-1/images/course17.jpg differ diff --git a/LessonCraft-1/images/course18.jpg b/LessonCraft-1/images/course18.jpg new file mode 100644 index 0000000..1755d05 Binary files /dev/null and b/LessonCraft-1/images/course18.jpg differ diff --git a/LessonCraft-1/images/course2.jpg b/LessonCraft-1/images/course2.jpg new file mode 100644 index 0000000..fca84fe Binary files /dev/null and b/LessonCraft-1/images/course2.jpg differ diff --git a/LessonCraft-1/images/course3.jpg b/LessonCraft-1/images/course3.jpg new file mode 100644 index 0000000..14e2518 Binary files /dev/null and b/LessonCraft-1/images/course3.jpg differ diff --git a/LessonCraft-1/images/course4.jpg b/LessonCraft-1/images/course4.jpg new file mode 100644 index 0000000..0cd1cea Binary files /dev/null and b/LessonCraft-1/images/course4.jpg differ diff --git a/LessonCraft-1/images/course5.jpg b/LessonCraft-1/images/course5.jpg new file mode 100644 index 0000000..414a20f Binary files /dev/null and b/LessonCraft-1/images/course5.jpg differ diff --git a/LessonCraft-1/images/course6.jpg b/LessonCraft-1/images/course6.jpg new file mode 100644 index 0000000..3a12446 Binary files /dev/null and b/LessonCraft-1/images/course6.jpg differ diff --git a/LessonCraft-1/images/course7.jpg b/LessonCraft-1/images/course7.jpg new file mode 100644 index 0000000..e39d52c Binary files /dev/null and b/LessonCraft-1/images/course7.jpg differ diff --git a/LessonCraft-1/images/course8.jpg b/LessonCraft-1/images/course8.jpg new file mode 100644 index 0000000..36c6dd6 Binary files /dev/null and b/LessonCraft-1/images/course8.jpg differ diff --git a/LessonCraft-1/images/course9.jpg b/LessonCraft-1/images/course9.jpg new file mode 100644 index 0000000..6d15179 Binary files /dev/null and b/LessonCraft-1/images/course9.jpg differ diff --git a/LessonCraft-1/images/header.svg b/LessonCraft-1/images/header.svg new file mode 100644 index 0000000..d8aad7c --- /dev/null +++ b/LessonCraft-1/images/header.svg @@ -0,0 +1 @@ +true friends \ No newline at end of file diff --git a/LessonCraft-1/images/tm1.jpg b/LessonCraft-1/images/tm1.jpg new file mode 100644 index 0000000..3e579e9 Binary files /dev/null and b/LessonCraft-1/images/tm1.jpg differ diff --git a/LessonCraft-1/images/tm10.jpg b/LessonCraft-1/images/tm10.jpg new file mode 100644 index 0000000..b8e30ac Binary files /dev/null and b/LessonCraft-1/images/tm10.jpg differ diff --git a/LessonCraft-1/images/tm2.jpg b/LessonCraft-1/images/tm2.jpg new file mode 100644 index 0000000..3f229a6 Binary files /dev/null and b/LessonCraft-1/images/tm2.jpg differ diff --git a/LessonCraft-1/images/tm3.jpg b/LessonCraft-1/images/tm3.jpg new file mode 100644 index 0000000..ffd1d62 Binary files /dev/null and b/LessonCraft-1/images/tm3.jpg differ diff --git a/LessonCraft-1/images/tm4.jpg b/LessonCraft-1/images/tm4.jpg new file mode 100644 index 0000000..e0ac12e Binary files /dev/null and b/LessonCraft-1/images/tm4.jpg differ diff --git a/LessonCraft-1/images/tm5.jpg b/LessonCraft-1/images/tm5.jpg new file mode 100644 index 0000000..41b49ec Binary files /dev/null and b/LessonCraft-1/images/tm5.jpg differ diff --git a/LessonCraft-1/images/tm6.jpg b/LessonCraft-1/images/tm6.jpg new file mode 100644 index 0000000..deacfb3 Binary files /dev/null and b/LessonCraft-1/images/tm6.jpg differ diff --git a/LessonCraft-1/images/tm7.jpg b/LessonCraft-1/images/tm7.jpg new file mode 100644 index 0000000..0e531d9 Binary files /dev/null and b/LessonCraft-1/images/tm7.jpg differ diff --git a/LessonCraft-1/images/tm8.jpg b/LessonCraft-1/images/tm8.jpg new file mode 100644 index 0000000..399f6ba Binary files /dev/null and b/LessonCraft-1/images/tm8.jpg differ diff --git a/LessonCraft-1/images/tm9.jpg b/LessonCraft-1/images/tm9.jpg new file mode 100644 index 0000000..5e2626c Binary files /dev/null and b/LessonCraft-1/images/tm9.jpg differ diff --git a/LessonCraft-1/index.html b/LessonCraft-1/index.html new file mode 100644 index 0000000..b757bfb --- /dev/null +++ b/LessonCraft-1/index.html @@ -0,0 +1,379 @@ + + + + + + + + + + + LessonCraft - Educational Website + + + + + +
+
+
+

Transform Education with AI-Powered Lesson Planning

+

LessonCraft harnesses advanced AI to automate the creation of comprehensive lesson plans, interactive presentations, quizzes, and educational materials. Tailored to curriculum standards, grade levels, and student needs, our platform simplifies teaching, allowing educators to focus more on personalized instruction and student engagement.

+ Start Planning with AI +
+
+
+ header-image +
+
+
+
+ +
+
+
+

Why Choose LessonCraft?

+

LessonCraft brings the power of AI to education by providing a set of advanced tools that transform teaching and learning experiences. Explore the key features that make LessonCraft the ultimate AI-powered educational assistant for teachers and students alike.

+ Learn More +
+
+
+ +
Automated Lesson Plan Generation
+

Quickly creates tailored lesson plans based on teacher inputs, saving time and effort for educators.

+
+ +
+ +
Dynamic Quiz Creation
+

Generates quizzes that automatically adjust in difficulty based on student performance, ensuring a personalized learning experience.

+
+ +
+ +
Real-Time Feedback
+

Provides instant feedback to enhance student understanding and keep them engaged in their learning journey.

+
+ +
+ +
Content Simplification
+

Adapts the complexity of topics to match the learning levels of different students, making education accessible to all.

+
+ +
+ +
Gamification Elements
+

Motivates and engages students through rewards and badges, turning learning into a fun and rewarding experience. + +

+
+ +
+ +
Learn with Your Favorite Celebrities and Cartoon Characters!
+

Turn boring lessons into interactive experiences! Let AI transform educational videos by featuring the voices and avatars of beloved celebrities and cartoon characters, making learning an exciting adventure.

+
+
+
+
+ +
+

Transform Education with AI-Powered Lesson Planning

+
+
+
+ course-1 +
+
+

Automated Lesson Plan Generation

+

Quickly creates tailored lesson plans based on teacher inputs, saving time and effort for educators.

+ Learn More +
+
+ +
+
+ course-2 +
+
+

Dynamic Quiz Creation

+

Generates quizzes that automatically adjust in difficulty based on student performance, ensuring a personalized learning experience.

+ Learn More +
+
+ +
+
+ course-3 +
+
+

Real-Time Feedback

+

Provides instant feedback to enhance student understanding and keep them engaged in their learning journey.

+ Learn More +
+
+
+
+ +
+

Frequently Asked Questions

+
+
+
+
+

How does LessonCraft generate lesson plans?

+

LessonCraft uses advanced AI algorithms to automate the process of lesson planning. Teachers simply input topics, curriculum details, and learning objectives, and the platform generates a tailored lesson plan in minutes.

+
+
+ +
+
+
+

Can I customize the AI-generated lesson plans?

+

Yes, you can! After LessonCraft generates a lesson plan, you have the ability to modify, adjust, and add your own personal touch to ensure it fits your teaching style and class needs.

+
+
+ +
+
+
+

How does the dynamic quiz feature work?

+

LessonCraft’s dynamic quiz feature adjusts the difficulty of questions in real-time based on student performance. This helps maintain engagement and provides a personalized learning experience for each student.

+
+
+ +
+
+
+

Is LessonCraft suitable for all grade levels?

+

Yes! LessonCraft is designed to support a wide range of grade levels. The platform tailors content complexity and lesson plans to suit the needs of elementary, middle, and high school students.

+
+
+ +
+
+
+

Can students use LessonCraft independently?

+

Absolutely! While LessonCraft is designed to assist teachers, students can also use it for self-study. The platform offers quizzes, presentations, and learning materials that students can explore at their own pace.

+
+
+ +
+
+
+

Does LessonCraft offer multilingual support?

+

Yes, LessonCraft supports multiple languages, allowing teachers and students to interact with the platform in their preferred language.

+
+
+ +
+
+
+

How can LessonCraft enhance engagement in the classroom?

+

LessonCraft integrates gamification elements like badges, rewards, and levels, making learning fun and engaging for students. It also offers interactive presentations and celebrity-led educational videos to keep students motivated.

+
+
+ +
+
+
+

What subjects does LessonCraft cover?

+

LessonCraft covers a broad range of subjects including Math, Science, History, English, and more. The platform can be adapted to fit any subject or curriculum standard.

+
+
+
+
+ + +
+

Student's Testimonials

+
+
+
+ avatar-1 +
+
+
Diana Ayi
+ Student +
+
+

Hello, this is Diana, I'm pretty satisfied with the course material provided by Edify. The practice projects provided according to different topics helps a lot in learning.

+
+
+
+
+ avatar-2 +
+
+
Erick Miller
+ Web Developer +
+
+

The courses in Edify are really something, as after being certified I had enough experience to do some projects for my portolio which helped me landing job as a web developer.

+
+
+
+
+ avatar-3 +
+
+
Eden Quist
+ Student +
+
+

I am very satisfied with the course and the faculty as whether it's a recorded lesson or not, the faculty really helps out in situations I felt like I'm stuck.

+
+
+
+
+ avatar-4 +
+
+
Hajia Bintu
+ UI Designer +
+
+

I can't imagine being a UI designer, as first I had very low knowledge about the designing field, but it took my interest and followed the course, I'm really thankful for the Edify certification.

+
+
+
+
+ avatar-5 +
+
+
Samantha Johnson
+ Web Developer +
+
+

The different courses really helps in building the projects efficiently. I've personally done 3 courses regarding web development, thus gained much greater results.

+
+
+
+
+ avatar-6 +
+
+
Jasmine
+ Student +
+
+

I'm currently doing 2 courses at the same time, and I'm really enjoying it as the faculty teachers are very supportive and often encourage us to do as many practice as we can.

+
+
+
+
+ avatar-7 +
+
+
Liza Robbie
+ UI Designer +
+
+

I'm very glad that I got certified by Edify as it really helped me landing the job that I was interested for last 1 and half years.

+
+
+
+
+
+ + + + + + + + + \ No newline at end of file diff --git a/LessonCraft-1/logo.svg b/LessonCraft-1/logo.svg new file mode 100644 index 0000000..42795f5 --- /dev/null +++ b/LessonCraft-1/logo.svg @@ -0,0 +1,345 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/LessonCraft-1/main.js b/LessonCraft-1/main.js new file mode 100644 index 0000000..1c25f72 --- /dev/null +++ b/LessonCraft-1/main.js @@ -0,0 +1,37 @@ +// changing navbar on scroll + +window.addEventListener('scroll', () => { + document.querySelector("nav").classList.toggle("window-scroll", window.scrollY > 0) +}); + +// show/hide faq answer +const faqs = document.querySelectorAll(".faq"); +faqs.forEach(faq => { + faq.addEventListener("click", () => { + faq.classList.toggle("open"); + + const icon = faq.querySelector(".faq__icon i"); + if (icon.className === "bx bx-plus") { + icon.className = "bx bx-minus"; + } else { + icon.className = "bx bx-plus"; + } + }); +}); + +// show/hide nav menu +const menu = document.querySelector(".nav__menu"); +const menuOpenBtn = document.querySelector("#open-menu-btn"); +const menuCloseBtn = document.querySelector("#close-menu-btn"); + +menuOpenBtn.addEventListener("click", () => { + menu.style.display = "flex"; + menuCloseBtn.style.display = "inline-block"; + menuOpenBtn.style.display = "none"; +}); + +menuCloseBtn.addEventListener("click", () => { + menu.style.display = "none"; + menuCloseBtn.style.display = "none"; + menuOpenBtn.style.display = "inline-block"; +}); \ No newline at end of file diff --git a/LessonCraft-1/python.py b/LessonCraft-1/python.py new file mode 100644 index 0000000..6f0f984 --- /dev/null +++ b/LessonCraft-1/python.py @@ -0,0 +1,74 @@ +import PyPDF2 +import os +from langchain_experimental.llms import ChatLlamaAPI +import gradio as gr +from llamaapi import LlamaAPI + +# Initialize the LlamaAPI +llama = LlamaAPI("LL-QoWL9fXItXVpIn4aeAJrWF5ktefdgE5y6iBvV0sIbEgpd62qyKGbTi1fKkFfDnZh") +model = ChatLlamaAPI(client=llama) + +def extract_text_from_pdf(file_path): + """Extracts text from a PDF file, handling potential access errors.""" + try: + with open(file_path, 'rb') as pdf_file: + pdf_reader = PyPDF2.PdfReader(pdf_file) + text = "" + for page_num in range(len(pdf_reader.pages)): + page = pdf_reader.pages[page_num] + text += page.extract_text() or "" + return text + except (FileNotFoundError, PermissionError) as e: + return f"Error: {e}. Please check the file path and permissions." + +def create_study_plan(file_path_1, file_path_2): + """Extracts text from two PDF files, then starts conversation with LLM.""" + extracted_text_1 = extract_text_from_pdf(file_path_1) + extracted_text_2 = extract_text_from_pdf(file_path_2) + + # Print extracted text for debugging + print("Extracted Text 1:", extracted_text_1) # Debugging line + print("Extracted Text 2:", extracted_text_2) # Debugging line + + # Check if there were errors during extraction + if "Error:" in extracted_text_1: + return extracted_text_1 # Return error message from the first PDF + if "Error:" in extracted_text_2: + return extracted_text_2 # Return error message from the second PDF + + # Split the extracted texts into parts + calendar_part = extracted_text_1.split("Syllabus Content", 1) + syllabus_part = extracted_text_2 + + if len(calendar_part) < 2: + return "Error: 'Syllabus Content' section not found in the academic calendar PDF." + + prompt = ( + f"Based on the following academic calendar content:\n{calendar_part[0]}\n\n" + f"And the syllabus content:\n{syllabus_part}\n\n" + "Please generate a comprehensive and detailed study plan for the upcoming semester. " + "Include the following elements for each unit:\n" + "- Title: The name of the unit or topic\n" + "- Weeks: The week number and title of the unit\n" + "- Daily Schedule: A detailed daily schedule including specific activities and duration\n" + "- Study Methods: Recommended methods for studying each topic\n" + "- Resources: Suggested books, articles, or websites for reference\n" + "- Assessments: Suggested quizzes or assignments to reinforce learning\n" + "Structure the plan clearly with bullet points for easy readability. Ensure to provide sufficient detail for each topic." + ) + + convo = model.invoke(prompt) + return convo.content + +# Create Gradio interface +iface = gr.Interface( + fn=create_study_plan, + inputs=["file", "file"], + outputs="text", + title="Generate Comprehensive Study Plan from Two PDFs", + description="Upload two PDFs - one for the academic calendar and one for the syllabus - and receive a detailed study plan.", + allow_flagging=False +) + +# Launch the Gradio interface +iface.launch(share=True)