How min23a/personal-web works
1. This repository is a Next.js application built as a content-heavy personal/agency site rather than a generic app. The architecture centers on route-driven pages, reusable UI sections, and data modules that feed static and dynamic-looking marketing pages.
2. The main boundary is the pages/ directory. It defines the public site routes: home, about, contact, privacy policy, shopify developer pages, freelance/shopify hire pages, blog index and blog detail routes, project index and project detail routes, plus a country-based landing-page route under shopify-developer-in/[...country].js.
3. Dynamic content is handled through catch-all routes:
- pages/blogs/[...slug].js for individual blog articles
- pages/projects/[...id].js for project detail pages
- pages/shopify-developer-in/[...country].js for location-specific service pages
These routes indicate a content model driven by slugs and page metadata rather than a database-first product model.
4. The Data/ folder is the content layer. It contains structured page and catalog data such as blogs, projects, menu items, SEO maps, location pages, authority pages, reviews, personal profile data, and hiring details. The pages and components likely read from these modules to render consistent marketing copy and link structures.
5. UI is split between three component tiers:
- Components/ for page-level composition and section containers
- Components/Section/ for homepage/landing-page sections like hero, skills, projects, blog, reviews, announcements, and location-based blocks
- Snippet/ for smaller reusable primitives such as cards, navigation variants, accordions, breadcrumbs, typography, SEO helpers, and social/analytics utilities
This suggests a composition-heavy design system where pages are assembled from reusable content blocks.
6. The homepage and landing pages are built from section blocks rather than a single monolithic template. Files like HeroSection, AboutMe, ProjectsSec, BlogSec, UpworkReviews, Skills, and Ending show that the site is organized as a sequence of marketing sections with data-fed content.
7. Navigation and layout are centralized. Components/Layout.js, Components/Navigation.js, Components/Footer.js, and mobile/desktop nav snippets indicate a shared shell around all pages, with responsive navigation behavior separated into reusable variants.
8. SEO and structured data are first-class concerns. There are dedicated files for JsonLd, SEO, blogSchema, SeoSchema, seoMap, and next-sitemap.config.js. This points to a site designed for search discoverability, with page-specific metadata and schema generation as a core cross-cutting layer.
9. Analytics, cookie consent, and legal/privacy concerns are also isolated. CookieConsent, Snippet/consent.js, and Snippet/Ganalytics.js suggest tracking is gated by consent. pages/privacy-policy.js and Data/PrivacyPolicy.js provide the legal content backing that flow.
10. The only explicit backend surface is pages/api/. contact.js likely handles form submissions, and hello.js is the default example endpoint. The presence of Snippet/mongodb.js suggests the contact flow may persist or forward data through MongoDB, making contact the main transactional path in an otherwise mostly static site.
11. External data integration appears lightweight. services/git.js and the pages/git.js route imply an API-backed or fetch-based Git/project showcase, while Data/upworkReviews.js and the Upwork review components indicate curated third-party testimonials rendered from local data rather than live integration.
12. Styling and interaction are handled with Tailwind and global CSS. tailwind.config.js, postcss.config.js, styles/globals.css, and styles/scroll-animate.css support a utility-first UI with a small amount of custom animation behavior, reinforced by services/scroll-animate.js.
13. Static assets are mostly local and presentation-oriented. public/ contains a PDF resume, Images/ holds blog imagery, and logo/ appears to store brand assets. This reinforces that the site is optimized for fast content delivery with minimal runtime dependencies.
14. For an architecture diagram, the cleanest high-level flow is: route page in pages/ → shared layout/navigation → section/snippet components → content pulled from Data/ and static assets → optional API route for contact → SEO/consent/analytics applied cross-cutting across the rendered page.
Main entry points: Layout.js Layout · Section Sections · Data Content data · index.js Home
Components 25
Routes
Public site routes and API endpoints
- Home · Landing page route
pages/index.js - About · About page route
pages/about.js - Contact · Contact page route
pages/contact.js - Blog index · Blog listing route
pages/blogs/index.js - Blog detail · Catch-all blog article route
pages/blogs/[...slug].js - Projects index · Project listing route
pages/projects/index.js - Project detail · Catch-all project route
pages/projects/[...id].js - Location pages · Country-specific Shopify landing pages
pages/shopify-developer-in/[...country].js - API contact · Contact form submission endpoint
pages/api/contact.js
Components
Page composition and section-level UI
- Layout · Shared page shell
Components/Layout.js - Navigation · Primary site navigation
Components/Navigation.js - Footer · Shared footer area
Components/Footer.js - Homepage · Home page composition
Components/Hompage.js - Blog renderer · Renders blog content pages
Components/BlogRenderer.js - Hire page · Hire/service page composition
Components/HirePage.js - Sections · Homepage and landing page sections
Components/Section
Snippets
Reusable UI primitives and utilities
- UI snippets · Reusable cards, nav variants, accordions, breadcrumbs, and typography
Snippet
Content
Structured content and site data modules
- Content data · Blogs, projects, menus, SEO maps, and page content
Data - Reviews · Curated third-party reviews and social proof
Data/upworkReviews.js
Infra
SEO, analytics, styling, and services
- Git service · Repository/project data integration
services/git.js - SEO layer · SEO, schemas, sitemap, and crawl hints
Snippet/SEO.js - Consent · Cookie consent and analytics gating
Snippet/consent.js - Analytics · Google analytics integration
Snippet/Ganalytics.js - Styles · Tailwind and global CSS foundation
styles/globals.css
Assets
Static media and downloadable files
- Assets · Public downloadable and visual assets
public/Md Minhazul Abedin.pdf
Connections 32
- Home → Layout: wraps · Home route uses the shared shell
- About → Layout: wraps · About route uses the shared shell
- Contact → Layout: wraps · Contact route uses the shared shell
- Blog index → Layout: wraps · Blog listing uses the shared shell
- Blog detail → Layout: wraps · Blog detail uses the shared shell
- Projects index → Layout: wraps · Project listing uses the shared shell
- Project detail → Layout: wraps · Project detail uses the shared shell
- Location pages → Layout: wraps · Location landing pages use the shared shell
- Layout → Navigation: includes · Shared shell includes navigation
- Layout → Footer: includes · Shared shell includes footer
- Homepage → Sections: assembles · Homepage is built from section blocks
- Hire page → Sections: assembles · Hire pages reuse section blocks
- Blog renderer → UI snippets: uses · Article rendering relies on reusable primitives
- Sections → UI snippets: uses · Sections are composed from shared UI primitives
- Home → Homepage: renders · Home route delegates to homepage composition
- Blog detail → Blog renderer: renders · Catch-all blog route renders articles
- Projects index → Git service: loads · Project index can be backed by git/project service data
- Project detail → Content data: loads · Project detail uses project slug/content data
- Blog index → Content data: loads · Blog index uses blog content data
- Blog detail → Content data: loads · Blog detail uses slug-driven content data
- Location pages → Content data: loads · Location pages use country/page metadata
- Sections → Content data: feeds from · Sections are populated by structured content modules
- Sections → Reviews: shows · Social proof section uses curated reviews
- API contact → Content data: stores · Contact submissions connect to site data or outbound handling
- API contact → Consent: respects · Contact and tracking flows are consent-aware
- Home → SEO layer: annotated by · Pages are SEO annotated
- Blog detail → SEO layer: annotated by · Article routes emit metadata and schemas
- Homepage → SEO layer: annotated by · Landing pages include SEO helpers
- SEO layer → Analytics: coordinates · SEO and tracking sit in the same cross-cutting layer
- Consent → Analytics: gates · Analytics runs behind consent
- Home → Styles: styled by · Routes rely on the global styling base
- Sections → Assets: uses · Sections reference local media and downloadable assets