commit affcc00ba8d3ed1c06f826dc8c7c1898f68c333b Author: phzhik Date: Sat Nov 11 10:34:31 2023 +0400 Initial commit diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..5d12634 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,13 @@ +# editorconfig.org +root = true + +[*] +indent_style = space +indent_size = 2 +end_of_line = lf +charset = utf-8 +trim_trailing_whitespace = true +insert_final_newline = true + +[*.md] +trim_trailing_whitespace = false diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..71e8ece --- /dev/null +++ b/.gitignore @@ -0,0 +1,92 @@ +# Created by .ignore support plugin (hsz.mobi) +### Node template +# Logs +/logs +*.log +npm-debug.log* +yarn-debug.log* +yarn-error.log* + +# Runtime data +pids +*.pid +*.seed +*.pid.lock + +# Directory for instrumented libs generated by jscoverage/JSCover +lib-cov + +# Coverage directory used by tools like istanbul +coverage + +# nyc test coverage +.nyc_output + +# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) +.grunt + +# Bower dependency directory (https://bower.io/) +bower_components + +# node-waf configuration +.lock-wscript + +# Compiled binary addons (https://nodejs.org/api/addons.html) +build/Release + +# Dependency directories +node_modules/ +jspm_packages/ + +# TypeScript v1 declaration files +typings/ + +# Optional npm cache directory +.npm + +# Optional eslint cache +.eslintcache + +# Optional REPL history +.node_repl_history + +# Output of 'npm pack' +*.tgz + +# Yarn Integrity file +.yarn-integrity + +# dotenv environment variables file +.env + +# parcel-bundler cache (https://parceljs.org/) +.cache + +# next.js build output +.next + +# nuxt.js build output +.nuxt + +# Nuxt generate +dist + +# vuepress build output +.vuepress/dist + +# Serverless directories +.serverless + +# IDE / Editor +.idea + +# Service worker +sw.* + +# macOS +.DS_Store + +# Vim swap files +*.swp +/backend/env/ +/yarn.lock diff --git a/.nuxtignore b/.nuxtignore new file mode 100644 index 0000000..91e3c1b --- /dev/null +++ b/.nuxtignore @@ -0,0 +1,2 @@ +pages/projects/*.vue +components/projects/*.vue diff --git a/README.md b/README.md new file mode 100644 index 0000000..1175e58 --- /dev/null +++ b/README.md @@ -0,0 +1,7 @@ +# Useful commands +### Create thumbnail (400px side max) for all jpg/JPG images in folder, move it to `thumbs` folder + +```for ext in jpg JPG; do mogrify -format $ext -path thumbs -auto-orient -thumbnail '400' *.$ext; done``` + +### Get thumbnail size for every file in folder +```identify -ping -format 'image: "%[basename].%[extension]", thumbSize: {w: %[width], h: %[height]}},\n' *``` diff --git a/app/router.scrollBehavior.js b/app/router.scrollBehavior.js new file mode 100644 index 0000000..81b748b --- /dev/null +++ b/app/router.scrollBehavior.js @@ -0,0 +1,30 @@ +export default async function (to, from, savedPosition) { + if (savedPosition) { + return savedPosition; + } + + const findEl = async (hash, x = 0) => { + return ( + document.querySelector(hash) || + new Promise(resolve => { + if (x > 50) { + return resolve(document.querySelector("#app")); + } + setTimeout(() => { + resolve(findEl(hash, ++x || 1)); + }, 100); + }) + ); + }; + + if (to.hash) { + let el = await findEl(to.hash); + if ("scrollBehavior" in document.documentElement.style) { + return window.scrollTo({top: el.offsetTop, behavior: "smooth"}); + } else { + return window.scrollTo(0, el.offsetTop); + } + } + + return {x: 0, y: 0}; +} diff --git a/assets/app.css b/assets/app.css new file mode 100644 index 0000000..e69de29 diff --git a/assets/fonts/FuturaPT/FuturaPT-Bold.ttf b/assets/fonts/FuturaPT/FuturaPT-Bold.ttf new file mode 100644 index 0000000..b4449d6 Binary files /dev/null and b/assets/fonts/FuturaPT/FuturaPT-Bold.ttf differ diff --git a/assets/fonts/FuturaPT/FuturaPT-Bold.woff b/assets/fonts/FuturaPT/FuturaPT-Bold.woff new file mode 100644 index 0000000..ce78ef4 Binary files /dev/null and b/assets/fonts/FuturaPT/FuturaPT-Bold.woff differ diff --git a/assets/fonts/FuturaPT/FuturaPT-Bold.woff2 b/assets/fonts/FuturaPT/FuturaPT-Bold.woff2 new file mode 100644 index 0000000..3b789d3 Binary files /dev/null and b/assets/fonts/FuturaPT/FuturaPT-Bold.woff2 differ diff --git a/assets/fonts/FuturaPT/FuturaPT-BoldObl.ttf b/assets/fonts/FuturaPT/FuturaPT-BoldObl.ttf new file mode 100644 index 0000000..a39bff4 Binary files /dev/null and b/assets/fonts/FuturaPT/FuturaPT-BoldObl.ttf differ diff --git a/assets/fonts/FuturaPT/FuturaPT-BoldObl.woff b/assets/fonts/FuturaPT/FuturaPT-BoldObl.woff new file mode 100644 index 0000000..44b96a8 Binary files /dev/null and b/assets/fonts/FuturaPT/FuturaPT-BoldObl.woff differ diff --git a/assets/fonts/FuturaPT/FuturaPT-BoldObl.woff2 b/assets/fonts/FuturaPT/FuturaPT-BoldObl.woff2 new file mode 100644 index 0000000..873bb43 Binary files /dev/null and b/assets/fonts/FuturaPT/FuturaPT-BoldObl.woff2 differ diff --git a/assets/fonts/FuturaPT/FuturaPT-Book.ttf b/assets/fonts/FuturaPT/FuturaPT-Book.ttf new file mode 100644 index 0000000..26674ae Binary files /dev/null and b/assets/fonts/FuturaPT/FuturaPT-Book.ttf differ diff --git a/assets/fonts/FuturaPT/FuturaPT-Book.woff b/assets/fonts/FuturaPT/FuturaPT-Book.woff new file mode 100644 index 0000000..1ab404d Binary files /dev/null and b/assets/fonts/FuturaPT/FuturaPT-Book.woff differ diff --git a/assets/fonts/FuturaPT/FuturaPT-Book.woff2 b/assets/fonts/FuturaPT/FuturaPT-Book.woff2 new file mode 100644 index 0000000..419e178 Binary files /dev/null and b/assets/fonts/FuturaPT/FuturaPT-Book.woff2 differ diff --git a/assets/fonts/FuturaPT/FuturaPT-BookObl.ttf b/assets/fonts/FuturaPT/FuturaPT-BookObl.ttf new file mode 100644 index 0000000..60825f0 Binary files /dev/null and b/assets/fonts/FuturaPT/FuturaPT-BookObl.ttf differ diff --git a/assets/fonts/FuturaPT/FuturaPT-BookObl.woff b/assets/fonts/FuturaPT/FuturaPT-BookObl.woff new file mode 100644 index 0000000..3f807f3 Binary files /dev/null and b/assets/fonts/FuturaPT/FuturaPT-BookObl.woff differ diff --git a/assets/fonts/FuturaPT/FuturaPT-BookObl.woff2 b/assets/fonts/FuturaPT/FuturaPT-BookObl.woff2 new file mode 100644 index 0000000..e470c23 Binary files /dev/null and b/assets/fonts/FuturaPT/FuturaPT-BookObl.woff2 differ diff --git a/assets/fonts/FuturaPT/FuturaPT-Demi.ttf b/assets/fonts/FuturaPT/FuturaPT-Demi.ttf new file mode 100644 index 0000000..ef7f25f Binary files /dev/null and b/assets/fonts/FuturaPT/FuturaPT-Demi.ttf differ diff --git a/assets/fonts/FuturaPT/FuturaPT-Demi.woff b/assets/fonts/FuturaPT/FuturaPT-Demi.woff new file mode 100644 index 0000000..d07c58a Binary files /dev/null and b/assets/fonts/FuturaPT/FuturaPT-Demi.woff differ diff --git a/assets/fonts/FuturaPT/FuturaPT-Demi.woff2 b/assets/fonts/FuturaPT/FuturaPT-Demi.woff2 new file mode 100644 index 0000000..c84faed Binary files /dev/null and b/assets/fonts/FuturaPT/FuturaPT-Demi.woff2 differ diff --git a/assets/fonts/FuturaPT/FuturaPT-DemiObl.ttf b/assets/fonts/FuturaPT/FuturaPT-DemiObl.ttf new file mode 100644 index 0000000..bb343ae Binary files /dev/null and b/assets/fonts/FuturaPT/FuturaPT-DemiObl.ttf differ diff --git a/assets/fonts/FuturaPT/FuturaPT-DemiObl.woff b/assets/fonts/FuturaPT/FuturaPT-DemiObl.woff new file mode 100644 index 0000000..1b5aa7c Binary files /dev/null and b/assets/fonts/FuturaPT/FuturaPT-DemiObl.woff differ diff --git a/assets/fonts/FuturaPT/FuturaPT-DemiObl.woff2 b/assets/fonts/FuturaPT/FuturaPT-DemiObl.woff2 new file mode 100644 index 0000000..5843a05 Binary files /dev/null and b/assets/fonts/FuturaPT/FuturaPT-DemiObl.woff2 differ diff --git a/assets/fonts/FuturaPT/FuturaPT-ExtraBold.ttf b/assets/fonts/FuturaPT/FuturaPT-ExtraBold.ttf new file mode 100644 index 0000000..6272e2e Binary files /dev/null and b/assets/fonts/FuturaPT/FuturaPT-ExtraBold.ttf differ diff --git a/assets/fonts/FuturaPT/FuturaPT-ExtraBold.woff b/assets/fonts/FuturaPT/FuturaPT-ExtraBold.woff new file mode 100644 index 0000000..6efdce2 Binary files /dev/null and b/assets/fonts/FuturaPT/FuturaPT-ExtraBold.woff differ diff --git a/assets/fonts/FuturaPT/FuturaPT-ExtraBold.woff2 b/assets/fonts/FuturaPT/FuturaPT-ExtraBold.woff2 new file mode 100644 index 0000000..e414a2a Binary files /dev/null and b/assets/fonts/FuturaPT/FuturaPT-ExtraBold.woff2 differ diff --git a/assets/fonts/FuturaPT/FuturaPT-ExtraBoldObl.ttf b/assets/fonts/FuturaPT/FuturaPT-ExtraBoldObl.ttf new file mode 100644 index 0000000..6786ca0 Binary files /dev/null and b/assets/fonts/FuturaPT/FuturaPT-ExtraBoldObl.ttf differ diff --git a/assets/fonts/FuturaPT/FuturaPT-ExtraBoldObl.woff b/assets/fonts/FuturaPT/FuturaPT-ExtraBoldObl.woff new file mode 100644 index 0000000..bb368f9 Binary files /dev/null and b/assets/fonts/FuturaPT/FuturaPT-ExtraBoldObl.woff differ diff --git a/assets/fonts/FuturaPT/FuturaPT-ExtraBoldObl.woff2 b/assets/fonts/FuturaPT/FuturaPT-ExtraBoldObl.woff2 new file mode 100644 index 0000000..25d0788 Binary files /dev/null and b/assets/fonts/FuturaPT/FuturaPT-ExtraBoldObl.woff2 differ diff --git a/assets/fonts/FuturaPT/FuturaPT-Heavy.ttf b/assets/fonts/FuturaPT/FuturaPT-Heavy.ttf new file mode 100644 index 0000000..fd57b44 Binary files /dev/null and b/assets/fonts/FuturaPT/FuturaPT-Heavy.ttf differ diff --git a/assets/fonts/FuturaPT/FuturaPT-Heavy.woff b/assets/fonts/FuturaPT/FuturaPT-Heavy.woff new file mode 100644 index 0000000..9574789 Binary files /dev/null and b/assets/fonts/FuturaPT/FuturaPT-Heavy.woff differ diff --git a/assets/fonts/FuturaPT/FuturaPT-Heavy.woff2 b/assets/fonts/FuturaPT/FuturaPT-Heavy.woff2 new file mode 100644 index 0000000..f1dffd3 Binary files /dev/null and b/assets/fonts/FuturaPT/FuturaPT-Heavy.woff2 differ diff --git a/assets/fonts/FuturaPT/FuturaPT-HeavyObl.ttf b/assets/fonts/FuturaPT/FuturaPT-HeavyObl.ttf new file mode 100644 index 0000000..8d8919e Binary files /dev/null and b/assets/fonts/FuturaPT/FuturaPT-HeavyObl.ttf differ diff --git a/assets/fonts/FuturaPT/FuturaPT-HeavyObl.woff b/assets/fonts/FuturaPT/FuturaPT-HeavyObl.woff new file mode 100644 index 0000000..cd09813 Binary files /dev/null and b/assets/fonts/FuturaPT/FuturaPT-HeavyObl.woff differ diff --git a/assets/fonts/FuturaPT/FuturaPT-HeavyObl.woff2 b/assets/fonts/FuturaPT/FuturaPT-HeavyObl.woff2 new file mode 100644 index 0000000..9746fde Binary files /dev/null and b/assets/fonts/FuturaPT/FuturaPT-HeavyObl.woff2 differ diff --git a/assets/fonts/FuturaPT/FuturaPT-Light.ttf b/assets/fonts/FuturaPT/FuturaPT-Light.ttf new file mode 100644 index 0000000..fc174f7 Binary files /dev/null and b/assets/fonts/FuturaPT/FuturaPT-Light.ttf differ diff --git a/assets/fonts/FuturaPT/FuturaPT-Light.woff b/assets/fonts/FuturaPT/FuturaPT-Light.woff new file mode 100644 index 0000000..e6c2747 Binary files /dev/null and b/assets/fonts/FuturaPT/FuturaPT-Light.woff differ diff --git a/assets/fonts/FuturaPT/FuturaPT-Light.woff2 b/assets/fonts/FuturaPT/FuturaPT-Light.woff2 new file mode 100644 index 0000000..0d80ea0 Binary files /dev/null and b/assets/fonts/FuturaPT/FuturaPT-Light.woff2 differ diff --git a/assets/fonts/FuturaPT/FuturaPT-LightObl.ttf b/assets/fonts/FuturaPT/FuturaPT-LightObl.ttf new file mode 100644 index 0000000..9b56ef8 Binary files /dev/null and b/assets/fonts/FuturaPT/FuturaPT-LightObl.ttf differ diff --git a/assets/fonts/FuturaPT/FuturaPT-LightObl.woff b/assets/fonts/FuturaPT/FuturaPT-LightObl.woff new file mode 100644 index 0000000..29ab844 Binary files /dev/null and b/assets/fonts/FuturaPT/FuturaPT-LightObl.woff differ diff --git a/assets/fonts/FuturaPT/FuturaPT-LightObl.woff2 b/assets/fonts/FuturaPT/FuturaPT-LightObl.woff2 new file mode 100644 index 0000000..e71d6dd Binary files /dev/null and b/assets/fonts/FuturaPT/FuturaPT-LightObl.woff2 differ diff --git a/assets/fonts/FuturaPT/FuturaPT-Medium.ttf b/assets/fonts/FuturaPT/FuturaPT-Medium.ttf new file mode 100644 index 0000000..660bbe8 Binary files /dev/null and b/assets/fonts/FuturaPT/FuturaPT-Medium.ttf differ diff --git a/assets/fonts/FuturaPT/FuturaPT-Medium.woff b/assets/fonts/FuturaPT/FuturaPT-Medium.woff new file mode 100644 index 0000000..f44b3c3 Binary files /dev/null and b/assets/fonts/FuturaPT/FuturaPT-Medium.woff differ diff --git a/assets/fonts/FuturaPT/FuturaPT-Medium.woff2 b/assets/fonts/FuturaPT/FuturaPT-Medium.woff2 new file mode 100644 index 0000000..b347e21 Binary files /dev/null and b/assets/fonts/FuturaPT/FuturaPT-Medium.woff2 differ diff --git a/assets/fonts/FuturaPT/FuturaPT-MediumObl.ttf b/assets/fonts/FuturaPT/FuturaPT-MediumObl.ttf new file mode 100644 index 0000000..5059fb8 Binary files /dev/null and b/assets/fonts/FuturaPT/FuturaPT-MediumObl.ttf differ diff --git a/assets/fonts/FuturaPT/FuturaPT-MediumObl.woff b/assets/fonts/FuturaPT/FuturaPT-MediumObl.woff new file mode 100644 index 0000000..2121764 Binary files /dev/null and b/assets/fonts/FuturaPT/FuturaPT-MediumObl.woff differ diff --git a/assets/fonts/FuturaPT/FuturaPT-MediumObl.woff2 b/assets/fonts/FuturaPT/FuturaPT-MediumObl.woff2 new file mode 100644 index 0000000..51c5c2f Binary files /dev/null and b/assets/fonts/FuturaPT/FuturaPT-MediumObl.woff2 differ diff --git a/assets/fonts/FuturaPT/FuturaPTCond-Bold.ttf b/assets/fonts/FuturaPT/FuturaPTCond-Bold.ttf new file mode 100644 index 0000000..c94d290 Binary files /dev/null and b/assets/fonts/FuturaPT/FuturaPTCond-Bold.ttf differ diff --git a/assets/fonts/FuturaPT/FuturaPTCond-Bold.woff b/assets/fonts/FuturaPT/FuturaPTCond-Bold.woff new file mode 100644 index 0000000..1714cef Binary files /dev/null and b/assets/fonts/FuturaPT/FuturaPTCond-Bold.woff differ diff --git a/assets/fonts/FuturaPT/FuturaPTCond-Bold.woff2 b/assets/fonts/FuturaPT/FuturaPTCond-Bold.woff2 new file mode 100644 index 0000000..ced7e48 Binary files /dev/null and b/assets/fonts/FuturaPT/FuturaPTCond-Bold.woff2 differ diff --git a/assets/fonts/FuturaPT/FuturaPTCond-BoldObl.ttf b/assets/fonts/FuturaPT/FuturaPTCond-BoldObl.ttf new file mode 100644 index 0000000..9c088a1 Binary files /dev/null and b/assets/fonts/FuturaPT/FuturaPTCond-BoldObl.ttf differ diff --git a/assets/fonts/FuturaPT/FuturaPTCond-BoldObl.woff b/assets/fonts/FuturaPT/FuturaPTCond-BoldObl.woff new file mode 100644 index 0000000..bcf23b3 Binary files /dev/null and b/assets/fonts/FuturaPT/FuturaPTCond-BoldObl.woff differ diff --git a/assets/fonts/FuturaPT/FuturaPTCond-BoldObl.woff2 b/assets/fonts/FuturaPT/FuturaPTCond-BoldObl.woff2 new file mode 100644 index 0000000..4abc5ff Binary files /dev/null and b/assets/fonts/FuturaPT/FuturaPTCond-BoldObl.woff2 differ diff --git a/assets/fonts/FuturaPT/FuturaPTCond-Book.ttf b/assets/fonts/FuturaPT/FuturaPTCond-Book.ttf new file mode 100644 index 0000000..81479f5 Binary files /dev/null and b/assets/fonts/FuturaPT/FuturaPTCond-Book.ttf differ diff --git a/assets/fonts/FuturaPT/FuturaPTCond-Book.woff b/assets/fonts/FuturaPT/FuturaPTCond-Book.woff new file mode 100644 index 0000000..5299d61 Binary files /dev/null and b/assets/fonts/FuturaPT/FuturaPTCond-Book.woff differ diff --git a/assets/fonts/FuturaPT/FuturaPTCond-Book.woff2 b/assets/fonts/FuturaPT/FuturaPTCond-Book.woff2 new file mode 100644 index 0000000..1bddd36 Binary files /dev/null and b/assets/fonts/FuturaPT/FuturaPTCond-Book.woff2 differ diff --git a/assets/fonts/FuturaPT/FuturaPTCond-BookObl.ttf b/assets/fonts/FuturaPT/FuturaPTCond-BookObl.ttf new file mode 100644 index 0000000..18c1314 Binary files /dev/null and b/assets/fonts/FuturaPT/FuturaPTCond-BookObl.ttf differ diff --git a/assets/fonts/FuturaPT/FuturaPTCond-BookObl.woff b/assets/fonts/FuturaPT/FuturaPTCond-BookObl.woff new file mode 100644 index 0000000..dc49881 Binary files /dev/null and b/assets/fonts/FuturaPT/FuturaPTCond-BookObl.woff differ diff --git a/assets/fonts/FuturaPT/FuturaPTCond-BookObl.woff2 b/assets/fonts/FuturaPT/FuturaPTCond-BookObl.woff2 new file mode 100644 index 0000000..8067340 Binary files /dev/null and b/assets/fonts/FuturaPT/FuturaPTCond-BookObl.woff2 differ diff --git a/assets/fonts/FuturaPT/FuturaPTCond-ExtraBold.ttf b/assets/fonts/FuturaPT/FuturaPTCond-ExtraBold.ttf new file mode 100644 index 0000000..f63c00f Binary files /dev/null and b/assets/fonts/FuturaPT/FuturaPTCond-ExtraBold.ttf differ diff --git a/assets/fonts/FuturaPT/FuturaPTCond-ExtraBold.woff b/assets/fonts/FuturaPT/FuturaPTCond-ExtraBold.woff new file mode 100644 index 0000000..66e0b63 Binary files /dev/null and b/assets/fonts/FuturaPT/FuturaPTCond-ExtraBold.woff differ diff --git a/assets/fonts/FuturaPT/FuturaPTCond-ExtraBold.woff2 b/assets/fonts/FuturaPT/FuturaPTCond-ExtraBold.woff2 new file mode 100644 index 0000000..aacb2a6 Binary files /dev/null and b/assets/fonts/FuturaPT/FuturaPTCond-ExtraBold.woff2 differ diff --git a/assets/fonts/FuturaPT/FuturaPTCond-ExtraBoldObl.ttf b/assets/fonts/FuturaPT/FuturaPTCond-ExtraBoldObl.ttf new file mode 100644 index 0000000..6baf933 Binary files /dev/null and b/assets/fonts/FuturaPT/FuturaPTCond-ExtraBoldObl.ttf differ diff --git a/assets/fonts/FuturaPT/FuturaPTCond-ExtraBoldObl.woff b/assets/fonts/FuturaPT/FuturaPTCond-ExtraBoldObl.woff new file mode 100644 index 0000000..6bd7d61 Binary files /dev/null and b/assets/fonts/FuturaPT/FuturaPTCond-ExtraBoldObl.woff differ diff --git a/assets/fonts/FuturaPT/FuturaPTCond-ExtraBoldObl.woff2 b/assets/fonts/FuturaPT/FuturaPTCond-ExtraBoldObl.woff2 new file mode 100644 index 0000000..10b01ac Binary files /dev/null and b/assets/fonts/FuturaPT/FuturaPTCond-ExtraBoldObl.woff2 differ diff --git a/assets/fonts/FuturaPT/FuturaPTCond-Medium.ttf b/assets/fonts/FuturaPT/FuturaPTCond-Medium.ttf new file mode 100644 index 0000000..fe18133 Binary files /dev/null and b/assets/fonts/FuturaPT/FuturaPTCond-Medium.ttf differ diff --git a/assets/fonts/FuturaPT/FuturaPTCond-Medium.woff b/assets/fonts/FuturaPT/FuturaPTCond-Medium.woff new file mode 100644 index 0000000..661c6d7 Binary files /dev/null and b/assets/fonts/FuturaPT/FuturaPTCond-Medium.woff differ diff --git a/assets/fonts/FuturaPT/FuturaPTCond-Medium.woff2 b/assets/fonts/FuturaPT/FuturaPTCond-Medium.woff2 new file mode 100644 index 0000000..23d0403 Binary files /dev/null and b/assets/fonts/FuturaPT/FuturaPTCond-Medium.woff2 differ diff --git a/assets/fonts/FuturaPT/FuturaPTCond-MediumObl.ttf b/assets/fonts/FuturaPT/FuturaPTCond-MediumObl.ttf new file mode 100644 index 0000000..b51ddd8 Binary files /dev/null and b/assets/fonts/FuturaPT/FuturaPTCond-MediumObl.ttf differ diff --git a/assets/fonts/FuturaPT/FuturaPTCond-MediumObl.woff b/assets/fonts/FuturaPT/FuturaPTCond-MediumObl.woff new file mode 100644 index 0000000..10a20ab Binary files /dev/null and b/assets/fonts/FuturaPT/FuturaPTCond-MediumObl.woff differ diff --git a/assets/fonts/FuturaPT/FuturaPTCond-MediumObl.woff2 b/assets/fonts/FuturaPT/FuturaPTCond-MediumObl.woff2 new file mode 100644 index 0000000..0993573 Binary files /dev/null and b/assets/fonts/FuturaPT/FuturaPTCond-MediumObl.woff2 differ diff --git a/assets/fonts/FuturaPT/futura-pt.css b/assets/fonts/FuturaPT/futura-pt.css new file mode 100644 index 0000000..39177ad --- /dev/null +++ b/assets/fonts/FuturaPT/futura-pt.css @@ -0,0 +1,249 @@ +/* === Font-faces for FuturaPT === */ + +/* Light regular */ +@font-face { + font-family: 'FuturaPT-Light'; + src: url('FuturaPT-Light.woff2') format('woff2'), + url('FuturaPT-Light.woff') format('woff'), + url('FuturaPT-Light.ttf') format('truetype'); + font-weight: 300; + font-style: normal; +} + +/* Light italic */ +@font-face { + font-family: 'FuturaPT-LightItalic'; + src: url('FuturaPT-LightObl.woff2') format('woff2'), + url('FuturaPT-LightObl.woff') format('woff'), + url('FuturaPT-LightObl.ttf') format('truetype'); + font-weight: 300; + font-style: italic; +} + +/* Regular */ +@font-face { + font-family: 'FuturaPT-Regular'; + src: url('FuturaPT-Book.woff2') format('woff2'), + url('FuturaPT-Book.woff') format('woff'), + url('FuturaPT-Book.ttf') format('truetype'); + font-weight: normal; + font-style: normal; +} + + + +/* Regular italic */ +@font-face { + font-family: 'FuturaPT-Italic'; + src: url('FuturaPT-BookObl.woff2') format('woff2'), + url('FuturaPT-BookObl.woff') format('woff'), + url('FuturaPT-BookObl.ttf') format('truetype'); + font-weight: normal; + font-style: italic; +} + +/* Medium */ +@font-face { + font-family: 'FuturaPT-Medium'; + src: url('FuturaPT-Medium.woff2') format('woff2'), + url('FuturaPT-Medium.woff') format('woff'), + url('FuturaPT-Medium.ttf') format('truetype'); + font-weight: 500; + font-style: normal; +} + + +/* Medium italic */ +@font-face { + font-family: 'FuturaPT-MediumItalic'; + src: url('FuturaPT-MediumObl.woff2') format('woff2'), + url('FuturaPT-MediumObl.woff') format('woff'), + url('FuturaPT-MediumObl.ttf') format('truetype'); + font-weight: 500; + font-style: italic; +} + +/* Semibold */ +@font-face { + font-family: 'FuturaPT-SemiBold'; + src: url('FuturaPT-Demi.woff2') format('woff2'), + url('FuturaPT-Demi.woff') format('woff'), + url('FuturaPT-Demi.ttf') format('truetype'); + font-weight: 600; + font-style: normal; +} + +/* Semibold italic */ +@font-face { + font-family: 'FuturaPT-SemiBoldItalic'; + src: url('FuturaPT-DemiObl.woff2') format('woff2'), + url('FuturaPT-DemiObl.woff') format('woff'), + url('FuturaPT-DemiObl.ttf') format('truetype'); + font-weight: 600; + font-style: italic; +} + +/* Bold */ +@font-face { + font-family: 'FuturaPT-Bold'; + src: url('FuturaPT-Bold.woff2') format('woff2'), + url('FuturaPT-Bold.woff') format('woff'), + url('FuturaPT-Bold.ttf') format('truetype'); + font-weight: bold; + font-style: normal; +} + + +/* Bold italic */ +@font-face { + font-family: 'FuturaPT-BoldItalic'; + src: url('FuturaPT-BoldObl.woff2') format('woff2'), + url('FuturaPT-BoldObl.woff') format('woff'), + url('FuturaPT-BoldObl.ttf') format('truetype'); + font-weight: bold; + font-style: italic; +} + +/* Heavy */ +@font-face { + font-family: 'FuturaPT-Heavy'; + src: url('FuturaPT-Heavy.woff2') format('woff2'), + url('FuturaPT-Heavy.woff') format('woff'), + url('FuturaPT-Heavy.ttf') format('truetype'); + font-weight: 900; + font-style: normal; +} + +/* Heavy italic */ +@font-face { + font-family: 'FuturaPT-HeavyItalic'; + src: url('FuturaPT-HeavyObl.woff2') format('woff2'), + url('FuturaPT-HeavyObl.woff') format('woff'), + url('FuturaPT-HeavyObl.ttf') format('truetype'); + font-weight: 900; + font-style: italic; +} + +/* Extra bold */ +@font-face { + font-family: 'FuturaPT-ExtraBold'; + src: url('FuturaPT-ExtraBold.woff2') format('woff2'), + url('FuturaPT-ExtraBold.woff') format('woff'), + url('FuturaPT-ExtraBold.ttf') format('truetype'); + font-weight: bold; + font-style: normal; +} + +/* Extra bold italic */ +@font-face { + font-family: 'FuturaPT-ExtraBoldItalic'; + src: url('FuturaPT-ExtraBoldObl.woff2') format('woff2'), + url('FuturaPT-ExtraBoldObl.woff') format('woff'), + url('FuturaPT-ExtraBoldObl.ttf') format('truetype'); + font-weight: bold; + font-style: italic; +} + +/* === Futura PT Condensed === */ +/* Condensed regular */ +@font-face { + font-family: 'FuturaPT-Condensed-Regular'; + src: url('FuturaPTCond-Book.woff2') format('woff2'), + url('FuturaPTCond-Book.woff') format('woff'), + url('FuturaPTCond-Book.ttf') format('truetype'); + font-weight: normal; + font-style: normal; +} + +/* Condensed italic */ +@font-face { + font-family: 'FuturaPT-Condensed-Italic'; + src: url('FuturaPTCond-BookObl.woff2') format('woff2'), + url('FuturaPTCond-BookObl.woff') format('woff'), + url('FuturaPTCond-BookObl.ttf') format('truetype'); + font-weight: normal; + font-style: italic; +} + +/* Condensed bold italic */ +@font-face { + font-family: 'FuturaPT-Condensed-BoldItalic'; + src: url('FuturaPTCond-BoldObl.woff2') format('woff2'), + url('FuturaPTCond-BoldObl.woff') format('woff'), + url('FuturaPTCond-BoldObl.ttf') format('truetype'); + font-weight: bold; + font-style: italic; +} + +/* Condensed medium */ +@font-face { + font-family: 'FuturaPT-Condensed-Medium'; + src: url('FuturaPTCond-Medium.woff2') format('woff2'), + url('FuturaPTCond-Medium.woff') format('woff'), + url('FuturaPTCond-Medium.ttf') format('truetype'); + font-weight: 500; + font-style: normal; +} + +/* Condensed medium italic */ +@font-face { + font-family: 'FuturaPT-Condensed-MediumItalic'; + src: url('FuturaPTCond-MediumObl.woff2') format('woff2'), + url('FuturaPTCond-MediumObl.woff') format('woff'), + url('FuturaPTCond-MediumObl.ttf') format('truetype'); + font-weight: 500; + font-style: italic; +} + +/* Condensed medium bold */ +@font-face { + font-family: 'FuturaPTCondensed-Bold'; + src: url('FuturaPTCond-Bold.woff2') format('woff2'), + url('FuturaPTCond-Bold.woff') format('woff'), + url('FuturaPTCond-Bold.ttf') format('truetype'); + font-weight: bold; + font-style: normal; +} + +/* Condensed extra bold */ +@font-face { + font-family: 'FuturaPT-Condensed-ExtraBold'; + src: url('FuturaPTCond-ExtraBold.woff2') format('woff2'), + url('FuturaPTCond-ExtraBold.woff') format('woff'), + url('FuturaPTCond-ExtraBold.ttf') format('truetype'); + font-weight: bold; + font-style: normal; +} + +/* Condensed extra bold italic */ +@font-face { + font-family: 'FuturaPT-Condensed-ExtraBoldItalic'; + src: url('FuturaPTCond-ExtraBoldObl.woff2') format('woff2'), + url('FuturaPTCond-ExtraBoldObl.woff') format('woff'), + url('FuturaPTCond-ExtraBoldObl.ttf') format('truetype'); + font-weight: bold; + font-style: italic; +} + + +/* === CSS === */ + +.font-general-light { + font-family: "FuturaPT-Light"; +} + +.font-general-regular { + font-family: "FuturaPT-Regular"; +} + +.font-general-medium { + font-family: "FuturaPT-Medium"; +} + +.font-general-semibold { + font-family: "FuturaPT-SemiBold"; +} + +.font-general-bold { + font-family: "FuturaPT-Bold"; +} diff --git a/backend/config.py b/backend/config.py new file mode 100644 index 0000000..4f38540 --- /dev/null +++ b/backend/config.py @@ -0,0 +1,21 @@ +import os + +# TODO: store keys in env variables +RECAPTCHA_PUBLIC_KEY = "RECAPTCHA_PUBLIC_KEY" +RECAPTCHA_PRIVATE_KEY = "RECAPTCHA_PRIVATE_KEY-L4DsNDlza17N7dEz36" + +FLASK_APIKEY = "FLASK_APIKEY" + +if 'ALEX_DEBUG' in os.environ: + DEPLOY_PATH = '.' +else: + DEPLOY_PATH = '/home/c/cn52774/alex-sharoff/public_html/backend' + +CONTACT_REQUEST_TEMPLATE = """ +Обращение через форму обратной связи с сайта alex-sharoff.ru: + +Имя: {name} +Почта: {email} +------- +{message} +""" diff --git a/backend/index.wsgi b/backend/index.wsgi new file mode 100644 index 0000000..c4fab59 --- /dev/null +++ b/backend/index.wsgi @@ -0,0 +1,9 @@ +#!/home/c/cn52774/alex-sharoff/public_html/backend/env/bin/python + +import sys +sys.path.append('/home/c/cn52774/alex-sharoff/public_html/backend/') +sys.path.append('/home/c/cn52774/alex-sharoff/public_html/backend/env/lib/python3.6/site-packages/') + +from main import app + +application = app diff --git a/backend/main.py b/backend/main.py new file mode 100644 index 0000000..68ded82 --- /dev/null +++ b/backend/main.py @@ -0,0 +1,74 @@ +import locale +import logging + +from flask import Flask, request +from flask_cors import CORS, cross_origin +from flask_executor import Executor +from flask_wtf import FlaskForm, RecaptchaField +import telegram_send +from wtforms import StringField, EmailField +from wtforms.validators import DataRequired, Email + +import config as cfg + +# Set locale to UTF-8 as server's one is ANSI - this breaks cyrilic loggng +locale.setlocale(locale.LC_ALL, 'en_US.UTF-8') + +logging.basicConfig(filename=f"{cfg.DEPLOY_PATH}/log.log", + filemode='a', + format='%(asctime)s,%(msecs)d %(name)s %(levelname)s %(message)s', + datefmt='%H:%M:%S', + level=logging.INFO) + +logger = logging.getLogger() + +app = Flask(__name__) + +app.secret_key = cfg.FLASK_APIKEY +app.config["APPLICATION_ROOT"] = "/api" +app.config["WTF_CSRF_ENABLED"] = False + +app.config["RECAPTCHA_PUBLIC_KEY"] = cfg.RECAPTCHA_PUBLIC_KEY +app.config["RECAPTCHA_PRIVATE_KEY"] = cfg.RECAPTCHA_PRIVATE_KEY + +app.config['EXECUTOR_TYPE'] = 'process' +app.config['EXECUTOR_PROPAGATE_EXCEPTIONS'] = True + +executor = Executor(app) + + +def send_telegram(message, silent=False): + telegram_send.send(messages=[message], conf=f'{cfg.DEPLOY_PATH}/telegram.conf', silent=silent) + + +class ContactForm(FlaskForm): + name = StringField('Username', validators=[DataRequired()]) + email = EmailField('Email', validators=[DataRequired(), Email()]) + message = StringField('Message') + recaptcha = RecaptchaField() + + +@app.route('/contact/', methods=['POST']) +def contact(): + form = ContactForm(request.form) + + if form.validate_on_submit(): + text = cfg.CONTACT_REQUEST_TEMPLATE.format( + name=form.name.data, + email=form.email.data, + message=form.message.data + ) + logger.info(f'{form.name.data} - {form.email.data}: [{form.message.data}]') + executor.submit(send_telegram, text) + return '', 200 + + return '', 400 + + +@app.route('/') +def hello_world(): + return 'Hello, World!' + + +if __name__ == '__main__': + app.run() diff --git a/backend/telegram.conf b/backend/telegram.conf new file mode 100644 index 0000000..e3c18b7 --- /dev/null +++ b/backend/telegram.conf @@ -0,0 +1,8 @@ +[telegram] +# alexsharoff_bot +# token = token +# chat_id = chat_id + +# phzhik_dev_bot +token = token +chat_id = chat_id diff --git a/components/RoundButton.vue b/components/RoundButton.vue new file mode 100644 index 0000000..6526d75 --- /dev/null +++ b/components/RoundButton.vue @@ -0,0 +1,32 @@ + + + + + diff --git a/components/SideBar.vue b/components/SideBar.vue new file mode 100644 index 0000000..06c460b --- /dev/null +++ b/components/SideBar.vue @@ -0,0 +1,83 @@ + + + + + diff --git a/components/SocialButton.vue b/components/SocialButton.vue new file mode 100644 index 0000000..0386cfb --- /dev/null +++ b/components/SocialButton.vue @@ -0,0 +1,40 @@ + + + + + diff --git a/components/about/AboutClientSingle.vue b/components/about/AboutClientSingle.vue new file mode 100644 index 0000000..ac6cff4 --- /dev/null +++ b/components/about/AboutClientSingle.vue @@ -0,0 +1,25 @@ + + + + + diff --git a/components/about/AboutClients.vue b/components/about/AboutClients.vue new file mode 100644 index 0000000..303145f --- /dev/null +++ b/components/about/AboutClients.vue @@ -0,0 +1,36 @@ + + + diff --git a/components/about/AboutCounter.vue b/components/about/AboutCounter.vue new file mode 100644 index 0000000..ad79347 --- /dev/null +++ b/components/about/AboutCounter.vue @@ -0,0 +1,100 @@ + + + + + diff --git a/components/about/AboutMe.vue b/components/about/AboutMe.vue new file mode 100644 index 0000000..ddec5b9 --- /dev/null +++ b/components/about/AboutMe.vue @@ -0,0 +1,40 @@ + + + diff --git a/components/contact/ContactDetails.vue b/components/contact/ContactDetails.vue new file mode 100644 index 0000000..c6862e7 --- /dev/null +++ b/components/contact/ContactDetails.vue @@ -0,0 +1,47 @@ + + + + + diff --git a/components/contact/ContactForm.vue b/components/contact/ContactForm.vue new file mode 100644 index 0000000..9995518 --- /dev/null +++ b/components/contact/ContactForm.vue @@ -0,0 +1,190 @@ + + + + + diff --git a/components/gallery/FilterGroup.vue b/components/gallery/FilterGroup.vue new file mode 100644 index 0000000..d8bca7a --- /dev/null +++ b/components/gallery/FilterGroup.vue @@ -0,0 +1,50 @@ + + + + + diff --git a/components/gallery/FilterOption.vue b/components/gallery/FilterOption.vue new file mode 100644 index 0000000..04caa26 --- /dev/null +++ b/components/gallery/FilterOption.vue @@ -0,0 +1,35 @@ + + + + + diff --git a/components/gallery/Gallery.vue b/components/gallery/Gallery.vue new file mode 100644 index 0000000..9ac632d --- /dev/null +++ b/components/gallery/Gallery.vue @@ -0,0 +1,168 @@ + + + + + + diff --git a/components/gallery/GalleryItem.vue b/components/gallery/GalleryItem.vue new file mode 100644 index 0000000..bec9a9f --- /dev/null +++ b/components/gallery/GalleryItem.vue @@ -0,0 +1,23 @@ + + + + + diff --git a/components/gallery/GalleryItemMixin.js b/components/gallery/GalleryItemMixin.js new file mode 100644 index 0000000..82a0957 --- /dev/null +++ b/components/gallery/GalleryItemMixin.js @@ -0,0 +1,20 @@ +export default { + props: { + category: {type: String, required: true}, + image: {type: String, required: true}, + thumbSize: { + type: Object, + required: true, + default: () => ({w: 0, h: 0}) + }, +}, + + computed: { + full_img_url: function () { + return `/gallery/${this.category}/${this.image}` + }, + thumbnail_url: function () { + return `/gallery/${this.category}/thumbs/${this.image}` + }, + } +} diff --git a/components/gallery/HorizontalGallery.vue b/components/gallery/HorizontalGallery.vue new file mode 100644 index 0000000..781f19e --- /dev/null +++ b/components/gallery/HorizontalGallery.vue @@ -0,0 +1,58 @@ + + + + + diff --git a/components/gallery/HorizontalGalleryItem.vue b/components/gallery/HorizontalGalleryItem.vue new file mode 100644 index 0000000..6745911 --- /dev/null +++ b/components/gallery/HorizontalGalleryItem.vue @@ -0,0 +1,17 @@ + + + + + diff --git a/components/shared/AppBanner.vue b/components/shared/AppBanner.vue new file mode 100644 index 0000000..ad25dff --- /dev/null +++ b/components/shared/AppBanner.vue @@ -0,0 +1,96 @@ + + + + + diff --git a/components/shared/AppHeader.vue b/components/shared/AppHeader.vue new file mode 100644 index 0000000..dc8ad8a --- /dev/null +++ b/components/shared/AppHeader.vue @@ -0,0 +1,125 @@ + + + diff --git a/components/shared/AppNavigation.vue b/components/shared/AppNavigation.vue new file mode 100644 index 0000000..3738734 --- /dev/null +++ b/components/shared/AppNavigation.vue @@ -0,0 +1,101 @@ + + + + + diff --git a/layouts/default.vue b/layouts/default.vue new file mode 100644 index 0000000..38619fb --- /dev/null +++ b/layouts/default.vue @@ -0,0 +1,71 @@ + + + + + diff --git a/nuxt.config.js b/nuxt.config.js new file mode 100644 index 0000000..d941f32 --- /dev/null +++ b/nuxt.config.js @@ -0,0 +1,66 @@ +export default { + server: { + host: '0' // default: localhost + }, + + // Target: https://go.nuxtjs.dev/config-target + target: "static", + colorMode: { + classSuffix: "", + }, + + // Global page headers: https://go.nuxtjs.dev/config-head + head: { + title: "Alex Sharoff", + htmlAttrs: { + lang: "en" + }, + meta: [ + { charset: "utf-8" }, + { name: "viewport", content: "width=device-width, initial-scale=1" }, + { hid: "description", name: "description", content: "" }, + { name: "format-detection", content: "telephone=no" }, + ], + link: [{ rel: "icon", type: "image/x-icon", href: "/favicon.png" }], + }, + + // Global CSS: https://go.nuxtjs.dev/config-css + css: [ + "~/assets/app.css", + "~/assets/fonts/FuturaPT/futura-pt.css" + ], + + // Plugins to run before rendering page: https://go.nuxtjs.dev/config-plugins + plugins: [ + // { src: '~/plugins/vue-isotope', mode: 'client' }, + ], + + // Auto import components: https://go.nuxtjs.dev/config-components + components: true, + + // Modules for dev and build (recommended): https://go.nuxtjs.dev/config-modules + buildModules: [ + "@nuxtjs/tailwindcss", + "@nuxtjs/color-mode", + ], + + // Modules: https://go.nuxtjs.dev/config-modules + modules: [ + '@nuxtjs/recaptcha', + ], + + // Build Configuration: https://go.nuxtjs.dev/config-build + build: { + // extend (config, ctx) { + // if (ctx.isDev) { + // config.devtool = ctx.isClient ? 'source-map' : 'inline-source-map' + // } + // } + }, + + recaptcha: { + hideBadge: true, + siteKey: '6LeGbUElAAAAACaZos82QiUanP78WgZTrc4KCCRj', + version: 2 + } +}; diff --git a/package.json b/package.json new file mode 100644 index 0000000..5da4dfe --- /dev/null +++ b/package.json @@ -0,0 +1,31 @@ +{ + "name": "nuxtjs-tailwindcss-portfolio", + "version": "1.0.0", + "private": true, + "scripts": { + "dev": "nuxt", + "build": "nuxt build", + "start": "nuxt start", + "generate": "nuxt generate" + }, + "dependencies": { + "@nuxtjs/recaptcha": "^1.1.2", + "@tailwindcss/aspect-ratio": "^0.4.2", + "@tailwindcss/forms": "^0.3.4", + "core-js": "^3.15.1", + "feather-icons": "^4.28.0", + "imagesloaded": "^5.0.0", + "keen-slider": "^6.8.5", + "lightgallery": "^2.7.1", + "nuxt": "^2.15.7", + "shufflejs": "^6.1.0", + "smoothscroll-polyfill": "^0.4.4", + "uuid": "^8.3.2", + "vanilla-lazyload": "^17.8.3" + }, + "devDependencies": { + "@nuxtjs/color-mode": "^2.1.1", + "@nuxtjs/tailwindcss": "^4.2.0", + "postcss": "^8.3.5" + } +} diff --git a/pages/index.vue b/pages/index.vue new file mode 100644 index 0000000..877a3d2 --- /dev/null +++ b/pages/index.vue @@ -0,0 +1,55 @@ + + + + + diff --git a/plugins/vue-isotope.js b/plugins/vue-isotope.js new file mode 100644 index 0000000..a5dc3ca --- /dev/null +++ b/plugins/vue-isotope.js @@ -0,0 +1,4 @@ +import Vue from "vue"; +import isotope from "vueisotope"; + +Vue.component("isotope", isotope); diff --git a/static/background-mirrored.jpg b/static/background-mirrored.jpg new file mode 100644 index 0000000..3f4ed4f Binary files /dev/null and b/static/background-mirrored.jpg differ diff --git a/static/brands/emg.svg b/static/brands/emg.svg new file mode 100644 index 0000000..978c9ed --- /dev/null +++ b/static/brands/emg.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/static/brands/forumspb.svg b/static/brands/forumspb.svg new file mode 100644 index 0000000..d2639ce --- /dev/null +++ b/static/brands/forumspb.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/static/brands/futuris.svg b/static/brands/futuris.svg new file mode 100644 index 0000000..0fc9292 --- /dev/null +++ b/static/brands/futuris.svg @@ -0,0 +1,93 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/static/brands/gazprom-media.svg b/static/brands/gazprom-media.svg new file mode 100644 index 0000000..014fc47 --- /dev/null +++ b/static/brands/gazprom-media.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/static/brands/geometria.svg b/static/brands/geometria.svg new file mode 100644 index 0000000..694695b --- /dev/null +++ b/static/brands/geometria.svg @@ -0,0 +1,10 @@ + + + + + + diff --git a/static/brands/imageman.svg b/static/brands/imageman.svg new file mode 100644 index 0000000..a02d86d --- /dev/null +++ b/static/brands/imageman.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/static/brands/rvio.svg b/static/brands/rvio.svg new file mode 100644 index 0000000..fed981a --- /dev/null +++ b/static/brands/rvio.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/static/brands/tnt.webp b/static/brands/tnt.webp new file mode 100644 index 0000000..48d0b12 Binary files /dev/null and b/static/brands/tnt.webp differ diff --git a/static/brands/vk.svg b/static/brands/vk.svg new file mode 100644 index 0000000..565763c --- /dev/null +++ b/static/brands/vk.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/static/brands/zenit-radio.png b/static/brands/zenit-radio.png new file mode 100644 index 0000000..3eaf4d4 Binary files /dev/null and b/static/brands/zenit-radio.png differ diff --git a/static/favicon.png b/static/favicon.png new file mode 100644 index 0000000..7023b0a Binary files /dev/null and b/static/favicon.png differ diff --git a/static/logo-black.png b/static/logo-black.png new file mode 100644 index 0000000..3eb3a67 Binary files /dev/null and b/static/logo-black.png differ diff --git a/static/logo-white.png b/static/logo-white.png new file mode 100644 index 0000000..72d149a Binary files /dev/null and b/static/logo-white.png differ diff --git a/static/profile.jpg b/static/profile.jpg new file mode 100644 index 0000000..178628a Binary files /dev/null and b/static/profile.jpg differ diff --git a/store/README.md b/store/README.md new file mode 100644 index 0000000..1972d27 --- /dev/null +++ b/store/README.md @@ -0,0 +1,10 @@ +# STORE + +**This directory is not required, you can delete it if you don't want to use it.** + +This directory contains your Vuex Store files. +Vuex Store option is implemented in the Nuxt.js framework. + +Creating a file in this directory automatically activates the option in the framework. + +More information about the usage of this directory in [the documentation](https://nuxtjs.org/guide/vuex-store). diff --git a/store/index.js b/store/index.js new file mode 100644 index 0000000..2380f27 --- /dev/null +++ b/store/index.js @@ -0,0 +1,513 @@ +import {v4 as uuidv4} from "uuid"; + +import Shuffle from 'shufflejs' + +export const state = () => ({ + aboutMe: [ + "Меня зовут Саша и я занимаюсь фотографией более 10 лет.", + + `В Армении недавно, но уже снимаю интерьеры для ведущих дизайн-агенств Еревана: Imageman, Futuristic Agency и многих других. + Также сотрудничаю с организаторами крупных концертов. + Люблю снимать мероприятия и интерьеры и имею богатый опыт в этом, но открыт и к другим форматам съемок, по запросу пришлю портфолио и на другие темы.`, + + `Подстраиваюсь под любые условия освещения на съемке, для этого специально закупил качественное оборудование. + Снимаю на Sony a7 III, имею полный парк оптики и свой мобильный студийный свет для создания фотозоны.`, + + `Создаю уникальные и привлекательные фотографии интерьеров, а также захватывающие моменты событий и людей. + Работаю внимательно и тщательно, чтобы каждая фотография была идеальной и передавала атмосферу и эмоции, которые были в момент съемки. + Работаю на качество: учту все ваши просьбы и пожелания, мне важно видеть довольные лица клиентов!`, + + "Выезд от 15 000 драм, пробная экспресс-съемка – по договоренности.", + + "Буду рад поработать с вами!", + ], + + contacts: [ + { + id: uuidv4(), + name: "Ереван, Армения", + icon: "map-pin", + }, + { + id: uuidv4(), + name: "contact@alex-sharoff.ru", + icon: "mail", + url: "mailto:contact@alex-sharoff.ru" + }, + { + id: uuidv4(), + name: "+374 95 164941", + icon: "phone", + url: "tel:+37495164941" + }, + { + id: uuidv4(), + name: "Instagram: @sharoffkot", + icon: "instagram", + url: "https://instagram.com/sharoffkot/", + }, + { + id: uuidv4(), + name: "Facebook: @sharoffkot", + icon: "facebook", + url: "https://facebook.com/sharoffkot", + }, + { + id: uuidv4(), + name: "Telegram: @sharoffkot", + icon: "send", + url: "https://t.me/sharoffkot", + }, + ], + + socialProfiles: [ + { + id: uuidv4(), + name: "Instagram", + icon: "instagram", + url: "https://instagram.com/sharoffkot/", + }, + { + id: uuidv4(), + name: "Telegram", + icon: "send", + url: "https://t.me/sharoffkot", + }, + { + id: uuidv4(), + name: "Facebook", + icon: "facebook", + url: "https://facebook.com/sharoffkot", + }, + ], + + categoriesNames: + { + [Shuffle.ALL_ITEMS]: "Все проекты", + interior: "Интерьерная фотография", + business: "Деловые мероприятия", + restaurants_clubs: "Рестораны и клубы", + raves: "Рейвы" + }, + + initialCategory: "interior", + photos: [ + // Interior + {id: uuidv4(), category: "interior", image: "1 (1).JPG", thumbSize: {w: 400, h: 237}}, + {id: uuidv4(), category: "interior", image: "1 (10).JPG", thumbSize: {w: 400, h: 254}}, + {id: uuidv4(), category: "interior", image: "1 (11).JPG", thumbSize: {w: 400, h: 267}}, + {id: uuidv4(), category: "interior", image: "1 (12).JPG", thumbSize: {w: 400, h: 245}}, + {id: uuidv4(), category: "interior", image: "1 (2).jpg", thumbSize: {w: 400, h: 267}}, + {id: uuidv4(), category: "interior", image: "1 (3).jpg", thumbSize: {w: 400, h: 254}}, + {id: uuidv4(), category: "interior", image: "1 (4).JPG", thumbSize: {w: 400, h: 288}}, + {id: uuidv4(), category: "interior", image: "1 (5).JPG", thumbSize: {w: 400, h: 252}}, + {id: uuidv4(), category: "interior", image: "1 (6).jpg", thumbSize: {w: 400, h: 249}}, + {id: uuidv4(), category: "interior", image: "1 (7).jpg", thumbSize: {w: 400, h: 257}}, + {id: uuidv4(), category: "interior", image: "1 (8).jpg", thumbSize: {w: 400, h: 267}}, + {id: uuidv4(), category: "interior", image: "1 (9).jpg", thumbSize: {w: 400, h: 247}}, + {id: uuidv4(), category: "interior", image: "2 (1).jpg", thumbSize: {w: 400, h: 267}}, + {id: uuidv4(), category: "interior", image: "2 (3).jpg", thumbSize: {w: 400, h: 267}}, + {id: uuidv4(), category: "interior", image: "2 (6).jpg", thumbSize: {w: 400, h: 267}}, + {id: uuidv4(), category: "interior", image: "IMG00007-HDR.JPG", thumbSize: {w: 400, h: 267}}, + {id: uuidv4(), category: "interior", image: "IMG01309.jpg", thumbSize: {w: 400, h: 225}}, + {id: uuidv4(), category: "interior", image: "IMG01325.jpg", thumbSize: {w: 400, h: 267}}, + {id: uuidv4(), category: "interior", image: "IMG01337.jpg", thumbSize: {w: 400, h: 237}}, + {id: uuidv4(), category: "interior", image: "IMG04836-HDR.jpg", thumbSize: {w: 400, h: 263}}, + {id: uuidv4(), category: "interior", image: "IMG04881-HDR.jpg", thumbSize: {w: 400, h: 259}}, + {id: uuidv4(), category: "interior", image: "IMG04962-HDR.jpg", thumbSize: {w: 400, h: 253}}, + {id: uuidv4(), category: "interior", image: "IMG04965-HDR.jpg", thumbSize: {w: 400, h: 262}}, + {id: uuidv4(), category: "interior", image: "IMG04971-HDR.jpg", thumbSize: {w: 400, h: 258}}, + {id: uuidv4(), category: "interior", image: "IMG05167.jpg", thumbSize: {w: 400, h: 258}}, + {id: uuidv4(), category: "interior", image: "IMG08767.JPG", thumbSize: {w: 400, h: 252}}, + {id: uuidv4(), category: "interior", image: "IMG08772.JPG", thumbSize: {w: 400, h: 230}}, + {id: uuidv4(), category: "interior", image: "IMG08803.JPG", thumbSize: {w: 400, h: 266}}, + {id: uuidv4(), category: "interior", image: "IMG08860.JPG", thumbSize: {w: 400, h: 259}}, + {id: uuidv4(), category: "interior", image: "IMG08869.JPG", thumbSize: {w: 400, h: 253}}, + {id: uuidv4(), category: "interior", image: "IMG08884.JPG", thumbSize: {w: 400, h: 245}}, + {id: uuidv4(), category: "interior", image: "IMG08889.JPG", thumbSize: {w: 400, h: 231}}, + {id: uuidv4(), category: "interior", image: "IMG_05551 (1).jpg", thumbSize: {w: 400, h: 267}}, + {id: uuidv4(), category: "interior", image: "IMG_05551 (10).jpg", thumbSize: {w: 400, h: 267}}, + {id: uuidv4(), category: "interior", image: "IMG_05551 (13).jpg", thumbSize: {w: 400, h: 267}}, + {id: uuidv4(), category: "interior", image: "IMG_05551 (13-1).jpg", thumbSize: {w: 400, h: 267}}, + {id: uuidv4(), category: "interior", image: "IMG_05551 (13-2).jpg", thumbSize: {w: 400, h: 267}}, + {id: uuidv4(), category: "interior", image: "IMG_05551 (15).jpg", thumbSize: {w: 400, h: 267}}, + {id: uuidv4(), category: "interior", image: "IMG_05551 (16).jpg", thumbSize: {w: 400, h: 267}}, + {id: uuidv4(), category: "interior", image: "IMG_05551 (5).jpg", thumbSize: {w: 400, h: 267}}, + {id: uuidv4(), category: "interior", image: "IMG_05551 (6).jpg", thumbSize: {w: 400, h: 267}}, + {id: uuidv4(), category: "interior", image: "IMG_05551 (7).jpg", thumbSize: {w: 400, h: 267}}, + {id: uuidv4(), category: "interior", image: "IMG_05551 (8).jpg", thumbSize: {w: 400, h: 267}}, + {id: uuidv4(), category: "interior", image: "IMG_05551 (9).jpg", thumbSize: {w: 400, h: 267}}, + {id: uuidv4(), category: "interior", image: "IMG_0937-HDR.jpg", thumbSize: {w: 400, h: 247}}, + {id: uuidv4(), category: "interior", image: "IMG_0940-HDR.jpg", thumbSize: {w: 400, h: 266}}, + {id: uuidv4(), category: "interior", image: "IMG_4900-HDR (1).JPG", thumbSize: {w: 400, h: 257}}, + {id: uuidv4(), category: "interior", image: "IMG_4900-HDR (2).JPG", thumbSize: {w: 400, h: 273}}, + {id: uuidv4(), category: "interior", image: "IMG_4900-HDR (3).JPG", thumbSize: {w: 400, h: 251}}, + {id: uuidv4(), category: "interior", image: "IMG_4900-HDR (4).JPG", thumbSize: {w: 400, h: 228}}, + {id: uuidv4(), category: "interior", image: "IMG_4900-HDR (5).JPG", thumbSize: {w: 400, h: 266}}, + {id: uuidv4(), category: "interior", image: "IMG_4900-HDR (6).JPG", thumbSize: {w: 400, h: 244}}, + {id: uuidv4(), category: "interior", image: "IMG_4926-HDR.JPG", thumbSize: {w: 400, h: 255}}, + {id: uuidv4(), category: "interior", image: "IMG_4929-HDR.JPG", thumbSize: {w: 400, h: 255}}, + {id: uuidv4(), category: "interior", image: "IMG_4953-HDR.JPG", thumbSize: {w: 400, h: 264}}, + {id: uuidv4(), category: "interior", image: "IMG_4989-HDR.JPG", thumbSize: {w: 400, h: 267}}, + {id: uuidv4(), category: "interior", image: "IMG_5013-HDR.JPG", thumbSize: {w: 400, h: 248}}, + {id: uuidv4(), category: "interior", image: "IMG_5548_49_50.jpg", thumbSize: {w: 400, h: 256}}, + {id: uuidv4(), category: "interior", image: "IMG_5551_2_3.jpg", thumbSize: {w: 400, h: 267}}, + {id: uuidv4(), category: "interior", image: "IMG_6828-HDR.jpg", thumbSize: {w: 400, h: 267}}, + {id: uuidv4(), category: "interior", image: "IMG_7273-HDR.JPG", thumbSize: {w: 400, h: 225}}, + {id: uuidv4(), category: "interior", image: "IMG_7361-HDR.JPG", thumbSize: {w: 400, h: 225}}, + {id: uuidv4(), category: "interior", image: "IMG_7367-HDR.JPG", thumbSize: {w: 400, h: 225}}, + {id: uuidv4(), category: "interior", image: "IMG_7369-HDR (1).jpg", thumbSize: {w: 400, h: 279}}, + {id: uuidv4(), category: "interior", image: "IMG_7369-HDR (2).jpg", thumbSize: {w: 400, h: 281}}, + {id: uuidv4(), category: "interior", image: "IMG_7369-HDR (3).jpg", thumbSize: {w: 400, h: 280}}, + {id: uuidv4(), category: "interior", image: "IMG_7369-HDR (5).jpg", thumbSize: {w: 400, h: 267}}, + {id: uuidv4(), category: "interior", image: "IMG_7369-HDR (6).jpg", thumbSize: {w: 400, h: 271}}, + {id: uuidv4(), category: "interior", image: "IMG_7379-HDR1 (1).jpg", thumbSize: {w: 400, h: 273}}, + {id: uuidv4(), category: "interior", image: "IMG_7379-HDR1 (3).jpg", thumbSize: {w: 400, h: 273}}, + {id: uuidv4(), category: "interior", image: "IMG_7379-HDR1 (4).jpg", thumbSize: {w: 400, h: 265}}, + + // Business + {id: uuidv4(), category: "business", image: "IMG02631.jpg", thumbSize: {w: 400, h: 257}}, + {id: uuidv4(), category: "business", image: "IMG02667.jpg", thumbSize: {w: 400, h: 267}}, + {id: uuidv4(), category: "business", image: "IMG02710.jpg", thumbSize: {w: 400, h: 267}}, + {id: uuidv4(), category: "business", image: "IMG02752.jpg", thumbSize: {w: 400, h: 267}}, + {id: uuidv4(), category: "business", image: "IMG02802.jpg", thumbSize: {w: 400, h: 267}}, + {id: uuidv4(), category: "business", image: "IMG02973.jpg", thumbSize: {w: 400, h: 600}}, + {id: uuidv4(), category: "business", image: "IMG03026.jpg", thumbSize: {w: 400, h: 600}}, + {id: uuidv4(), category: "business", image: "IMG03249.jpg", thumbSize: {w: 400, h: 228}}, + {id: uuidv4(), category: "business", image: "IMG03406.jpg", thumbSize: {w: 400, h: 585}}, + {id: uuidv4(), category: "business", image: "IMG03474.jpg", thumbSize: {w: 400, h: 603}}, + {id: uuidv4(), category: "business", image: "IMG03661.jpg", thumbSize: {w: 400, h: 255}}, + {id: uuidv4(), category: "business", image: "IMG03668.jpg", thumbSize: {w: 400, h: 600}}, + {id: uuidv4(), category: "business", image: "IMG03669.jpg", thumbSize: {w: 400, h: 259}}, + {id: uuidv4(), category: "business", image: "IMG03694.jpg", thumbSize: {w: 400, h: 267}}, + {id: uuidv4(), category: "business", image: "IMG04083.jpg", thumbSize: {w: 400, h: 243}}, + {id: uuidv4(), category: "business", image: "IMG04567.jpg", thumbSize: {w: 400, h: 259}}, + {id: uuidv4(), category: "business", image: "IMG04720.jpg", thumbSize: {w: 400, h: 267}}, + {id: uuidv4(), category: "business", image: "IMG04752.jpg", thumbSize: {w: 400, h: 266}}, + {id: uuidv4(), category: "business", image: "IMG04934.jpg", thumbSize: {w: 400, h: 267}}, + {id: uuidv4(), category: "business", image: "IMG05121.jpg", thumbSize: {w: 400, h: 592}}, + {id: uuidv4(), category: "business", image: "IMG05230.jpg", thumbSize: {w: 400, h: 267}}, + {id: uuidv4(), category: "business", image: "IMG05498.jpg", thumbSize: {w: 400, h: 236}}, + {id: uuidv4(), category: "business", image: "IMG05530.jpg", thumbSize: {w: 400, h: 259}}, + {id: uuidv4(), category: "business", image: "IMG05532.jpg", thumbSize: {w: 400, h: 292}}, + {id: uuidv4(), category: "business", image: "IMG05580.jpg", thumbSize: {w: 400, h: 265}}, + {id: uuidv4(), category: "business", image: "IMG05645.jpg", thumbSize: {w: 400, h: 633}}, + {id: uuidv4(), category: "business", image: "IMG05710.jpg", thumbSize: {w: 400, h: 271}}, + {id: uuidv4(), category: "business", image: "IMG05758.jpg", thumbSize: {w: 400, h: 600}}, + {id: uuidv4(), category: "business", image: "IMG05784.jpg", thumbSize: {w: 400, h: 257}}, + {id: uuidv4(), category: "business", image: "IMG05873.jpg", thumbSize: {w: 400, h: 267}}, + {id: uuidv4(), category: "business", image: "IMG06000.jpg", thumbSize: {w: 400, h: 267}}, + {id: uuidv4(), category: "business", image: "IMG06497.jpg", thumbSize: {w: 400, h: 267}}, + {id: uuidv4(), category: "business", image: "IMG06533.jpg", thumbSize: {w: 400, h: 269}}, + {id: uuidv4(), category: "business", image: "IMG06723.jpg", thumbSize: {w: 400, h: 267}}, + {id: uuidv4(), category: "business", image: "IMG07020.jpg", thumbSize: {w: 400, h: 267}}, + {id: uuidv4(), category: "business", image: "IMG07087.jpg", thumbSize: {w: 400, h: 267}}, + {id: uuidv4(), category: "business", image: "IMG07875-DeNoiseAI-clear.JPG", thumbSize: {w: 400, h: 253}}, + {id: uuidv4(), category: "business", image: "IMG07913-DeNoiseAI-clear.JPG", thumbSize: {w: 400, h: 282}}, + {id: uuidv4(), category: "business", image: "IMG08010-DeNoiseAI-clear.JPG", thumbSize: {w: 400, h: 267}}, + {id: uuidv4(), category: "business", image: "IMG09952.jpg", thumbSize: {w: 400, h: 618}}, + {id: uuidv4(), category: "business", image: "IMG_7256.JPG", thumbSize: {w: 400, h: 247}}, + {id: uuidv4(), category: "business", image: "IMG_7271.JPG", thumbSize: {w: 400, h: 267}}, + {id: uuidv4(), category: "business", image: "IMG_7298.JPG", thumbSize: {w: 400, h: 267}}, + {id: uuidv4(), category: "business", image: "IMG_7318.JPG", thumbSize: {w: 400, h: 267}}, + {id: uuidv4(), category: "business", image: "IMG_7374.JPG", thumbSize: {w: 400, h: 267}}, + {id: uuidv4(), category: "business", image: "IMG_7390.JPG", thumbSize: {w: 400, h: 267}}, + {id: uuidv4(), category: "business", image: "IMG_9265.jpg", thumbSize: {w: 400, h: 267}}, + {id: uuidv4(), category: "business", image: "IMG_9287.jpg", thumbSize: {w: 400, h: 225}}, + {id: uuidv4(), category: "business", image: "IMG_9343.jpg", thumbSize: {w: 400, h: 267}}, + {id: uuidv4(), category: "business", image: "IMG_9344.jpg", thumbSize: {w: 400, h: 267}}, + {id: uuidv4(), category: "business", image: "IMG_9992.jpg", thumbSize: {w: 400, h: 267}}, + {id: uuidv4(), category: "business", image: "MG_7611(1).jpg", thumbSize: {w: 400, h: 615}}, + {id: uuidv4(), category: "business", image: "test.jpg", thumbSize: {w: 400, h: 257}}, + {id: uuidv4(), category: "business", image: "zIMG_9990jpg (2).jpg", thumbSize: {w: 400, h: 267}}, + {id: uuidv4(), category: "business", image: "zIMG_9991jpg (1).jpg", thumbSize: {w: 400, h: 600}}, + {id: uuidv4(), category: "business", image: "zIMG_9992.jpg", thumbSize: {w: 400, h: 600}}, + + // Restaurants & clubs + {id: uuidv4(), category: "restaurants_clubs", image: "10SAzl9GuaY.jpg", thumbSize: {w: 400, h: 267}}, + {id: uuidv4(), category: "restaurants_clubs", image: "6SzcuQPjGpA.jpg", thumbSize: {w: 400, h: 601}}, + {id: uuidv4(), category: "restaurants_clubs", image: "7sxMsZiy_gA.jpg", thumbSize: {w: 400, h: 600}}, + {id: uuidv4(), category: "restaurants_clubs", image: "CcjfEZlXlbQ.jpg", thumbSize: {w: 400, h: 267}}, + {id: uuidv4(), category: "restaurants_clubs", image: "FwF0jv7ILV4.jpg", thumbSize: {w: 400, h: 267}}, + {id: uuidv4(), category: "restaurants_clubs", image: "IMG00831-clear_1.jpg", thumbSize: {w: 400, h: 260}}, + {id: uuidv4(), category: "restaurants_clubs", image: "IMG00834-clear_1.jpg", thumbSize: {w: 400, h: 261}}, + {id: uuidv4(), category: "restaurants_clubs", image: "IMG00980-clear_1.jpg", thumbSize: {w: 400, h: 267}}, + {id: uuidv4(), category: "restaurants_clubs", image: "IMG01112-clear_1.jpg", thumbSize: {w: 400, h: 604}}, + {id: uuidv4(), category: "restaurants_clubs", image: "IMG01350-clear_1.jpg", thumbSize: {w: 400, h: 263}}, + {id: uuidv4(), category: "restaurants_clubs", image: "IMG01554-clear_1.jpg", thumbSize: {w: 400, h: 556}}, + {id: uuidv4(), category: "restaurants_clubs", image: "IMG01759-clear_1.jpg", thumbSize: {w: 400, h: 266}}, + {id: uuidv4(), category: "restaurants_clubs", image: "IMG01920-clear_1.jpg", thumbSize: {w: 400, h: 267}}, + {id: uuidv4(), category: "restaurants_clubs", image: "IMG02034-clear_1.jpg", thumbSize: {w: 400, h: 600}}, + {id: uuidv4(), category: "restaurants_clubs", image: "IMG_10035.JPG", thumbSize: {w: 400, h: 225}}, + {id: uuidv4(), category: "restaurants_clubs", image: "IMG_10186.JPG", thumbSize: {w: 400, h: 600}}, + {id: uuidv4(), category: "restaurants_clubs", image: "IMG_5560.jpg", thumbSize: {w: 400, h: 267}}, + {id: uuidv4(), category: "restaurants_clubs", image: "IMG_5847.jpg", thumbSize: {w: 400, h: 267}}, + {id: uuidv4(), category: "restaurants_clubs", image: "IMG_5869.jpg", thumbSize: {w: 400, h: 267}}, + {id: uuidv4(), category: "restaurants_clubs", image: "IMG_6452.jpg", thumbSize: {w: 400, h: 267}}, + {id: uuidv4(), category: "restaurants_clubs", image: "IMG_7811_1.jpg", thumbSize: {w: 400, h: 267}}, + {id: uuidv4(), category: "restaurants_clubs", image: "IMG_7878.jpg", thumbSize: {w: 400, h: 267}}, + {id: uuidv4(), category: "restaurants_clubs", image: "IMG_7962.jpg", thumbSize: {w: 400, h: 225}}, + {id: uuidv4(), category: "restaurants_clubs", image: "IMG_9695.JPG", thumbSize: {w: 400, h: 267}}, + {id: uuidv4(), category: "restaurants_clubs", image: "IMG_9713.JPG", thumbSize: {w: 400, h: 267}}, + {id: uuidv4(), category: "restaurants_clubs", image: "IMG_9719.JPG", thumbSize: {w: 400, h: 600}}, + {id: uuidv4(), category: "restaurants_clubs", image: "IMG_9886.JPG", thumbSize: {w: 400, h: 600}}, + {id: uuidv4(), category: "restaurants_clubs", image: "LbikiOKqO-E.jpg", thumbSize: {w: 400, h: 267}}, + {id: uuidv4(), category: "restaurants_clubs", image: "MOwi54BLavs.jpg", thumbSize: {w: 400, h: 267}}, + {id: uuidv4(), category: "restaurants_clubs", image: "Okgn6ZVi_W8.jpg", thumbSize: {w: 400, h: 267}}, + {id: uuidv4(), category: "restaurants_clubs", image: "TNqcEn2EMBk.jpg", thumbSize: {w: 400, h: 267}}, + {id: uuidv4(), category: "restaurants_clubs", image: "UvMGbG1Ini0.jpg", thumbSize: {w: 400, h: 267}}, + {id: uuidv4(), category: "restaurants_clubs", image: "W2kvC8SVqTA.jpg", thumbSize: {w: 400, h: 267}}, + {id: uuidv4(), category: "restaurants_clubs", image: "aOUt_ctuK40.jpg", thumbSize: {w: 400, h: 600}}, + {id: uuidv4(), category: "restaurants_clubs", image: "hHVwcjRI1K0.jpg", thumbSize: {w: 400, h: 247}}, + {id: uuidv4(), category: "restaurants_clubs", image: "hkttF1L2Yc4.jpg", thumbSize: {w: 400, h: 267}}, + {id: uuidv4(), category: "restaurants_clubs", image: "lEWJaijTrsY.jpg", thumbSize: {w: 400, h: 267}}, + {id: uuidv4(), category: "restaurants_clubs", image: "nJqRmfPnGdk.jpg", thumbSize: {w: 400, h: 600}}, + {id: uuidv4(), category: "restaurants_clubs", image: "pybUOIwARfs.jpg", thumbSize: {w: 400, h: 263}}, + {id: uuidv4(), category: "restaurants_clubs", image: "t2QG4YviQo4.jpg", thumbSize: {w: 400, h: 267}}, + {id: uuidv4(), category: "restaurants_clubs", image: "v04Qt_nI4_I.jpg", thumbSize: {w: 400, h: 267}}, + {id: uuidv4(), category: "restaurants_clubs", image: "weCJouLIOp8.jpg", thumbSize: {w: 400, h: 600}}, + {id: uuidv4(), category: "restaurants_clubs", image: "wmEdMZ3F6g.jpg", thumbSize: {w: 400, h: 267}}, + + // Raves + {id: uuidv4(), category: "raves", image: "0HbREBnZlCs.jpg", thumbSize: {w: 400, h: 225}}, + {id: uuidv4(), category: "raves", image: "2rh2cloTFMk.jpg", thumbSize: {w: 400, h: 267}}, + {id: uuidv4(), category: "raves", image: "3V6U_yNwmLI.jpg", thumbSize: {w: 400, h: 267}}, + {id: uuidv4(), category: "raves", image: "46.jpg", thumbSize: {w: 400, h: 225}}, + {id: uuidv4(), category: "raves", image: "4ZDWR_Ikou8.jpg", thumbSize: {w: 400, h: 267}}, + {id: uuidv4(), category: "raves", image: "59.jpg", thumbSize: {w: 400, h: 225}}, + {id: uuidv4(), category: "raves", image: "77-1.jpg", thumbSize: {w: 400, h: 267}}, + {id: uuidv4(), category: "raves", image: "7dzJAVrXo9M.jpg", thumbSize: {w: 400, h: 267}}, + {id: uuidv4(), category: "raves", image: "9lxNIkrbktQ.jpg", thumbSize: {w: 400, h: 164}}, + {id: uuidv4(), category: "raves", image: "ADeGrJPxCVY.jpg", thumbSize: {w: 400, h: 239}}, + {id: uuidv4(), category: "raves", image: "B0_4n6eNn7w.jpg", thumbSize: {w: 400, h: 249}}, + {id: uuidv4(), category: "raves", image: "BpycrEfCk7w.jpg", thumbSize: {w: 400, h: 225}}, + {id: uuidv4(), category: "raves", image: "BzoXaGKggJM.jpg", thumbSize: {w: 400, h: 267}}, + {id: uuidv4(), category: "raves", image: "CNUYqFCl0ZM.jpg", thumbSize: {w: 400, h: 225}}, + {id: uuidv4(), category: "raves", image: "CV2qffqQAeI.jpg", thumbSize: {w: 400, h: 225}}, + {id: uuidv4(), category: "raves", image: "E7n3CUwSHPA.jpg", thumbSize: {w: 400, h: 267}}, + {id: uuidv4(), category: "raves", image: "EjJhimwmbvE.jpg", thumbSize: {w: 400, h: 246}}, + {id: uuidv4(), category: "raves", image: "IMG00704.jpg", thumbSize: {w: 400, h: 268}}, + {id: uuidv4(), category: "raves", image: "IMG07701.jpg", thumbSize: {w: 400, h: 263}}, + {id: uuidv4(), category: "raves", image: "IMG07971.jpg", thumbSize: {w: 400, h: 267}}, + {id: uuidv4(), category: "raves", image: "IMG08130.jpg", thumbSize: {w: 400, h: 267}}, + {id: uuidv4(), category: "raves", image: "IMG08138.jpg", thumbSize: {w: 400, h: 273}}, + {id: uuidv4(), category: "raves", image: "IMG_0969.JPG", thumbSize: {w: 400, h: 225}}, + {id: uuidv4(), category: "raves", image: "IMG_1019.JPG", thumbSize: {w: 400, h: 600}}, + {id: uuidv4(), category: "raves", image: "IMG_1076_1.JPG", thumbSize: {w: 400, h: 225}}, + {id: uuidv4(), category: "raves", image: "IMG_1168.jpg", thumbSize: {w: 400, h: 225}}, + {id: uuidv4(), category: "raves", image: "IMG_2446.jpg", thumbSize: {w: 400, h: 267}}, + {id: uuidv4(), category: "raves", image: "IMG_2453.jpg", thumbSize: {w: 400, h: 267}}, + {id: uuidv4(), category: "raves", image: "IMG_2454 (2).jpg", thumbSize: {w: 400, h: 267}}, + {id: uuidv4(), category: "raves", image: "IMG_2457.jpg", thumbSize: {w: 400, h: 267}}, + {id: uuidv4(), category: "raves", image: "IMG_2463.jpg", thumbSize: {w: 400, h: 225}}, + {id: uuidv4(), category: "raves", image: "IMG_2524.jpg", thumbSize: {w: 400, h: 267}}, + {id: uuidv4(), category: "raves", image: "IMG_2580.JPG", thumbSize: {w: 400, h: 267}}, + {id: uuidv4(), category: "raves", image: "IMG_2602.jpg", thumbSize: {w: 400, h: 267}}, + {id: uuidv4(), category: "raves", image: "IMG_2767.jpg", thumbSize: {w: 400, h: 267}}, + {id: uuidv4(), category: "raves", image: "IMG_2895.JPG", thumbSize: {w: 400, h: 225}}, + {id: uuidv4(), category: "raves", image: "IMG_2923_1.JPG", thumbSize: {w: 400, h: 267}}, + {id: uuidv4(), category: "raves", image: "IMG_2996.JPG", thumbSize: {w: 400, h: 267}}, + {id: uuidv4(), category: "raves", image: "IMG_3104.jpg", thumbSize: {w: 400, h: 267}}, + {id: uuidv4(), category: "raves", image: "IMG_3163.JPG", thumbSize: {w: 400, h: 267}}, + {id: uuidv4(), category: "raves", image: "IMG_4280.jpg", thumbSize: {w: 400, h: 225}}, + {id: uuidv4(), category: "raves", image: "IMG_4400_1.jpg", thumbSize: {w: 400, h: 267}}, + {id: uuidv4(), category: "raves", image: "IMG_4413.jpg", thumbSize: {w: 400, h: 267}}, + {id: uuidv4(), category: "raves", image: "IMG_4443.jpg", thumbSize: {w: 400, h: 267}}, + {id: uuidv4(), category: "raves", image: "IMG_4544.jpg", thumbSize: {w: 400, h: 267}}, + {id: uuidv4(), category: "raves", image: "IMG_4577.jpg", thumbSize: {w: 400, h: 267}}, + {id: uuidv4(), category: "raves", image: "IMG_4671.jpg", thumbSize: {w: 400, h: 267}}, + {id: uuidv4(), category: "raves", image: "IMG_4687.jpg", thumbSize: {w: 400, h: 267}}, + {id: uuidv4(), category: "raves", image: "IMG_4757.jpg", thumbSize: {w: 400, h: 225}}, + {id: uuidv4(), category: "raves", image: "IMG_4808.jpg", thumbSize: {w: 400, h: 267}}, + {id: uuidv4(), category: "raves", image: "IMG_4869.jpg", thumbSize: {w: 400, h: 225}}, + {id: uuidv4(), category: "raves", image: "IMG_4951.jpg", thumbSize: {w: 400, h: 267}}, + {id: uuidv4(), category: "raves", image: "IMG_5066.jpg", thumbSize: {w: 400, h: 267}}, + {id: uuidv4(), category: "raves", image: "IMG_5371.jpg", thumbSize: {w: 400, h: 600}}, + {id: uuidv4(), category: "raves", image: "IMG_5440.jpg", thumbSize: {w: 400, h: 267}}, + {id: uuidv4(), category: "raves", image: "IMG_5484.jpg", thumbSize: {w: 400, h: 267}}, + {id: uuidv4(), category: "raves", image: "IMG_5847.jpg", thumbSize: {w: 400, h: 267}}, + {id: uuidv4(), category: "raves", image: "IMG_5869.jpg", thumbSize: {w: 400, h: 267}}, + {id: uuidv4(), category: "raves", image: "IMG_6284.jpg", thumbSize: {w: 400, h: 231}}, + {id: uuidv4(), category: "raves", image: "IMG_6464.jpg", thumbSize: {w: 400, h: 267}}, + {id: uuidv4(), category: "raves", image: "IMG_7776.jpg", thumbSize: {w: 400, h: 258}}, + {id: uuidv4(), category: "raves", image: "IMG_7789.jpg", thumbSize: {w: 400, h: 267}}, + {id: uuidv4(), category: "raves", image: "IMG_7952.jpg", thumbSize: {w: 400, h: 225}}, + {id: uuidv4(), category: "raves", image: "IMG_8009.jpg", thumbSize: {w: 400, h: 225}}, + {id: uuidv4(), category: "raves", image: "IMG_8397.jpg", thumbSize: {w: 400, h: 265}}, + {id: uuidv4(), category: "raves", image: "IMG_8445.jpg", thumbSize: {w: 400, h: 267}}, + {id: uuidv4(), category: "raves", image: "IMG_8466.jpg", thumbSize: {w: 400, h: 225}}, + {id: uuidv4(), category: "raves", image: "IMG_8541.jpg", thumbSize: {w: 400, h: 267}}, + {id: uuidv4(), category: "raves", image: "IMG_8551.jpg", thumbSize: {w: 400, h: 262}}, + {id: uuidv4(), category: "raves", image: "IMG_8597.jpg", thumbSize: {w: 400, h: 253}}, + {id: uuidv4(), category: "raves", image: "IMG_8614.jpg", thumbSize: {w: 400, h: 600}}, + {id: uuidv4(), category: "raves", image: "IMG_8637 (2).jpg", thumbSize: {w: 400, h: 267}}, + {id: uuidv4(), category: "raves", image: "IMG_8780.JPG", thumbSize: {w: 400, h: 267}}, + {id: uuidv4(), category: "raves", image: "IMG_8879.jpg", thumbSize: {w: 400, h: 267}}, + {id: uuidv4(), category: "raves", image: "IMG_9081.jpg", thumbSize: {w: 400, h: 225}}, + {id: uuidv4(), category: "raves", image: "IMG_9093.jpg", thumbSize: {w: 400, h: 267}}, + {id: uuidv4(), category: "raves", image: "IMG_9164.jpg", thumbSize: {w: 400, h: 267}}, + {id: uuidv4(), category: "raves", image: "IMG_9191.jpg", thumbSize: {w: 400, h: 267}}, + {id: uuidv4(), category: "raves", image: "IMG_9296.jpg", thumbSize: {w: 400, h: 267}}, + {id: uuidv4(), category: "raves", image: "IMG_9307.jpg", thumbSize: {w: 400, h: 267}}, + {id: uuidv4(), category: "raves", image: "IMG_9334.jpg", thumbSize: {w: 400, h: 267}}, + {id: uuidv4(), category: "raves", image: "IMG_9353.JPG", thumbSize: {w: 400, h: 267}}, + {id: uuidv4(), category: "raves", image: "IMG_9509.jpg", thumbSize: {w: 400, h: 267}}, + {id: uuidv4(), category: "raves", image: "IMG_9536.jpg", thumbSize: {w: 400, h: 600}}, + {id: uuidv4(), category: "raves", image: "IMG_9545.jpg", thumbSize: {w: 400, h: 267}}, + {id: uuidv4(), category: "raves", image: "IMG_9566.jpg", thumbSize: {w: 400, h: 267}}, + {id: uuidv4(), category: "raves", image: "IMG_9579.jpg", thumbSize: {w: 400, h: 267}}, + {id: uuidv4(), category: "raves", image: "IMG_9587.JPG", thumbSize: {w: 400, h: 267}}, + {id: uuidv4(), category: "raves", image: "IMG_9589.jpg", thumbSize: {w: 400, h: 267}}, + {id: uuidv4(), category: "raves", image: "IMG_9595.jpg", thumbSize: {w: 400, h: 267}}, + {id: uuidv4(), category: "raves", image: "IMG_9599.jpg", thumbSize: {w: 400, h: 267}}, + {id: uuidv4(), category: "raves", image: "IMG_9605.jpg", thumbSize: {w: 400, h: 264}}, + {id: uuidv4(), category: "raves", image: "IMG_9616.jpg", thumbSize: {w: 400, h: 267}}, + {id: uuidv4(), category: "raves", image: "IMG_9646(1).jpg", thumbSize: {w: 400, h: 267}}, + {id: uuidv4(), category: "raves", image: "IMG_9652.JPG", thumbSize: {w: 400, h: 267}}, + {id: uuidv4(), category: "raves", image: "IMG_9708.jpg", thumbSize: {w: 400, h: 225}}, + {id: uuidv4(), category: "raves", image: "IMG_9721.JPG", thumbSize: {w: 400, h: 267}}, + {id: uuidv4(), category: "raves", image: "IMG_9755.JPG", thumbSize: {w: 400, h: 267}}, + {id: uuidv4(), category: "raves", image: "IMG_9767.jpg", thumbSize: {w: 400, h: 225}}, + {id: uuidv4(), category: "raves", image: "IMG_9774.JPG", thumbSize: {w: 400, h: 225}}, + {id: uuidv4(), category: "raves", image: "IMG_9777.JPG", thumbSize: {w: 400, h: 225}}, + {id: uuidv4(), category: "raves", image: "IMG_9868.jpg", thumbSize: {w: 400, h: 225}}, + {id: uuidv4(), category: "raves", image: "IMG_9938.jpg", thumbSize: {w: 400, h: 267}}, + {id: uuidv4(), category: "raves", image: "IMG_9973.jpg", thumbSize: {w: 400, h: 225}}, + {id: uuidv4(), category: "raves", image: "IMG_9988.jpg", thumbSize: {w: 400, h: 267}}, + {id: uuidv4(), category: "raves", image: "IMG_9991(1).jpg", thumbSize: {w: 400, h: 225}}, + {id: uuidv4(), category: "raves", image: "JHH34nU9c80.jpg", thumbSize: {w: 400, h: 251}}, + {id: uuidv4(), category: "raves", image: "JnMFlv6zqg8.jpg", thumbSize: {w: 400, h: 250}}, + {id: uuidv4(), category: "raves", image: "Jsh_d2ry4CI.jpg", thumbSize: {w: 400, h: 267}}, + {id: uuidv4(), category: "raves", image: "KVcEQvKneLw.jpg", thumbSize: {w: 400, h: 225}}, + {id: uuidv4(), category: "raves", image: "LlGvNp-cfoI.jpg", thumbSize: {w: 400, h: 267}}, + {id: uuidv4(), category: "raves", image: "M_3zBny_rNY.jpg", thumbSize: {w: 400, h: 267}}, + {id: uuidv4(), category: "raves", image: "NRLeJf2izUg.jpg", thumbSize: {w: 400, h: 600}}, + {id: uuidv4(), category: "raves", image: "Nq4XKkBIxqw.jpg", thumbSize: {w: 400, h: 267}}, + {id: uuidv4(), category: "raves", image: "R2MTJXPE-as.jpg", thumbSize: {w: 400, h: 267}}, + {id: uuidv4(), category: "raves", image: "SPoFXaBMofE.jpg", thumbSize: {w: 400, h: 233}}, + {id: uuidv4(), category: "raves", image: "TqFOsPWjSNM.jpg", thumbSize: {w: 400, h: 236}}, + {id: uuidv4(), category: "raves", image: "UQ2-7iYntu4.jpg", thumbSize: {w: 400, h: 240}}, + {id: uuidv4(), category: "raves", image: "V3TA68kb8Gs.jpg", thumbSize: {w: 400, h: 254}}, + {id: uuidv4(), category: "raves", image: "W1h6f0bE4os.jpg", thumbSize: {w: 400, h: 267}}, + {id: uuidv4(), category: "raves", image: "WfpJB3-ceYY.jpg", thumbSize: {w: 400, h: 250}}, + {id: uuidv4(), category: "raves", image: "WqT1PVF58XE.jpg", thumbSize: {w: 400, h: 267}}, + {id: uuidv4(), category: "raves", image: "WsP0HcQCHIY.jpg", thumbSize: {w: 400, h: 235}}, + {id: uuidv4(), category: "raves", image: "Xqz_oVOsqoI.jpg", thumbSize: {w: 400, h: 267}}, + {id: uuidv4(), category: "raves", image: "ayvwLhVVBPo.jpg", thumbSize: {w: 400, h: 255}}, + {id: uuidv4(), category: "raves", image: "bKCjSarPSbQ.jpg", thumbSize: {w: 400, h: 267}}, + {id: uuidv4(), category: "raves", image: "b_lNg-Wk2A.jpg", thumbSize: {w: 400, h: 225}}, + {id: uuidv4(), category: "raves", image: "dX-qWZfR1bQ.jpg", thumbSize: {w: 400, h: 261}}, + {id: uuidv4(), category: "raves", image: "dgeFELqjo-4.jpg", thumbSize: {w: 400, h: 225}}, + {id: uuidv4(), category: "raves", image: "e17dEPpWcZE.jpg", thumbSize: {w: 400, h: 267}}, + {id: uuidv4(), category: "raves", image: "et1UQsxRnHY.jpg", thumbSize: {w: 400, h: 225}}, + {id: uuidv4(), category: "raves", image: "fCHK6G7GTvw.jpg", thumbSize: {w: 400, h: 267}}, + {id: uuidv4(), category: "raves", image: "img_8042.jpg", thumbSize: {w: 400, h: 267}}, + {id: uuidv4(), category: "raves", image: "img_8279.jpg", thumbSize: {w: 400, h: 267}}, + {id: uuidv4(), category: "raves", image: "img_8292.jpg", thumbSize: {w: 400, h: 267}}, + {id: uuidv4(), category: "raves", image: "img_8421.jpg", thumbSize: {w: 400, h: 267}}, + {id: uuidv4(), category: "raves", image: "jksvCRKXsQ0.jpg", thumbSize: {w: 400, h: 267}}, + {id: uuidv4(), category: "raves", image: "kl5Jh-27mwA.jpg", thumbSize: {w: 400, h: 230}}, + {id: uuidv4(), category: "raves", image: "nI9OvYbR6L4.jpg", thumbSize: {w: 400, h: 225}}, + {id: uuidv4(), category: "raves", image: "nsLE1UccbyE.jpg", thumbSize: {w: 400, h: 242}}, + {id: uuidv4(), category: "raves", image: "oqffP2kZiCg.jpg", thumbSize: {w: 400, h: 400}}, + {id: uuidv4(), category: "raves", image: "p5kbI2TA_WY.jpg", thumbSize: {w: 400, h: 225}}, + {id: uuidv4(), category: "raves", image: "q2edAQz44U.jpg", thumbSize: {w: 400, h: 257}}, + {id: uuidv4(), category: "raves", image: "q9rC6-6EWeI.jpg", thumbSize: {w: 400, h: 267}}, + {id: uuidv4(), category: "raves", image: "qUaS1nWKEQI.jpg", thumbSize: {w: 400, h: 225}}, + {id: uuidv4(), category: "raves", image: "tWmOM46ZbLE.jpg", thumbSize: {w: 400, h: 267}}, + {id: uuidv4(), category: "raves", image: "ucV5Vmen05g.jpg", thumbSize: {w: 400, h: 600}}, + {id: uuidv4(), category: "raves", image: "vl3ljKFEpls.jpg", thumbSize: {w: 400, h: 267}}, + {id: uuidv4(), category: "raves", image: "wpC8wVRj_HQ.jpg", thumbSize: {w: 400, h: 267}}, + {id: uuidv4(), category: "raves", image: "yizd-z6TVTU.jpg", thumbSize: {w: 400, h: 600}}, + {id: uuidv4(), category: "raves", image: "zEfjP8n-HnM.jpg", thumbSize: {w: 400, h: 267}}, + + ], + + // Other + projectsHeading: "Projects Portfolio", + projectsDescription: "Some of the projects I have successfully completed", + clientsHeading: "Бренды, с которыми я сотрудничал", + clients: [ + { + id: uuidv4(), + title: "Европейская медиагруппа", + img: "/brands/emg.svg", + url: "https://emg.fm/" + }, + { + id: uuidv4(), + title: "ПМЭФ", + img: "/brands/forumspb.svg", + url: "https://forumspb.com/archive/2022/outcomes-of-spief/" + }, + { + id: uuidv4(), + title: "Geometria", + img: "/brands/geometria.svg", + url: "https://geometria.ru/spb/" + }, + { + id: uuidv4(), + title: "РВИО", + img: "/brands/rvio.svg", + url: "https://rvio.histrf.ru/" + }, + { + id: uuidv4(), + title: "VK", + img: "/brands/vk.svg", + url: "https://vk.com/" + }, + { + id: uuidv4(), + title: "Радио Зенит", + img: "/brands/zenit-radio.png", + url: "https://www.radiozenit.ru/" + }, + { + id: uuidv4(), + title: "Газпром-Медиа", + img: "/brands/gazprom-media.svg", + url: "https://www.gazprom-media.com/ru" + }, + { + id: uuidv4(), + title: "ТНТ", + img: "/brands/tnt.webp", + url: "https://tnt-online.ru/" + }, + { + id: uuidv4(), + title: "Imageman", + img: "/brands/imageman.svg", + url: "https://imagemanstudio.com/" + }, + { + id: uuidv4(), + title: "Futuris Architects", + img: "/brands/futuris.svg", + url: "https://futurisarchitects.com/" + }, + ], + + isMobileMenuOpened: false +}); + +export const getters = { + favoritePhotos: (state) => { + return state.photos.filter((photo) => photo.isFavorite === true); + }, + + showcasePhotos: (state) => (category) => { + return state.photos.filter( + (photo) => photo.category === category && photo.isShowcase === true); + } +}; + +export const mutations = { + toggleMobileMenu(state, isOpen) { + state.isMobileMenuOpened = isOpen ?? !state.isMobileMenuOpened; + }, +}; + +export const actions = {}; diff --git a/tailwind.config.js b/tailwind.config.js new file mode 100644 index 0000000..bdaf608 --- /dev/null +++ b/tailwind.config.js @@ -0,0 +1,74 @@ +const colors = require("tailwindcss/colors"); + +module.exports = { + mode: 'jit', + + purge: [ + "./components/**/*.{vue,js}", + "./layouts/**/*.vue", + "./pages/**/*.vue", + "./plugins/**/*.{js,ts}", + "./nuxt.config.{js,ts}", + ], + darkMode: "class", + theme: { + extend: { + colors: { + "primary-light": "#F7F8FC", + "secondary-light": "#FFFFFF", + "ternary-light": "#f6f7f8", + + "primary-dark": "#0D2438", + "secondary-dark": "#102D44", + "ternary-dark": "#254566", + + "accent-light": "", + "accent-dark": "", + + "background-light": "#FFFFFF", + "background-dark": "#070707", + + "accent": "#9d9d9d" + }, + container: { + padding: { + DEFAULT: "1rem", + sm: "2rem", + lg: "5rem", + xl: "6rem", + "2xl": "8rem", + }, + }, + animation: { + 'slide-up': 'slide-up .8s ease-in-out forwards', + 'slide-down-fast': 'slide-down .4s ease-in-out forwards', + 'rotate-pulse': 'rotate_pulse 8s linear infinite alternate', + }, + keyframes: { + 'slide-up': { + '0%': { transform: 'translate3d(0px, 50px, 0px)', opacity: 0 }, + '100%': { transform: 'translate3d(0px, 0px, 0px)', opacity: 1 }, + }, + 'slide-down': { + '0%': { transform: 'translate3d(0px, -50px, 0px)', opacity: 0 }, + '100%': { transform: 'translate3d(0px, 0px, 0px)', opacity: 1 }, + }, + rotate_pulse: { + '0%': { transform: 'rotate3d(0, 0, 1, 360deg)', opacity: 0.8 }, + '100%': { transform: 'rotate3d(0, 0, 1, 180deg)', opacity: 1 }, + }, + }, + }, + }, + variants: { + extend: { + opacity: ["disabled"], + }, + }, + corePlugins: { + aspectRatio: false, + }, + plugins: [ + require("@tailwindcss/forms"), + ], +};