A modern Next.js portfolio website built with π and β by Sal Anvarov. Deployed with HotJar, GTM, and Formspree tools for analytics and form tracking.
Remark: Deploying on Vercel will FAIL as Nx has the output directory as dist on builds by default. To fix this - navigate to the Build and Development Settings and change the Output Directory to
dist/apps/personal-portfolio/.next
. Documentation: https://vercel.com/docs/deployments/configure-a-build#build-and-development-settings
Table of Contents:
π This repo was created with Nx.
Preview: https://www.sal-anvarov.com/
This portfolio website was built with ease of extensibility in mind. This app comes with MDX for case-studies and blog management and Bootstrap for styling. The app has redux state management via Redux Toolkit and React Hooks.
Remark: Given App Router is not fully stable, I opted to stay with Pages Router until further notice. The plan is to eventually migrate to App Router.
- Please make sure to have Node.js (16+) locally by downloading the Javascript runtime via
brew
,choco
, orapt-get
.
- Please make sure to have Docker Desktop operational to quickly compose the required dependencies. Then follow the docker procedure outlined below.
-
Clone the repo via
git clone https://github.com/msanvarov/personal-portfolio
. -
Navigate to the root directory of repo via
cd personal-portfolio
. -
Download dependencies via
npm i
oryarn
. -
Create a .env file via the
cp apps/personal-portfolio/.env.example .env
command and replace the example environment variables with valid ones. -
Start the app in development mode via
npm run start
(the app will be exposed on http://localhost:4200; not to conflict with the default React, Angular, or Vue ports).
Remark: In the docker deployment, the UI is automatically started and served by the API.
Open in Docker Dev Environments
- Execute the following command in-app directory:
# creates and loads the docker container in detached mode with the required configuration
$ docker-compose up -d
- The following command will download dependencies and execute the web application on http://localhost:80 (deployed behind a Nginx reverse proxy).
By default, the application comes with a config module that can read in every environment variable from the .env
file.
APP_ENV - the application environment to execute as, either in development or production. Determines the type of logging options to utilize. Options: development
or production
.
ENABLE_TRACKING - enables tracking tools. Options: true
or false
.
HOTJAR_WEBSITE_UID - hotjar website uid, requires a HotJar account (free)
HOTJAR_VERSION - hotjar version
GOOGLE_TAG_MANAGER_UID - google tag manager uid, requires google analytics to be onboarded.
MICROSOFT_CLARITY_UID - microsoft clarity uid, manages heatmaps and events. requires a Microsoft account (free)
Remark: DebugBear can be easy onboarded via Vercel
DEBUGBEAR_RUM_UID - debugbear real user monitoring (RUM) uid, requires DebugBear to be onboarded (free).
.
βββ Dockerfile
βββ README.md
βββ apps
β βββ personal-portfolio
β β βββ case-studies
β β βββ index.d.ts
β β βββ jest.config.ts
β β βββ next-env.d.ts
β β βββ next.config.js
β β βββ pages
β β βββ posts
β β βββ project.json
β β βββ public
β β βββ tests
β β βββ tsconfig.json
β β βββ tsconfig.spec.json
β β βββ utils
β βββ personal-portfolio-e2e
β βββ cypress.config.ts
β βββ project.json
β βββ src
β βββ tsconfig.json
βββ assets
β βββ open-link.svg
βββ compose.yaml
βββ dist
β βββ apps
β βββ personal-portfolio
βββ jest.config.ts
βββ jest.preset.js
βββ libs
β βββ core-components
β β βββ README.md
β β βββ project.json
β β βββ src
β β βββ tsconfig.json
β β βββ tsconfig.lib.json
β βββ store
β βββ README.md
β βββ project.json
β βββ src
β βββ tsconfig.json
β βββ tsconfig.lib.json
βββ nx.json
βββ package-lock.json
βββ package.json
βββ tools
β βββ tsconfig.tools.json
βββ tsconfig.base.json
# Start the docker container if it's not running
$ docker start frontend
# unit tests
$ docker exec -it frontend npm run test
# execute test
$ npm run test
Branches | Status |
---|---|
main | β |
feat/* | π§ |
PRs are appreciated, I fully rely on the passion β€οΈ of the OS developers.
This personal portfolio website is MIT licensed.