How prayag29-sahu/prayagsahuportfolio works
1. This repository is a personal portfolio site built with Next.js using the App Router. The top-level structure is very small: app/ defines the route shell and landing page, while components/ holds the reusable page sections and UI pieces.
2. The application entry points are app/layout.jsx and app/page.jsx. layout.jsx provides the global document structure and site-wide wrappers, and page.jsx is the main single-page portfolio surface that composes the landing experience from section components.
3. The page is organized as a vertically stacked, mostly static marketing/portfolio layout. The major content blocks live under components/sections/ and include:
- HeroSection
- AboutSections
- Education and Education2
- SkillCard
- ProjectCard
- AchievementCard
- CTA
- ContactSection
4. Navigation and framing are separated into components/layout/. Navbar.jsx and Footer.jsx handle the persistent top and bottom chrome around the section content, so the architecture is “shared shell + composed sections” rather than a routed multi-page app.
5. There are a couple of reusable interaction/UI primitives in components/ui/. CursorBubble.jsx and ParallaxSection.tsx suggest the portfolio uses small motion/scroll-affordance effects. These are supportive UI utilities rather than core data holders.
6. Styling is primarily global and utility-driven. app/globals.css sets application-wide styles, while tailwind.config.js and postcss.config.* indicate Tailwind CSS is the main styling system. components/sections/About.css shows there is at least one section-specific stylesheet layered on top.
7. The app is asset-heavy and mostly static. public/ contains the CV PDF and many image folders for certificates, school/college records, project screenshots, and other portfolio evidence. These assets feed the section components directly and are a key part of the content model.
8. There is no sign of a backend, CMS, database, or API layer in this repo. The data flow is essentially: static content and media from public/ and JSX props/component composition -> rendered portfolio sections -> one scrollable page.
9. The stack mixes JavaScript and TypeScript. Most components are .jsx, but components/ui/ParallaxSection.tsx and next-env.d.ts indicate TypeScript support is enabled for at least some UI code. next.config.ts and tsconfig.json reinforce that the project is set up for a typed Next.js build.
10. Tooling is standard frontend lint/build tooling: ESLint (eslint.config.mjs), type checking, and PostCSS/Tailwind processing. README.md is minimal, so the repo is largely self-describing through its file structure rather than documented subsystems.
11. For an architecture diagram, the key boundaries are:
- App shell (layout)
- Single landing route (page)
- Section components
- Shared layout/navigation
- Shared motion/UI primitives
- Static asset store in public/
12. In practice, the site is best drawn as a one-page portfolio composition pipeline: layout wraps the page, the page assembles section modules, the sections consume static media/content, and shared UI components provide consistent interaction and visual effects.
Main entry points: page.jsx Home Page · images Images · HeroSection.jsx Hero · AboutSections.jsx About
Components 23
App Shell
Next.js route entry and global document wrapper
Content Composition
Portfolio page and its reusable sections
- Hero · Intro and first impression block
components/sections/HeroSection.jsx - About · Personal summary and background
components/sections/AboutSections.jsx - Education · Education history block
components/sections/Education.jsx - Education 2 · Additional education details
components/sections/Education2.jsx - Skills · Capability summary cards
components/sections/SkillCard.jsx - Projects · Project showcase cards
components/sections/ProjectCard.jsx - Achievements · Awards and credential highlights
components/sections/AchievementCard.jsx - CTA · Call-to-action prompt
components/sections/CTA.jsx - Contact · Contact and outreach block
components/sections/ContactSection.jsx - About CSS · Section-specific styling for about content
components/sections/About.css
Shared UI
Persistent chrome and interaction primitives
- Navbar · Persistent top navigation
components/layout/Navbar.jsx - Footer · Persistent bottom footer
components/layout/Footer.jsx - Cursor Bubble · Pointer-following interaction effect
components/ui/CursorBubble.jsx - Parallax · Scroll-based visual motion wrapper
components/ui/ParallaxSection.tsx
Static Assets
CV and image media consumed by the sections
Tooling
Build, typing, and styling configuration
- Next Config · Next.js build/runtime settings
next.config.ts - Tailwind Config · Utility CSS configuration
tailwind.config.js - PostCSS · CSS processing pipeline configuration
postcss.config.js - ESLint · Repository linting rules
eslint.config.mjs
Connections 28
- Layout → Home Page: wraps · Global layout renders the portfolio route
- Layout → Globals: imports · Layout includes application-wide styles
- Home Page → Navbar: composes · Page includes shared navigation chrome
- Home Page → Hero: composes · Page starts with the hero section
- Home Page → About: composes · Page stacks the about section
- Home Page → Education: composes · Page includes education content
- Home Page → Education 2: composes · Page includes extended education content
- Home Page → Skills: composes · Page includes skills cards
- Home Page → Projects: composes · Page includes project showcase cards
- Home Page → Achievements: composes · Page includes achievements cards
- Home Page → CTA: composes · Page includes the call to action
- Home Page → Contact: composes · Page ends with contact information
- Home Page → Footer: composes · Page closes with shared footer chrome
- About → About CSS: styles · About section uses dedicated styling
- Hero → Cursor Bubble: uses · Hero likely uses cursor-based interaction
- Hero → Parallax: uses · Hero may use scroll motion effects
- About → Parallax: uses · Section motion wrapper for content reveal
- CTA → Parallax: uses · Call to action may use motion affordance
- Contact → Cursor Bubble: uses · Contact interactions may use pointer effects
- Education → Images: reads · Section consumes static evidence images
- Education 2 → Images: reads · Section consumes static evidence images
- Projects → Images: reads · Project cards use screenshots and media
- Achievements → Images: reads · Achievement cards use certificates and badges
- Contact → CV PDF: reads · Contact section exposes resume download
- Tailwind Config → Globals: drives · Tailwind utility styling supports global CSS
- PostCSS → Globals: processes · PostCSS pipeline transforms styles
- Next Config → Layout: configures · Next build/runtime configuration applies to app
- ESLint → Home Page: checks · Linting covers the app source