<!-- mobian-agent-page publisher="dailydev" canonical="https://daily.dev/posts/i-built-a-terminal-based-portfolio-you-can-access-via-ssh-4qn79zov9" -->

---
title: I Built a Terminal-Based Portfolio You Can Access via SSH
description: A developer created an innovative terminal-based portfolio accessible via SSH using React Ink for the UI and a custom Go SSH server. The project combines React...
canonical: https://daily.dev/posts/i-built-a-terminal-based-portfolio-you-can-access-via-ssh-4qn79zov9
twitter:card: summary_large_image
twitter:site: @dailydotdev
og:type: website
og:site_name: daily.dev
og:title: I Built a Terminal-Based Portfolio You Can Access via SSH | daily.dev
og:description: A developer created an innovative terminal-based portfolio accessible via SSH using React Ink for the UI and a custom Go SSH server. The project combines React...
og:url: https://daily.dev/posts/i-built-a-terminal-based-portfolio-you-can-access-via-ssh-4qn79zov9
og:image: https://api.daily.dev/og/posts/4qn79Zov9.png
og:image:alt: I Built a Terminal-Based Portfolio You Can Access via SSH
og:image:width: 1200
og:image:height: 630
og:locale: en
---

> ## Documentation Index
> Fetch the complete documentation index at: https://daily.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# I Built a Terminal-Based Portfolio You Can Access via SSH

**[WebDev](https://daily.dev/sources/webdev)** · [@gugocharade](https://daily.dev/gugocharade) · 2 min read · 524 upvotes · 125 comments

## Summary

A developer created an innovative terminal-based portfolio accessible via SSH using React Ink for the UI and a custom Go SSH server. The project combines React components with terminal interfaces, allowing users to explore a portfolio directly from their command line without needing a browser. The setup runs on a VPS and demonstrates creative ways to showcase developer work by meeting developers in their native environment.

## Content

While watching a Supabase documentary, I stumbled upon something unusual,  a terminal-based coffee shop called [@terminaldotshop](https://x.com/terminaldotshop). You explore it entirely through SSH.

It was weird. It was brilliant.

And it instantly sparked an idea:

> *"What if I could create a developer portfolio you can open entirely from your terminal?"*

So I built **[terminalfolio.xyz](http://terminalfolio.xyz)**.
Yes, you can connect to it using:

```bash

  ssh terminalfolio.xyz

```

No browser. No CSS. Just your terminal.

---

### 🛠️ Tech Stack Breakdown

To bring this idea to life, I combined some of my favorite tools:

#### 🧠 **React + Ink**

I built the terminal UI using [Ink](https://github.com/vadimdemedes/ink), a React-like library for building interactive CLIs. This allowed me to structure my interface using familiar React components.

Imagine combining `useState()` with `Box`, `Text`, and even routing logic, all in your terminal!

#### 🖥️ **Golang SSH Server**

To make the app accessible via `ssh terminalfolio.xyz`, I created a custom SSH server in **Go**. It handles the connection, launches the React-based CLI app, and gives users a seamless experience as if they're exploring a real terminal app.

#### 🌐 **VPS Hosting**

I deployed the whole setup on a Linux VPS. It runs a Go SSH server that boots up the Ink app whenever someone connects via SSH.

---

### 🧪 Challenges Faced

* **Rendering dynamic UIs in a terminal**: Ink’s abstraction helped a lot, but designing UX for a CLI is a very different mindset.
* **SSH UX**: Unlike websites, you don’t have `hover`, `scroll`, or smooth navigation. It had to feel native to the command line.

---

### ✨ Why Build a Terminal Portfolio?

* Developers **live** in terminals, why not meet them there?
* It stands out. When you send someone your portfolio and say:
  *“Just SSH into it.”*
  You can bet they’ll remember.
* It was a fun way to mix **React**, **Golang**, and **low-level networking** — and just build for fun.

---

### 💡 Give It a Try

If you’re curious, spin it up from your terminal:

```bash
ssh terminalfolio.xyz
```

And if you’re building something weird and wonderful — I’d love to see it. Let’s keep the web (and terminal) fun.

---

Follow me here or on [X/Twitter](https://x.com/gugocharade)

## Community discussion

Top comments from developers on daily.dev.

**@gustavosbarreto** · 23 upvotes

> This is absolutely brilliant! I'm actually working on something similar right now. It's super inspiring to see others exploring the power of the terminal and SSH. Once I finish mine, I'd love to share it with you if you're interested. Keep up the awesome work!

**@ccbikai** · 12 upvotes

> I implemented an AI Chat using the same approach as you
>
> https://github.com/ccbikai/ssh-ai-chat

**@bdhamithkumara** · 3 upvotes

> wow

**@osint619** · 3 upvotes

> I made mine a while back, I like your use of SSH, though!
>
> https://v0-new-project-erfw19xyvai.vercel.app/

**@ramijames** · 3 upvotes

> This is cool

## Similar posts on daily.dev

- [Don’t just attend KubeCon \+ CloudNativeCon, Merge Forward your experience\!](https://daily.dev/posts/don-t-just-attend-kubecon-cloudnativecon-merge-forward-your-experience--l0rpp73x8) · CNCF · 1 upvotes · 0 comments
- [Announcing H2 2026 KCDs](https://daily.dev/posts/announcing-h2-2026-kcds-m96goajm1) · CNCF · 1 upvotes · 0 comments
- [Two months of Open Community Groups](https://daily.dev/posts/two-months-of-open-community-groups-asf52zhbs) · CNCF · 0 upvotes · 0 comments
- [CNCF Unveils Schedule for KubeCon \+ CloudNativeCon Europe 2026](https://daily.dev/posts/cncf-unveils-schedule-for-kubecon-cloudnativecon-europe-2026-ikhcoa5cb) · CNCF · 2 upvotes · 0 comments
- [CNCF Debuts KubeCon \+ CloudNativeCon Japan 2026 Schedule](https://daily.dev/posts/cncf-debuts-kubecon-cloudnativecon-japan-2026-schedule-xp5pyudub) · CNCF · 1 upvotes · 0 comments

---

Tags: [#react](https://daily.dev/tags/react), [#golang](https://daily.dev/tags/golang), [#cli](https://daily.dev/tags/cli), [#ssh](https://daily.dev/tags/ssh)

[View this post on daily.dev](https://daily.dev/posts/i-built-a-terminal-based-portfolio-you-can-access-via-ssh-4qn79zov9)

```json
{"@context":"https://schema.org","@graph":[{"@type":"Organization","@id":"https://daily.dev/#organization","name":"daily.dev","url":"https://daily.dev","logo":{"@type":"ImageObject","url":"https://daily.dev/apple-touch-icon.png","width":180,"height":180},"sameAs":["https://twitter.com/dailydotdev","https://github.com/dailydotdev","https://www.linkedin.com/company/daily-dev-ltd"]},{"@type":"WebSite","@id":"https://daily.dev/#website","url":"https://daily.dev","name":"daily.dev","publisher":{"@id":"https://daily.dev/#organization"},"potentialAction":{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https://daily.dev/search?q={search_term_string}"},"query-input":"required name=search_term_string"}}]}
{"@context":"https://schema.org","@type":"DiscussionForumPosting","mainEntityOfPage":"https://daily.dev/posts/i-built-a-terminal-based-portfolio-you-can-access-via-ssh-4qn79zov9","headline":"I Built a Terminal-Based Portfolio You Can Access via SSH","text":"A developer created an innovative terminal-based portfolio accessible via SSH using React Ink for the UI and a custom Go SSH server. The project combines React components with terminal interfaces, allowing users to explore a portfolio directly from their command line without needing a browser. The setup runs on a VPS and demonstrates creative ways to showcase developer work by meeting developers in their native environment.","url":"https://daily.dev/posts/i-built-a-terminal-based-portfolio-you-can-access-via-ssh-4qn79zov9","datePublished":"2025-06-18T13:27:56.072Z","dateModified":"2025-06-18T13:28:16.175Z","author":{"@type":"Person","name":"Abde Laziz","url":"https://daily.dev/gugocharade","image":"https://avatars.githubusercontent.com/u/35660050?v=4","interactionStatistic":{"@type":"InteractionCounter","interactionType":{"@type":"EndorseAction"},"userInteractionCount":1400}},"image":"https://media.daily.dev/image/upload/s--6CZbRLW5--/f_auto/v1750250884/posts/3yRYvItwE?_a=BAMClqUq0","interactionStatistic":[{"@type":"InteractionCounter","interactionType":{"@type":"LikeAction"},"userInteractionCount":524},{"@type":"InteractionCounter","interactionType":{"@type":"CommentAction"},"userInteractionCount":125}],"comment":[{"@type":"Comment","text":"This is absolutely brilliant! I’m actually working on something similar right now. It’s super inspiring to see others exploring the power of the terminal and SSH. Once I finish mine, I’d love to share it with you if you’re interested. Keep up the awesome work!","datePublished":"2025-06-18T17:31:52.885Z","url":"https://daily.dev/posts/4qn79Zov9#c-Y8kWClJM0","author":{"@type":"Person","name":"Luis Gustavo S. Barreto","url":"https://daily.dev/gustavosbarreto","image":"https://media.daily.dev/image/upload/s--zg_idgq8--/f_auto/v1750268293/avatars/avatar_cRoHoqNKQwNbsHJXP9drT?_a=BAMClqZW0"},"interactionStatistic":{"@type":"InteractionCounter","interactionType":{"@type":"LikeAction"},"userInteractionCount":23}},{"@type":"Comment","text":"I implemented an AI Chat using the same approach as you\nhttps://github.com/ccbikai/ssh-ai-chat","datePublished":"2025-06-19T02:23:17.650Z","url":"https://daily.dev/posts/4qn79Zov9#c-DgmHQ7xeA","author":{"@type":"Person","name":"MT","url":"https://daily.dev/ccbikai","image":"https://media.daily.dev/image/upload/v1682045849/avatars/avatar_9RoQWBmlzvPWfOvff9Knw.jpg"},"interactionStatistic":{"@type":"InteractionCounter","interactionType":{"@type":"LikeAction"},"userInteractionCount":12}},{"@type":"Comment","text":"wow","datePublished":"2025-06-19T04:53:12.254Z","url":"https://daily.dev/posts/4qn79Zov9#c-Sv9QPATBP","author":{"@type":"Person","name":"Dhamith Kumara","url":"https://daily.dev/bdhamithkumara","image":"https://avatars.githubusercontent.com/u/67802429?v=4"},"interactionStatistic":{"@type":"InteractionCounter","interactionType":{"@type":"LikeAction"},"userInteractionCount":3}},{"@type":"Comment","text":"I made mine a while back, I like your use of SSH, though!\nhttps://v0-new-project-erfw19xyvai.vercel.app/","datePublished":"2025-07-02T23:11:48.542Z","url":"https://daily.dev/posts/4qn79Zov9#c-ZSbk8ISjH","author":{"@type":"Person","name":"Patrick Dunn","url":"https://daily.dev/osint619","image":"https://media.daily.dev/image/upload/s--BbJlKy99--/f_auto/v1754840676/avatars/avatar_gkUQR16I9pxQyUm1lV0cR?_a=BAMClqZW0"},"interactionStatistic":{"@type":"InteractionCounter","interactionType":{"@type":"LikeAction"},"userInteractionCount":3}},{"@type":"Comment","text":"This is cool","datePublished":"2025-06-18T22:19:39.755Z","url":"https://daily.dev/posts/4qn79Zov9#c-e5dETw6dT","author":{"@type":"Person","name":"Rami James","url":"https://daily.dev/ramijames","image":"https://lh3.googleusercontent.com/a/ACg8ocKDMb5zFAzVhNBh64tS4JP2a9NcHJNtZXJIC338f484eJQ=s96-c"},"interactionStatistic":{"@type":"InteractionCounter","interactionType":{"@type":"LikeAction"},"userInteractionCount":3}}],"isPartOf":{"@type":"WebPage","url":"https://daily.dev/squads/webdev","name":"WebDev"}}
{"@context":"https://schema.org","@type":"BreadcrumbList","itemListElement":[{"@type":"ListItem","position":1,"name":"Home","item":"https://daily.dev"},{"@type":"ListItem","position":2,"name":"WebDev","item":"https://daily.dev/squads/webdev"},{"@type":"ListItem","position":3,"name":"I Built a Terminal-Based Portfolio You Can Access via SSH"}]}
```

