How adilmunawar/adilportfolio works
1. Repository shape
This is a Next.js App Router portfolio site written in TypeScript. The architecture is mostly static/content-driven rather than database-driven: the homepage is assembled from reusable React sections, while a small server API handles chat.
2. Application shell
The core app lives under src/app/. layout.tsx provides the global frame, page.tsx is the portfolio landing page, and globals.css defines shared styling. robots.ts, sitemap.ts, and manifest.ts show that the site is designed for search indexing and PWA-style metadata support.
3. Homepage composition
The landing page is built as a section-based composition from src/components/. Major content areas include hero, skills, services, projects, case studies, blog, certifications, testimonials, stats, contact, badges, and achievements. This makes the page a modular aggregator rather than a monolithic template.
4. UI component boundary
src/components/ui/ contains a large set of reusable primitives and compound widgets, likely based on the shadcn/Radix pattern. These are the low-level building blocks used by the higher-level portfolio sections, keeping presentation concerns isolated from content assembly.
5. Content/data layer
src/lib/ is the main content store for the site. It contains JSON-backed datasets such as blog-data.json, case-studies.json, github-contributions.json, and leetcode-stats.json, plus shared helpers in utils.ts. Most “dynamic” content is therefore file-backed and build-time friendly, not fetched from a database at runtime.
6. Static asset boundary
public/ holds images, badges, certifications, testimonials, blog graphics, and site files like robots.txt, llm.txt, and llms.txt. This suggests the site serves a mix of portfolio media and crawler/AI consumption metadata directly from static hosting.
7. Interactive assistant subsystem
The src/components/Zenith/ area and src/app/api/chat/route.ts form a separate conversational feature. The UI side likely renders the assistant/orb/chat experience, while the API route is the server boundary for chat requests. This is the only clearly visible backend-style interaction point in the repo.
8. Stats and external profile integration
Dedicated components for GitHub and LeetCode stats (GitHubStats.tsx, LeetCodeStats.tsx, badges/showcase sections) indicate that the site surfaces external developer-profile data. The data itself is stored locally in JSON, so the runtime UI reads precomputed snapshots rather than querying live services on every page load.
9. Automation and regeneration pipeline
The scripts/ folder and GitHub Actions workflows under .github/workflows/ create an update pipeline for contribution stats, LeetCode stats, and year-based content. The flow is: automation script or workflow → regenerated artifacts/templates → committed JSON/assets → rendered by React components.
10. Client-side helpers
src/hooks/use-mobile.tsx and src/hooks/use-toast.ts provide small cross-cutting client behaviors such as responsive detection and toast state. These are utility boundaries rather than core business logic.
11. Styling and visual system
Styling is split between Tailwind configuration, global CSS, and component-scoped CSS files such as ProfileCard.css and LogoLoop.css. The design system is clearly tuned for a polished portfolio look with animated/interactive sections, but the architectural emphasis remains on reusable composition.
12. Important diagram takeaway
For an architecture diagram, the key distinction is: static portfolio content + generated profile stats + one chat API endpoint. There is no visible separate database, queue, or microservice layer; instead, the repo centers on a Next.js frontend that consumes local content files and a lightweight server route for conversational interaction.
Main entry points: page.tsx Home page · button.tsx UI kit · blog-data.json Content data · llms.txt Public assets
Components 21
App shell
Next.js App Router entrypoints and metadata
- Layout · Global frame and providers for the site
src/app/layout.tsx - Home page · Portfolio landing page assembly
src/app/page.tsx - Global CSS · Shared app-wide styling
src/app/globals.css - SEO meta · Robots, sitemap, and manifest outputs
src/app/robots.ts
Homepage sections
Composable landing-page content blocks
- Hero · Top-of-page introduction and positioning
src/components/HeroSection.tsx - Skills · Capabilities and technologies section
src/components/SkillsSection.tsx - Services · Offerings and engagement options
src/components/ServicesSection.tsx - Projects · Project showcase section
src/components/ProjectsSection.tsx - Case studies · Narrative case study section
src/components/CaseStudiesSection.tsx - Blog · Article and writing highlights
src/components/BlogSection.tsx - Proof · Certifications, testimonials, stats, badges, and achievements
src/components/CertificationsSection.tsx
UI primitives
Reusable low-level widgets and shared visual helpers
Content store
File-backed data and utilities used by the site
- Content data · Blog, case study, GitHub, and LeetCode snapshots
src/lib/blog-data.json - Utils · Shared library helpers used across components
src/lib/utils.ts
Assistant
Conversational UI and chat API boundary
- Assistant UI · Zenith assistant, chat, and orb experience
src/components/Zenith/ZenithAssistant.tsx - Chat API · Backend boundary for assistant requests
src/app/api/chat/route.ts
Automation
Scripts and workflows that regenerate content snapshots
Static assets
Public media and crawler-facing site files
- Public assets · Images, badges, test files, and crawler metadata
public/llms.txt
Connections 26
- Layout → Global CSS: loads · Applies shared global styles to the app shell
- Layout → Home page: frames · Provides the root shell around the home route
- Home page → Hero: composes · Builds the landing page from section components
- Home page → Skills: composes · Builds the landing page from section components
- Home page → Services: composes · Builds the landing page from section components
- Home page → Projects: composes · Builds the landing page from section components
- Home page → Case studies: composes · Builds the landing page from section components
- Home page → Blog: composes · Builds the landing page from section components
- Home page → Proof: composes · Builds the landing page from proof sections
- Home page → Nav: uses · Wires navigation into the page experience
- Hero → UI kit: renders with · Uses reusable primitives for presentation
- Skills → UI kit: renders with · Uses reusable primitives for presentation
- Services → UI kit: renders with · Uses reusable primitives for presentation
- Projects → UI kit: renders with · Uses reusable primitives for presentation
- Case studies → Content data: reads · Consumes local case study content snapshots
- Blog → Content data: reads · Consumes local blog content snapshots
- Proof → Content data: reads · Consumes local stats and proof data
- Proof → Public assets: shows · Displays static badges, certifications, and media
- Cards → Public assets: uses · Displays site imagery and visual assets
- UI kit → Utils: depends on · Shares common helper functions and class utilities
- Assistant UI → Chat API: calls · Sends chat messages to the server route
- Chat API → Content data: may read · Can leverage local content when responding
- Scripts → Content data: regenerates · Updates JSON snapshots and derived portfolio data
- Workflows → Scripts: runs · Automates regeneration in CI
- Workflows → Public assets: publishes · Updates static artifacts committed to the site
- SEO meta → Public assets: references · Exposes crawler-facing site files and metadata