Tools: Stop Babysitting Symlinks: Designing a Safer, Faster TUI Workflow (2026)

Tools: Stop Babysitting Symlinks: Designing a Safer, Faster TUI Workflow (2026)

πŸ“ From ln -s to Intentional Workflows: Building an Interactive Symlink Creator in Go

πŸ”— Explore the Project

⚠️ The Real Issue: Workflow, Not Command

πŸ’‘ The Shift: From Commands β†’ Experience

πŸš€ What is ISC?

Workflow Overview

βš™οΈ Key Capabilities

1. Interactive Directory Navigation

2. Bulk Selection Before Execution

3. Conflict Resolution That Doesn't Break Flow

4. Dry-Run Mode (Critical for Safety)

5. Cleanup for Broken Symlinks

🧠 Design Philosophy

Key Principles

1. Full-Screen TUI Over Prompt-Based CLI

2. Restartable Workflows

3. Keyboard-First Interaction

4. Structured State Over Stateless Commands

πŸ› οΈ Why Go + TUI?

πŸ“‚ Under the Hood

🎯 Who Is This For?

πŸ“Œ What This Project Really Represents

πŸš€ Final Thought Managing symlinks should be trivial. In practice, it's anything but. If you've worked with symlinks long enoughβ€”especially while managing dotfiles, configs, or multi-environment setupsβ€”you've likely fallen into the same repetitive loop: The problem isn't that symlinks are complex.

The problem is that the workflow around them is fragile. You can check out the full project here:https://github.com/KanishkMishra143/Interactive-Symlink-Creator The ln -s command itself is simple. But the moment you scale beyond a single link, things start breaking down: This isn't a tooling problem.It's a workflow design problem. "How do I create symlinks faster?" I reframed the problem: "How do I make symlink creation intentional, safe, and repeatable?" That shift led to building Interactive Symlink Creator (ISC). ISC is a full-screen terminal application that guides you through the entire symlink creation processβ€”from selecting directories to resolving conflictsβ€”without dropping back into raw shell commands. It's built using Go and a TUI framework to create a structured, keyboard-first experience. Everything happens inside a single, continuous interface. Instead of typing long paths manually, ISC provides a two-column navigator for selecting source and destination directories. This reduces both cognitive load and error probability. You don't execute commands one by one. This shifts the workflow from reactive β†’ planned. When conflicts occur, you're not thrown back into the shell. You get structured options: All handled inline, without losing context. Before making any changes, you can simulate the entire operation: This lets you validate decisions without touching the filesystem. A small featureβ€”but high leverage in preventing mistakes. Symlink-heavy environments tend to accumulate broken links over time. ISC includes a cleanup command: This scans and removes broken symlinks recursively. This project wasn't about building another CLI tool.It was about eliminating friction from a recurring workflow. Prompts interrupt flow. A TUI maintains continuity. No abrupt exits. You can restart the entire process seamlessly after completion. Every action is optimized for speed without leaving the keyboard. Traditional CLI usage is statelessβ€”you issue commands and hope for correctness. ISC maintains state across steps: This drastically reduces mental overhead. The initial version was a Bash script. It workedβ€”but hit limits quickly: Rewriting in Go enabled: The TUI layer allowed transforming a command into an experience. The project follows a layered structure: This separation ensures: It's not just a toolβ€”it's designed to be extendable. This wasn't about symlinks. It was about taking a small, annoying, everyday taskβ€”and treating it like a real engineering problem. The outcome isn't just a tool.

It's a pattern: Identify friction β†’ redesign the workflow β†’ build around safety and intent That pattern scales far beyond this project. The best projects aren't always flashy. Sometimes, they're the ones that: And those are often the ones worth building. Templates let you quickly answer FAQs or store snippets for re-use. Hide child comments as well For further actions, you may consider blocking this person and/or reporting abuse

Code Block

Copy

go run . --dry-run create go run . --dry-run create go run . --dry-run create go run . cleanup /path/to/search go run . cleanup /path/to/search go run . cleanup /path/to/search internal/ β”œβ”€β”€ domain/ β”œβ”€β”€ fs/ β”œβ”€β”€ services/ └── ui/ β”œβ”€β”€ components/ β”œβ”€β”€ manager/ └── styles/ internal/ β”œβ”€β”€ domain/ β”œβ”€β”€ fs/ β”œβ”€β”€ services/ └── ui/ β”œβ”€β”€ components/ β”œβ”€β”€ manager/ └── styles/ internal/ β”œβ”€β”€ domain/ β”œβ”€β”€ fs/ β”œβ”€β”€ services/ └── ui/ β”œβ”€β”€ components/ β”œβ”€β”€ manager/ └── styles/ - Double-check source and destination paths - Worry about overwriting something important - Manually resolve conflicts - Repeat the process, carefully, every single time - No structured navigation β†’ long, error-prone paths - No safety layer β†’ easy to overwrite unintentionally - No batch operations β†’ repetitive, manual work - No feedback loop β†’ you don't know what went wrong until it's too late - Choose a source directory - Choose a destination directory - Select files/folders to link (bulk supported) - Handle conflicts interactively - Review results and restart if needed - Select multiple files/folders - Review your selection - Execute in a single pass - What you selected - What conflicts exist - What actions you chose - Hard to scale cleanly - Poor UX for multi-step workflows - Difficult to maintain or extend - Better structure (modular architecture) - Clear separation of concerns - Predictable behavior across environments - Filesystem logic is isolated - UI remains independent - Business logic is reusable - Developers managing dotfiles - Linux users working heavily in terminals - Anyone tired of manually handling symlinks - People who care about safe, repeatable workflows - Remove friction - Reduce mistakes - And quietly make your daily workflow 10x smoother