Skip to content
Merged

Main #27

Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
29 commits
Select commit Hold shift + click to select a range
8c41128
Merge pull request #5 from Atypical-Consulting/dev
phmatray Dec 23, 2024
5fff0fd
Merge pull request #6 from Atypical-Consulting/dev
phmatray Dec 23, 2024
b2e6a2a
docs: include stats
phmatray Dec 28, 2024
994bd43
Merge pull request #7 from Atypical-Consulting/features/repobeats
phmatray Dec 28, 2024
294f44c
chore: Upgrade to .NET 10
phmatray Feb 16, 2026
7768fa9
chore: add Renovate configuration
phmatray Feb 18, 2026
eb422d2
chore: remove Dependabot configuration (switching to Renovate)
phmatray Feb 18, 2026
f65ddbe
chore: remove Qodana configuration
phmatray Feb 26, 2026
2fa4952
docs: standardize README following org template
phmatray Feb 27, 2026
c89e62c
Merge pull request #8 from Atypical-Consulting/chore/upgrade-to-dotnet10
phmatray Feb 27, 2026
b624eef
Merge pull request #9 from Atypical-Consulting/chore/remove-qodana
phmatray Feb 27, 2026
843197a
chore(deps): update dependency nuke.common to 9.0.4
renovate[bot] Feb 27, 2026
0696531
chore(deps): update dotnet monorepo
renovate[bot] Feb 27, 2026
665e2a9
Merge pull request #10 from Atypical-Consulting/readme/standardize-te…
phmatray Feb 27, 2026
02d10b2
Merge pull request #11 from Atypical-Consulting/renovate/nuke-build-m…
phmatray Feb 27, 2026
339178f
Merge pull request #12 from Atypical-Consulting/renovate/dotnet-monorepo
phmatray Feb 27, 2026
0b47b88
chore(deps): update dependency betalgo.ranul.openai to 9.2.6 (#14)
renovate[bot] Feb 28, 2026
40169a3
chore(deps): update dependency scrutor to 5.1.2 (#15)
renovate[bot] Feb 28, 2026
a048b28
chore(deps): update actions/cache action to v5 (#17)
renovate[bot] Feb 28, 2026
94248de
chore(deps): update actions/checkout action to v6 (#18)
renovate[bot] Feb 28, 2026
37d341b
chore(deps): update dependency nuke.common to v10 (#19)
renovate[bot] Feb 28, 2026
8e08e4c
chore(deps): update dependency scrutor to v7 (#20)
renovate[bot] Feb 28, 2026
64a715d
chore(deps): update spectre-console monorepo (#16)
renovate[bot] Feb 28, 2026
40d7abe
chore(deps): update dotnet monorepo to v10 (#21)
renovate[bot] Feb 28, 2026
fcd9c10
fix: remove broken Nuke.Common.IO imports after v10 upgrade (#22)
phmatray Feb 28, 2026
1c6101c
fix: update ExecuteAsync signature for Spectre.Console v1 breaking ch…
phmatray Feb 28, 2026
9a76f9b
ci: restrict triggers to main branch and add concurrency (#24)
phmatray Feb 28, 2026
3701363
chore: configure Renovate auto-merge for patch+minor
phmatray Mar 4, 2026
dd9d8be
chore: add standardized renovate config (#25)
phmatray Mar 9, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
12 changes: 0 additions & 12 deletions .github/dependabot.yml

This file was deleted.

17 changes: 13 additions & 4 deletions .github/workflows/continuous.yml
Original file line number Diff line number Diff line change
Expand Up @@ -16,24 +16,33 @@

name: continuous

on: [push]
on:
push:
branches: [ "main" ]
pull_request:
branches: [ "main" ]

concurrency:
group: ci-${{ github.ref }}
cancel-in-progress: true

jobs:
ubuntu-latest:
name: ubuntu-latest
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/checkout@v6
with:
fetch-depth: 0
- name: Setup dotnet
uses: actions/setup-dotnet@v4
uses: actions/setup-dotnet@v5
with:
dotnet-version: |
8.0.x
9.0.x
10.0.x
- name: 'Cache: .nuke/temp, ~/.nuget/packages'
uses: actions/cache@v4
uses: actions/cache@v5
with:
path: |
.nuke/temp
Expand Down
225 changes: 188 additions & 37 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,49 +1,109 @@
# SalesPitch [![Sparkline](https://stars.medv.io/Atypical-Consulting/SalesPitch.svg)](https://stars.medv.io/Atypical-Consulting/SalesPitch)
# SalesPitch

SalesPitch is a sales pitch generation application using OpenAI GPT-4. Create impactful sales pitches for your products in just a few simple steps.
> **Generate tailored, professional sales pitches in seconds using AI — stop choosing between generic copy and hours of personalization.**

<!-- Badges: Row 1 — Identity -->
[![Atypical-Consulting - SalesPitch](https://img.shields.io/static/v1?label=Atypical-Consulting&message=SalesPitch&color=blue&logo=github)](https://github.com/Atypical-Consulting/SalesPitch)
[![License: MIT](https://img.shields.io/badge/License-MIT-blue.svg)](LICENSE)
[![.NET 9](https://img.shields.io/badge/.NET-9.0-purple?logo=dotnet)](https://dotnet.microsoft.com/)
[![stars - SalesPitch](https://img.shields.io/github/stars/Atypical-Consulting/SalesPitch?style=social)](https://github.com/Atypical-Consulting/SalesPitch)
[![forks - SalesPitch](https://img.shields.io/github/forks/Atypical-Consulting/SalesPitch?style=social)](https://github.com/Atypical-Consulting/SalesPitch)

<!-- Badges: Row 2 — Activity -->
[![GitHub tag](https://img.shields.io/github/tag/Atypical-Consulting/SalesPitch?include_prereleases=&sort=semver&color=blue)](https://github.com/Atypical-Consulting/SalesPitch/releases/)
[![issues - SalesPitch](https://img.shields.io/github/issues/Atypical-Consulting/SalesPitch)](https://github.com/Atypical-Consulting/SalesPitch/issues)
[![GitHub pull requests](https://img.shields.io/github/issues-pr/Atypical-Consulting/SalesPitch)](https://github.com/Atypical-Consulting/SalesPitch/pulls)
[![GitHub last commit](https://img.shields.io/github/last-commit/Atypical-Consulting/SalesPitch)](https://github.com/Atypical-Consulting/SalesPitch/commits/main)

<!-- Badges: Row 3 — Quality -->
[![Build](https://github.com/Atypical-Consulting/SalesPitch/actions/workflows/continuous.yml/badge.svg)](https://github.com/Atypical-Consulting/SalesPitch/actions/workflows/continuous.yml)

---

![SalesPitch](./assets/salespitch.png)

## Features
## Table of Contents

- [The Problem](#the-problem)
- [The Solution](#the-solution)
- [Features](#features)
- [Tech Stack](#tech-stack)
- [Getting Started](#getting-started)
- [Usage](#usage)
- [Architecture](#architecture)
- [Project Structure](#project-structure)
- [Roadmap](#roadmap)
- [Stats](#stats)
- [Contributing](#contributing)
- [License](#license)
- [Acknowledgments](#acknowledgments)

* Interacts with OpenAI GPT-4o to generate sales pitches
* Supports multiple languages (French, English, German, and Spanish)
* Includes various sales pitch frameworks
* AIDA (Attention, Interest, Desire, Action)
* PAS (Problem-Agitate-Solve)
* USP (Unique Selling Proposition)
* Features-Benefits
* Storytelling
* WIIFM (What’s In It For Me)
* Youtility
* FAB (Features, Advantages, Benefits)
* HHE (Headline, Hook, Empathy)
* SUSPENSE (Surprise, Uniqueness, Specifics, Promise, Excitement, Newness, Story)
* User-friendly interface with Spectre.Console
* Ability to use demo data
## The Problem

## Installation
Writing compelling, tailored sales pitches for every prospect is time-consuming. Sales teams either write generic pitches that fail to resonate, or spend hours personalizing each one. Existing tools lack support for proven sales frameworks and multi-language output, forcing teams to manually adapt their messaging for different audiences and markets.

Ensure that you have .NET 9.0 or a later version installed on your machine.
## The Solution

Clone this repository and navigate to the source folder:
**SalesPitch** uses OpenAI GPT-4 to generate tailored, professional sales pitches from minimal input via an interactive CLI. Choose from 10 proven sales frameworks, pick your target language, describe your product, and get a polished pitch in seconds.

```sh
git clone https://github.com/user/SalesPitch.git
cd SalesPitch
dotnet run --configuration Release --project src/SalesPitch

# The interactive CLI will guide you through:
# 1. Select a language (French, English, German, Spanish)
# 2. Choose a sales framework (AIDA, PAS, USP, etc.)
# 3. Describe your product
# 4. Receive a tailored sales pitch powered by GPT-4
```

Install the dependencies and build the project:
## Features

```sh
- [x] AI-powered pitch generation using OpenAI GPT-4o
- [x] 10 proven sales pitch frameworks (AIDA, PAS, USP, Features-Benefits, Storytelling, WIIFM, Youtility, FAB, HHE, SUSPENSE)
- [x] Multi-language support (French, English, German, Spanish)
- [x] Interactive CLI powered by Spectre.Console
- [x] Demo data mode for quick evaluation
- [x] User secrets support for secure API key storage

## Tech Stack

| Layer | Technology |
|-------|-----------|
| Runtime | .NET 9.0 |
| AI | OpenAI GPT-4 via [Betalgo.Ranul.OpenAI](https://github.com/betalgo/openai) 9.x |
| CLI | [Spectre.Console](https://spectreconsole.net/) 0.49 |
| DI | [Scrutor](https://github.com/khellang/Scrutor) 5.x |
| Build | [Nuke](https://nuke.build/) |

## Getting Started

### Prerequisites

- [.NET 9.0 SDK](https://dotnet.microsoft.com/download/dotnet/9.0) or later
- An [OpenAI API key](https://platform.openai.com/signup/)

### Installation

**From Source**

```bash
git clone https://github.com/Atypical-Consulting/SalesPitch.git
cd SalesPitch
dotnet restore
dotnet build --configuration Release
```

## Configuration
### Configuration

Set your OpenAI API key using .NET user secrets (recommended):

1. Obtain an API key from OpenAI ([https://beta.openai.com/signup/](https://beta.openai.com/signup/))
2. Create an `appsettings.json` file at the root of the project with the API key:
```bash
cd src/SalesPitch
dotnet user-secrets set "OpenAIServiceOptions:ApiKey" "<your_openai_api_key>"
dotnet user-secrets set "OpenAIServiceOptions:Organization" "<your_organization_id>"
```

Or create an `appsettings.json` file in the project root:

```json
{
Expand All @@ -56,26 +116,117 @@ dotnet build --configuration Release

## Usage

Run the application using the following command at the root of the project:
Run the application from the repository root:

```sh
dotnet run --configuration Release --project src/SalesPitch
```

The application will guide you through several steps to generate a sales pitch for your product. You can also use the demo data to see how the application works.
The interactive CLI will guide you through several steps to generate a sales pitch for your product. You can also use the demo data to see how the application works.

## Architecture

```
┌─────────────────────────────────────────────────┐
│ CLI Input │
│ (Language, Framework, Product) │
└──────────────────────┬──────────────────────────┘
┌─────────────────────────────────────────────────┐
│ Spectre.Console CLI │
│ (Interactive prompts, rich formatting) │
└──────────────────────┬──────────────────────────┘
┌─────────────────────────────────────────────────┐
│ Language Service Layer │
│ (FR / EN / DE / ES prompt localization) │
└──────────────────────┬──────────────────────────┘
┌─────────────────────────────────────────────────┐
│ OpenAI GPT-4 API │
│ (Betalgo.Ranul.OpenAI SDK) │
└──────────────────────┬──────────────────────────┘
┌─────────────────────────────────────────────────┐
│ Formatted Output │
│ (Sales pitch in chosen language) │
└─────────────────────────────────────────────────┘
```

### Project Structure

```
SalesPitch/
├── src/
│ └── SalesPitch/
│ ├── Commands/ # CLI command definitions and settings
│ ├── Extensions/ # Response extension methods
│ ├── Infrastructure/ # DI type resolver and registrar
│ ├── Services/
│ │ └── Language/ # Language-specific prompt services
│ ├── TypeConverters/ # Custom type converters
│ └── Program.cs # Application entry point
├── build/ # Nuke build automation
├── assets/ # Screenshots and images
├── SalesPitch.sln # Solution file
└── README.md
```

## Roadmap

## Contribution
- [ ] Add more languages (Italian, Portuguese, Japanese, Chinese)
- [ ] Template customization — let users define custom pitch structures
- [ ] Batch generation — generate pitches for multiple products at once
- [ ] Export to PDF/Markdown/HTML
- [ ] Tone control — formal, casual, persuasive, technical
- [ ] Cost estimation — show token usage and API cost per generation

If you wish to contribute to this project, please submit a pull request or open an issue in the GitHub repository.
> Want to contribute? Pick any roadmap item and open a PR!

## Stats

![Alt](https://repobeats.axiom.co/api/embed/9e8cea0532101e0c02a5034825d6be9f1b40f732.svg "Repobeats analytics image")

## Contributing

Contributions are welcome! Here's how to get started:

1. Fork the repository
2. Create your feature branch (`git checkout -b feature/amazing-feature`)
3. Commit using [conventional commits](https://www.conventionalcommits.org/) (`git commit -m 'feat: add amazing feature'`)
4. Push to the branch (`git push origin feature/amazing-feature`)
5. Open a Pull Request

### Conventional Commits

This project follows the [Conventional Commits](https://www.conventionalcommits.org/) specification:

| Prefix | Purpose |
|--------|---------|
| `feat:` | A new feature |
| `fix:` | A bug fix |
| `docs:` | Documentation changes |
| `refactor:` | Code refactoring (no feature or fix) |
| `test:` | Adding or updating tests |
| `chore:` | Maintenance tasks |

## License

This project is licensed under the MIT License. See the [LICENSE](LICENSE) file for more details.
[MIT](LICENSE) © 2023 [Atypical Consulting](https://atypical.garry-ai.cloud)

## Acknowledgments

This application was inspired by the following article: [Write A Great Chat GPT Sales Pitch in 5 Steps](https://txtly.ai/write-a-chat-gpt-sales-pitch/)
- Inspired by [Write A Great Chat GPT Sales Pitch in 5 Steps](https://txtly.ai/write-a-chat-gpt-sales-pitch/)
- [OpenAI](https://openai.com/) — GPT-4 language model
- [Spectre.Console](https://spectreconsole.net/) — Beautiful CLI framework for .NET
- [Betalgo.OpenAI](https://github.com/betalgo/openai) — .NET SDK for OpenAI

---

Built with care by [Atypical Consulting](https://atypical.garry-ai.cloud) — opinionated, production-grade open source.

* [OpenAI](https://openai.com/)
* [Spectre.Console](https://spectreconsole.net/)
* [Betalgo.OpenAI](https://github.com/betalgo/openai)
[![Contributors](https://contrib.rocks/image?repo=Atypical-Consulting/SalesPitch)](https://github.com/Atypical-Consulting/SalesPitch/graphs/contributors)
2 changes: 0 additions & 2 deletions build/Build.cs
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,6 @@
using Nuke.Common.Utilities.Collections;
using Serilog;
using static Nuke.Common.EnvironmentInfo;
using static Nuke.Common.IO.FileSystemTasks;
using static Nuke.Common.IO.PathConstruction;
using static Nuke.Common.Tools.DotNet.DotNetTasks;

// ReSharper disable AllUnderscoreLocalParameterName
Expand Down
8 changes: 2 additions & 6 deletions build/_build.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>net9.0</TargetFramework>
<TargetFramework>net10.0</TargetFramework>
<RootNamespace></RootNamespace>
<NoWarn>CS0649;CS0169;CA1050;CA1822;CA2211;IDE1006</NoWarn>
<NukeRootDirectory>..</NukeRootDirectory>
Expand All @@ -12,11 +12,7 @@
</PropertyGroup>

<ItemGroup>
<PackageReference Include="Nuke.Common" Version="9.0.3" />
</ItemGroup>

<ItemGroup>
<None Remove="..\.github\workflows\qodana_code_quality.yml" />
<PackageReference Include="Nuke.Common" Version="10.1.0" />
</ItemGroup>

</Project>
6 changes: 6 additions & 0 deletions global.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
{
"sdk": {
"version": "10.0.103",
"rollForward": "latestFeature"
}
}
29 changes: 0 additions & 29 deletions qodana.yaml

This file was deleted.

Loading