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
18 changes: 9 additions & 9 deletions MARKETING.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,10 +5,10 @@
## Product

- **Name:** Paperboy
- **One-liner:** Paperboy turns a user-built firehose of public feeds into a short, source-linked brief ranked around what matters to them.
- **One-liner:** Paperboy turns a user-built firehose of public feeds into a short, source-linked daily or weekly rollup ranked around what matters to them.
- **Category:** Personal relevance filter
- **URL:** https://paperboy.kaibuilds.com/
- **Current live boundary:** Founding beta for user-selected public RSS/Atom feeds. Feed validation, preview, persistence, confirmation delivery, and scheduling are automatic; paid delivery activates only after hosted checkout reports a trial as active. The broader forwarded-newsletter and selected-GitHub product remains a direction, not a live claim.
- **URL:** https://newpaperboy.com/
- **Current live boundary:** Founding beta for user-selected public RSS/Atom feeds. Feed validation, preview, persistence, confirmation delivery, and daily or weekly scheduling are automatic; paid delivery activates only after hosted checkout reports a trial as active. The broader forwarded-newsletter and selected-GitHub product remains a direction, not a live claim.

## ICP (Ideal Customer Profile)

Expand All @@ -17,7 +17,7 @@
- **Title/Role:** Technical founder or hands-on product/engineering operator
- **Company size:** 1–20 people
- **Industry:** AI, developer tools, and technical SaaS
- **Budget authority:** Usually direct for a $49/month tool; hypothesis, not buyer-validated
- **Budget authority:** Usually direct for a $5/month tool; hypothesis, not buyer-validated
- **Trigger event:** Missing an API, pricing, dependency, or market change that affects active work
- **Current solution:** Newsletters, RSS, GitHub notifications, bookmarks, and manual LLM summaries
- **Pain severity:** Unknown; validate with preview-to-trial conversion and interviews
Expand Down Expand Up @@ -60,21 +60,21 @@

### User Segments

- **Trial subscriber:** Chooses public RSS/Atom feeds and a relevance filter, confirms the email, and starts a card-required seven-day trial.
- **Paid subscriber:** Keeps reading after the trial at the $49/month founding price.
- **Trial subscriber:** Chooses public RSS/Atom feeds, a relevance filter, and a daily or weekly cadence, confirms the email, and starts a card-required seven-day trial.
- **Paid subscriber:** Keeps reading after the trial at the $5/month founding price.

## Value Prop

- **Core transformation:** From scanning a self-built information firehose to reading only the few items connected to current work.
- **Key actions:** Choose or paste public feeds; describe current interests; name what to ignore; preview matches; confirm the email; start hosted checkout; self-manage or unsubscribe.
- **Activation moment:** Stripe confirms trialing or active billing and the management screen confirms daily delivery is active.
- **Activation moment:** Stripe confirms trialing or active billing and the management screen confirms the selected daily or weekly delivery is active.
- **Aha moment:** The reader opens an original source or changes a concrete next step because of the brief.

## Business Model

- **Monetization:** Card-required seven-day trial followed by a recurring subscription
- **Pricing:** $49/month after the trial until canceled
- **Stage:** Pre-PMF validation; preview, verification, trial start, a real paid transaction, and retention are separate stages. A trial start must never be reported as a purchase.
- **Pricing:** $5/month after the trial until canceled
- **Stage:** Pre-PMF validation; preview, verification, checkout, trial start, a real paid transaction, and retention are separate stages. A trial start must never be reported as a purchase.

## Current Marketing

Expand Down
3 changes: 2 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -42,7 +42,8 @@ news/research/data, and optional selected GitHub repositories. Repo Radar is a
section of that edition, not a separate product. Suggested actions remain inert
text for human review.

The public founding beta is at **[paperboy.kaibuilds.com](https://paperboy.kaibuilds.com/)**.
The public founding beta is at **[newpaperboy.com](https://newpaperboy.com/)**. The original
`paperboy.kaibuilds.com` host remains available for existing links and callbacks.
Its live automatic intake is currently narrower than that product direction:
it previews and saves user-selected public RSS/Atom feeds, verifies the delivery
email, and activates scheduled delivery only after hosted checkout confirms a
Expand Down
25 changes: 25 additions & 0 deletions deploy/Caddyfile.paperboy
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ paperboy.kaibuilds.com {
on_demand
}
encode gzip
import /opt/paperboy/deploy/caddy-security-headers.caddy

@kaibuilds_capture path /api/lead /api/hit /api/stats /api/sites
handle @kaibuilds_capture {
Expand All @@ -19,3 +20,27 @@ paperboy.kaibuilds.com {
file_server
}
}

newpaperboy.com {
encode gzip
import /opt/paperboy/deploy/caddy-security-headers.caddy

@kaibuilds_capture path /api/lead /api/hit /api/stats /api/sites
handle @kaibuilds_capture {
reverse_proxy 127.0.0.1:9120
}

handle /api/* {
reverse_proxy 127.0.0.1:9122
}

handle {
root * /var/www/kaibuilds/sites/paperboy
try_files {path} {path}.html {path}/index.html
file_server
}
}

www.newpaperboy.com {
redir https://newpaperboy.com{uri} permanent
}
2 changes: 1 addition & 1 deletion deploy/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,7 @@ not guess or embed offsite credentials.
## Operational checks

```bash
curl -fsS https://paperboy.kaibuilds.com/api/health
curl -fsS https://newpaperboy.com/api/health
docker compose ps
docker compose logs --since 30m paperboy-scheduler
```
Expand Down
9 changes: 8 additions & 1 deletion deploy/paperboy.env.example
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ PAPERBOY_HOST_PORT=9122
PAPERBOY_OLLAMA_URL=http://agent:11434
PAPERBOY_LOG_LEVEL=INFO
PAPERBOY_LOG_FORMAT=json
PAPERBOY_BACKUP_DIR=/var/backups/paperboy
PAPERBOY_BACKUP_DIR=/var/backups/paperboy/verified
PAPERBOY_BACKUP_RETENTION_DAYS=30
PAPERBOY_SCHEDULER_HEARTBEAT_MAX_AGE_SECONDS=900

Expand All @@ -14,3 +14,10 @@ PAPERBOY_SCHEDULER_HEARTBEAT_MAX_AGE_SECONDS=900
# PAPERBOY_SMTP_STARTTLS=true
# PAPERBOY_EMAIL_FROM=Paperboy <paperboy@your-verified-resend-domain.example>
# PAPERBOY_RESEND_WEBHOOK_SECRET=

PAPERBOY_PUBLIC_URL=https://newpaperboy.com
PAPERBOY_STRIPE_SECRET_KEY=
PAPERBOY_STRIPE_PRICE_ID=
PAPERBOY_STRIPE_WEBHOOK_SECRET=
PAPERBOY_STRIPE_TRIAL_DAYS=7
PAPERBOY_STRIPE_MONTHLY_PRICE_CENTS=500
5 changes: 3 additions & 2 deletions docker-compose.yml
Original file line number Diff line number Diff line change
Expand Up @@ -39,14 +39,15 @@ services:
PAPERBOY_EMAIL_REPLY_TO: ${PAPERBOY_EMAIL_REPLY_TO:-}
PAPERBOY_BOUNCE_DOMAIN: ${PAPERBOY_BOUNCE_DOMAIN:-kaibuilds.com}
PAPERBOY_RESEND_WEBHOOK_SECRET: ${PAPERBOY_RESEND_WEBHOOK_SECRET:-}
PAPERBOY_PUBLIC_URL: ${PAPERBOY_PUBLIC_URL:-https://paperboy.kaibuilds.com}
PAPERBOY_PUBLIC_URL: ${PAPERBOY_PUBLIC_URL:-https://newpaperboy.com}
PAPERBOY_MANAGE_SECRET: ${PAPERBOY_MANAGE_SECRET:-}
PAPERBOY_TRACKING_SECRET: ${PAPERBOY_TRACKING_SECRET:-}
PAPERBOY_KAIBUILDS_CAPTURE_URL: ${PAPERBOY_KAIBUILDS_CAPTURE_URL:-}
PAPERBOY_STRIPE_SECRET_KEY: ${PAPERBOY_STRIPE_SECRET_KEY:-}
PAPERBOY_STRIPE_WEBHOOK_SECRET: ${PAPERBOY_STRIPE_WEBHOOK_SECRET:-}
PAPERBOY_STRIPE_PRICE_ID: ${PAPERBOY_STRIPE_PRICE_ID:-}
PAPERBOY_STRIPE_TRIAL_DAYS: ${PAPERBOY_STRIPE_TRIAL_DAYS:-7}
PAPERBOY_STRIPE_MONTHLY_PRICE_CENTS: ${PAPERBOY_STRIPE_MONTHLY_PRICE_CENTS:-500}
PAPERBOY_FAST_MODEL: ${PAPERBOY_FAST_MODEL:-llama3.2:3b}
PAPERBOY_RESEARCH_MODEL: ${PAPERBOY_RESEARCH_MODEL:-qwen2.5:7b}
PAPERBOY_LOG_LEVEL: ${PAPERBOY_LOG_LEVEL:-INFO}
Expand Down Expand Up @@ -112,7 +113,7 @@ services:
PAPERBOY_EMAIL_TO: ${PAPERBOY_EMAIL_TO:-}
PAPERBOY_EMAIL_REPLY_TO: ${PAPERBOY_EMAIL_REPLY_TO:-}
PAPERBOY_BOUNCE_DOMAIN: ${PAPERBOY_BOUNCE_DOMAIN:-kaibuilds.com}
PAPERBOY_PUBLIC_URL: ${PAPERBOY_PUBLIC_URL:-https://paperboy.kaibuilds.com}
PAPERBOY_PUBLIC_URL: ${PAPERBOY_PUBLIC_URL:-https://newpaperboy.com}
PAPERBOY_MANAGE_SECRET: ${PAPERBOY_MANAGE_SECRET:-}
PAPERBOY_TRACKING_SECRET: ${PAPERBOY_TRACKING_SECRET:-}
PAPERBOY_KAIBUILDS_CAPTURE_URL: ${PAPERBOY_KAIBUILDS_CAPTURE_URL:-}
Expand Down
2 changes: 1 addition & 1 deletion docs/INSTALL.md
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ read the README quickstart and want more detail (or you hit a snag), this is
the page.

Looking for the hosted founding beta instead? Open
**[paperboy.kaibuilds.com](https://paperboy.kaibuilds.com/)**. The hosted beta
**[newpaperboy.com](https://newpaperboy.com/)**. The hosted beta
and this self-hosted Discord project are deliberately separate: the live page
shows its current source and checkout boundaries, while this guide installs
the free MIT-licensed local runtime you operate yourself.
Expand Down
4 changes: 2 additions & 2 deletions docs/design/paperboy-firehose/style-snapshot.json
Original file line number Diff line number Diff line change
Expand Up @@ -1210,7 +1210,7 @@
"background_color": "rgb(17, 22, 28)",
"chars_per_line": 113,
"is_large_text": false,
"sample_text": "Planned founding price: $49/month. No card or payment is collected yet."
"sample_text": "Founding price: $5/month after a seven-day trial. Card details stay on Stripe-hosted checkout."
},
{
"selector": "article.price-card > div > ul > li",
Expand Down Expand Up @@ -1758,4 +1758,4 @@
"width": 1440,
"height": 900
}
}
}
27 changes: 27 additions & 0 deletions docs/productization/CADENCE-FEATURE.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
# Delivery cadence feature map

## Feature: Daily and weekly rollups

Paperboy's production subscription form is plain HTML and JavaScript. The KOMPETE React atoms and molecules are not present in this repository, so this change reuses Paperboy's existing form and status patterns instead of introducing a component system.

### UI elements → existing Paperboy patterns

| Element | Existing pattern | Use |
|---|---|---|
| Cadence control | Native `select` inside `.field` | Daily or weekly rollup |
| Weekly day control | Native `select` inside `.field` | Monday through Sunday; visible only for weekly cadence |
| Guidance | `.field-help` | Explain the 8:00 AM local schedule |
| Validation | `#intake-error.form-error` | Reuse the current accessible error region |
| Managed status | `#subscription-delivery` and `#management-summary` | Show the saved cadence and next delivery |
| Primary action | Existing `.button.button-wide` | Keep the current subscription action; no new button |

### Styling scope

- Reuse existing input/select, `.field`, `.field-help`, and responsive form rules.
- Add no custom button, card, loader, table, modal, or empty-state component.

### Data contract

- `cadence`: `daily` or `weekly`; defaults to `daily` for existing clients and rows.
- `weekly_day`: integer `0` through `6` using Python weekday numbering; defaults to Monday (`0`).
- Delivery remains 8:00 AM in the subscriber's IANA timezone.
4 changes: 3 additions & 1 deletion docs/productization/DESIGN_BRIEF.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
# Paperboy Daily Intelligence Brief — product design brief

Status: locked local implementation direction
> **Historical design record:** The implemented `product/` surface and current product strategy are authoritative. Price references below are superseded; the active hosted offer is `$5/month` after a seven-day trial.

Status: historical reference; not current launch authority
Updated: 2026-07-16 after product and commercial pivots
Authority: cgallic/paperboy plus the operator's current product decision

Expand Down
Loading
Loading