---
id: w5/m15/t001
title: Route /services/new + source picker (GitHub repo · public Git URL · existing image)
worker: worker5
status: todo
estimate: 40m
depends_on: []
---

## Objective

Scaffold the wizard: a `/services/new` route reachable from a "New +" button on the services list, opening with Render's source choice — **GitHub repository** (list, needs connection), **Public Git Repository** (URL input; note auto-deploy needs a webhook/connection), **Existing Image** (image ref input).

## Context

- Read `dashboard/CLAUDE.md` first; TanStack Start routes in `dashboard/src/routes/`, feature code in `features/`.
- Layout precedent: w5/m12's full-page `/keyvalue/new` (matching Render's own new-resource pages) rather than a dialog.
- Render reference: `/web/new` offers exactly these three sources (docs `render.com/docs/web-services`); capture happens in t005.
- i18n for all strings; shadcn tabs/cards.

## Steps

1. Route + page shell + "New +" entry point on the services list.
2. Source tabs with per-source input stubs; selected source carried in wizard state.
3. Public-URL and image tabs fully wired to t003's form (they need no GitHub connection).

## Files

- `dashboard/src/routes/services.new.tsx` (or route-tree equivalent)
- `dashboard/src/features/services/create/` (new)

## Acceptance criteria

- [ ] Route renders with three source tabs; entry button on the list page
- [ ] Source selection persists into the next step

## Out of scope

- Repo listing (t002), form fields (t003), submission (t004)
