{"id":26878852,"url":"https://github.com/moinloin/portfolio","last_synced_at":"2026-05-15T08:34:56.317Z","repository":{"id":277208568,"uuid":"931676753","full_name":"moinloin/portfolio","owner":"moinloin","description":"A collection of projects, experiences, and learnings that reflect my professional and personal growth.","archived":false,"fork":false,"pushed_at":"2025-03-31T08:59:57.000Z","size":12678,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-03-31T09:35:46.009Z","etag":null,"topics":["portfolio","project"],"latest_commit_sha":null,"homepage":"https://loiskauffungen.com","language":"HTML","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/moinloin.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2025-02-12T17:13:07.000Z","updated_at":"2025-03-31T09:00:01.000Z","dependencies_parsed_at":null,"dependency_job_id":"99b3a4fc-c519-45ff-a998-7231ffe602eb","html_url":"https://github.com/moinloin/portfolio","commit_stats":null,"previous_names":["moinloin/portfolio"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/moinloin%2Fportfolio","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/moinloin%2Fportfolio/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/moinloin%2Fportfolio/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/moinloin%2Fportfolio/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/moinloin","download_url":"https://codeload.github.com/moinloin/portfolio/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":246468532,"owners_count":20782516,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["portfolio","project"],"created_at":"2025-03-31T12:29:51.649Z","updated_at":"2025-10-14T04:09:15.886Z","avatar_url":"https://github.com/moinloin.png","language":"HTML","funding_links":[],"categories":[],"sub_categories":[],"readme":"# portfolio\n\n## Overview\nThis is a fully custom-built personal portfolio website developed using **Node.js**, with **Docker** and **CI/CD** integration. The website serves as a dynamic and interactive platform to showcase projects, creative work, and professional expertise. It highlights technical skills, personal projects, and achievements in a well-structured and engaging manner.\n\n## Features\n- **Custom-built with Node.js** for a flexible and efficient backend\n- **Dockerized** for seamless deployment across environments\n- **CI/CD Integration** ensuring automated builds, testing, and deployments\n- **Automated Testing** with Jest and Supertest for reliability\n- **Environment Configuration** with dotenv for flexible deployment settings\n- **Performance Optimized** for fast load times and responsive animations\n- **Hardware-accelerated transitions** for smooth, stutter-free user interactions\n- **Custom cursor implementation** with fluid movement and interactive feedback\n- **Responsive Design** for an optimal user experience across all devices\n- **Interactive and Engaging UI** providing smooth navigation and dynamic content\n- **Cloud Hosting** for reliable and scalable deployment\n- **Privacy-Focused Analytics** using Umami for user insights without compromising privacy\n\n## Technologies Used\n- **Node.js** - Backend development (Node 20)\n- **Express** - Web framework\n- **Docker** - Containerization\n- **GitHub Actions** - CI/CD pipeline with automated testing\n- **Jest \u0026 Supertest** - Testing framework\n- **Caddy** - Reverse proxy and server optimization\n- **HTML5, CSS3, JavaScript** - Frontend development\n- **RequestAnimationFrame API** - Smooth animations and transitions\n- **CSS Hardware Acceleration** - Enhanced performance for animations\n- **DigitalOcean** - Cloud hosting solutions\n- **Umami** - Privacy-friendly analytics for tracking user interactions\n\n## Project Structure\n```\nportfolio-website/\n│\n├── .github/                # GitHub Actions workflows\n│   └── workflows/\n│       └── deploy.yml      # CI/CD pipeline definition\n│\n├── __tests__/              # Test files\n│   ├── server.test.js      # API endpoint tests\n│   └── static.test.js      # Static asset tests\n│\n├── jest/                   # Jest configuration\n│   └── setup-env.js        # Test environment setup\n│\n├── public/                 # Static assets\n│   ├── css/                # Stylesheets\n│   ├── js/                 # Client-side JavaScript\n│   ├── views/              # HTML templates\n│   └── images/             # Image assets\n│\n├── .dockerignore           # Docker ignore file\n├── .env                    # Environment variables (not in Git)\n├── .gitignore              # Git ignore file\n├── Dockerfile              # Docker container definition\n├── jest.config.js          # Jest configuration\n├── package.json            # Dependencies and scripts\n├── README.md               # Project documentation\n└── server.js               # Main application entry point\n```\n\n## Installation and Setup\n\n### Prerequisites\n- Node.js 20 or higher\n- npm or yarn\n- Docker (optional, for containerization)\n- Git\n\n### Local Development\n1. Clone the repository:\n   ```bash\n   git clone https://github.com/yourusername/portfolio.git\n   cd portfolio\n   ```\n\n2. Install dependencies:\n   ```bash\n   npm install\n   ```\n\n3. Create a `.env` file:\n   ```\n   PORT=8080\n   NODE_ENV=development\n   ```\n\n4. Start the development server:\n   ```bash\n   npm run dev\n   ```\n\n5. Open your browser and navigate to `http://localhost:8080`\n\n### Running Tests\n```bash\nnpm test                # Run all tests\nnpm run test:watch      # Run tests in watch mode\nnpm run test:coverage   # Run tests with coverage report\n```\n\n### Docker Deployment\n1. Build the Docker image:\n   ```bash\n   docker build -t portfolio:latest .\n   ```\n\n2. Run the container:\n   ```bash\n   docker run -p 8080:8080 -e NODE_ENV=production portfolio:latest\n   ```\n\n## CI/CD Pipeline\nThis project uses GitHub Actions for continuous integration and deployment:\n\n1. On push to the main branch, the CI/CD pipeline:\n   - Runs tests to ensure code quality\n   - Builds a Docker image with the current version\n   - Implements blue-green deployment strategy for zero-downtime updates\n   - Deploys to the production server\n\n## Recent Improvements\n- Upgraded to Node.js 20 for better performance\n- Added automated testing with Jest\n- Implemented environment configuration with dotenv\n- Enhanced CI/CD pipeline with testing integration\n- Added blue-green deployment for zero-downtime updates\n- Optimized image loading for high-resolution displays\n- Enhanced transition animations between content sections\n- Implemented hardware acceleration for smoother cursor movement\n- Improved cross-project navigation with fluid transitions\n- Refactored CSS for better maintainability and performance\n- Implemented efficient event handling for smoother interactions\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmoinloin%2Fportfolio","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmoinloin%2Fportfolio","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmoinloin%2Fportfolio/lists"}