Skip to content

Commit cac0577

Browse files
solrevdevclaude
andcommitted
feat: add blog post about SeedFolder evolution with GitHub Copilot
- Add new blog post about SeedFolder's transformation from simple dotfile copier to multi-template system - Document GitHub Copilot's role in accelerating development - Cover .NET LTS upgrades, multi-targeting, and enhanced user experience - Update original 2020 blog post to link to new evolution post - Include examples of current CLI usage and future marketplace plans Related to documenting the journey of improving a .NET global tool with AI assistance. 🤖 Generated with [Claude Code](https://claude.ai/code) Co-Authored-By: Claude <[email protected]>
1 parent c7b99ed commit cac0577

File tree

2 files changed

+261
-0
lines changed

2 files changed

+261
-0
lines changed

_posts/2020-10-05-creating-a.net-core-global-tool.md

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -181,6 +181,12 @@ jobs:
181181
PACKAGE_NAME: solrevdev.seedfolder
182182
```
183183
184+
**Evolution and Updates** 🔄
185+
186+
Since publishing this post, SeedFolder has evolved significantly! The tool now supports multiple project templates, cross-platform compatibility, and has been enhanced with the help of GitHub Copilot.
187+
188+
Read about the journey from a simple dotfile copier to a comprehensive project scaffolding tool in my follow-up post: [Evolving SeedFolder with GitHub Copilot - From Personal Tool to Multi-Template System](/2025/08/20/evolving-seedfolder-with-github-copilot.html).
189+
184190
**Find More** 🔍
185191
186192
Now that you have built and published a .NET Core Global Tool you may wish to find some others for inspiration.
Lines changed: 255 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,255 @@
1+
---
2+
layout: post
3+
title: Evolving SeedFolder with GitHub Copilot - From Personal Tool to Multi-Template System
4+
description: How GitHub Copilot helped transform a simple dotfile copier into a comprehensive project scaffolding tool with multiple templates and cross-platform support
5+
tags:
6+
- dotnet-global-tools
7+
- github-copilot
8+
- dotnet
9+
- csharp
10+
- productivity
11+
- templates
12+
13+
---
14+
**Overview**
15+
16+
It's been over 4 years since I first published my [.NET Core Global Tool](/2020/10/05/creating-a.net-core-global-tool.html) blog post about creating SeedFolder. What started as a simple tool to copy my personal dotfiles has evolved into something much more powerful and useful to the broader developer community.
17+
18+
The original version was quite limited - it basically just copied my specific `.editorconfig`, `.gitignore`, and other dotfiles to new project folders. While this was useful for me, it wasn't particularly helpful to other developers who might have different preferences or work with different technology stacks.
19+
20+
**The Evolution Journey** 🌱
21+
22+
Over the years, I've made several significant improvements to SeedFolder, particularly leveraging GitHub Copilot to help accelerate development and implement features I might not have found time to build otherwise.
23+
24+
**Upgrading Through .NET LTS Versions** ⬆️
25+
26+
One of the consistent maintenance tasks has been keeping the tool updated with each .NET LTS release. For example, [upgrading to .NET 7](https://github.com/solrevdev/seedfolder/pull/4) involved updating the target framework and ensuring compatibility:
27+
28+
```xml
29+
<Project Sdk="Microsoft.NET.Sdk">
30+
<PropertyGroup>
31+
<OutputType>Exe</OutputType>
32+
<TargetFramework>net8.0</TargetFramework>
33+
<!-- Multi-targeting for backward compatibility -->
34+
<TargetFrameworks>net6.0;net7.0;net8.0</TargetFrameworks>
35+
36+
<PackAsTool>true</PackAsTool>
37+
<ToolCommandName>seedfolder</ToolCommandName>
38+
<!-- ... other properties -->
39+
</PropertyGroup>
40+
</Project>
41+
```
42+
43+
The tool now uses multi-targeting to support various .NET SDKs, ensuring users can install and use it regardless of which .NET version they have installed.
44+
45+
**GitHub Copilot as a Development Partner** 🤖
46+
47+
The real transformation happened when I started using GitHub Copilot - both from the web interface and my iOS app - to help implement more ambitious features. This was a game-changer for a side project that I rarely had dedicated time to improve.
48+
49+
Here's how the process typically worked:
50+
51+
1. **Issue Creation**: I'd create a GitHub issue describing what I wanted to achieve
52+
2. **Copilot Collaboration**: Using GitHub Copilot from the web or iOS app, I'd work through the implementation
53+
3. **Iterative Development**: Copilot would suggest implementations, and we'd refine them together
54+
55+
For example, [Issue #9](https://github.com/solrevdev/seedfolder/issues/9) outlined a comprehensive roadmap for turning SeedFolder into a proper template system. What would have taken me weeks to implement manually, Copilot helped me accomplish in focused sessions.
56+
57+
**From Single Template to Multi-Template System** 📂
58+
59+
The biggest transformation was moving from a single set of dotfiles to a comprehensive template system. [Pull Request #10](https://github.com/solrevdev/seedfolder/pull/10) introduced support for six different project types:
60+
61+
```bash
62+
# Interactive mode - prompts for template selection
63+
seedfolder
64+
65+
# Specific template usage
66+
seedfolder --template dotnet MyNewProject
67+
seedfolder --template node MyNodeApp
68+
seedfolder --template python data-analysis
69+
seedfolder --template ruby rails-app
70+
seedfolder --template markdown blog-posts
71+
seedfolder --template universal generic-project
72+
73+
# Preview what would be created
74+
seedfolder --dry-run --template node MyApp
75+
```
76+
77+
Each template now includes carefully curated files appropriate for that project type:
78+
79+
- **dotnet**: .editorconfig, .gitignore for C#, omnisharp.json
80+
- **node**: package.json template, .nvmrc, npm-specific .gitignore
81+
- **python**: requirements.txt, .python-version, Python .gitignore
82+
- **ruby**: Gemfile template, .ruby-version, Ruby .gitignore
83+
- **markdown**: Basic structure for documentation projects
84+
- **universal**: Generic files useful across all project types
85+
86+
**Enhanced User Experience**
87+
88+
The tool is now much more user-friendly and customizable. Some key improvements include:
89+
90+
**Interactive Mode**:
91+
```bash
92+
$ seedfolder
93+
? Select a project template: (Use arrow keys)
94+
❯ dotnet - .NET applications with C# configuration
95+
node - Node.js applications with npm setup
96+
python - Python projects with pip requirements
97+
ruby - Ruby applications with Bundler setup
98+
markdown - Documentation and static sites
99+
universal - Generic template for any project type
100+
```
101+
102+
**Better CLI Interface**:
103+
```bash
104+
# All the standard options you'd expect
105+
seedfolder --help
106+
seedfolder --version
107+
seedfolder --list-templates
108+
seedfolder --template dotnet --output ./projects MyApi
109+
```
110+
111+
**Cross-Platform Compatibility**: The tool now works seamlessly across Windows, macOS, and Linux, with platform-specific optimizations.
112+
113+
**Improved CI/CD Pipeline** 🔄
114+
115+
[Pull Request #16](https://github.com/solrevdev/seedfolder/pull/16) addressed CI workflow issues and simplified the build process:
116+
117+
```yaml
118+
# Simplified from complex matrix to reliable single job
119+
name: CI
120+
on:
121+
push:
122+
branches: [ master ]
123+
pull_request:
124+
branches: [ master ]
125+
126+
jobs:
127+
build:
128+
runs-on: ubuntu-latest
129+
steps:
130+
- uses: actions/checkout@v3
131+
132+
- name: Setup .NET
133+
uses: actions/setup-dotnet@v3
134+
with:
135+
dotnet-version: |
136+
6.0.x
137+
7.0.x
138+
8.0.x
139+
140+
- name: Build and Test
141+
run: |
142+
dotnet build --configuration Release
143+
dotnet test --configuration Release --no-build
144+
145+
- name: Pack and Publish
146+
if: github.ref == 'refs/heads/master'
147+
run: |
148+
dotnet pack --configuration Release --no-build
149+
dotnet nuget push "**/*.nupkg" --api-key ${{ secrets.NUGET_API_KEY }}
150+
```
151+
152+
**The Power of AI-Assisted Development** 🚀
153+
154+
What I found particularly interesting about working with GitHub Copilot was how it helped me think through problems I might not have tackled otherwise. For instance:
155+
156+
- **Error Handling**: Copilot suggested comprehensive error handling patterns I wouldn't have thought to implement
157+
- **Cross-Platform Considerations**: It caught platform-specific issues early in development
158+
- **User Experience**: Proposed CLI interface improvements that made the tool much more pleasant to use
159+
- **Testing Strategies**: Suggested test cases and scenarios I hadn't considered
160+
161+
Here's an example of how Copilot helped implement the template selection logic:
162+
163+
```csharp
164+
public static class TemplateManager
165+
{
166+
private static readonly Dictionary<string, TemplateInfo> Templates = new()
167+
{
168+
["dotnet"] = new("dotnet", ".NET applications with C# configuration",
169+
new[] { ".editorconfig", ".gitignore", "omnisharp.json" }),
170+
["node"] = new("node", "Node.js applications with npm setup",
171+
new[] { "package.json", ".nvmrc", ".gitignore" }),
172+
// ... other templates
173+
};
174+
175+
public static TemplateInfo GetTemplate(string name)
176+
{
177+
return Templates.TryGetValue(name.ToLowerInvariant(), out var template)
178+
? template
179+
: throw new ArgumentException($"Template '{name}' not found");
180+
}
181+
182+
public static void ListTemplates()
183+
{
184+
foreach (var (key, template) in Templates)
185+
{
186+
Console.WriteLine($" {key,-12} - {template.Description}");
187+
}
188+
}
189+
}
190+
```
191+
192+
**Next Steps: The Marketplace Vision** 🏪
193+
194+
The next major evolution is planned around [Issue #15](https://github.com/solrevdev/seedfolder/issues/15) - creating a template marketplace. This will allow the community to share and install custom templates:
195+
196+
```bash
197+
# Future marketplace commands
198+
seedfolder marketplace search angular
199+
seedfolder marketplace install solrevdev/vue-typescript
200+
seedfolder marketplace list --installed
201+
seedfolder marketplace update
202+
```
203+
204+
The marketplace will be hosted as a separate GitHub repository at `solrevdev/seedfolder-marketplace` with this structure:
205+
206+
```
207+
solrevdev/seedfolder-marketplace/
208+
├── templates/
209+
│ ├── angular/
210+
│ │ ├── template.json
211+
│ │ └── files/
212+
│ ├── vue/
213+
│ └── rust/
214+
├── registry.json
215+
└── README.md
216+
```
217+
218+
This will enable developers to:
219+
- Share their own project templates
220+
- Override built-in templates with their preferences
221+
- Fork the marketplace for team-specific template collections
222+
- Contribute improvements back to the community
223+
224+
**Installation and Usage Today** 📦
225+
226+
The current version is available on NuGet and much more capable than the original:
227+
228+
```bash
229+
# Install the latest version
230+
dotnet tool install --global solrevdev.seedfolder
231+
232+
# Create a new .NET project with proper scaffolding
233+
seedfolder --template dotnet MyWebApi
234+
235+
# Interactive mode for template selection
236+
seedfolder MyNewProject
237+
238+
# See all available options
239+
seedfolder --help
240+
```
241+
242+
**Lessons Learned** 💡
243+
244+
Working on SeedFolder's evolution taught me several valuable lessons:
245+
246+
1. **AI as a Coding Partner**: GitHub Copilot isn't just an autocomplete tool - it's a thinking partner that can help you explore solutions you might not consider
247+
2. **Incremental Improvement**: Small, consistent improvements over time can transform a simple tool into something genuinely useful
248+
3. **Community Focus**: Building for your own needs first is fine, but thinking about broader use cases makes tools more valuable
249+
4. **Template Systems**: Flexibility through templates is much more powerful than hardcoded configurations
250+
251+
The transformation from a personal dotfile copier to a comprehensive project scaffolding tool shows how AI assistance can help maintain and evolve side projects that might otherwise stagnate.
252+
253+
Watch out for the next steps as I work on the marketplace functionality - the goal is to make SeedFolder not just more useful, but a platform for the community to share their own project setup best practices.
254+
255+
Success! 🎉

0 commit comments

Comments
 (0)