Skip to main content

Quickstart Guide

Get your SSH portfolio running in under 5 minutes with Docker or Go.

Prerequisites

Choose one:
  • Docker: Docker installed (recommended for quick start)
  • Go: Go 1.24+ installed
1

Clone the repository

git clone https://github.com/ab-70/ssh-portfolio.git
cd ssh-portfolio
2

Edit the configuration

Open config.yaml and replace the example data with your own:
config.yaml
name: "Your Name"
title: "Your Title"
ascii_art: |
  Your ASCII art here
  (or remove this section)
intro: |
  Your introduction text.
  Tell visitors about yourself.

skills:
  - category: "Languages"
    items:
      - name: "Go"
        level: 5  # 1-5 proficiency level
      - name: "Python"
        level: 4

  - category: "Tools"
    items:
      - "Docker"  # Simple list without levels
      - "Kubernetes"

projects:
  - name: "Project Name"
    description: "Brief description of what this project does."
    tech: ["Go", "Docker", "SSH"]
    url: "https://github.com/yourusername/project"

contact:
  email: "[email protected]"
  github: "https://github.com/yourusername"
  linkedin: "https://linkedin.com/in/yourusername"
  website: "https://yourwebsite.com"
  twitter: "https://twitter.com/yourusername"
See the full example in the source code at config.yaml (lines 1-96) for a complete reference with ASCII art and multiple projects.
3

Run with Docker Compose

docker-compose up -d
This will:
  • Build the Docker image from the Dockerfile
  • Start the SSH server on port 22
  • Create a persistent volume for SSH keys
  • Run in the background
The default docker-compose.yml exposes port 22. If you’re already running SSH on port 22, edit the file to use a different port:
ports:
  - "2222:22"  # Use port 2222 instead
4

Connect via SSH

ssh localhost -p 22
Or if you changed the port:
ssh localhost -p 2222
You should see your portfolio’s home screen with ASCII art, your title, and introduction!

Option 2: Run with Go

1

Clone and navigate

git clone https://github.com/ab-70/ssh-portfolio.git
cd ssh-portfolio
2

Edit config.yaml

Follow the configuration example in Option 1, Step 2 above.
3

Install dependencies and run

go mod download
go run main.go
You’ll see output like:
Starting SSH portfolio server on 0.0.0.0:2222
Connect with: ssh localhost -p 2222
The server runs on port 2222 by default. Set the SSH_PORT environment variable to use a different port:
SSH_PORT=3000 go run main.go
4

Connect via SSH

In a new terminal:
ssh localhost -p 2222
Once connected, use these keyboard shortcuts:
  • ← → or h l: Navigate between pages (Home, Skills, Projects, Contact)
  • ↑ ↓ or k j: Scroll through skills or projects
  • q or Ctrl+C: Quit

What You’ll See

Your portfolio has four pages:
  • ASCII art header (optional)
  • Your name and title
  • Introduction text
  • Navigation hints

Next Steps

Configuration Deep Dive

Learn about all config.yaml options, ASCII art generation, and advanced customization

Deployment Guide

Deploy your SSH portfolio to a VPS, cloud provider, or homelab

Troubleshooting

  • Check that the server is running: docker ps or look for the “Starting SSH portfolio server” message
  • Verify the port: The server prints the port it’s listening on
  • Check firewall rules if connecting from a remote machine
  • Ensure config.yaml exists in the same directory as the binary/main.go
  • Check YAML syntax - use a validator like yamllint
  • Verify file permissions (should be readable)
This is normal for first connection. The server generates host keys automatically in .ssh/id_ed25519. Accept the key or add it to your known_hosts.
Change the port using:
  • Docker: Edit docker-compose.yml ports section
  • Go: Set SSH_PORT environment variable: SSH_PORT=3000 go run main.go

Configuration Example

Here’s the structure from the actual source code config.yaml (simplified):
name: "Abdul Sattar"
title: "Sr. Full-stack Developer"
ascii_art: |
  ███████╗ █████╗ ████████╗████████╗ █████╗ ██████╗
  # ... (ASCII art)
intro: |
  Hi, I am Abdul Sattar!
  Passionate full-stack developer...

skills:
  - category: "Languages"
    items:
      - name: "C#"
        level: 5
      - name: "TypeScript"
        level: 5

projects:
  - name: "2ndLock"
    description: "My personal alternative to Bitwarden..."
    tech: ["NodeJS", "React", "Electron", "ReactNative"]
    url: "https://2ndLock.xyz"

contact:
  email: "[email protected]"
  github: "https://github.com/AB-70"
  linkedin: "https://linkedin.com/in/abdul70"
See config.yaml lines 1-96 for the complete example.

Build docs developers (and LLMs) love