Thanks to visit codestin.com
Credit goes to github.com

Skip to content

A fast, content‑driven landing page for Vera — an acclaimed French photographer working across Europe

Notifications You must be signed in to change notification settings

elrouss/portfolio

Repository files navigation

Vera Photography — Portfolio

Home Page

Contents

1. Project Overview

'Vera Photography — Portfolio' is a fast, content‑driven single‑page site for Vera — an acclaimed French photographer working across Europe. The site highlights her work and services through an elegant hero, curated portfolio slider, pricing packages, FAQ, and a streamlined booking flow.

The project is built with TypeScript, SCSS, Nunjucks, Webpack and GitHub Actions, following the Atomic Design methodology (atoms → molecules → organisms → templates → pages). All copy, meta tags, and media configuration are centralized in src/data/pages/index.json, which is injected into Nunjucks templates at build time. The result is a maintainable, scalable, and SEO‑ready static site with high Lighthouse Perfomance Scoring (90+).

Specification

Figma design

Live demo

back to contents

2. Tech stack

TypeScript Badge SCSS Badge Nunjucks Badge Webpack Badge Github Actions Badge

  • TypeScript 5, strict typed UI logic
  • Nunjucks templating via html-bundler-webpack-plugin
  • SCSS with PostCSS Preset Env
  • Webpack 5 toolchain (dev server, production build)
  • ESLint, Stylelint, Prettier, Husky

back to contents

3. Getting started

  1. git clone https://github.com/elrouss/portfolio.git — clone project
  2. npm ci — install dependencies
  3. npm run dev — start dev server (http://localhost:8080)

back to contents

4. Features

  1. Adaptive and responsive layout (380 px, 768 px, 1440 px+)
  2. Accessible header with hamburger + drawer, smooth in‑page navigation
  3. Custom portfolio slider
    • Desktop: hover areas trigger smooth auto‑scroll with requestAnimationFrame
    • Mobile & Tablet: swipe interactions
  4. FAQ accordion with persisted open state (LocalStorage) and smart first‑visit default
  5. Pricing card list with booking dialog
  6. Content‑driven templating (JSON → Nunjucks) for clean separation of content and layout
  7. SEO‑ready meta: Open Graph + Twitter cards, favicons, theme color

back to contents

5. Architecture

  • Atomic Design structure: atoms/, molecules/, organisms/, templates/, pages/

back to contents

6. Performance and optimizations

  • Responsive images (<picture>) with WebP and multiple resolutions
  • Lazy media loading where supported (slider data is marked as lazy)
  • Critical CSS extraction (src/assets/styles/_critical.scss)
  • Minified, hashed assets for long‑term caching
  • PostCSS preset env and Browserslist targeting for cross‑browser support
  • Event throttling and requestAnimationFrame for smooth, jank‑free interactions

back to contents

7. Accessibility

  • Semantic landmarks and headings for better screen reader navigation
  • Keyboard‑friendly navigation
  • ARIA attributes
  • Respect for user motion preferences and clear focus styles on interactive controls

back to contents

8. Project structure

src/
  assets/
    styles/              # SCSS (variables, mixins, critical, themes)
    images/ fonts/ icons # optimized static assets
  components/
    atoms/               # button, icon, input, picture, etc.
    molecules/           # nav, drawer, pricing-card, etc.
    organisms/           # header, hero, portfolio slider, faq, contacts
    templates/           # page templates (home)
  data/
    pages/index.json     # all page copy + meta + media config
  utils/                 # throttle, styles utils
  services/              # local-storage, touch-device adapters
  constants/             # breakpoints, transitions

back to contents

9. Scripts

  • npm run dev — start development server
  • npm run build:dev — development build
  • npm run build:prod — production build
  • npm run tsc — check TypeScript types
  • npm run eslint / npm run eslint:fix — lint TypeScript
  • npm run stylelint / npm run stylelint:fix — lint styles
  • npm run prettier:check / npm run prettier — format

back to contents

10. Deployment

Hosted on GitHub Pages: https://elrouss.github.io/portfolio (see homepage in package.json).

Build with npm run build:prod and publish the dist/ folder (e.g., via CI or manual upload). CI is configured with GitHub Actions to run linting and produce artifacts on push.

back to contents

11. License

ISC © 2025 Boris Zashliapin

back to contents

About

A fast, content‑driven landing page for Vera — an acclaimed French photographer working across Europe

Resources

Stars

Watchers

Forks

Contributors 2

  •  
  •