From 0c2c33fd2dc08a3f19ba7eba9c195fbfb1c4a981 Mon Sep 17 00:00:00 2001 From: Shiv Date: Sat, 27 Jun 2026 12:10:28 +0530 Subject: [PATCH 1/2] feat(seo): improve metadata and favicon configuration --- app/layout.tsx | 96 ++++++++++++++++++++++++++++++++++++++++- public/site.webmanifest | 20 +++++++++ 2 files changed, 114 insertions(+), 2 deletions(-) create mode 100644 public/site.webmanifest diff --git a/app/layout.tsx b/app/layout.tsx index 7abb542..fb52ddd 100644 --- a/app/layout.tsx +++ b/app/layout.tsx @@ -5,8 +5,100 @@ import Footer from "@/components/footer"; import { ThemeProvider } from "@/components/theme-provider"; export const metadata: Metadata = { - title: "Hyper Learning", - description: "AI-Powered Learning Platform", + metadataBase: new URL("https://www.hyperlearningtech.in"), + + title: { + default: "Hyper Learning", + template: "%s | Hyper Learning", + }, + + description: + "Hyper Learning is an AI-powered engineering learning platform that helps students learn smarter through syllabus mapping, AI-generated explanations, previous year question analysis, and exam-focused preparation.", + + applicationName: "Hyper Learning", + + keywords: [ + "Hyper Learning", + "Engineering Notes", + "RGPV", + "AI Learning Platform", + "Previous Year Questions", + "Engineering Education", + "Semester Notes", + "Exam Preparation", + "AI Tutor", + "HyperLearningTech", + ], + + authors: [ + { + name: "Shiv Raj Singh", + url: "https://www.hyperlearningtech.in", + }, + ], + + creator: "Shiv Raj Singh", + + publisher: "Hyper Learning", + + robots: { + index: true, + follow: true, + googleBot: { + index: true, + follow: true, + "max-image-preview": "large", + "max-video-preview": -1, + "max-snippet": -1, + }, + }, + + icons: { + icon: [ + { url: "/favicon.ico" }, + { + url: "/favicon-32x32.png", + sizes: "32x32", + type: "image/png", + }, + { + url: "/favicon-16x16.png", + sizes: "16x16", + type: "image/png", + }, + ], + + apple: "/apple-touch-icon.png", + + shortcut: "/favicon.ico", + }, + + manifest: "/site.webmanifest", + + openGraph: { + title: "Hyper Learning", + description: + "AI-powered engineering learning platform for syllabus-driven learning and exam preparation.", + url: "https://www.hyperlearningtech.in", + siteName: "Hyper Learning", + locale: "en_US", + type: "website", + images: [ + { + url: "/HL-social-share-image.png", + width: 1200, + height: 630, + alt: "Hyper Learning", + }, + ], + }, + + twitter: { + card: "summary_large_image", + title: "Hyper Learning", + description: "AI-powered engineering learning platform for students.", + images: ["/HL-social-share-image.png"], + }, }; export default function RootLayout({ diff --git a/public/site.webmanifest b/public/site.webmanifest new file mode 100644 index 0000000..e9ebc7f --- /dev/null +++ b/public/site.webmanifest @@ -0,0 +1,20 @@ +{ + "name": "Hyper Learning", + "short_name": "Hyper Learning", + "description": "AI-powered engineering learning platform", + "icons": [ + { + "src": "/android-chrome-192x192.png", + "sizes": "192x192", + "type": "image/png" + }, + { + "src": "/android-chrome-512x512.png", + "sizes": "512x512", + "type": "image/png" + } + ], + "theme_color": "#4F46E5", + "background_color": "#ffffff", + "display": "standalone" +} From 1563c14754340b83dee73f6e816b50d0b5cf390d Mon Sep 17 00:00:00 2001 From: Shiv Date: Sat, 27 Jun 2026 13:38:52 +0530 Subject: [PATCH 2/2] ci: add pull request template validation workflow --- .github/workflows/pr-template-validation.yml | 79 ++++++++++++++++++++ 1 file changed, 79 insertions(+) create mode 100644 .github/workflows/pr-template-validation.yml diff --git a/.github/workflows/pr-template-validation.yml b/.github/workflows/pr-template-validation.yml new file mode 100644 index 0000000..20be81b --- /dev/null +++ b/.github/workflows/pr-template-validation.yml @@ -0,0 +1,79 @@ +name: PR Template Validation + +on: + pull_request: + types: + - opened + - edited + - synchronize + - reopened + +permissions: + pull-requests: read + +jobs: + validate-pr-template: + runs-on: ubuntu-latest + + steps: + - name: Validate Pull Request Template + uses: actions/github-script@v7 + with: + script: | + const body = (context.payload.pull_request.body || "").trim(); + + const errors = []; + + function contains(text) { + return body.includes(text); + } + + // PR description must not be empty + if (body.length === 0) { + errors.push("PR description cannot be empty."); + } + + // Placeholder text must be removed + const placeholders = [ + "Provide a brief description of your changes.", + "Briefly describe the key changes made in this Pull Request.", + "Describe how you tested your changes.", + "Add any additional context for reviewers if needed." + ]; + + for (const placeholder of placeholders) { + if (contains(placeholder)) { + errors.push(`Remove placeholder text: "${placeholder}"`); + } + } + + // Require at least one Type of Change checkbox + const checkedType = + /\- \[x\] Feature/i.test(body) || + /\- \[x\] Bug Fix/i.test(body) || + /\- \[x\] Documentation/i.test(body) || + /\- \[x\] Refactor/i.test(body) || + /\- \[x\] Performance Improvement/i.test(body) || + /\- \[x\] CI \/ Build/i.test(body) || + /\- \[x\] Other/i.test(body); + + if (!checkedType) { + errors.push("Select at least one 'Type of Change' checkbox."); + } + + // Require at least one checklist item to be checked + const checkedChecklist = + /\- \[x\]/i.test(body); + + if (!checkedChecklist) { + errors.push("Complete the checklist before requesting review."); + } + + if (errors.length > 0) { + core.setFailed( + "Pull Request Template Validation Failed:\n\n• " + + errors.join("\n• ") + ); + } else { + console.log("PR template validation passed."); + }