# I used Claude Code to Build a NextJS Directory Site with Zapier-like Programmatic SEO

## **One line Intro**

I have been building this almost entirely with claude code(99%) from last few days. - [https://mcpstack.org/](https://mcpstack.org/)

## **What did i built?**

[I built](https://mcpstack.org/) a Resource site for finding MCP Resources(servers, clients, tools, how-tos). It's a Nex[tJS App hosted on Vercel right now. I am](https://mcpstack.org/) mainly a Python/Django Developer so claude code is almost doing everything here.

## **What's claude code's role?**

* write the code(&gt;99% is written by claude code)
    
* bootstrap the MCP resource databas[e with actual data. C](https://mcpstack.org/)laude cod[e did most of this. i](https://mcpstack.org/) did very little hand holding
    
* [build programmati](https://mcpstack.org/)c SEO(a la Zapier style) - MCP Stack has now close to 1500 servers, clients and tools and 65,000+ [programmatic SEO "us](https://mcpstack.org/)e'&lt;mcp-server&gt;with&lt;mcp-client&gt;' how-to pages with no hard coding all being handled by nextjs routing with all code written by claude code.
    
* claude code resolves the build issues
    
* claude code adds new MCP items - i just have to provide the link.
    

## **This was my process. from the beginning**

neve[r give claude code a](https://mcpstack.org/) blank state if you want it to do a good job. So [I created a simple ne](https://mcpstack.org/)xtjs with single com[mand](https://mcpstack.org/)

[`npx create-next`](https://mcpstack.org/)`-app@latest`

This narrows down the search space for claude code.

After that i pointed it to MCP Of[ficial ReadMe and com](https://mcpstack.org/)e out w[ith a plan to build a](https://mcpstack.org/) directory site. This is importa[nt, always ask it to](https://mcpstack.org/) plan first before execution.

I review the plan , ask it for some changes and then ask it to execute the plan.

Then it's an iterative process.

[For example, the dat](https://mcpstack.org/)astore it came with was a google sheets. This caused performa[nce issues. So i aske](https://mcpstack.org/)d it to give [me other options. I](https://mcpstack.org/) chose .md files and refactored the whole thing, including data export beautifully.

## This is the list of my sub-agents

![](https://cdn.hashnode.com/res/hashnode/image/upload/v1755916853168/b95484a0-b722-4fe8-aa4d-7ce762191106.png align="center")

One thing I have noticed is Claude Code seems to by default you are on Mac/Lin[ux kind of environmen](https://mcpstack.org/)t and finds it [difficult to find and](https://mcpstack.org/) run appropriate commands to run by default on Windows - I have to assume Claude Code team mostly uses mac or linux hence the oversight.

  
So added some context for this in m user level CLAUDE .md

```bash
# User Environment Configuration

## Platform Information
- **Operating System**: Windows
- **Shell**: PowerShell (not Linux/Mac terminal)
- **Command Style**: Use PowerShell cmdlets and Windows commands

## PowerShell Command Discovery

### Listing Available Commands
- `Get-Command` - Lists all available cmdlets, functions, aliases, and applications
- `Get-Command | Out-GridView` - Searchable GUI for all commands
- `Get-Command Get-*` - Filter commands starting with 'Get-'
- `Get-Module -ListAvailable` - Lists all installed modules
- `Get-Command -Module <ModuleName>` - Lists commands from specific module
- `Get-Command -Type Application` - Lists traditional Windows commands (ipconfig, dir, etc.)

### Getting Help
- `Get-Help <command-name>` - Basic command help
- `Get-Help <command-name> -Detailed` - Detailed help with examples
- `Get-Help <command-name> -Examples` - Just usage examples
- `Get-Help <command-name> -Online` - Opens web documentation
- `Update-Help` - Updates local help files (may require admin)

## Windows Tool Alternatives

### JSON Handling
- Use `ConvertFrom-Json` and `ConvertTo-Json` instead of `jq`
- If `jq` needed: `winget install jq`
- Alternative: Enable WSL for Linux tool compatibility

### Common Commands
- Use `dir` or `Get-ChildItem` instead of `ls`
- Use `type` or `Get-Content` instead of `cat`
- Use `where` or `Get-Command` instead of `which`

## Reference Resources
- [PowerShell Cmdlets Documentation](https://learn.microsoft.com/en-us/powershell/module/microsoft.powershell.core/?view=powershell-7.4)
- [Windows Commands Reference](https://learn.microsoft.com/en-us/windows-server/administration/windows-commands/windows-commands)
- [PowerShell Community Resources](https://www.pdq.com/powershell/)
```
