ESP32-S3 Bench Guide
ESP32‑S3 N16R8 벤치 가이드: 실시간 핀아웃, 강의, 시뮬레이터 및 벤치 로그
NIT KKR 과거 시험지를 과목·연도별로 찾아보고 다운로드해 효율적으로 준비하세요
Browse and download previous year question papers of NIT Kurukshetra(NIT KKR) (pyqs). Prepare effectively for your exams with a comprehensive collection of past papers, organized by subject and year.
교육JavaScript · CSSGitHub @RohithReddy-1402온라인운영자 미확인
써 보셨어요? 한 번만 눌러 주세요. 로그인은 필요 없어요.
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기README 전체를 불러오는 중입니다. 아래는 저장된 발췌입니다.
Live site: nitkkrpyqs.in — also served under the brand name "NexSphere" in metadata.
A React web app for students of NIT Kurukshetra (NIT KKR) to browse and download previous year question papers (PYQs), and to look up the full B.Tech syllabus (branch → semester → course) for every branch offered. Students can also contribute their own papers, which go through a verification step before being published. This repository is the frontend only (React + Vite); it talks to a separate Node/Express + MongoDB backend over HTTP.README 전문 보기 ↗Live site: nitkkrpyqs.in — also served under the brand name "NexSphere" in metadata.
A React web app for students of NIT Kurukshetra (NIT KKR) to browse and download previous year question papers (PYQs), and to look up the full B.Tech syllabus (branch → semester → course) for every branch offered. Students can also contribute their own papers, which go through a verification step before being published. This repository is the frontend only (React + Vite); it talks to a separate Node/Express + MongoDB backend over HTTP.
Repo (frontend): [email protected]:RohithReddy-1402/q_paper.git (package name: q_paper).
Repo (backend): [email protected]:RohithReddy-1402/back.git (package name: back).
https://pdf.nitkkrpyqs.in/<key>; metadata (title, subject, subject code, semester, year, exam type, uploader) lives in the backend's database.ContributeModal.jsx), which is stored in R2 and queued for moderator verification (tobeVerifed.jsx) before it appears publicly.@react-oauth/google) or manual email+password signup, plus password reset. Auth/session state is checked against the backend (/auth/check, cookie-based session).Frontend (this repo):
| Concern | Library |
|---|---|
| UI framework | React 18 + Vite 6 |
| Routing | React Router v7 (BrowserRouter, all routes lazy-loaded with React.lazy/Suspense) |
| Styling | Tailwind CSS 4 (@tailwindcss/vite), plus MUI (@mui/material, @mui/icons-material), Emotion, and styled-components in places |
| Animation | Framer Motion |
| Icons | lucide-react |
| Auth | Firebase Auth (Google popup sign-in, see src/components/fireBase.jsx) and @react-oauth/google; app-level session cookie checked against the backend |
| File storage client | @aws-sdk/client-s3-style flow against Cloudflare R2 via presigned URLs (see src/services/r2.service.jsx) |
| Payments | Razorpay Checkout (loaded via script tag in src/components/donate.jsx) |
| Search | fuse.js (fuzzy search over papers/courses) |
| SEO/meta | react-helmet-async per-page <title>/<meta>, JSON-LD in index.html |
| Analytics | @vercel/analytics |
| Data fetching | plain fetch against VITE_BACKEND_ENDPOINT (no axios/react-query layer, though axios is a dependency) |
Backend (separate repo, not in this codebase): Node.js + Express API, MongoDB for papers/users/download counts, Resend for transactional email (verification, password reset), Cloudflare R2 for file storage. See the in-app Tech Stack page (src/components/TechStack.jsx) for the user-facing explanation of the full stack, including hosting on Vercel.
Build tooling: ESLint 9, PostCSS/Autoprefixer, and a custom prerendering step using playwright-core + express (see below).
q_paper/
├── index.html # HTML shell, SEO meta, JSON-LD, favicon
├── vite.config.js # Vite + React + Tailwind plugins; aliases react-helmet → react-helmet-async
├── vercel.json # SPA rewrites for Vercel hosting
├── scripts/
│ └── prerender.mjs # Post-build static prerendering (see below)
├── public/
│ ├── robots.txt, sitemap.xml, ads.txt, icon.png, verification files
├── src/
│ ├── main.jsx # React root, wraps <App /> in HelmetProvider
│ ├── App.jsx # Router, all top-level routes, auth/session bootstrap, global modals
│ ├── App.css / index.css # Global styles
│ ├── services/
│ │ └── r2.service.jsx # Cloudflare R2 upload flow + viewPaper() URL helper
│ ├── assets/ # Images/GIFs used across the site
│ └── components/
│ ├── HomePage.jsx, QuestionPaper.jsx # Landing page + PYQ browser/downloader
│ ├── ContributeModal.jsx, tobeVerifed.jsx # Upload a paper + moderation queue
│ ├── Login.jsx, LoginTest.jsx, TerminalMode.jsx,
│ │ ForgotPass.jsx, SignupModal.jsx # Auth flows (Google + manual)
│ ├── fireBase.jsx # Firebase app/auth init
│ ├── Syllabus.jsx, BranchList.jsx,
│ │ BranchDetail.jsx, BranchSemester.jsx,
│ │ test.jsx (course page), SemesterGrid.jsx,
│ │ Breadcrumbs.jsx # Syllabus browser (branch → semester → course)
│ ├── syllabus-data/ # All syllabus content, see below
│ ├── Header.jsx, Footer.jsx, hangingBoard.jsx,
│ │ celebration.jsx, DownloadButton.jsx,
│ │ SearchAutocomplete.jsx, Loading.jsx,
│ │ ToastContainer.jsx / ToastContext.jsx # Shared UI/chrome
│ ├── AboutUs.jsx, TechStack.jsx,
│ │ contactPage.jsx, donate.jsx,
│ │ PrivacyPolicy.jsx, NotFound.jsx # Static/info pages
Defined in src/App.jsx:
| Path | Component | Notes |
|---|---|---|
/ | redirects to /nit-kkr-pyqs | |
/nit-kkr-pyqs | HomePage | Landing page |
/nit-kkr/question-papers | QuestionPaper | Browse/search/download PYQs |
/nit-kkr-pyqs/contribute | ContributeModal | Upload a paper (auth required) |
/nit-kkr-pyqs/verifypaper | tobeVerifed | Moderation queue for uploaded papers |
/nit-kkr-pyqs/login | TerminalMode | Login/signup entry point |
/nit-kkr/syllabus | Syllabus | Syllabus search/landing |
/nit-kkr/syllabus/branch | BranchList | List of branches |
/nit-kkr/syllabus/branch/:branchSlug | BranchDetail | Branch overview + available semesters |
/nit-kkr/syllabus/branch/:branchSlug/semester/:semNumber | BranchSemester | Semester scheme (courses, L-T-P-C, electives) |
/nit-kkr/syllabus/course/:code | test.jsx (course page) | Full course syllabus |
/nit-kkr/about | AboutUs | |
/nit-kkr/tech-stack | TechStack | Explains the stack behind the site |
/nit-kkr/contact | contactPage | |
/nit-kkr/donate | donate | Razorpay donation flow |
/nit-kkr/privacy-policy | PrivacyPolicy | |
* | NotFound | 404 |
robots.txt deliberately disallows crawling of /nit-kkr-pyqs/login, /nit-kkr-pyqs/contribute and /nit-kkr-pyqs/verifypaper since they carry no indexable content.
All syllabus content is static JSON checked into the repo under src/components/syllabus-data/ — no backend call is needed to browse it:
branches.js — the BRANCHES map: slug -> { code, name, description, semestersAvailable }. Currently covers Computer Science and Engineering (CS), Robotics & Automation (RA), Artificial Intelligence & Machine Learning (AIML), and Electrical Engineering (EE).
semester-schemes/<code>-<sem>.json (lowercase branch code, e.g. ee-5.json) — one file per branch+semester: { branch, branchName, semester, title, totalCredits, rows[] }. Each row is one of:
core — { type: "core", code, ltpc, label? }elective — { label, ltpc, options: [] }openElective — { label, ltpc }coCurricular — { label, ltpc, note }BranchSemester.jsx dynamically imports the right scheme file and resolves core/elective course codes against courses-info.json.
course/<route-basename>.json — one file per course, the full syllabus page. Key fields: Course Title, Course Code, credits, prerequisites (hidden when "NA"/"-"), Course Type, ltpc, contactHours, description, syllabus: [{ id, title, body, hours? }], experiments[], outcomes[], textbooks[], referenceBooks[], plus Branch (array — first entry drives the breadcrumb) and route.
courses-info.json — a flat index of every course: { "Course Title", "Course Code", route, "Branches"[], semester?, id: "nitkkr_N" }. This powers search in Syllabus.jsx and lookups in BranchDetail.jsx / BranchSemester.jsx / the course page.
Course-code collision caveat: course lookups are keyed by Course Code globally (one code → one course everywhere), but NIT KKR reuses some codes across branches with different content (e.g. MAIC-203). The workaround used for Electrical Engineering was to give the colliding course a distinct code/route suffix, e.g. MAIC-203 (EE) / route maic-203-ee, so it doesn't clobber the AIML version of the same code. Keep this in mind if you add a new branch whose scheme reuses a code that already exists for another branch.
When adding a new branch or semester, remember to also update:
scripts/prerender.mjs — branchSemesterRoutes (and courseRoutes, which is generated from courses-info.json automatically) so the new pages get prerendered.public/sitemap.xml — hand-maintained, no generator script exists for it yet.Configured via a Vite .env file at the project root (not committed — see .gitignore). All client-exposed vars must be prefixed VITE_:
| Variable | Used for |
|---|---|
VITE_BACKEND_ENDPOINT | Base URL of the Express API (auth, papers, uploads) |
VITE_APPWRITE_PROJECT_ID / VITE_APPWRITE_BUCKET_ID | Appwrite project/bucket config (appwrite dependency) |
VITE_RAZORPAY_KEY_ID | Razorpay checkout key for the Donate page |
VITE_R2_ACCOUNT_ID / VITE_R2_ACCESS_KEY_ID / VITE_R2_SECRET_ACCESS_KEY / VITE_R2_BUCKET_NAME | Cloudflare R2 (S3-compatible) storage config |
There is no .env.example checked in yet — ask a maintainer for real values, or create the file yourself from the list above before running the app locally. Firebase config for Google sign-in is currently hardcoded in src/components/fireBase.jsx rather than sourced from env vars.
Requires Node.js (any recent LTS) and npm.
# 1. Clone
git clone [email protected]:RohithReddy-1402/q_paper.git
cd q_paper
# 2. Install dependencies
npm install
# 3. Add your .env file (see Environment variables above)
# 4. Run the dev server (Vite, with HMR)
npm run dev
Other scripts (from package.json):
| Script | What it does |
|---|---|
npm run dev | Start the Vite dev server |
npm run build | Production build (vite build), then automatically runs postbuild (see prerendering below) |
npm run lint | Run ESLint over the project |
npm run preview | Serve the production build locally for a final check |
npm run build runs vite build and then a postbuild step, scripts/prerender.mjs, which:
dist/ folder locally with a throwaway Express server.playwright-core (looks for a system Chromium/Chrome first, or PRERENDER_CHROMIUM_PATH; falls back to skipping prerendering with a warning if none is found).courses-info.json), and every branch/semester route (hardcoded per branch — must be kept in sync manually, see Syllabus data model).dist/<route>/index.html, so crawlers and social-media link previews get real content instead of an empty shell.If you don't have Chromium installed locally, install one via npx playwright install chromium or point PRERENDER_CHROMIUM_PATH at an existing browser binary; otherwise the build still succeeds, it just skips prerendering.
The site is deployed on Vercel. vercel.json rewrites every request to index.html (SPA fallback) except /sitemap.xml, which is served as-is so it stays crawlable. Vercel Analytics is wired in via <Analytics /> in App.jsx.
public/robots.txt — allows all crawling except the login/contribute/verify pages; points to the sitemap.public/sitemap.xml — hand-maintained list of indexable URLs; update it when adding new branches/semesters/courses.ads.txt — Google AdSense publisher verification.index.html — page title, meta description/keywords, Open Graph-style JSON-LD (WebSite schema, name NexSphere), Google site-verification meta tag, and the favicon./nit-kkr-pyqs/contribute) rather than editing data by hand — it uploads to R2 and records metadata through the backend, then routes the paper through /nit-kkr-pyqs/verifypaper for moderation.src/components/syllabus-data/ following the shapes documented in Syllabus data model above, and remember to update courses-info.json, scripts/prerender.mjs, and public/sitemap.xml to match.src/components/test.jsx is the actual course syllabus page component (routed at /nit-kkr/syllabus/course/:code), despite the generic filename — don't confuse it with a scratch file.fireBase.jsx is currently hardcoded rather than read from .env.https://localhost:3001 directly (leftover from local backend testing) instead of VITE_BACKEND_ENDPOINT — worth cleaning up if you touch that code.data.xlsx / data.ods / Targets.txt at the repo root are working notes/spreadsheets used while compiling paper metadata and syllabus content; they're git-ignored and not part of the app itself.