# Creating the project

URL: /code/learn/creating-the-project · Id: `page:code/learn/creating-the-project`

> Tutorial 1 of 12 creates Leaseline from the Solo SaaS template and reads the three lines of startup.ts that define it.

A [Startup](/business/nouns/startup) project starts as one command and one file. Everything the file does not say comes from its [Startup Template](/business/nouns/startup-template).

## What you build
You create `leaseline.app` in test from the [Solo SaaS](/start/templates/solo-saas) template, then read what it already holds: a [Site](/business/nouns/site), an [Offer](/business/nouns/offer), [Roles](/business/nouns/role) and [processes](/business/nouns/process). No card is charged and no message leaves while the Startup is in test.

## Steps
1. To create the Startup, run `create startups` with a template:

   ```bash
   npm create startups leaseline.app -- --template solo-saas --yes
   ```

   ```text
   Created Leaseline in test
     Startup      startup_l3hr1EnUGY
     State        Idea
     Template     Solo SaaS
     Offer        offer_2hzYe1ERo0, Pro at $29 a month, draft
     Claim token  ct_7Hq2xV
   Next: cat leaseline/startup.ts
   ```

   Keep the claim token: [tutorial 12](/code/learn/launching-leaseline) claims the Startup with it.

2. To read the Startup as code, open its root file:

   ```ts title="startup.ts"
   import { Startup } from 'startup-builder'

   export default Startup({
     name: 'Leaseline',
     domain: 'leaseline.app',
     extends: 'solo-saas',
   })
   ```

   The file is parsed, never run. [startup.ts](/code/startup-ts) lists every key it takes.

3. To state the bet, add the idea and the five slots of the [Founding Hypothesis](/business/founding-hypothesis):

   ```ts title="startup.ts"
   import { Startup } from 'startup-builder'

   export default Startup({
     name: 'Leaseline',
     domain: 'leaseline.app',
     extends: 'solo-saas',
     idea: 'Lease renewal tracking for property managers with 20 to 500 units.',
     hypothesis: {
       customer: 'Property managers with 20 to 500 units',
       problem: 'Lease renewals that slip past their date',
       approach: 'A SaaS that tracks every lease and sends each renewal notice at 60 days',
       switch: 'The renewal spreadsheet and calendar reminders',
       differentiation: 'Every renewal answered before its date, unit by unit',
     },
   })
   ```

4. To start the dev server, which previews each save as a [Change](/business/nouns/change), run:

   ```bash
   npx startup-builder dev
   ```

5. To see everything the Startup holds, its own and inherited, print its root:

   ```bash
   npx startup-builder show /
   ```

## Result
Leaseline exists in test with a Site, a draft `pro` Offer, the Roles and [Processes](/business/nouns/process) of Solo SaaS, and a hypothesis in five slots. The project holds one file of its own. Checkpoint `leaseline@ch01` (status `planned`) holds `startup.ts`.

## Next steps
- [Tutorial 2](/code/learn/declaring-the-lease-noun) adds the business's own [Noun](/business/nouns/noun).
- [Folders](/code/project-structure): every folder the next tutorials fill.