This is my personal digital portfolio, showcasing my skills, projects, and a simple contact form. It's built with Next.js and TypeScript, styled using Mantine Components and Tailwind CSS, and follows ESLint + Prettier conventions.
- Framework: Next.js
- Language: TypeScript
- Styling: Mantine UI + Tailwind CSS
- Linting & Formatting: ESLint, Prettier
- Containerisation: Docker
- CI/CD: Github Actions
- Node.js >= 18
- npm or yarn
- Docker (for containerised runs)
- Clone the repository (stable branch)
git clone --branch stable https://github.com/Cyrof/kn-folio.git cd kn-folio - Install dependencies
npm ci
- Create your environment file
In the project root, create a
.env.localfile (this is ignored by Git):touch .env.local
- Populate
.env.localEMAIL_USER=you@example.com EMAIL_PASS=your_email_app_password RECIPIENT_EMAIL=your_personal@inbox.com
| key | Description |
|---|---|
EMAIL_USER |
Email address the app will send from (e.g., a noreply address |
EMAIL_PASS |
App-specific password or SMTP credential for EMAIL_USER |
RECIPIENT_EMAIL |
Your inbox where contact-form messages will be delivered |
Development This spins up Next.js in hot-reload mode so you can make changes and see them instantly.
npm run devOpen your browser at http://localhost:3000
Production (Local Build)
This builds an optimised production bundle and then serves it.
npm run build
npm startBy default it will listen on port 3000—visit http://localhost:3000 to verify.
A Docker image is auto-built & pushed to Docker Hub on every merge to stable. To run via Docker:
docker pull cyrof/kn-folio:latest
docker run -d \
-e EMAIL_USER \
-e EMAIL_PASS \
-e RECIPIENT_EMAIL \
-p 3000:3000 \
cyrof/kn-folio:latestFor full Docker-specific instructions, see the Docker Hub README.
GitHub Actions are used to:
- Bump & tag releases on merges into
stable - Build & push Docker images for both
vX.Y.Zandlatesttags. Configuration lives in.github/workflows/.
This project is licensed under the Apache V2 License.
Built with ❤️ and coffee ☕ by Cyrof.