Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
6 changes: 6 additions & 0 deletions .env.example
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,12 @@ OPENROUTER_API_KEY=
# (any current OpenRouter model id, e.g. anthropic/claude-opus-4.8, anthropic/claude-haiku-4.5)
OPENROUTER_MODEL=anthropic/claude-sonnet-4.6

# Public base URL of your deployment. Used to build absolute Open Graph / Twitter
# card image URLs so link previews render correctly when the site is shared.
# Set this if you host a landing page; leave blank for local use (falls back to
# http://localhost:3000).
NEXT_PUBLIC_SITE_URL=

# The folder-analysis route reads your local filesystem, so it's disabled in
# production builds by default. `pnpm dev` works out of the box. Only set this to
# "true" if you run a PRODUCTION build (pnpm build && pnpm start) on your own
Expand Down
56 changes: 56 additions & 0 deletions .github/ISSUE_TEMPLATE/bug_report.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
name: 🐛 Bug report
description: Something isn't working as expected
labels: ["bug"]
body:
- type: markdown
attributes:
value: Thanks for filing a bug! The more detail you give, the faster it gets fixed.
- type: textarea
id: what-happened
attributes:
label: What happened?
description: A clear and concise description of the bug.
placeholder: When I…, Launch Kit…
validations:
required: true
- type: textarea
id: repro
attributes:
label: Steps to reproduce
placeholder: |
1. Go to…
2. Click…
3. See error
validations:
required: true
- type: textarea
id: expected
attributes:
label: Expected behavior
description: What did you expect to happen instead?
validations:
required: true
- type: dropdown
id: provider
attributes:
label: Generation provider
options:
- mock
- openrouter
- not sure
validations:
required: true
- type: input
id: environment
attributes:
label: Environment
description: OS, Node version, pnpm version, and browser.
placeholder: macOS 15 · Node 20 · pnpm 11 · Chrome 130
validations:
required: true
- type: textarea
id: logs
attributes:
label: Logs / screenshots
description: Terminal or browser-console output. Redact any API keys before pasting.
render: shell
6 changes: 6 additions & 0 deletions .github/ISSUE_TEMPLATE/config.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
# Nudge contributors toward the structured templates above.
blank_issues_enabled: false
contact_links:
- name: 💬 Question or idea
url: https://github.com/AhmedFr/launch-kit/discussions
about: For questions and open-ended ideas, start a Discussion instead of an issue.
35 changes: 35 additions & 0 deletions .github/ISSUE_TEMPLATE/feature_request.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
name: ✨ Feature request
description: Suggest an idea or improvement
labels: ["enhancement"]
body:
- type: textarea
id: problem
attributes:
label: What problem does this solve?
description: The use case or pain point behind the request.
validations:
required: true
- type: textarea
id: solution
attributes:
label: Proposed solution
description: What would you like Launch Kit to do?
validations:
required: true
- type: textarea
id: alternatives
attributes:
label: Alternatives considered
description: Other approaches or workarounds you've thought about.
- type: dropdown
id: area
attributes:
label: Area
options:
- Generation / prompts
- Platform previews
- Runs dashboard
- Wizard / folder analysis
- Export
- Docs
- Other
28 changes: 28 additions & 0 deletions .github/pull_request_template.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
<!--
Thanks for contributing to Launch Kit! Fill in every section below.
If a section genuinely doesn't apply, write "n/a" — don't delete it.
-->

## What & why

<!-- What does this PR change, and why? Link any related issue, e.g. Closes #123 -->

## How it was tested

<!-- Commands you ran and scenarios you checked. Tick the ones you ran. -->

- [ ] `pnpm test`
- [ ] `pnpm typecheck`
- [ ] `pnpm lint`
- [ ] `pnpm build`

## Checklist

- [ ] Follows the single-responsibility / per-component folder structure
- [ ] No secrets, API keys, or `.env` values committed
- [ ] README / docs updated if behavior or configuration changed
- [ ] Screenshots included for UI changes

## Screenshots / notes

<!-- Optional: before/after for UI, edge cases, or follow-ups. -->
45 changes: 45 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
name: CI

on:
push:
branches: [main]
pull_request:

# Cancel superseded runs on the same branch/PR to save CI minutes.
concurrency:
group: ci-${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true

jobs:
verify:
name: Typecheck · Lint · Test · Build
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v4

- name: Set up pnpm
uses: pnpm/action-setup@v4
with:
version: 11

- name: Set up Node
uses: actions/setup-node@v4
with:
node-version: 20
cache: pnpm

- name: Install dependencies
run: pnpm install --frozen-lockfile

- name: Typecheck
run: pnpm typecheck

- name: Lint
run: pnpm lint

- name: Test
run: pnpm test

- name: Build
run: pnpm build
21 changes: 21 additions & 0 deletions CLAUDE.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
# Launch Kit — project instructions

## Pull requests & issues — ALWAYS use the templates

When opening a PR or issue in this repo, you MUST populate it from the templates in
`.github/`, never ad-hoc or single-line text.

- **Pull requests** → use `.github/pull_request_template.md`. Fill in every section:
_What & why_, _How it was tested_ (tick only the checks you actually ran), _Checklist_,
and _Screenshots / notes_. Create with `gh pr create --body-file <file>` (or `--body`)
using a body derived from that template.
- **Bug reports** → follow `.github/ISSUE_TEMPLATE/bug_report.yml`.
- **Feature requests** → follow `.github/ISSUE_TEMPLATE/feature_request.yml`.

If a section genuinely doesn't apply, write `n/a` — do not delete it. Never open a PR or
issue with an empty body.

## Before opening a PR

Run and pass all four: `pnpm test && pnpm typecheck && pnpm lint && pnpm build` — the same
gates CI enforces (`.github/workflows/ci.yml`).
4 changes: 2 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@

Point Launch Kit at a project folder. It reads your README and drafts **launch‑ready posts — written natively for [Product Hunt, Hacker News, Reddit, and AppSumo](#-one-repo-every-audience)**. Runs 100% on your machine. Bring your own [OpenRouter](https://openrouter.ai) key.

[![CI](https://img.shields.io/github/actions/workflow/status/AhmedFr/launch-kit/ci.yml?branch=main&style=for-the-badge&logo=githubactions&logoColor=white&label=CI&color=E2563C&labelColor=1c1c1c)](https://github.com/AhmedFr/launch-kit/actions/workflows/ci.yml)
[![GitHub stars](https://img.shields.io/github/stars/AhmedFr/launch-kit?style=for-the-badge&logo=github&color=E2563C&labelColor=1c1c1c)](https://github.com/AhmedFr/launch-kit/stargazers)
[![License: MIT](https://img.shields.io/badge/License-MIT-E2563C?style=for-the-badge&labelColor=1c1c1c)](./LICENSE)
[![Next.js](https://img.shields.io/badge/Next.js-16-1c1c1c?style=for-the-badge&logo=nextdotjs)](https://nextjs.org)
Expand Down Expand Up @@ -75,8 +76,7 @@ Launch Kit reads files from disk, so it's built to run **on your machine** — y

## ⭐ Star milestone

<!-- Replace [your reward] with whatever you want to ship at the milestone. -->
> **⭐ Hit 50 stars and I'll add [your reward].** If Launch Kit saves you a launch, a star genuinely helps.
> **⭐ Hit 50 stars and I'll ship a free hosted version** — Launch Kit running in your browser, no clone and no API key required. If Launch Kit saves you a launch, a star genuinely helps.

## 🛠️ Tech stack

Expand Down
5 changes: 3 additions & 2 deletions app/page.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -146,10 +146,11 @@ export default function Landing() {
<h2 className="font-display mx-auto max-w-xl text-balance text-3xl font-extrabold tracking-tight sm:text-4xl">
Your next launch is one folder away
</h2>
{/* STARS MILESTONE — replace the reward with whatever you want to ship at 50 ⭐ */}
{/* STARS MILESTONE — reward at 50 ⭐ */}
<p className="mx-auto mt-4 max-w-md text-sm text-muted-foreground">
<span aria-hidden>⭐</span> Hit <span className="font-semibold text-foreground">50 stars</span> and I&apos;ll
add <span className="font-semibold text-foreground">[your reward here]</span>.
ship a <span className="font-semibold text-foreground">free hosted version</span> — Launch Kit in your
browser, no clone and no API key.
</p>
<div className="mt-6 flex flex-wrap items-center justify-center gap-3">
<Link href="/runs" className={buttonVariants({ size: 'lg' })}>
Expand Down
Loading